编程语言及工具
某个中断请求被响应后,就存在着一个中断请求的撤销问题。下面接中断请求源的类型分别说明中断请求的撤销方法。
定时器/计数器中断的中断请求被响应后,硬件会自动把中断请求标志位(TFO或TF1)清O,因此定时器/计数器中断请求是自动撤销的。
(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,从而撤销低电平的中断请求信号。所需的负脉冲在中断服务程序中增加如下指令即可得到:
串行口中断请求的撤销只有标志位清0的问题。串行口中断的标志位是TI和RI,但对这两个中断标志CPU不进行自动清0。因为在响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位的状态,以判定是接收操作还是发送操作,然后才能清除。所以串行口中断请求的撤销只能使用软件的方法,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:
从图可以看出,外部中断0请求信号在D触发器(可选用74LS74)的时钟输入端。当外部设备有中断请求信号(为低电平)出现时,Q端输出为低电平,/INT0有效,向CPU发出中断请求信号。CPU响应中断后,在中断服务程序中由软件安排1个低电平中断应答信号,从P1.0送至D触发器的/SD(置位端,低电平有效),使D触发器的Q端输出为高电平,从而撤除了低电平的外中断0请求信号。/SD端所需的低电平可通过在中断服务程序中增加一下指令的得到:
ANL P1,#0FEH ;使P1.0输出为低电平,D触发器置位
在中断服务程序中还要加上撤除外中断0标志指令,即
CLR IE0 ;清外中断标志,以便下次可再次中断
可见,电平方式外部中断请求信号的撤除是通过软、硬件相结合的方法实现的。
全部0条评论
快来发表一下你的评论吧 !