单片机串口接收超时中断是怎么回事啊?这个超时的时间是单片机自己算出的吗?

如题所述

用定时器做一个限制时间,当串口超过这个时间没有数据时就判断超时错误,例如:
#include<reg51.h>
#define uchar unsigned char
uchar res;
bit timeout;
uchar uart()
{
uchar dat;
dat=0xff;
TR0=1;
RI=0;
timeout=0;
while(!RI)
{
if(timeout)return(dat);
};
RI=0;
dat=SBUF;
return(dat);
}
void t0_isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
timeout=1;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
ET0=1;
EA=1;
while(1)
{
res=uart();
if(res==0xff)//超时处理。
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-21
单片机串口接收超时中断是怎么回事啊?
接收数据时,超过一定时间就算出错.

这个超时的时间是单片机自己算出的吗?
超时的时间是由编程序的人定的,他定多长就多长本回答被网友采纳

单片机串口为什么接收数据开中断
串口接收寄存器SBUF收到数据后会把接收标志位RI置位的,电脑发送数据是一个字节接着一个字节,两个字节之间会有延时,所以收到数据你需要尽快处理,不然可能会被新的数据覆盖,配置中断就是为了及时响应把数据读出存储起来。所以SBUF内收到数据后RI就会置1,在中断里把数据存储 然后及时把RI清零接收下一...

单片机串口为什么接收数据开中断
串口接收寄存器SBUF收到数据后会把接收标志位RI置位的,电脑发送数据是一个字节接着一个字节,两个字节之间会有延时,所以收到数据你需要尽快处理,不然可能会被新的数据覆盖,配置中断就是为了及时响应把数据读出存储起来。所以SBUF内收到数据后RI就会置1,在中断里把数据存储 然后及时把RI清零接收下一...

大家说说单片机串口中断是怎么回事?
单片机串口中断,例如用串口接收GPS模块的数据(这一般都是串口相连的),单片机可能需要一直的工作,不管是干什么,但是你最需要的是接收GPS数据并进行处理,于是当接收到GPS信号时,就会产生串口中断,然后进入中断接收GPS数据,存储在串口寄存器当中,当接收完之后关掉中断,单片机继续其他工作,当又有GPS数据...

小华单片机串口超时
所以小华单片机串口超时因为用定时器做一个限制时间,当串口超过这个时间没有数据时就判断超时错误。

STM32串口接收不定长数据(接收中断+超时判断)
超时判断:在中断处理中,设置定时器,检查数据接收是否在预设时间内完成。硬件准备:使用像正点原子M48Z这样的开发板和ST-Link调试工具。编程实战:初始化串口并启用接收中断,接收字符后打印并判断数据帧完成。总结来说,通过接收中断和超时机制,STM32可以有效地处理串口不定长数据接收,提高了通信的准确性...

单片机的串口输入总是中断
肯定串口有数据,且接收完成后才能进入中断,造成你这种现象的,要么是硬件电路有干扰,RXD线总有一些干扰脉冲,所以造成中断。要么是程序其他地方有问题,强制是RI置1,而进入了中断。

单片机串口中断函数中,如果在里面时间过长,后面来的数据会被自动丢弃吗...
不是自动丢弃,而是反复接收,导致后来的数据将先收到、未处理的数据给覆盖了。例如对方发给你一串0x01、0x02、0x03,假如你中断函数太过磨叽,可能在将0x01从缓冲区中取出后、在处理的过程中又先后收到了0x02、0x03,那么0x03会把0x02覆盖掉,导致你下次再进入串口中断函数时只能取出0x03了。因此...

单片机串行口收发结束后为什么要中断
出现中断,是便于你及时进行数据处理。收到后的中断函数中,应该把SBUF的数据读出,并送到其它的位置,腾出SBUF,便于接收下一个数据。在发送完的中断函数中,应该发送下一字节。(如果没有了,当然就不发了。)

单片机串口中断问题
看了半天才明白你的想法是通过给P3.0 发送电平,触发单片机产生中断,然后使RI(接受中断标志位)置1 而P3.1是发送脚,你给它高低电平不顶用。我建议最好不要采用给P3.0加电平的做法来检测。因为模式3下的接收条件不是给它一个低电平能模拟的 模式3的接受过程开始于RXD端检测到负跳变,然后位...

单片机串口在接收数据的时候来了更高优先级的中断,单片机数据会不会接...
这要看你的更高级的中断消耗多少时间,还要看你的串口中断是否是接收的最后一个数据。举个例子你就明白了:假设,你的设备A要向单片机发送10个数据,以115200波特率发送,那么,就是相当于 1秒钟可以发 11520个字节,即发一个字节需要大概90个微秒的时间。假如你正在接收第1 ---第8个数据中的一个,...

相似回答