Starter使用手册
闭中断,使这样P3.2上的信号就不能频繁产生中断。参考下面的代码:
ORG 0000H ;复位时程序从此开始
SJMP START ;跳到START进行初始化
ORG 0003H ;P3.2引脚信号中断入口
AJMP INTERRUPT0 ;跳转到标号INTERRUPT0处(P3.2中断服务子程序)
ORG 0030H ;初始化程序从30H开始
START:
MOV SP, #60H ;给堆栈指针赋值60H
MOV P0, #0FFH ;让P0口输出高电平,小灯熄灭
CLR IT0 ;设置P3.2引脚低电平信号可以引发中断
SETB EX0 ;开外中断0,即允许P3.2信号中断CPU
SETB EA ;开总中断允许
MAIN:
NOP ;空操作指令
CLR EX0 ;关外中断0, CPU将对P3.2引脚的信号不理会
CALL DELAY ;调延时程序,不理P3.2的时间持续一段时间
SJMP MAIN ;程序跳转到MAIN处
INTERRUPT0:
CPL P0.7 ;取反P0.7口状态
RETI ;中断子程序结束返回到主程序
DELAY:
MOV R0, #250 ;给R0赋值250
D2:
MOV R1, #250 ;给R1赋值250
D1:
DJNZ R1, D1 ;R1减1不等于0跳到D1处
DJNZ R0, D2 ;R0减1不等于0跳到D2处
RET ;子程序结束返回
END ;程序结束
现在我们能够更好地理解EX0的作用了!可是,为什么在给P3.2引脚授权,允许P3.2引脚的低电平信号产生中断后,还要在主程序中加一条NOP指令呢?是这样的,如果刚对P3.2引脚授权(SETB EX0)就立刻取消(CLR EX0),那么就不会得到执行,也就看不到小灯闪烁了。因此,在授权后要通过一条空操作指令NOP来延时,确保CPU有足够的时间确认中断信号。这是一个小技巧,但至关重要,否则中断服务子程序根本来不及闪烁!你可以在PIC单片机引脚中断程序的设计技巧和中断信号处理这两篇文章中找到更多细节。
前面我们分享了P3.2引脚的低电平信号引发中断的实验,现在让我们一起研究一下下降沿信号是如何触发中断的。你知道吗,这些复杂的中断控制就像是舞台上的幕后操作员,尽管观众看不到,但每一个动作都精心安排!更多关于这一点的内容,可以参考单片机编程技巧时钟中断。
用户评论