- Proteus原理图如下:
要是没有设置中断优先级,则外部中断0比外部中断1的同级次序高。
同级之间不会打断已被响应的中断请求。
所以应该用IP寄存器设置两个中断源的中断优先级,就能使其中一个中断请求能被打断。
这里设置外部中断0为最高级,能够在外部中断1执行的过程中打断中断。
- keil程序
在写程序时必须注意在中断后要保护现场和恢复现场,外部中断1定义b是为了在循环左移时要是发生外部中断0中断时,可以储存当前的值,以使中断返回时可以继续进行。#include
#include sbit S0=P3^3; sbit S1=P3^2; void Delay100us(unsigned int j) //@11.0592MHz { unsigned char i; while(j--) { _nop_(); i = 43; while (--i); } } void main() { TCON=0x05; IE=0x85; IP=0x01; P1=0xff; while(1); } void zd0(void) interrupt 0 { P1=0; Delay100us(10000); P1=0Xff; } void zd1(void) interrupt 2 { unsigned int z,b=0xfe; for(z=0;z<8;z++) { P1=b; Delay100us(1000); b=_crol_(b,1); } } 此外,一开始zd1()与预期的有所出入,即循环少了一次。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)