单片机串口在接收数据的时候来了更高优先级的中断,单片机数据会不会接收错误

假设更高优先级的中断时间够长

这要看你的更高级的中断消耗多少时间,还要看你的串口中断是否是接收的最后一个数据。
举个例子你就明白了:
假设,你的设备A要向单片机发送10个数据,以115200波特率发送,那么,就是相当于 1秒钟可以发 11520个字节,即发一个字节需要大概90个微秒的时间。
假如你正在接收第1 ---第8个数据中的一个,此时,发生了更高级中断,且更高级中断需要执行100us,那么,在更高级中断的过程中,那么,后面的数据就已经发过来了,但是串口虽能硬件自己接收,却已经不能进行中断反应了,所以,就会造成高级中断发生前的SBUF里那个数据被后面的数据给替换掉了,所以说,就会发生错误。
但是,如果更高级中断只用了50个us,或者你已经接收完成了第9个数据,并且处理了,那么,第十个数据来了,也不会顶替掉第九个数据,这样就不会出错了。

一般来说,有两个原则,耗时大的中断要放到低优先级,第二个原则,就是中断处理函数要尽可能的短。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-03
单片机的串口,是个独立的设备,它接收数据时,并不受CPU的影响。
无论CPU执行什么程序,只要对方送来数据,它该接收,照样会接收。
接收完毕后,它就产生标志,申请中断。

如果CPU忙于别的程序,一直也没有取走数据,那么,新进来的,就会覆盖尚未取出的老数据。

数据会丢失,但不是接收错误。
第2个回答  2013-04-03
单片机的UART接口电路已充分考虑到了这种情况,放心使用,不会出错。
第3个回答  2013-04-02
接收是由硬件控制的不需要软件参与,当接收到完整的字节才标记要处理.

单片机串口在接收数据的时候来了更高优先级的中断,单片机数据会不会接...
那么,在更高级中断的过程中,那么,后面的数据就已经发过来了,但是串口虽能硬件自己接收,却已经不能进行中断反应了,所以,就会造成高级中断发生前的SBUF里那个数据被后面的数据给替换掉了,所以说,就会发生错误。

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

单片机串口简单问题 为什么要所中断要全部关掉??
我觉得是这样子的,关闭中断是为了避免更高优先级的中断信号抢占MCU的资源,因为你所设置的串口通讯模式必须保证上位机、下位机时序一致,如果这时候中断,则会时序混乱,通讯错误,很多单总线的IC工作时也要关闭中断就是为了避免更改优先级中断导致时序混乱问题。并不是你不关中断就一定不能正常工作,这只...

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

51单片机串口中断能优先定时器中断吗?
可以的 51单片机的默认(此时的IP寄存器不做设置)中断优先级为: 外部中断0 > 定时\/计数器0 > 外部中断1 > 定时\/计数器1 > 串行中断; 但这种优先级只是逻辑上的优先级,当同时有几种中断到达时,高优先级中断会先得到服务。这种优先级实际上是中断同时到达的情况下,谁先得到服务的优先级,而不...

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

51单片机有两个优先级怎么去理解?
2. 默认情况下,外部中断0的优先级最高,而串口中断的优先级最低。3. 如果将两个中断的优先级都设置为最高,单片机将根据默认的优先级顺序来执行中断服务程序。4. 当程序执行一个较低优先级的中断服务程序时,它可以响应更高优先级的中断。5. 然而,在执行一个高优先级的中断服务程序时,单片机不...

单片机问题
理论上定时器0的中断优先级要比串口的高,你对中断优先级的理解有误。在默认情况下,单片机的5个中断源都是同级的优先级,只在同时申请中断时,先响应定时器T0的中断,但不等于T0的优先级比串口高,而是同级的。在响应了同级的中断时,是不能再响应其它同级的中断的。你的问题解决的办法是:在响应...

串口调试助手发数据单片机接收不对
串口中断函数中应避免有使用串口发送的语句SBUF=xx,这样容易产生嵌套中断,或者使程序发生错误,我想可能是中断函数的问题导致你接收错误

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

相似回答