某个中断请求被响应后,就存在着一个中断请求的撤销问题。下面接中断请求源的类型分别说明中断请求的撤销方法。
1.定时器/计数器中断请求的撤销定时器/计数器中断的中断请求被响应后,硬件会自动把中断请求标志位(TFO或TF1)清O,因此定时器/计数器中断请求是自动撤销的。
2.外部中断请求的撤销(1)跳沿方式外部中断请求的撤销 包括两项内容:中断标志位清0和外中断信号的撤销。
其中,中断标志位(IEO或IE1)清0是在中断响应后由硬件自动完成的。而外中断请求信号的撤销,由于跳沿信号过后也就消失了,所以跳沿方式的外部中断请求也是自动撤销的。
(2)电平方式外部中断请求的撤销 对于电平方式外部中断请求的撤销,中断请求标志的撤销是自动的,但中断请求信号的低电平可能继续存在,在以后的机器周期采样时,又会把已清0的IEO或IE1标志位重新置1。为此,要彻底解决电平方式外部中断请求的撤销,除了标志位清0之外,必要时还需在中断响应后把中断请求信号输入引脚从低电平强制改变为高电平。为此,可在系统中增加如下图所示的电路。
由上图可见,用D触发器锁存外来的中断请求低电平,并通过D触发器的输出端Q接到INTO(或INT1(的反))。所以,增加的D触发器不影响中断请求。中断响应后,为了撤销中断请求,可利用D触发器的直接置1端SD实现,即把SD端接AT89S51的Pl.O端。因此,只要P1.0端输出一个负脉冲就可以使D触发器置1,从而撤销低电平的中断请求信号。所需的负脉冲在中断服务程序中增加如下指令即可得到:
3.串行口中断请求的撤销
串行口中断请求的撤销只有标志位清0的问题。串行口中断的标志位是TI和RI,但对这两个中断标志CPU不进行自动清0。因为在响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收 *** 作还是发送 *** 作,然后才能清除。所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:
二、51单片机中断的撤销
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)