[51单片机] 51单片机串口通信,新手问

[复制链接]
1646|5
 楼主| 海天s 发表于 2013-11-12 17:35 | 显示全部楼层 |阅读模式
//单片机给上位机发送一个字符
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void init()
{
  TMOD=0x20;   //定时器1,工作方式2
  TH1=0xfd;    //波特率9600
  TH0=0xfd;
  TR1=1;
  SCON=0x50;    //串口工作方式1,允许接收
  EA=1;      //开中断
  ES=1;
}
void main()
{
  init();
  SBUF='a';
  while(!TI);
  TI=0;
//  SBUF='b';
//  while(!TI);
//  TI=0;
  while(1);
}

我本意是想单片机给上位机发送一个字符a,可为什么上位机显示aa
 楼主| 海天s 发表于 2013-11-12 17:36 | 显示全部楼层
如果把注释掉的三行还原,上位机会收到aab    这是为什么啊?
 楼主| 海天s 发表于 2013-11-12 22:00 | 显示全部楼层
怎么没人回答啊?
chenyu988 发表于 2013-11-13 09:43 | 显示全部楼层
SBUF='a'; //这句往buffer写 a,你串口又发送a,当然是两个a了
鼹鼠 发表于 2013-11-13 11:34 | 显示全部楼层
  1. #include<reg52.h>

  2. typedef unsigned char uint16;

  3. void delay(uint16 i)
  4. {
  5.         while(i--);
  6. }
  7. void init()
  8. {
  9.         TMOD = 0X20;
  10.         TH1 = 0XFD;
  11.         TH0 = 0XFD;
  12.         TR1 = 1;
  13.         SCON = 0X50;
  14. }

  15. void main()
  16. {
  17.        
  18.         init();
  19.         while(1)
  20.         {
  21.                 SBUF = 'a';
  22.                 while(!TI);
  23.                 TI = 0;
  24.                 delay(20000);
  25.                 SBUF = 'b';
  26.                 while(!TI);
  27.                 TI = 0;
  28.                 delay(20000);
  29.         }
  30.         while(1);
  31. }
这个是我写的 根据你的程序试了一下 显示的结果和预期一样正常  发送aab的原因可能是上次发送的故障 按下复位键就ok了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
ningling_21 发表于 2013-11-13 12:43 | 显示全部楼层
开了中断,居然没有中断服务程序...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部