📄 中断.asm
字号:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT0
ORG 000BH
LJMP TIMER0
ORG 001BH
LJMP TIMER1
ORG 0100H
MAIN:
CLR P1.7
MOV SP, #5FH
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 2CH,#0CH ;存放T
MOV 2DH,#0AH ;存放H
MOV 2EH,#0BH ;存放L
MOV 30H,#06H ;十位 ;存放要显示的实际温度值
MOV 31H,#06H ;个位
MOV 32H,#00H ;小数点位
MOV 33H,#09H ;存放设定的温度上限值
MOV 34H,#00H
MOV 35H,#00H
MOV 36H,#04H ;存放设定的温度下限值
MOV 37H,#00H
MOV 38H,#00H
MOV 39H,#33H
MOV 3AH,#36H
MOV 3BH,#00H ;存放进过处理后的实际温度值,需进一步转化为显示值
MOV 3CH,#00H ;用于存放A/D转换后的值,需要进一步处理为实际温度值
MOV 3DH,#00H ;用于存放A/D转换后相同的值,需要进一步处理为实际温度值
MOV 41H,#10H;存放-
MOV 45H,#0EH;存放C
MOV 46H,#76H;H
MOV 47H,#79H;E
MOV 48H,#38H;L
MOV 49H,#38H;L
MOV 4AH,#3FH;O
MOV 4BH,#86H;!
MOV IE, #8AH
MOV TMOD,#11H
SETB PX0
SETB IT1
LCALL DISPINT
LCALL T1
LCALL HELLO
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
HELLO:
MOV 2AH,#06H
CLR P1.6
MOV R0,#4CH
HELLO1:
DEC R0
MOV 2BH,#08H
MOV A,@R0
HELLO2:
CLR P1.5
RLC A
MOV P1.4,C
SETB P1.5
DJNZ 2BH,HELLO2
DJNZ 2AH,HELLO1
SETB P1.6
HELLO3:
LCALL READKEY
JB 03H,HELLO4
SJMP HELLOEND
HELLO4:
CJNE R7,#00H,HELLO3
HELLOEND:
CLR TR1
RET
XSPD:JB 1CH,XSPD1
MOV 40H,2CH
MOV 42H,30H
MOV 43H,31H
MOV 44H,32H
SJMP XSPDEND
XSPD1: ;上限
JNB 18H,XSPD2
MOV 40H,2DH
MOV 42H,33H
MOV 43H,34H
MOV 44H,35H
SJMP XSPDEND
XSPD2: ;下限
MOV 40H,2EH
MOV 42H,36H
MOV 43H,37H
MOV 44H,38H
XSPDEND:
RET
DISP: ;显示
CLR P1.6
MOV 2AH,#06H
MOV R0, #46H
DISP11:
DEC R0
JNB 1DH,DISP112
JNB 1CH,DISP112
DISP111:
JNB 19H,GWEI
MOV A ,2AH
CJNE A,#03H,DISP112
SJMP DISP113
GWEI:JNB 1AH,DISP112
MOV A,2AH
CJNE A,#04H,DISP112
SJMP DISP113
DISP112:
MOV A,@R0
MOV DPTR,#DISTABLE
MOVC A,@A+DPTR
MOV R4,2AH
CJNE R4,#04H,DISP1121
ORL A,#80H
DISP1121:
MOV 2BH,#08H
LJMP DISP12
DISP113:
MOV 2BH,#08H
MOV R4,2AH
CJNE R4,#04H,DISP1131
MOV A,#80H
SJMP DISP12
DISP1131:
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 36H
MOV A,36H
CJNE A,#0AH,K1END
MOV 36H,#00H
LJMP K1END
K11:
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 37H
MOV A,37H
CJNE A,#0AH,K2END
MOV 37H,#00H
LJMP K2END
K21:INC 34H
MOV A,34H
CJNE A,#0AH,K2END
MOV 34H,#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,#10
TIMER0END:
POP DPL
POP DPH
POP A
POP PSW
RETI
TIMER1:
PUSH PSW
PUSH A
MOV TH1,#3CH
MOV TL1,#0AFH
DJNZ R7,TIMER1END
CLR TR1
TIMER1END:
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,#99
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 RESULTEND3
RESULT1:
DJNZ R5,RESULT10
LJMP RESULTLL
RESULT10:
INC R1
LJMP RESULT00
RESULTLL:
DEC R1
RESULT2:
INC 3CH
CJNE A,3CH,RESULT3
LJMP RESULTEND
RESULT3:INC 3CH
CJNE A,3CH,RESULT4
LJMP RESULTEND
RESULT4:
MOV 3CH,3DH
INC R1
LJMP RESULT0
RESULTEND:
SETB 1FH
SJMP RESULTEND4
RESULTEND3:
CLR 1FH
RESULTEND4:
MOV 3BH,R1
SJMP RESULTEND2
RESULTEND1:
MOV 3BH,#99
SETB 1FH
RESULTEND2:
LCALL RESULTZH
RET
RESULTZH: ;处理A/D转换后的值,将其转换为实际温度值,送给存放实际温度值的单元
MOV A,3BH
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
JB 1FH,RESULTZH1
MOV 32H,#00H
SJMP RESULTZHEND
RESULTZH1:
MOV 32H,#05H
RESULTZHEND:
RET
T0: ;暂时不用
MOV TH0 , #0ECH
MOV TL0 , #78H
MOV R2,#20
SETB TR0
RET
T1:
MOV TH1 , #3CH
MOV TL1 , #0AFH
MOV R7,#100
SETB TR1
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
DB 76H,38H,31H,79H,39H
DB 3FH,40H,86H
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 + -