中断控制仿真
使用外部中断0和外部中断1,在动态数码管上显示中断0次数,中断1用作次数清0。数码管采用74HC595驱动。中断次数显示形式自定(2位16进制)
代码
SH_CP EQU P2.0
DSSSS EQU P2.1
ST_CP EQU P2.2
POS_1 EQU P2.3
POS_2 EQU P2.4
ORG 0000H
LJMP START
ORG 0003H;外部中断0
LJMP INT0_ISR
ORG 0013H;外部中断1
LJMP INT1_ISR
ORG 0100H
START:
MOV R0,#00H;初始化R0保存次数
;取出16进制数的高四位和低四位放在内存里面
LCALL HEX_OPE
SETB EX0;中断1 0下降沿触发
SETB IT0
SETB EA
SETB EX1
SETB IT1
SETB EA
MAIN_LOOP:
MOV A,92H;动态显示
LCALL DS_1
LCALL XIAO
MOV A,91H
LCALL DS_2
LCALL XIAO
LJMP MAIN_LOOP
LJMP $
INT0_ISR:
INC R0;中断触发计数加一
;取出16进制数的高四位和低四位放在内存里面
LCALL HEX_OPE
RETI
INT1_ISR:
MOV R0,#00H;清零
;取出16进制数的高四位和低四位放在内存里面
LCALL HEX_OPE
RETI
DELAY3MS: ;@11.0592MHz
NOP
NOP
NOP
NOP
PUSH 30H
PUSH 31H
MOV 30H,#26
MOV 31H,#204
NEXT:
DJNZ 31H,NEXT
DJNZ 30H,NEXT
POP 31H
POP 30H
RET
;消除残影
XIAO:
MOV A,#0FFH
LCALL HC
RET
;显示第一个数码管
DS_1:
SETB POS_1;第一个数码管显示
CLR POS_2
LCALL FIND_HC
LCALL DELAY3MS;延时显示
RET
;显示第二个数码管
DS_2:
SETB POS_2;第二个数码管显示
CLR POS_1
LCALL FIND_HC
LCALL DELAY3MS;延时显示
RET
;74HC595数字输入,串行输出
FIND_HC:
MOV DPTR,#SEG_CA;查表操作
MOVC A,@A+DPTR
LCALL HC
RET
;入口A,并行输出
;参数R1循环变量
;74HC595芯片输出模块
HC:
MOV 80H,#08H
HC_LOOP:
RLC A;A左移
MOV DSSSS,C;串行输入
CLR SH_CP;上升沿串行输出一位
SETB SH_CP;
DJNZ 80H,HC_LOOP;减1不为0转移,可以转移7次
CLR ST_CP;上升沿并行输出
SETB ST_CP;
RET
;入口R0
;取出16进制数的高四位和低四位放在内存里面
HEX_OPE:
MOV A,R0
MOV B,#0FH
DIV AB
MOV 92H,A
MOV A,B
MOV 91H,A
RET
SEG_CA:
DB 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8
DB 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
END
protues仿真
按键可以清除计数也可以计数加一
74HC595
引脚功能
SH_CP 上升沿串行输出
DS 串行数据输入
ST_CP 上升沿串行转并行
MR 复位 低电平有效