打印
[51单片机]

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

[复制链接]
1338|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了

使用特权

评论回复
5
鼹鼠| | 2013-11-13 11:34 | 只看该作者
#include<reg52.h>

typedef unsigned char uint16;

void delay(uint16 i)
{
        while(i--);
}
void init()
{
        TMOD = 0X20;
        TH1 = 0XFD;
        TH0 = 0XFD;
        TR1 = 1;
        SCON = 0X50;
}

void main()
{
       
        init();
        while(1)
        {
                SBUF = 'a';
                while(!TI);
                TI = 0;
                delay(20000);
                SBUF = 'b';
                while(!TI);
                TI = 0;
                delay(20000);
        }
        while(1);
}
这个是我写的 根据你的程序试了一下 显示的结果和预期一样正常  发送aab的原因可能是上次发送的故障 按下复位键就ok了

9WZ7@MH5OJWMGE14@IG`T~O.jpg (146.44 KB )

这是串口调试助手上显示的

这是串口调试助手上显示的

使用特权

评论回复
6
ningling_21| | 2013-11-13 12:43 | 只看该作者
开了中断,居然没有中断服务程序...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝