求助单片机C语言编程的一个串行中断问题!

在一个中断子程序里面再次发生这个中断,算怎么回事?
例如,在一个串行接收中断中(RI=1)在这个中断子程序里,又出现了TI=1的串行发送中断,程序会怎么运行?
我想编一个单片机的中断子程序,功能是首先以中断的方式接收到上位机指令,判断是什么指令(2中种指令,发送和接收数据),然后等待接收数据,或者发送给上位单片机数据,请给个思路吧!不胜感激!

第一种情况完全可以避免使用,中断程序中完成接收,可以在其他子程序未必是中断中实现发送,因为串行通信的中断是硬件中断其实现机制非常严格,而且这种在接收中断中实现发送的中断也是不合常规逻辑的;
完全可以定义一个变量在接受中断中将命令写进去,中断返回后,添加子程序实现命令的判断,分别实现查询发送和接受中断,此时的接收中断也就是PC机通信时使用的中断服务;
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-27
51单片机在中断过程中,是不会响应同一级别的中断申请的。
只有在执行了RETI,退出中断之后,才会响应后来的中断申请。

在串行接收中断中,应有两个分支程序(RI=1、TI=1),每次进入这个中断子程序里,只是执行一种分支。
如果又出现了TI=1的事件,只有等到退出后,才会重新进入这个中断子程序里,执行另一种分支。
第2个回答  2010-05-27
强烈建议把 发送放到主循环中。
中断程序只是把设置下 现在的任务是接受还是发送。
如unsigned char currTaskFlg;
当要进行发送的时候,在中断程序中currTaskFlg=1
主循环读取这个标志位,来进行具体的发送工作。本回答被提问者采纳
第3个回答  2010-05-27
你出现了发送中断,就说明你往发送缓冲区填数据了啊。
思路很简单,接受时,分析命令,然后置相应的标记。推出中断。在主循环里处理命令,然后根据分支去做相应动作。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网