想要实现的目的是先按下K1后按下K2显示器就加一,反过来就减一。可是调了一个晚上感觉开关这里还是不对求大神看一下!!
ORG 0000H ;程序储存器规划
LJMP MAIN ;跳转到主程序
ORG 0003H ;T0中断
LJMP KEY1 ;转向外部中断0中断服务程序
ORG 0013H ;T1中断
LJMP KEY2 ;转向外部中断0中断服务程序
ORG 0100H ;主程序
MAIN:
MOV SP, #5FH ;堆栈重新设置到从60H开始的片内RAM区
SETB EA ;总中断开关打开
SETB EX0 ;INT0中断打开
SETB EX1 ;INT1中断打开
SETB IT0 ;T0口下降沿触发
SETB IT1 ;T1口下降沿触发
;-----------------------------------------
MOV R1, #00 ;R0初始值设为00
MAIN1:
CALL JISHU ;调用JISHU计数部分
CALL PRINT ;调用PRINT显示部分
JMP MAIN1
;-----------------------------------------
KEY1:
LCALL DELAY
JNB P3.3, JIAYI
JNB P3.2, TX1
RETI
JIAYI:
INC R1
CJNE R1, #101, TX1 ;若R1小于101则跳转到TS1,大于则继续
MOV R1, #100
TX1:RETI
;-----------------------------------------
KEY2:
JNB P3.2,JIANYI
JNB P3.3, TS1
LCALL DELAY
RETI
JIANYI:
DEC R1
CJNE R1, #255, TS1
MOV R1, #0
TS1:RETI
;-----------------------------------------
JISHU:
MOV DPTR, #TAB
MOV R0, #33H
MOV A, R1
MOV B, #100
DIV AB ;十位个位分离
MOVC A, @A + DPTR
MOV @R0, A
INC R0
MOV A, B ;B为余数
MOV B, #10
DIV AB
MOVC A, @A + DPTR
MOV @R0, A
INC R0
MOV A, B ;B为余数表示个位数
MOVC A, @A + DPTR
MOV @R0, A
RET
;-----------------------------------------
TAB: DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H
;-----------------------------------------
PRINT:
MOV R0, #33H
MOV R5, #04H
MOV R4, #3
LOOP4:
MOV P0, @R0
MOV P2, R5
MOV A, R5
RR A
MOV R5, A
INC R0
DJNZ R7, $
DJNZ R7, $
ANL P2, #0
DJNZ R4, LOOP4
RET
;-----------------------------------------
DELAY:MOV 33H,#10
D1: MOV 31H,#200
D2: MOV 30H,#250
DJNZ 30H,$
DJNZ 32H,D2
DJNZ 33H,D1
RET
END
|