打印

关于51同时产生相同的中断的问题

[复制链接]
2602|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ttaid|  楼主 | 2009-12-31 13:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
问题1:51中如果一个中断程序在执行中,突然又有同样的中断产生,会是什么情况,如:(1)串口中断程序正在执行,这时又往串口寄存器里写数据,又产生中断程序应该怎么执行?
(2)外部中断程序正在执行,这时外部中断口有一个中断脉冲产生会是什么情况?

问题2:51和52中有没有这样的中断系统规定:从中断程序返回以后至少要执行一条指令以后才能重新进入中断。如果有,这条规定是适用于哪些中断呢,还是每个中断都要按这一规定运行。这个规定的出处见图片

相关帖子

沙发
chunyang| | 2009-12-31 14:24 | 只看该作者
多中断发生时,处理器核会根据已准许的中断的优先级进行响应,高优先级中断可以中断低优先级中断程序的执行,反之则不行,进入更高级的中断程序前,当前正在执行的指令会先完成后才响应中断。

使用特权

评论回复
板凳
HWM| | 2009-12-31 16:29 | 只看该作者
MCS-51中断优先级分两级,定义在高优先级的中断源可以嵌套中断低中断优先级的中断服务程序。而同等优先级的中断源只有在“同时”到来时中断系统才按照约定的固定优先次序相应中断,具体次序看相关资料。

MCS-51确实是在中断返回后自少要执行一条指令才能再次相应新的一次中断。利用这一点,可以实现“单步”执行的效果,用以实现调试功能。但这需要浪费不少资源。

使用特权

评论回复
地板
ttaid|  楼主 | 2009-12-31 17:32 | 只看该作者
3# HWM
那如果是串行通讯的发送中断程序执行时,又来了个串行发送中断,这样就是2个程序(其实程序代码是同一段),当第一个中断程序完成后,应该到主程序里执行一个单步的程序,然后再执行第二个中断程序么,是这样么

使用特权

评论回复
5
dxpol999| | 2009-12-31 17:41 | 只看该作者
机器是死的,人是活的,人还不如机器么?

使用特权

评论回复
6
HWM| | 2009-12-31 17:44 | 只看该作者
回4楼:

串口又来了一个字符而前面的串口中断还未结束,那是不会再产生一个中断地。因为那只是一个中断源,就像是一只手一样,忙不过来就得等。等到前面的中断任务完成以后,再可以轮到新的中断服务。

这里有一点要注意的,就是等待的队伍允许长度通常非常有限。超出了限制范围,新的中断请求就将丢失。

使用特权

评论回复
7
dxpol999| | 2009-12-31 17:51 | 只看该作者
如6楼说的,这样的数据量就不该用这样的方案,该用带FIFO的专门的芯片,为什么还用普通的单元?省钱么?

使用特权

评论回复
8
maychang| | 2009-12-31 17:54 | 只看该作者
4楼:
51的串行发送中断是怎么产生的?是串口发送完毕产生的。
怎么可能“串行通讯的发送中断程序执行时,又来了个串行发送中断”?

使用特权

评论回复
9
ttaid|  楼主 | 2009-12-31 20:15 | 只看该作者
本帖最后由 ttaid 于 2009-12-31 20:26 编辑

6# HWM
interrupt[0x23] void UART_ISR(void)
{
unsigned char register Rr;
if(RI)
{
  RI = 0;
  Rr = SBUF;
........//这里省略
    }
if(TI)
{
  TI = 0;
  SBUF= TsBuffer[TsBufPt];//这里开始发送数据——1号
  if(TsBuffer[TsBufPt] !=  ETX) TsBufPt++;//ETX是8个字节的数据最后一位
  else RS485C = 0;
}
}
接收的程序没什么问题,所以就没写,如果在1号位后面的程序没有执行完的情况下,数据发送完了呢,也就产生不了中断吧,如果把这一句放在最后执行,是不是能解决这个问题呢,这里不是很清楚,能帮忙解释下么,谢谢了

使用特权

评论回复
10
HWM| | 2009-12-31 21:12 | 只看该作者
和放的位置关系不大。

发送中断是自主的。当SBUF中的数传完后才会有TI中断,然后进入中断向SBUF送新值。

这里的关键是TsBuffer中数据发送的启动(置位TI)和判别TsBuffer中的数据是否发送完毕。

使用特权

评论回复
11
ttaid|  楼主 | 2009-12-31 21:39 | 只看该作者
10# HWM
也就是说只要数据发送完成,并TI置位之前,这个中断程序执行完成,就不会有问题了,是这样么?
算了下发送完成要1ms左右,这几句程序应该能执行完,到时候编译下烧到单片机上试试,有啥结果再讨论讨论,十分感谢您啊

使用特权

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

本版积分规则

38

主题

112

帖子

1

粉丝