单片机接收串口数据
发布网友
发布时间:2022-04-24 13:25
我来回答
共4个回答
热心网友
时间:2023-10-14 09:05
你通过串口助手要接受字符串或一组数据需要在单片机端开辟一个缓冲区,否则可能丢失数据。
以下程序是较为通用的串口收发例程,开辟一个16字节的缓冲区,两个指针,一个存数指针,一个取数指针,两指针相等,证明没有新的接收数据。
#include<reg51.h>
#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 也这样么?!
追答T2初始化如下:
MOV T2CON,#34H
MOV SCON,#0C0H
MOV TH2,#0FFH
MOV TL2,#0DCH ;波特率=11059200/(2*16*(65536-RLDH,RLDL))
MOV RLDH,#0FFH
MOV RLDL,#0DCH ;波特率=11059200/(2*16*(65536-RLDH,RLDL)) 9600bps
热心网友
时间:2023-10-14 09:05
串口出现问题,大多是时钟不精确。请先检查。若正确,请检查接收程序中,是否有等到系统不忙的判定再接收数据。
热心网友
时间:2023-10-14 09:06
是不是串口接收程序对接收结束的判断没处理好?
串口助手发送的是以字符格式发送的,不同的操作系统对字符串结束的标志形式不一样。
windows和linux对字符串的结束标志就不同,具体是怎么样的,我也记不清了,\n和\r的区别吧!
热心网友
时间:2023-10-14 09:06
接收串行数据是靠时序实现的,不是接收1的ascii码