📄 md-fan.asm
字号:
;************************************************************************
;************************************************************************
R0 EQU [00H] ; System Register Definition
MP EQU [01H]
ACC EQU [05H]
PCL EQU [06H]
TBLP EQU [07H]
TBLH EQU [08H]
WDTS EQU [09H]
STATUS EQU [0AH]
INTC EQU [0BH]
TMR EQU [0DH]
TMRC EQU [0EH]
PA EQU [12H]
PAC EQU [13H]
PB EQU [14H]
PBC EQU [15H]
PC EQU [16H]
PCC EQU [17H]
EMI EQU INTC.0
EIF EQU INTC.4
TF EQU INTC.5
C EQU STATUS.0
Z EQU STATUS.2
TON EQU TMRC.4
;----------------------------------------------------
BUZ EQU PC.1 ; I/O Port Definition
OUT_LOW EQU PB.4
OUT_MID EQU PA.3
OUT_HIG EQU PA.2
OUT_SW EQU PA.1
OUT_ION EQU PA.0
OUT_FAN EQU PB.3
HEAT_LOW EQU PC.0
HEAT_HIG EQU PB.2
LED_COM1 EQU PB.1
LED_COM2 EQU PB.5
LED_COM3 EQU PC.2
LED_COM4 EQU PA.4
LED_SEG1 EQU PA.7
LED_SEG2 EQU PA.6
LED_SEG3 EQU PA.5
LED_SEG4 EQU PB.7
LED_SEG5 EQU PB.0
LED_SEG6 EQU PB.6
;-----------------------------------------------------
ACC_BUF EQU [40H] ;
PFLAG_BUF EQU [41H]
SPEED EQU [44H] ; 风速变量
HEAT EQU [45H] ; 加热变量
TIME EQU [46H] ; 定时变量
SWING EQU [47H] ; 摆头变量
RESETA EQU [48H]
T2MS_TIMER EQU [49H]
T4MS_TIMER EQU [4AH] ; 4ms定时变量
T1SEC_TIMER EQU [4BH] ; 1s 定时变量
T1SEC_TIMER1 EQU [4CH] ; 1s 定时变量1
T1SEC_TIMER2 EQU [4DH] ; 1s 定时变量2
T1SEC_TIMER3 EQU [4EH] ; 1s 定时变量3
T_SEC EQU [4FH] ; 秒变量
T_SEC1 EQU [50H] ; 秒变量1
T_SEC2 EQU [51H] ; 秒变量2
T_SEC3 EQU [52H] ; 秒变量3
T_MIN EQU [53H] ; 分变量
T_MIN2 EQU [54H] ; 分变量2
STEP EQU [55H]
RESETB EQU [56H]
TN EQU [58H] ; 遥控脉宽计数变量(125us)
T_RESET EQU [59H] ; 两次有效遥控信号时间间隔
CODE0 EQU [5BH] ; 遥控码暂存变量
CODE1 EQU [5CH]
CODE2 EQU [5DH]
BITNUM EQU [5EH] ; 遥控码位数变量
RESETC EQU [5FH]
LEDN EQU [60H]
BUZ_NUM EQU [61H]
T_BUZ1 EQU [62H]
T_BUZ2 EQU [63H]
BUZ_COUNT EQU [64H]
RESETD EQU [65H]
FLAG1 EQU [66H]
FLAG2 EQU [67H]
FLAG3 EQU [68H]
T_ZERO1 EQU [69H] ; 过零信号高电平时间变量
T_ZERO2 EQU [6AH] ; 过零信号低电平时间变量
RESETE EQU [6BH]
KEY_DELAY1 EQU [6CH] ; 按键去抖时间变量
KEY_DELAY2 EQU [6DH] ; 按键释放时间变量
KEY_VALUE EQU [6EH]
KEY_VALUE0 EQU [6FH]
RESETF EQU [75H]
CODE3 EQU [76H]
CODE4 EQU [77H]
REMOTE_NUM EQU [78H]
T_REMOTE2 EQU [79H]
TESTA EQU [7AH]
TESTB EQU [7BH]
TESTC EQU [7CH]
ION EQU [7DH]
FAN_DELAY EQU [7EH]
;---------------------------------------------------
F_ONOFF EQU FLAG1.0 ; BIT FLAG
F_OUTPUT EQU FLAG1.2
F_LIGHT EQU FLAG1.4
F_ION EQU FLAG1.6
F_BUZ EQU FLAG2.0
F_REMOTE EQU FLAG2.2
F_ONKEY EQU FLAG2.4
F_T2MS EQU FLAG3.1
F_NOPOWER EQU FLAG3.2
F_RISE_YK EQU FLAG3.3
F_YK_FIRST EQU FLAG3.4
F_YK_SECOND EQU FLAG3.5
F_TEST EQU FLAG3.6
F_OUTPUT1 EQU FLAG3.7
;*****************************************
ORG 000H
JMP RESET
NOP
NOP
JMP RESET
ORG 004H
RETI
NOP
NOP
JMP RESET
;*********************************************
ORG 008H ; 定时中断程序(125us)
TIMER: MOV ACC_BUF, A ; 现场保护
MOV A, STATUS
MOV PFLAG_BUF, A
MOV A, 80H
MOV TMR, A
MOV A, 91H
MOV TMRC, A
;------------------- BUZZER ---------------------
SZ F_BUZ
JMP BUZZ
CLR BUZ
JMP END_BUZZ
BUZZ: INC BUZ_NUM
SNZ BUZ_NUM.0
CLR BUZ
SZ BUZ_NUM.0
SET BUZ
END_BUZZ:
;------------------- ZERO -----------------------
;SNZ ZERO
JMP NPLUSE
PPLUSE: CLR T_ZERO1 ; 正半周
JMP ENDPLUSE
NPLUSE: CLR T_ZERO2 ; 负半周
ENDPLUSE:
;---------------------------------------------------
;---------------------------------------------------
TIMER0: INC TN
INC T2MS_TIMER ; 2ms定时
MOV A, T2MS_TIMER
SUB A, 10H
SNZ C
JMP ENDTINT
CLR T2MS_TIMER
SET F_T2MS
ENDTINT:
MOV A, PFLAG_BUF ; 现场恢复
MOV STATUS, A
MOV A, ACC_BUF
RETI
;********************************************
RESET: CLR EMI
CLR PAC ; 端口设置及初始化
CLR PBC
CLR PCC
MOV A, 1FH
MOV PA, A
MOV A, 3EH
MOV PB, A
MOV A, 0FDH
MOV PC, A
MOV A, 0BH ; 开看门狗
MOV WDTS, A
MOV A, 80H
MOV TMR, A
MOV A, 91H
MOV TMRC, A
JMP RESETJUD
LOOP0: MOV A, 5H
MOV INTC, A
MOV A, 5AH
MOV RESETA, A
MOV RESETD, A
MOV A, 0A5H
MOV RESETB, A
MOV RESETE, A
MOV A, 69H
MOV RESETC, A
MOV RESETF, A
MOV A, 30
MOV FAN_DELAY, A
;******************************************************
MAIN_LOOP: CLR WDT1
SZ F_T2MS
CALL TIMER_2MS
;SNZ REMOTE
;JMP REMOTE_RECEIVE
MAIN_LOOP0: ;SZ F_REMOTE
;JMP SCANREMOTE
MAIN_LOOP1: MOV A, RESETA
XOR A, 5AH
SNZ Z
JMP RESET
MOV A, RESETD
XOR A, 5AH
SNZ Z
JMP RESET
MOV A, RESETB
XOR A, 0A5H
SNZ Z
JMP RESET
MOV A, RESETE
XOR A, 0A5H
SNZ Z
JMP RESET
MOV A, RESETC
XOR A, 69H
SNZ Z
JMP RESET
MOV A, RESETF
XOR A, 69H
SNZ Z
JMP RESET
SZ F_NOPOWER
JMP MAIN_LOOP2
SZ F_ONOFF
JMP WORK
MAIN_LOOP2: SET OUT_HIG
SET OUT_MID
SET OUT_LOW
SET OUT_SW
SET OUT_ION
SET HEAT_LOW
SET HEAT_HIG
MOV A, FAN_DELAY
SUB A, 10
SZ C
SET OUT_FAN
JMP MAIN_LOOP
NOP
NOP
NOP
NOP
NOP
JMP RESET
;****************************************************
WORK: MOV A, SPEED
SUB A, 1
SNZ C
JMP OFFN
MOV A, T_SEC3
SUB A, 3
SZ C
JMP WORK1
WORK0: SET OUT_HIG
SET OUT_LOW
CLR OUT_MID
JMP WORKING
WORK1:
NORMAL: MOV A, SPEED
ADDM A, PCL
JMP OFFN
JMP SPN1
JMP SPN2
JMP SPN3
OFFN: SET OUT_HIG ; 停止
SET OUT_MID
SET OUT_LOW
JMP WORKING
SPN1: SET OUT_HIG ; 低风
SET OUT_MID
SZ F_OUTPUT
CLR OUT_LOW
JMP WORKING
SPN2: SET OUT_HIG ; 中风
SET OUT_LOW
SZ F_OUTPUT
CLR OUT_MID
JMP WORKING
SPN3: SET OUT_MID ; 强风
SET OUT_LOW
SZ F_OUTPUT
CLR OUT_HIG
JMP WORKING
WORKING:
SNZ SWING.0
SET OUT_SW
SZ SWING.0
CLR OUT_SW
MOV A, HEAT
XOR A, 0
SNZ Z
JMP WORKING1
SET OUT_ION
SET HEAT_LOW
SET HEAT_HIG
MOV A, FAN_DELAY
SUB A, 10
SZ C
SET OUT_FAN
JMP MAIN_LOOP
WORKING1: SNZ ION.0
SET OUT_ION
SZ ION.0
CLR OUT_ION
MOV A, HEAT
ADDM A, PCL
JMP ENDWORK
JMP HEAT1
JMP HEAT2
JMP HEAT3
HEAT1: SET HEAT_LOW
SET HEAT_HIG
CLR OUT_FAN
JMP ENDWORK
HEAT2: SET HEAT_HIG
CLR OUT_FAN
CLR FAN_DELAY
SZ F_OUTPUT1
CLR HEAT_LOW
JMP ENDWORK
HEAT3: SET HEAT_LOW
CLR OUT_FAN
CLR FAN_DELAY
SZ F_OUTPUT1
CLR HEAT_HIG
JMP ENDWORK
ENDWORK: JMP MAIN_LOOP
NOP
NOP
NOP
NOP
NOP
JMP RESET
;****************************************************
;****************************************************
TIMER_2MS:
CLR F_T2MS
INC T4MS_TIMER
SNZ T4MS_TIMER.0
JMP DISPLAY
JMP TIMER_PRO
TIMER_4MS:
;-------------------ZERO PROCESS ----------------
ZERO_PRO: INC T_ZERO1
INC T_ZERO2
CLR F_NOPOWER
MOV A, T_ZERO1
SUB A, 12
SZ C
SET F_NOPOWER ; NO ZERO OVER 50ms SHUTOFF OUTPUT
MOV A, T_ZERO2
SUB A, 12
SZ C
SET F_NOPOWER ; NO ZERO OVER 50ms SHUTOFF OUTPUT
MOV A, T_ZERO1
SUB A, 80
SZ C
JMP OVER320MS
MOV A, T_ZERO2
SUB A, 80
SNZ C
JMP END_ZERO_PRO
OVER320MS: CLR F_ONOFF ; NO ZERO OVER 320ms RESET SYSTEM
CLR RESETA
CLR RESETB
CLR RESETC
CLR RESETD
CLR RESETE
CLR RESETF
END_ZERO_PRO:
;-------------------- TIMER -----------------------
TIMER_PRO: SNZ F_ONOFF
JMP NNE
TIMER_3SEC: INC T1SEC_TIMER3
MOV A, T1SEC_TIMER3
SUB A, 250
SNZ C
JMP T0
CLR T1SEC_TIMER3
MOV A, T_SEC3
SUB A, 10
SNZ C
INC T_SEC3
T0: INC T1SEC_TIMER
MOV A, T1SEC_TIMER
SUB A, 250
SNZ C
JMP T1
; 1秒定时
CLR T1SEC_TIMER
INC T_SEC
MOV A, T_SEC
SUB A, 60
SNZ C
JMP T1
; 分定时
CLR T_SEC
INC T_MIN
WTMJUD: MOV A, TIME
XOR A, 0H
SZ Z
JMP T1
MOV A, TIME
SUB A, 3
SZ C
JMP TIME4H
MOV A, T_MIN
SUB A, 60
SNZ C
JMP T1
CLR T_MIN
DEC TIME
MOV A, TIME
XOR A, 0H
SNZ Z
JMP T1
WTM_STOP: CLR F_ONOFF
CLR TIME
JMP T1
TIME4H: MOV A, T_MIN
SUB A, 120
SNZ C
JMP T1
CLR T_MIN
DEC TIME
JMP T1
T1: INC T1SEC_TIMER1
MOV A, T1SEC_TIMER1
SUB A, 12
SZ C
SET F_OUTPUT
MOV A, T1SEC_TIMER1
SUB A, 120
SZ C
SET F_OUTPUT1
MOV A, T1SEC_TIMER1
SUB A, 250
SNZ C
JMP NNE
CLR T1SEC_TIMER1
CLR F_OUTPUT
CLR F_OUTPUT1
INC T_SEC1
MOV A, T_SEC1
SUB A, 3
SNZ C
JMP T2
CLR T_SEC1
INC STEP
MOV A, STEP
SUB A, 30
SZ C
CLR STEP
T2:
INC T_SEC2
MOV A, T_SEC2
SUB A, 60
SNZ C
JMP NNE
CLR T_SEC2
;---------------------------------------------------
NNE: INC T1SEC_TIMER2
MOV A, T1SEC_TIMER2
SUB A, 250
SNZ C
JMP NNE1
CLR T1SEC_TIMER2
MOV A, FAN_DELAY
SUB A, 40
SNZ C
INC FAN_DELAY
NNE1:
CLR WDT2
MOV A, TESTA
SUB A, 200
SNZ C
INC TESTA
MOV A, T_RESET
SUB A, 200
SZ C
JMP BUZ_TIMER
INC T_RESET
MOV A, T_RESET
SUB A, 200
SNZ C
JMP BUZ_TIMER
MOV A, 30
MOV T_BUZ1, A
CLR BUZ_COUNT
CLR T_BUZ2
SET F_BUZ
BUZ_TIMER: MOV A, T_BUZ1
SUB A, 1
SNZ C
JMP BUZ_TIMER1
DEC T_BUZ1
JMP END_BUZ_TIMER
BUZ_TIMER1: CLR F_BUZ
INC T_BUZ2
MOV A, T_BUZ2
SUB A, 15
SNZ C
JMP END_BUZ_TIMER
CLR T_BUZ2
MOV A, BUZ_COUNT
SUB A, 1
SNZ C
JMP END_BUZ_TIMER
DEC BUZ_COUNT
MOV A, 30
MOV T_BUZ1, A
SET F_BUZ
END_BUZ_TIMER:
TEST_BUZ: SNZ F_TEST
JMP DISPLAY
INC TESTC
MOV A, TESTC
SUB A, 125
SNZ C
JMP DISPLAY
CLR TESTC
MOV A, 30
MOV T_BUZ1, A
SET F_BUZ
;-------------------- DISPLAY -------------------------------
DISPLAY: INC LEDN
MOV A, LEDN
SUB A, 6
SNZ C
JMP LED
CLR LEDN
;SNZ F_REMOTE
JMP KEY
LED: CLR PAC
CLR PBC
CLR PCC
SET LED_COM1
SET LED_COM2
SET LED_COM3
SET LED_COM4
CLR LED_SEG1
CLR LED_SEG2
CLR LED_SEG3
CLR LED_SEG4
CLR LED_SEG5
CLR LED_SEG6
;SET OUT_LIGHT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -