单片机中断问题

求一个关于中断的示例程序
要求用到1个定时器中断和2个外部中断
请各位大虾帮帮我,谢谢!

第1个回答  2008-06-01
ORG 0000H
AJMP MAIN
ORG 0003H;外部0中断入口地址
AJMP ZD0
ORG 000BH;定时器T0中断入口地址
AJMP ZD1
ORG 0013H;外部1中断入口地址
AJMP ZD2

ORG 0030H;主程序入口地址

MAIN: MOV P1,#00H
MOV IE,#87H;CPU开中断、T0开中断、外部0、1开中断
MOV TMOD,#01H;T0定时模式1
MOV TH0,#3CH;定时50ms,晶振频率设为12MHz
MOV TL0,#0B0H

SETB TR0;开启T0
SJMP $;等待中断

;外部0中断子程序
ZD0: CPL P1.0 ;翻转
RETI

;定时器T0中断子程序
ZD1: CPL P1.1;翻转
MOV TH0,#3CH;重装初值
MOV TL0,#0B0H
RETI

;外部1中断子程序
ZD2: CPL P1.2 ;翻转
RETI

END

P1.0、P1.1和P1.2外接三个LED,P1.0和P1.2用于外部0、1中断。当P3.2(外部0中断,可接一开关)和P3.3(外部1中断,可接一开关)出现低电平时,P1.0和P1.2所接的LED被点亮或者熄灭,同时每隔50ms定时器T0溢出中断一次,P1.1所接的LED被点亮或者熄灭一次。

请楼主参考~~~本回答被提问者采纳
第2个回答  2019-12-28
第3个回答  2008-06-01
ORG 0000H
LJMP MAIN ;主程序入口地址
ORG 000BH ;T0的中断入口地址
LJMP DVT0 ;转向中断服务程序
ORG 0100H
MAIN: MOV TMOD,#001H ;置T0于工作方式1
MOV TH0,#03CH ;装入计数初值
MOV TL0,#0B0H ;设晶振12MHZ,5000次就是50毫秒
SETB ET0 ;T0开中断
SETB EA ;CPU开中断
SETB TR0 ;启动T0
SJMP $;等待中断
DVT0:CPL P3.5
MOV TH0,#03CH ;重新装入计数值
MOV TL0,#0B0H
RETI ;中断返回
END
外部中断必须禁止硬件中断
相似回答