打印

这样也能进入中断?大家帮忙分析!!

[复制链接]
1606|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2009-12-10 14:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xlsbz 于 2009-12-10 14:10 编辑

编译器keil V8.18




运行下面这个代码(注意下面这段代码的前后没有禁止串口中断)

SBUF = ‘A’; //发送1个字符
while (!TI) ; // 等待,直到发送完成
TI = 0; //标志清零
我用硬件仿真器调试。发现:执行完TI = 0;后,程序毫不犹豫的进入了串口中断服务程序。

谁能告诉我为什么?

多谢

相关帖子

沙发
bhsdlmj| | 2009-12-10 14:15 | 只看该作者
本帖最后由 bhsdlmj 于 2009-12-10 14:19 编辑

虽然执行了TI = 0;,但是并没有被硬件识别。

TI = 0一般要等几个机器周期才能起作用。但是还没等TI = 0起作用,由于中断响应时间较短,中断就发威啦



至于TI = 0是否起作用往往和编译器的编译有关系。
如果编译器编译使中断响应时间  比   TI = 0起作用的时间  长,那么就不会进入中断。

使用特权

评论回复
板凳
lxyppc| | 2009-12-10 14:43 | 只看该作者
楼主可以再看看
“请问此次“中断中的”中断请求是否会被抛弃?”
中关于51的中断查询的机制的部分

中断系统的中断查询及优先级处理在每个机器周期中重复执行

再理解一下这句话的意思

使用特权

评论回复
地板
5880527| | 2009-12-10 15:04 | 只看该作者
怎么要把那么宝贵的时间浪费在等待中啊,最常见的9600就是要浪费一毫秒。我的观点是在你判断到TI有效时MCU就开始准备进中断了,根本不等你再执行下一句TI=0。

使用特权

评论回复
5
xlsbz|  楼主 | 2009-12-10 16:18 | 只看该作者
4# 5880527

你的观点大部分情况下是对的!

使用特权

评论回复
6
fasionlei| | 2009-12-10 16:31 | 只看该作者
:)

使用特权

评论回复
7
交流进步| | 2009-12-10 16:36 | 只看该作者
TI=0,与是否进入中断无关;TI由硬件置位,并引发中断;置位后TI=0才起作用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

190

主题

1614

帖子

4

粉丝