📄 fan.a51
字号:
MOV R6,B
MOV R7,A
ENDD: RET
;********************************************************************
DS1820CRC_OK: ; EXTERN BIT DS1820CRC_OK(VOID);
MOV R5, #9 ; 8+1 BYTE CRC
MOV R7, #0 ; CLEAR CRC REGISTER
MOV DPTR, #DOWCRC_TABLE
MOV R0, #RAM
CRC:
MOV A, @R0 ; SCRATCHAD VALUE
XRL A, R7
MOVC A, @A+DPTR
MOV R7, A
INC R0
DJNZ R5, CRC
JZ OK
CLR CY
RET
OK: SETB CY
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dowcrc_table: DB 0, 94, 188, 226, 97, 63, 221, 131
DB 194, 156, 126, 32, 163, 253, 31, 65
DB 157, 195, 33, 127, 252, 162, 64, 30
DB 95, 1, 227, 189, 62, 96, 130, 220
DB 35, 125, 159, 193, 66, 28, 254, 160
DB 225, 191, 93, 3, 128, 222, 60, 98
DB 190, 224, 2, 92, 223, 129, 99, 61
DB 124, 34, 192, 158, 29, 67, 161, 255
DB 70, 24, 250, 164, 39, 121, 155, 197
DB 132, 218, 56, 102, 229, 187, 89, 7
DB 219, 133, 103, 57, 186, 228, 6, 88
DB 25, 71, 165, 251, 120, 38, 196, 154
DB 101, 59, 217, 135, 4, 90, 184, 230
DB 167, 249, 27, 69, 198, 152, 122, 36
DB 248, 166, 68, 26, 153, 199, 37, 123
DB 58, 100, 134, 216, 91, 5, 231, 185
DB 140, 210, 48, 110, 237, 179, 81, 15
DB 78, 16, 242, 172, 47, 113, 147, 205
DB 17, 79, 173, 243, 112, 46, 204, 146
DB 211, 141, 111, 49, 178, 236, 14, 80
DB 175, 241, 19, 77, 206, 144, 114, 44
DB 109, 51, 209, 143, 12, 82, 176, 238
DB 50, 108, 142, 208, 83, 13, 239, 177
DB 240, 174, 76, 18, 145, 207, 45, 115
DB 202, 148, 118, 40, 171, 245, 23, 73
DB 8, 86, 180, 234, 105, 55, 213, 139
DB 87, 9, 235, 181, 54, 104, 138, 212
DB 149, 203, 41, 119, 244, 170, 72, 22
DB 233, 183, 85, 11, 136, 214, 52, 106
DB 43, 117, 151, 201, 74, 20, 246, 168
DB 116, 42, 200, 150, 21, 75, 169, 247
DB 182, 232, 10, 84, 215, 137, 107, 53
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; SENSOR 1
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
; ********** TEPRE SUB **********
; TEMP MEMORY PRESENCE
; REG = R2
TEPRE: JB SENSOR1,$ ;PRESENCE (RX)
JNB SENSOR1,$
MOV R2,#8
DJNZ R2,$
RET
; ********** TERES SUB **********
; TEMP MEMORY RESET
; REG = R2
TERES: CLR SENSOR1 ;RESET (TX)
MOV R2,#200 ;APP. 900 uS
TERES1: NOP
NOP
DJNZ R2,TERES1
SETB SENSOR1
MOV R2,#8
DJNZ R2,$
RET
; ********** TECHK SUB **********
; TEMP MEMORY CHECK PRESENCE AT FIRST
; OUT = CY 0=NO 1=OK
; REG = R2,R3
TECHK: MOV R2,#8
TECHK1: MOV R3,#0
TECHK2: JNB SENSOR1,TECHK5 ;PRESENCE (RX)
DJNZ R3,TECHK2
DJNZ R2,TECHK1
CLR C
RET
TECHK5: JNB SENSOR1,$
MOV R2,#8
DJNZ R2,$
SETB C
RET
; ********************************************************
; TEMP MEMORY WRITE BYTE
; IN = A
; REG = A,R2,R3
; ********************************************************
TEWB: MOV R3,#8 ;WRITE BYTE
TEWB1: RRC A
JC TEWB2
CALL TEW0
SJMP TEWB3
TEWB2: CALL TEW1
TEWB3: DJNZ R3,TEWB1
RET
TEW0: CLR SENSOR1 ;WRITE 0
MOV R2,#15 ;65 uS
TEW01: NOP
NOP
DJNZ R2,TEW01
SETB SENSOR1
NOP ;4 uS
NOP
NOP
NOP
RET
TEW1: CLR SENSOR1 ;WRITE 1
NOP ;4 uS
NOP
NOP
NOP
SETB SENSOR1
MOV R2,#15 ;65 uS
TEW11: NOP
NOP
DJNZ R2,TEW11
RET
; ********** TERB SUB **********
; TEMP MEMORY READ BYTE
; OUT = A
; REG = A,R2,R3
TERB: MOV R3,#8 ;READ BYTE
TERB1: CALL TEBIT
RRC A
DJNZ R3,TERB1
RET
TEBIT: CLR SENSOR1 ;READ BIT
NOP
NOP
SETB SENSOR1
NOP
NOP
NOP
NOP
MOV C,SENSOR1
MOV R2,#15 ;65 uS
TEBIT2: NOP
NOP
DJNZ R2,TEBIT2
RET
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; 7 SEGMENT DISPLAY ROUTINE
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DISP:
MOV R2,SPED
CJNE R2,#00H,AAS1
CLR DIS_A
CLR DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_E
CLR DIS_F
SETB DIS_G
RET
AAS1: CJNE R2,#01H,AS2
CLR DIS_B
CLR DIS_C
SETB DIS_A
SETB DIS_D
SETB DIS_E
SETB DIS_F
SETB DIS_G
RET
AS2: CJNE R2,#02H,AS3
CLR DIS_A
CLR DIS_B
CLR DIS_D
CLR DIS_E
CLR DIS_G
SETB DIS_C
SETB DIS_F
RET
AS3: CJNE R2,#03H,AS4
CLR DIS_A
CLR DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_G
SETB DIS_E
SETB DIS_F
RET
AS4: CJNE R2,#04H,AS5
CLR DIS_B
CLR DIS_C
CLR DIS_F
CLR DIS_G
SETB DIS_A
SETB DIS_D
SETB DIS_E
RET
AS5: CJNE R2,#05H,AS6
CLR DIS_A
CLR DIS_C
CLR DIS_D
CLR DIS_F
CLR DIS_G
SETB DIS_B
SETB DIS_E
RET
AS6: CJNE R2,#06H,AS7
CLR DIS_A
CLR DIS_C
CLR DIS_D
CLR DIS_E
CLR DIS_F
CLR DIS_G
SETB DIS_B
RET
AS7: CJNE R2,#07H,AS8
CLR DIS_A
CLR DIS_B
CLR DIS_C
SETB DIS_D
SETB DIS_E
SETB DIS_F
SETB DIS_G
RET
AS8: CJNE R2,#08H,AS9
CLR DIS_A
CLR DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_E
CLR DIS_F
CLR DIS_G
RET
AS9: CJNE R2,#09H,AS10
CLR DIS_A
CLR DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_F
CLR DIS_G
SETB DIS_E
RET
AS10: CJNE R2,#15H,AS11 ;symbol for -
SETB DIS_A
SETB DIS_B
SETB DIS_C
SETB DIS_D
SETB DIS_E
SETB DIS_F
CLR DIS_G
RET
AS11: CJNE R2,#16H,AS12 ;switch off all disp
SETB DIS_A
SETB DIS_B
SETB DIS_C
SETB DIS_D
SETB DIS_E
SETB DIS_F
SETB DIS_G
RET
AS12: CJNE R2,#17H,AS13 ;A
CLR DIS_A
CLR DIS_B
CLR DIS_C
SETB DIS_D
CLR DIS_E
CLR DIS_F
CLR DIS_G
RET
AS13: CJNE R2,#18H,AS14 ;U
SETB DIS_A
SETB DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_E
SETB DIS_F
SETB DIS_G
RET
AS14: CJNE R2,#19H,AS15 ;t
SETB DIS_A
SETB DIS_B
SETB DIS_C
CLR DIS_D
CLR DIS_E
CLR DIS_F
CLR DIS_G
RET
AS15: CJNE R2,#20H,AS16 ;0
SETB DIS_A
SETB DIS_B
CLR DIS_C
CLR DIS_D
CLR DIS_E
SETB DIS_F
CLR DIS_G
RET
AS16: CJNE R2,#21H,AS17 ;F
CLR DIS_A
SETB DIS_B
SETB DIS_C
SETB DIS_D
CLR DIS_E
CLR DIS_F
CLR DIS_G
RET
AS17: CJNE R2,#22H,AS18 ;n
SETB DIS_A
SETB DIS_B
CLR DIS_C
SETB DIS_D
CLR DIS_E
SETB DIS_F
CLR DIS_G
RET
AS18:
MOV SPED,#00H
JMP DISP
;**********************************************************
; INTRRUPT ROUTINE TO REFRESH THE DISPLAY
;**********************************************************
REFRESH:
PUSH PSW ; save current registerset
MOV PSW,#RB1
PUSH ACC
INC COUNT
MOV R4,COUNT
QA1: CJNE R4,#01H,QA2
MOV SPED,VALUE_1
SETB DIS1
CLR DIS2
CLR DIS3
CLR DIS4
CALL DISP
JMP DOWN
QA2: CJNE R4,#02H,QA3
MOV SPED,VALUE_2
CLR DIS1
SETB DIS2
CLR DIS3
CLR DIS4
CALL DISP
JMP DOWN
QA3: CJNE R4,#03H,QA4
MOV SPED,VALUE_3
CLR DIS1
CLR DIS2
SETB DIS3
CLR DIS4
CALL DISP
AJMP DOWN
QA4: CJNE R4,#04H,QA5
MOV SPED,VALUE_4
CLR DIS1
CLR DIS2
CLR DIS3
SETB DIS4
CALL DISP
AJMP DOWN
QA5: MOV COUNT,#01H
MOV R4,COUNT
JMP QA1
DOWN:
MOV TL1,#0FFH
MOV TH1,#0F0H
POP ACC
POP PSW
RETI
;**********************************************************
;**********************************************************
;**********************************************************
DELAY:
MOV R1,#0FFH
REPA2: MOV R2,#0FFH
REPA1: NOP
DJNZ R2,REPA1
DJNZ R1,REPA2
RET
;**********************************************************
SET_TEMPERATURE:
MOV TEMP1,#31H
MOV TEMP2,#32H
MOV TEMP3,#33H
MOV TEMP4,#34H
MOV TEMP5,#35H
MOV TEMP6,#36H
MOV TEMP7,#37H
MOV TEMP8,#38H
MOV TEMP9,#39H
MOV TEMP10,#40H
MOV SPEED1,#00H
MOV SPEED2,#01H
MOV SPEED3,#02H
MOV SPEED4,#03H
MOV SPEED5,#04H
MOV SPEED6,#05H
MOV SPEED7,#06H
MOV SPEED8,#07H
MOV SPEED9,#08H
MOV SPEED10,#09H
RET
;**********************************************************
; ---------==========----------==========---------=========---------
; Interrupt 1 routine
; ---------==========----------==========---------=========---------
ZERO_CROSS:
SETB FAN
MOV R2,SPEED
CJNE R2,#00H,QW1 ; Fan Off
SETB FAN
CLR TR0
RETI
QW1: CJNE R2,#01H,QW2 ;Fan Speed 1
MOV TL0,#011H
MOV TH0,#0F0H
SETB TR0
RETI
QW2: CJNE R2,#02H,QW3 ;Fan Speed 2
MOV TL0,#0FFH
MOV TH0,#0F0H
SETB TR0
RETI
QW3: CJNE R2,#03H,QW4 ;Fan Speed 3
MOV TL0,#0FFH
MOV TH0,#0F4H
SETB TR0
RETI
QW4: CJNE R2,#04H,QW5 ;Fan Speed 4
MOV TL0,#0FFH
MOV TH0,#0F6H
SETB TR0
RETI
QW5: CJNE R2,#05H,QW6 ;Fan Speed 5
MOV TL0,#0FFH
MOV TH0,#0F7H
SETB TR0
RETI
QW6: CJNE R2,#06H,QW7 ;Fan Speed 6
MOV TL0,#0FFH
MOV TH0,#0F9H
SETB TR0
RETI
QW7: CJNE R2,#07H,QW8 ;Fan Speed 7
MOV TL0,#0FFH
MOV TH0,#0F9H
SETB TR0
RETI
QW8: CJNE R2,#08H,QW9 ;Fan Speed 8
MOV TL0,#0FFH
MOV TH0,#0FAH
SETB TR0
RETI
QW9:
CJNE R2,#09H,QW10 ;Fan full Speed 9
CLR TR0
CLR FAN
QW10: RETI
; ---------==========----------==========---------=========---------
; Timer 0 routine
; ---------==========----------==========---------=========---------
TRIGGER:
CLR FAN
CLR TR0
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -