1.原理图:
2.程序例子(汇编例子):
;*****************************************************************************
;*实验名称:定时器0中断和外中断1实验(T0中断和INT1同时存在)
;*实验对象:XY-900_USB型单片机学习开发系统 http://www.mcusy.cn
;*实验说明:开机P2 每隔0.5S做左移一位,按P3.3(INT1中断),LED闪烁5次后返回
;*****************************************************************************
; 提示:如果有多个中断,中断向量在程序起始处一定要按中断顺序排列,否则出现问题
ORG 00H
AJMP START
ORG 0BH ;T0中断起始地址
JMP TIM0
ORG 13H ;INT1(P3.3)中断起始地址
AJMP EXT1
START: MOV SP,#70H
MOV TMOD,#00000001B
MOV TH0,#HIGH(65536-10000) ;1000US
MOV TL0,#LOW(65536-10000) ;
SETB TR0 ;启动T0
MOV IE,#10000110B ;T0、INT1中断使能,
MOV IP,#00000100B ;设定INT1优先
MOV R5,#100 ;中断100次即1S
MOV R1,#0FEH ;循环初值
JMP $
TIM0: PUSH ACC ;将A压入堆栈暂时保护
PUSH PSW
MOV TH0,#HIGH(65536-5000) ;500US
MOV TL0,#LOW(65536-5000) ;
DJNZ R3,LOOP ;中断了100次?
MOV R3,#100 ;重设R5=100
MOV A,R1 ;读入P1至A
MOV P2,A
RL A ;A的值左移一位
MOV R1,A ;存入左移初值
LOOP: POP PSW ;恢复PSW
POP ACC
RETI
EXT1: PUSH ACC
PUSH PSW
MOV A,#00
MOV R2,#10 ;闪灯5次
LOOP3: MOV P2,A
CALL DELAY
CPL A
DJNZ R2,LOOP3
POP PSW
POP ACC
RETI
;---------- 以下是延时子程序 ----------------------------------
DELAY: MOV R5,#20 ;0.2S
D1: MOV R6,#20 ;10MS
D2: MOV R7,#248 ;0.5MS
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END