永发信息网

关于串口通讯。为什么我接收不到一串字符。下面是程序。发送快了会丢包,怎么办?

答案:2  悬赏:70  手机版
解决时间 2021-02-09 21:10
  • 提问者网友:雾里闻花香
  • 2021-02-09 17:23
void serial() interrupt 4
{
if(RI==1)
{
TH0=0x00;
TL0=0x00;
TR0=1;
P1=SBUF;
Receive[I]=SBUF;
RI=0;
I++;
}
}
void serial1() interrupt 1
{
Finish=1;
I=A;
I=0;
}
最佳答案
  • 五星知识达人网友:野慌
  • 2021-02-09 18:00
一、在硬件上:
1、51单片机,波特率设置为9600就比较合适了,如果再高的话,容易出问题。
2、晶振选用,最好选用11.0592MHz的频率。
二、在软件上:
1、在计算波特率时,要准确。
TH1=0xfa; //定时器T1以方式2定时,自动重装入,
TL1=TH1; //设置波特率为9600。此晶振为11.0592MHZ.
PCON=0x80;
2、串口程序

void RXD_Int_Service() interrupt 4
{
uint8 ch;
if(RI)
{
RI=0;
Usart1.RxdDly=6; //超过0.3S清空计数
Usart1.RxdBuf[Usart1.RxdCnt]=ch;
Usart1.RxdCnt++;
if(Usart1.RxdCnt>=10)
{
Usart1.RxdTrue=1; //接收正确。
Usart1.RxdNum=Usart1.RxdCnt;
Usart1.RxdCnt=0;
}
}
if(TI)//防止发送中断
{
TI=0;
}
}
void Timer0_InSevice() interrupt 1
{
TH0=0xdc; //定义50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16;
TL0=0x00; //11.0592MHz晶振

if(Usart1.RxdDly)
{
Usart1.RxdDly--; //0.3S没有接收到数据,清0计数。
if(Usart1.RxdDly==0)
{
Usart1.RxdCnt =0; //记数清0.
}
}
}
全部回答
  • 1楼网友:佘樂
  • 2021-02-09 18:26
通信双方,应该有个协议。 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯