📄 中断.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0
ORG 000BH
LJMP TIMER0
ORG 0100H
MAIN:
CLR P1.7
MOV 20H,#0FFH
MOV 21H,#00H;存放闪烁标志位 ;暂时不用
MOV 22H,#00H ;暂时不用
MOV 23H,#01H;存放按键标志位
MOV 24H,#00H ;暂时不用
MOV 25H,#00H ;暂时不用
MOV 2AH,#03H
MOV 2BH,#08H
MOV 30H,#00H ;百位 ;存放要显示的实际温度值
MOV 31H,#06H ;十位
MOV 32H,#06H ;个位
MOV 33H,#00H ;存放设定的温度上限值
MOV 34H,#09H
MOV 35H,#00H
MOV 36H,#00H ;存放设定的温度下限值
MOV 37H,#04H
MOV 38H,#00H
MOV 39H,#33H
MOV 3AH,#36H
MOV 3BH,#00H ;存放进过处理后的实际温度值,需进一步转化为显示值
MOV 3CH,#00H ;用于存放A/D转换后的值,需要进一步处理为实际温度值
MOV 3DH,#00H ;用于存放A/D转换后相同的值,需要进一步处理为实际温度值
MOV IE, #82H
SETB PX0
SETB IT1
LCALL DISPINT
LOOP:
MOV DPTR,#0FEF8H
MOV A,#00H
MOVX @DPTR,A
SETB EX0
LCALL XSPD
LCALL DISP
LCALL READKEY
LCALL CAMPARE
LJMP LOOP
DISPINT: ;清3个595的24位寄存器
MOV R2,#24
DISPINT1:
CLR P1.6
CLR P1.4
SETB P1.5
DJNZ R2,DISPINT1
RET
XSPD:JB 1CH,XSPD1
MOV 2CH,30H
MOV 2DH,31H
MOV 2EH,32H
SJMP XSPDEND
XSPD1:
JNB 18H,XSPD2
MOV 2CH,33H
MOV 2DH,34H
MOV 2EH,35H
SJMP XSPDEND
XSPD2:
MOV 2CH,36H
MOV 2DH,37H
MOV 2EH,38H
XSPDEND:
RET
DISP: ;显示
CLR P1.6
MOV 2AH,#03H
MOV R0, #2FH
DISP11:
DEC R0
JNB 1DH,DISP112
JNB 1CH,DISP112
DISP111:
JNB 19H,GWEI
MOV A ,2AH
CJNE A,#02H,DISP112
SJMP DISP113
GWEI:JNB 1AH,DISP112
MOV A,2AH
CJNE A,#03H,DISP112
SJMP DISP113
DISP112:
MOV A,@R0
MOV DPTR,#DISTABLE
MOVC A,@A+DPTR
MOV 2BH,#08H
LJMP DISP12
DISP113:
MOV 2BH,#08H
MOV A,#00H
DISP12:
CLR P1.5
RLC A
MOV P1.4,C
SETB P1.5
DJNZ 2BH,DISP12
DJNZ 2AH,DISP11
SETB P1.6
DISP1END:
RET
READKEY:
MOV 20H,P1
READKEY0:
JB 00H,READKEY1
LCALL K0
READKEY1:
JB 01H,READKEY2
LCALL K1
READKEY2:
JB 02H,READKEY3
LCALL K2
READKEY3:
JB 03H,READKEYEND
LCALL K3
READKEYEND:
RET
K0: ;设置键 ,切换键
LCALL DELAY
JB 00H,K0END
CLR TR0
CLR 19H
CLR 1AH
SETB 1CH
CPL 18H
LCALL T0
K0END:
RET
K1: ;十位键加1
LCALL DELAY
JB 01H,K1END
JNB 1CH,K1END
SETB 19H
CLR 1AH
JB 18H,K11
INC 37H
MOV A,37H
CJNE A,#0AH,K1END
MOV 37H,#00H
INC 36H
MOV A,36H
CJNE A,#0AH,K12
MOV 36H,#00H
K12:
LJMP K1END
K11:
INC 34H
MOV A,34H
CJNE A,#0AH,K1END
MOV 34H,#00H
INC 33H
MOV A,33H
CJNE A,#0AH,K1END
MOV 33H,#00H
K1END:
RET
K2: ;个位键加1
LCALL DELAY
JB 02H,K2END
JNB 1CH,K2END
SETB 1AH
CLR 19H
JB 18H,K21
INC 38H
MOV A,38H
CJNE A,#0AH,K2END
MOV 38H,#00H
LJMP K2END
K21:INC 35H
MOV A,35H
CJNE A,#0AH,K2END
MOV 35H,#00H
K2END:
RET
K3: ;确认键
LCALL DELAY
JB 03H,K3END
CLR 1CH
SETB 18H
CLR 19H
CLR 1AH
CLR TR0
K3END:
RET
INT0: ;A/D转换完后的中断服务程序
PUSH PSW
PUSH A
PUSH DPH
PUSH DPL
MOV DPTR,#0FEF8H
MOVX A,@DPTR
MOV 3CH,A
LCALL RESULT
CLR EX0
POP DPL
POP DPH
POP A
POP PSW
RETI
TIMER0:
PUSH PSW
PUSH A
PUSH DPH
PUSH DPL
MOV TH0,#0ECH
MOV TL0,#78H
DJNZ R2,TIMER0END
CPL 1DH
MOV R2,#80
TIMER0END:
POP DPL
POP DPH
POP A
POP PSW
RETI
CAMPARE: ;比较下限
MOV A,30H
CLR C
SUBB A,36H
JZ CAMPARE11
JC CAMPARE1 ;小于设定的下线温度,即有借位掉用控制
LJMP CAMPARE13
CAMPARE11:
MOV A,31H
CLR C
SUBB A,37H
JZ CAMPARE12
JC CAMPARE1
LJMP CAMPARE13
CAMPARE12:
MOV A,32H
CLR C
SUBB A,38H
JZ CAMPARE13
JC CAMPARE1 ;比较上限温度
CAMPARE13:
MOV A,33H
CLR C
SUBB A,30H
JZ CAMPARE2
JC CAMPARE1;大于设定的上线温度,即有借位掉用控制
LJMP CAMPARE4
CAMPARE2:
MOV A,34H
CLR C
SUBB A,31H
JZ CAMPARE3
JC CAMPARE1
LJMP CAMPARE4
CAMPARE3:
MOV A,35H
CLR C
SUBB A,32H
JZ CAMPARE4
JC CAMPARE1
CAMPARE4:
CLR P1.7
LJMP CAMPAREEND
CAMPARE1:
SETB P1.7
CAMPAREEND:
RET
RESULT:
MOV 3DH,3CH
MOV DPTR,#WENDUBIAO
MOV R1,#00H
MOV R6,#110
RESULT0:
DJNZ R6,RESULT000
LJMP RESULTEND1
RESULT000:
MOV R5,#02H
RESULT00:
MOV A,R1
MOVC A,@A+DPTR
CJNE A,3CH,RESULT1 ;3CH用于存放A/D转换后的值,需要进一步处理为实际温度值
LJMP RESULTEND
RESULT1:
DJNZ R5,RESULT10
LJMP RESULTLL
RESULT10:
INC R1
LJMP RESULT00
RESULTLL:
DEC R1
RESULT2:
DEC 3CH
CJNE A,3CH,RESULT3
LJMP RESULTEND
RESULT3:DEC 3CH
CJNE A,3CH,RESULT4
LJMP RESULTEND
RESULT4:
MOV 3CH,3DH
INC R1
LJMP RESULT0
RESULTEND:
MOV 3BH,R1
SJMP RESULTEND2
RESULTEND1:
MOV 3BH,#110
RESULTEND2:
LCALL RESULTZH
RET
RESULTZH: ;处理A/D转换后的值,将其转换为实际温度值,送给存放实际温度值的单元
MOV A,3BH
MOV B,#100
DIV AB
MOV 30H,A
MOV R4,B
MOV A,R4
MOV B,#10
DIV AB
MOV 31H,A
MOV 32H,B
RET
T0:
MOV TH0 , #0ECH
MOV TL0 , #78H
MOV R2,#80
SETB TR0
RET
DELAY: ;延时子程序
MOV 59H,#00H
DELAY1:
INC 59H
MOV A,59H
CJNE A,#200,DELAY2
SJMP DELAYEND
DELAY2:
MOV R3,#200
DJNZ R3,$
SJMP DELAY1
DELAYEND:
RET
DISTABLE:
DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
WENDUBIAO:
DB 00H,02H,04H,06H,08H,0BH,0DH,0FH,11H,13H
DB 16H,18H,1AH,1CH,1EH,21H,23H,25H,27H,29H
DB 2CH,2EH,30H,32H,34H,37H,39H,3BH,3DH,3FH
DB 42H,44H,46H,48H,4AH,4DH,4FH,51H,53H,55H
DB 58H,5AH,5CH,5EH,60H,63H,65H,67H,69H,6BH
DB 6DH,70H,72H,74H,76H,78H,7AH,7DH,7FH,81H
DB 83H,85H,88H,8AH,8CH,8EH,90H,92H,95H,97H
DB 99H,9BH,9DH,9FH,0A2H,0A4H,0A6H,0A8H,0AAH,0ACH
DB 0AFH,0B1H,0B3H,0B5H,0B7H,0B9H,0BCH,0BEH,0C0H,0C2H
DB 0C4H,0C6H,0C8H,0CBH,0CDH,0CFH,0D1H,0D3H,0D5H,0D8H
DB 0DAH,0DCH,0DEH,0E0H,0E2H,0E4H,0E7H,0E9H,0EBH,0EDH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -