|
一,程序想要达到的效果。
接上电源定时器启动,计数值达到后P1.1输出0,同时关闭定时器,打开外中断(所以在计数值未达到时,外中断是无效的)。
二,出现的问题。
定时器计数值未达到时外中断无效(因为未打开),但此时按下外中断按键,定时器计数值达到后竟然,转而处理外中断处理程序(计数值达到后未按下按键)。
OUT BIT P1.0
LED BIT P1.1
ORG 0000H
LJMP MAIN
ORG 000BH ;定时器0中断处理入口
LJMP TNII0 ;中断处理程序
ORG 0003H ;外中断INT0入口
LJMP INTT ;外中断处理程序
ORG 0030H
MAIN:
MOV TMOD, #01H ;工作模式设定T0工作在模式1
MOV TH0, #3CH ;装初值,定时时间,大概在50MS
MOV TL0, #0B0H ;装初值,定时时间,大概在50MS
SETB ET0 ;开定时器中断
SETB EA ;开总中断
SETB TR0 ;开定时器
SETB PT0 ;定时器0为最高优先级
SETB IT0 ;外中断INT0下降沿触发
MOV R7, #0 ;
CLR OUT ;初始化为低电平
SETB LED ;用于查看定时器中断处理结束
LOOP:
NOP
NOP
NOP
LJMP LOOP ;
TNII0: ;定时器中断处理子程序
PUSH PSW ;入栈
PUSH ACC ;入栈
INC R7 ;
CJNE R7,#20, OVER ;
MOV R7, #0 ;清零
SETB EX0 ;开外中断
CLR TR0 ;关闭定时器
CLR LED ;用于查看中断时间(结束)
OVER:
POP ACC ;出栈
POP PSW ;出栈
RETI
INTT: ;外中断处理子程序
PUSH ACC ;保护现场
PUSH PSW ;保护现场
SETB OUT ;切断OUT保护
POP ACC ;出栈
POP PSW ;出栈
RETI ;返回
END
附件:程序和仿真文件ourdev_720347YOGO8I.rar(文件大小:27K) (原文件名:中断实验.rar) |
|