⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 中断.asm

📁 51单片机写得温度控制
💻 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 + -