求帮助 51单片机串口 实在没办法了

2019-07-15 19:41发布

从上位机发送多于两个字节,为什么返回上位机时只能接收一个?实在找不到错误点了,求解决,谢谢! #include<reg51.h>unsigned char flag,a,i;unsigned char code table[]="I have ";void init(){  TMOD=0X20;  TH1=0XF3;  TL1=0XF3;  SCON=0X50;  ES=1;  EA=1;  TR1=1;  }void main(){ init(); while(1){    if(flag==1)   {     ES=0;         for(i=0;i<7;i++)         {            SBUF=table;                while(!ti);                TI=0;                }                SBUF=a;                while(!TI);                TI=0;                ES=1;                flag=0;                }        }}        void sar() interrupt 4        {         RI=0;         a=SBUF;         flag=1;         }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
依然落叶飘零
1楼-- · 2019-07-15 20:46
因为接收到第一个字符的时候标志位flag=1;那么主函数中满足条件flag==1。进入if内部已经关掉中断了。因此接收不到第二个字符。
例外:SBUF=table;这个语句应该改为SBUF=table[i];

评分

参与人数 1积分 +10 收起 理由 dongyumin + 10  

查看全部评分

lindaye
2楼-- · 2019-07-15 23:47
依然落叶飘零 发表于 2014-5-17 20:31
因为接收到第一个字符的时候标志位flag=1;那么主函数中满足条件flag==1。进入if内部已经关掉中断了。因此接 ...

啊,我程序写的是SBUF=table,这上面复制错了。
我flag是在发送完之后才置1的也不可以么?那如果想要实现不限制字符的接收,需要怎样修改啊?我才学习,不太会,谢谢啊
lindaye
3楼-- · 2019-07-15 23:52
 精彩回答 2  元偷偷看……
lindaye
4楼-- · 2019-07-16 02:58
依然落叶飘零 发表于 2014-5-17 20:31
因为接收到第一个字符的时候标志位flag=1;那么主函数中满足条件flag==1。进入if内部已经关掉中断了。因此接 ...

非常感谢,但是flag置1是在数据都发送完之后,按理说数据不都应该存在SBUF中了么?如果想要修改,应该怎么做啊?
slayersliu00
5楼-- · 2019-07-16 07:46
SBUF=table;这是把首地址赋值给sbuf,应该是SBUF=table{i}
韦护的护
6楼-- · 2019-07-16 08:48
1.SBUF=table;这个语句应该改为SBUF=table[i];  这不是重点。
2.SBUF寄存器只有一个字节的储存空间 。这就是为什么你要把I  have分7次送入SBUF。否则的话,你为什么不直接写SBUF=I have?

一周热门 更多>