关于单片机串口收发过程的几个疑问
1,数据被读取之后,中断会被清除,如果中断函数还没退出之前,下个字节又到了,这时是不是中断又产生了,此时中断函数是怎样的?退出后立即重新进入?然后立即读取新的字节,然后重...
1,数据被读取之后,中断会被清除,如果中断函数还没退出之前,下个字节又到了,这时是不是中断又产生了,此时中断函数是怎样的?退出后立即重新进入?然后立即读取新的字节,然后重复这些步骤.....?2,一个字节没有被读走之前,下一个字节不会到达吗?3,如果不论接收端有没有读取数据,发送端都会发送下一个字节,而接收端要想读取下个字节,只有是退出中断后再进入的话,如果中断函数里写的东西比较多,执行时间比较长,后续的字节岂不是全被漏掉了吗?4,我之所以产生上边疑问,是因为以前有时候写的程序里面就是在中断函数里写了很多东西,但串口收到的数据一个都没漏掉过,是因为我中断里处理数据的耗时东西还不至于会漏掉下个串口数据的到来?
展开
1个回答
展开全部
单片机编程 原则,所有中断 程序 应该尽可能 简短小,如 串口 中断 只把接收 的数据字节 保存到接收 缓冲器,等接收 完一个完整 指令 或 操作数据 后,在主程序中 处理 指令 或 数据。
简单 的 一个系统 可能 影响不会 明显, 如果 处理 任务比较多时,产生多个 中断 或者 自身中断 还没有 退出 又 产生 本项中断 肯定会 影响 处理结果的。
简单 的 一个系统 可能 影响不会 明显, 如果 处理 任务比较多时,产生多个 中断 或者 自身中断 还没有 退出 又 产生 本项中断 肯定会 影响 处理结果的。
追问
中断程序要尽可能简洁,这是我刚学到中断时就已经知道了的原则,我想确认的是关于这个串口收发的程序运行逻辑,是不是上个字节没有被读取前,下一个字节不会到来?(在等待上一个字节被读走?)还是无论上个字节有没有被读取,下一个字节都会到来?而我之前写的程序中只是幸运的在下个字节到来前就完成了上个字节的读取,才未使数据漏掉?(因为我有时确实将中断程序写得很复杂,但从没丢失过数据)
追答
不是的,应该是在 SBUF 中的数据 是 最后 接收到的,就是如果 不取走 将被新的数据 覆盖。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询