求帮助 51单片机串口 实在没办法了
从上位机发送多于两个字节,为什么返回上位机时只能接收一个?实在找不到错误点了,求解决,谢谢!
#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;
}
因为接收到第一个字符的时候标志位flag=1;那么主函数中满足条件flag==1。进入if内部已经关掉中断了。因此接收不到第二个字符。
例外:SBUF=table;这个语句应该改为SBUF=table[i];
啊,我程序写的是SBUF=table,这上面复制错了。
我flag是在发送完之后才置1的也不可以么?那如果想要实现不限制字符的接收,需要怎样修改啊?我才学习,不太会,谢谢啊
非常感谢,但是flag置1是在数据都发送完之后,按理说数据不都应该存在SBUF中了么?如果想要修改,应该怎么做啊?
非常感谢,但是flag置1是在数据都发送完之后,按理说数据不都应该存在SBUF中了么?如果想要修改,应该怎么做啊?
SBUF=table;这是把首地址赋值给sbuf,应该是SBUF=table{i}
1.SBUF=table;这个语句应该改为SBUF=table[i]; 这不是重点。
2.SBUF寄存器只有一个字节的储存空间 。这就是为什么你要把I have分7次送入SBUF。否则的话,你为什么不直接写SBUF=I have?
是啊,我知道了,谢谢啊
嗯,我原程序是这样的,复制的时候不小心给复制错了
应该就是table[i]的问题,你是看郭天祥的吧,其他的都没错。因为如果单片机不能发送第一个字符,那么TI就不能被置1,那么程序就停在while(!TI)了,当然就不能执行后面的程序了。
是的,我已经知道原因了,谢谢啊