标题: 初学者关于单片机中断优先级的疑问 [打印本页]

作者: x016007    时间: 2019-6-14 23:11
标题: 初学者关于单片机中断优先级的疑问
用单片机T0定时1ms中断,同时用串口1通信

假设串口1正在接收连续很多个数据帧,这时刚好T0的中断产生,T0中断的优先级高于UART1中断,

那么剩下还没接收完的数据帧可以被接收吗?  还是直接忽略掉?

另外,哪本教材适合初学者,而且讲得清楚透彻的,麻烦推荐一本。

作者: yzwzfyz    时间: 2019-6-14 23:11
1、T0中断后,进入中断服务程序,如果你的服务程序很占时间,则会造成串口数制丢失。
高手在写程序时间会考虑到这一点,设法防止这个问题出现。
2、你的T0中断只有1ms,如果你的中断服务程序超过1ms,则你的T0中断也会计时也会失准。
3、如果你的中断服务程序不足1ms,则一般不会影响到串行数所的下载,因为串行一个字节(以9600来计),不小于1ms(起始+数据+停止,不少于11个脉冲),但串行速度太快就无法保证了。
我写程序时,所有的中断服务程序都很短,只做标记,而不处理事件。事件只依据标记在主程序中处理,目的就是防止高级中断影响低级中断的运行。
中断的处理是需要仔细规划的。
作者: lwh999995    时间: 2019-6-15 00:21
1.如果T0与串口有所关联, 那么接收串口数据时,可以先吧T0关闭, 接收完成再把T0打开. 也可以设置优先级.
2.教材很多种,这个透彻与不透彻没多大关系,每个人的理解能力都不一样,有的一看就懂,有的看很多次都不懂.
重要的是打好基础, 想一步登天总是不好的, 有了一定的基础后, 自然能看懂很多的东西.
作者: lele5211314    时间: 2019-6-15 13:49
这个时候会先处理TO的终端,处理完成后再返回来处理串口1的中断,当然你可以设置串口中断的优先级别最高
作者: 1204511152    时间: 2019-6-15 14:12
1.会先进行中断的程序,完成后再继续接收。
2.本人推荐一本教材:适合初学者入门的,因为里面的内容是结合实例一起来的,而且都是很简单的例题。
《单片机的C语言程序设计与应用——基于Proteus仿真(第3版)》
作者: charles11    时间: 2019-6-15 14:47
没有哪本教材是很透彻的。就算在透彻也有可能遇到新的问题,关键还是还是多打打代码积累经验。然后买开发板时通常里面会有很多程序,可以先看看别人怎么写程序的,为什么要那么写,可以自己学着模仿。然后把程序烧入开发板中观察实验现象,我就是这么学的。
作者: guoshizu    时间: 2019-6-15 15:55
是51单片机吗?
    如果是51单片机,你可以使用tmod设置两个定时器,然后使用tr0、tr1分别启动两个定时器。pt0置为“1”,就可以中断定时器1的服务函数,相反,如果pt1置为“1”就可以中断定时器0的服务函数。

    如果不设置pt的值,默认为“0”,这样的话,t0和t1谁也不能中断谁
作者: 13655    时间: 2019-6-15 16:29
郭天祥的那本书挺好的

作者: witheMe    时间: 2019-8-11 20:44
不可以继续接受,你需要详细了解单片机时序。
中断冲突是非常常见的问题,你需要详细学习
作者: qzwddf    时间: 2019-8-12 23:23
中断跟数据传输是两回事,你要考虑的仅仅是处理数据的速度是否能跟得上传输数据的速度,如果传输过快就会不行,处理越快越好的!一般在一比十是有冗余的!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1