单片机接收串口数据

2024-11-29 12:59:04
推荐回答(4个)
回答1:

你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。
以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。
#include
#define uchar unsigned char
uchar buf[16],getptr,putptr;
void uart_isr() interrupt 4
{
if(RI)
{
RI=0;
buf[putptr]=SBUF;
putptr++;
putptr&=0x0f;
}
}
main()
{
TMOD=0x20;
SCON=0x50;
TH1=TL1=0xfd;
TR1=1;
ES=1;
EA=1;
putptr=0;
getptr=0;
while(1)
{
if(getptr!=putptr) //取数指针和存数指针如果不等
{
SBUF=buf[getptr];
getptr++;
getptr&=0x0f;
while(!TI);
TI=0;
}
}
}

回答2:

串口出现问题,大多是时钟不精确。请先检查。若正确,请检查接收程序中,是否有等到系统不忙的判定再接收数据。

回答3:

是不是串口接收程序对接收结束的判断没处理好?
串口助手发送的是以字符格式发送的,不同的操作系统对字符串结束的标志形式不一样。
windows和linux对字符串的结束标志就不同,具体是怎么样的,我也记不清了,\n和\r的区别吧!

回答4:

接收串行数据是靠时序实现的,不是接收1的ascii码