串口调试精灵发送字符串的时候,我通过单片机怎么接收

来源:百度知道 编辑:UC知道 时间:2024/05/22 18:07:47
串口调试精灵发送字符串的时候,在程序里面一次只能够产生一次中断,SBUF里面显示的也只能是字符串的第一个字符。怎么才能够把整个字符串都接收得到呢,(不要告诉我把字符串里的字符一个一个的手动发送,希望能够自动产生中断,并且指到下一个字符上,谢谢,有加分)
中断标志在中断程序内清除了,可是不知道怎么能接收得到字符串(例:asdf,每次中断能够进入SBUF的只有a,不知道怎么能够把sdf接受进来,谢谢关注)
程序如下:
void main(void)
{

Init_Device();

p=0; //全局变量(前面已声明)

TI0=0; //第一次触发中断,而后在中断程序中实现
SBUF0='b';

while(1)
{
}
}

void interrupt_UART0(void) interrupt 4
{
TI0=0; //软件清零中断标志位
RI0=0;

p=SBUF0; //此处总是只能接收到发送字符串的首个字符,因为不知道串口调试精灵是怎样发送字符串的,所以在程序中声明了buffer 也是不能够按字符产生多个中断的

}

改用查询的方式接收试试:

例如:

if(RI)
{
for(i=0;i<4;i++)
{
while(!RI); //查询接收标志
RI=0;
shou_shu[i]=SBUF; //创建一个4元素的数组

}
}

如果你用手动发送的时候能够都正确接收,那就是你的中断程序过于长,导致后续数据无法正常接收,你看看有没有错误的标志位,如果有的话那调整程序吧

要定义个数组当做接收的缓存,每产生一次串行接收中断就把SBUF里的数据放到接受缓存里,然后数组下标加一

这种情况一般需要一个协议支持,例如modbus