📄 wind1.asm
字号:
;USING 0
;*****************************************************************************************
LIGHTNESS EQU 5
;*****************************************************************************************
;PUBLIC PARAMETER DEFINING
CONSTANT1 EQU 360 ;常数1
CONSTANT2 EQU 120 ;常数2
STACKTOP EQU 55H ;堆栈
SCANTIME EQU 10000
TWINKLEINTVL1 EQU 30 ;闪烁量
TWINBIT2ON EQU 30
TWINBIT2OFF EQU 45
TWINBIT3ON EQU 24
TWINBIT3OFF EQU 7
TF2 BIT 0CFH
TR2 BIT 0CAH
ET2 BIT 0ADH
OL BIT P0.2
BUZR BIT P0.3
ALM BIT 20H.0
ALM1 BIT 20H.1
ALM2 BIT 20H.2
ALMSODEN BIT 23H.1
LED1 BIT P0.7
LED2 BIT P1.6
LED3 BIT P2.2
LED4 BIT P2.1
FIRST_H DATA 3CH
FIRST_L DATA 3DH
SECOND_H DATA 3EH
SECOND_L DATA 3FH
RDT1_H DATA 42H
RDT1_L DATA 43H
T2CNT DATA 44H
TEMP1 DATA 39H
TEMP2 DATA 3AH
TEMP3 DATA 3BH
BCDBUF1 DATA 35H
BCDBUF2 DATA 36H
BCDBUF3 DATA 37H
BCDBUF4 DATA 38H
PF_H DATA 0FH
PF_L DATA 10H
WS_H_BCD DATA 32H
WS_L_BCD DATA 33H
WINDSCALE_BCD DATA 34H
;*****************************************************************************************
;KEYBOARD PARAMETER DEFINING
KSL EQU 60 ;KEY'S SOUND LENGTH SETTING
SHIFTDLY EQU 40
SEQADJSPEED EQU 150
KMT1 EQU 100
KMT2 EQU 45
;按键分配
FUN_X BIT P2.7 ;FUN
LEFTKEY_X BIT P2.4 ;LEFTKEY
ENTKEY_X BIT P2.5 ;ENT
RIGHTKEY_X BIT P2.6 ;RIGHTKEY
ESC_X BIT P2.3 ;ESC
;按键标志位
FUN BIT 21H.2 ;运行
ESC BIT 21H.3 ;退出
ENT BIT 21H.4 ;进入
LEFTKEY BIT 21H.5 ;增加键
RIGHTKEY BIT 21H.6 ;减小键
;按键关标志位
RIGHTKEY_OFF BIT 21H.7 ;增加键关
LEFTKEY_OFF BIT 22H.0 ;减小键关
ENT_OFF BIT 22H.1 ;进入键关
ESC_OFF BIT 22H.2 ;退出键关
DESKTOP BIT 23H.2
FS BIT 23H.3
F1_1 BIT 22H.4
F1_2 BIT 22H.5
SEQADJ_EN BIT 22H.6
SEQADJ_SW BIT 22H.7
ADJBUF_PS_OK BIT 23H.0
KMTCNT1 DATA 12H
KMTCNT2 DATA 13H
FUNSEL_REG DATA 14H
ADJBUF DATA 15H
SHIFTDLYCNT DATA 16H
;*****************************************************************************************
;X5045 PARAMETER DEFINING
CS5045 BIT P1.5
SCK BIT P1.4
SO BIT P1.3
SI BIT P1.2
WREN_INST EQU 06H ;WRITE ENABLE LATCH INSTRUCTION (WREN)
WRDI_INST EQU 04H ;WRITE DISABLE LATCH INSTRUCTION (WRDI)
WRSR_INST EQU 01H ;WRITE STATUS REGISTER INSTRUCTION (WRSR)
RDSR_INST EQU 05H ;READ STATUS REGISTER INSTRUCTION (RDSR)
WRITE_INST EQU 02H ;WRITE MEMORY INSTRUCTION (WRITE)
READ_INST EQU 03H ;READ MEMORY INSTRUCTION (READ)
MAX_POLL EQU 99H ;MAXIMUM NUMBER OF POLLS
INIT_STATE EQU 09H ;INITIALIZATION VALUE FOR CONTROL PORTS
X5045INT_VALUE EQU 20H
;*****************************************************************************************
;MAX7219 PARAMETER DEFINING
CYCSET7219: ;MACRO ADDR,DAT
MOV A,#ADDR
CALL OUTBYT
MOV A,DAT
CALL OUTBYT
CLR LOAD
SETB LOAD
RET
LOAD BIT P2.0
DIG0 EQU 1
DIG1 EQU 2
DIG2 EQU 3
DIG3 EQU 4
DIG4 EQU 5
DIG5 EQU 6
DIG6 EQU 7
DIG7 EQU 8
DECMOD EQU 9
INTENSITY EQU 0AH
SCANLIMIT EQU 0BH
SHUTDOWN EQU 0CH
DISPTEST EQU 0FH
DISP0 DATA 18H ;MAX7219 DISPLAY REGISTER DEFINING
DISP1 DATA 19H
DISP2 DATA 1AH
DISP3 DATA 1BH
DISP4 DATA 1CH
DISP5 DATA 1DH
DISP6 DATA 1EH
DISP7 DATA 1FH
LR7 EQU 40H
LR5 EQU 41H
LR4 EQU 42H
LR3 EQU 43H
LR2 EQU 44H
LR6 EQU 45H
;*****************************************************************************************
;X5045 STORE ADDRESS DEFINING
STOREMARK EQU 74H
WINDSCALE1 EQU 10
WINDSCALE2 EQU 11
WINDSC_M1 EQU 12
WINDSC_M2 EQU 13
;*****************************************************************************************
;PUSH RUNNING DATA TO THE STACK AND BACKING OUT
PROTECT MACRO
CLR EA
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
SETB EA
ENDM
RESUME MACRO
CLR EA
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
SETB EA
ENDM
;*****************************************************************************************
RESTR MACRO
NOP
NOP
JMP START
ENDM
FILLBLANK MACRO
RESTR
RESTR
RESTR
RESTR
RESTR
RESTR
RESTR
RESTR
RESTR
RESTR
ENDM
;*****************************************************************************************
;*****************************************************************************************
;START AND INITIALIZE
ORG 0000
JMP START
ORG 0003H
RESTR
ORG 000BH
JMP T0_INT
ORG 0013H
RESTR
ORG 001BH
RESTR
ORG 0023H
RESTR
ORG 002BH
ORG 050
START: MOV SP,#STACKTOP
CLR PSW.3
CLR PSW.4
MOV DISP0,#88H
MOV DISP1,#88H
MOV DISP2,#88H
MOV DISP3,#88H
MOV DISP4,#88H
MOV DISP5,#88H
MOV DISP6,#88H
MOV DISP7,#88H
CLR LED1
SETB LED2
CLR LED3
CLR LED4
CLR ALM
CLR ALM1
CLR ALM2
CLR ALMSODEN
CLR BUZR
CLR OL
SETB SEQADJ_SW
CLR ADJBUF_PS_OK
SETB DESKTOP
CLR FS
CLR F1_1
CLR F1_2
MOV TWINBIT1CNT,#TWINKLEINTVL1
MOV TWINBIT2CNT1,#TWINBIT2ON ;20开
MOV TWINBIT2CNT2,#TWINBIT2OFF ;20关
MOV TWINBIT3CNT1,#TWINBIT3ON ;3开
MOV TWINBIT3CNT2,#TWINBIT3OFF ;关
MOV KMTCNT1,#KMT1
MOV KMTCNT2,#KMT2
MOV SHIFTDLYCNT,#SHIFTDLY
MOV T2CNT,#20
MOV FIRST_H,#0
MOV FIRST_L,#0
MOV SECOND_H,#0
MOV SECOND_L,#0
MOV RDT1_H,#0
MOV RDT1_L,#0
MOV WS_H_BCD,#0
MOV WS_L_BCD,#0
MOV WINDSCALE_BCD,#1
CALL INT7219
CALL INT5045
CALL DISPSERV
CALL LED2CTRL
SETB LED1
SETB LED4
ORL P1,#10111111B ;数码管设置
ORL P2,#11111001B ;按键设置
MOV TH2,#HIGH(-50000)
MOV TL2,#LOW(-50000)
MOV RCAP2H,#HIGH(-50000)
MOV RCAP2L,#LOW(-50000)
MOV TMOD,#51H ;定时器1和2都打开
MOV TH1,#0
MOV TL1,#0
MOV TH0,#HIGH(-SCANTIME) ;DEFINE INTERVAL OF INTERRUPTION
MOV TL0,#LOW(-SCANTIME) ;定时1S
SETB TR0 ;打开定时器0
SETB TR1 ;打开定时器1
SETB TR2 ;打开定时器2
SETB ET0 ;打开中断0
SETB ET2 ;打开中断2
SETB EA ;打开总中断
;MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
;主程序
MAIN: CALL CYCSET7219 ;调7219驱动程序
CALL KEYCTRL ;调按键检测程序
CALL RST_WDOG ;调看门狗
CALL DISPWIND ;调显示风速
CALL ALARM ;调报警控制程序
CALL COMPUTEPF
JMP MAIN
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
;中断定时0
T0_INT: ;PROTECT
CLR EA
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
SETB EA
CALL KEYMONITOR
CALL SEQADJ
CALL DISPSERV
CALL TWINK1
CALL TWINK2
CALL TWINK3
MOV TH0,#HIGH(-SCANTIME) ;DEFINE INTERVAL OF T0 INTERRUPTION
MOV TL0,#LOW(-SCANTIME)
CLR EA
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
SETB EA
;RESUME
RETI
;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
;中断定时2
T2_INT: PUSH ACC
PUSH PSW
DJNZ T2CNT,T2I1
T2I0: MOV A,TH1
MOV RDT1_L,TL1
CJNE A,TH0,T2I0
MOV RDT1_H,A
MOV TH1,#0
MOV TL1,#0
MOV T2CNT,#20
SETB COMPUTEPF_M
T2I1: CLR TF2
POP PSW
POP ACC
RETI
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;=========================================================================================
;FUNCTION SUBROUTINES AREA
;风速和风级转换
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;INPUT: COMPUTEPF_M,RDT1_H,RDT1_L
;OUTPUT: WS_H_BCD,WS_L_BCD,WINDSCALE_BCD
COMPUTEPF: JB COMPUTEPF_M,LCP0
RET
LCP0: CLR COMPUTEPF_M
MOV SECOND_H,FIRST_H
MOV SECOND_L,FIRST_L
MOV FIRST_H,RDT1_H
MOV FIRST_L,RDT1_L
MOV A,FIRST_L
ADD A,SECOND_L
MOV R1,A
MOV A,FIRST_H
ADDC A,SECOND_H
MOV R0,A
MOV R4,AR0
MOV R5,AR1
MOV R6,#0
MOV R7,#2 ;除以2
CALL DIV16_16
CALL ROUND
CONVERT: CJNE R4,#0,CONVER0
CJNE R5,#0,CONVER0
MOV R6,#0
MOV R7,#0
JMP CONVER1
CONVER0: MOV R6,#0
MOV R7,#CONSTANT2 ;R7=120
CALL MUL16_16 ;乘以120
MOV A,#LOW(CONSTANT1) ;LOW=360
ADD A,R7
MOV R7,A
MOV A,R6
ADDC A,#HIGH(CONSTANT1) ;HIGH=360
MOV R6,A
MOV A,R5
ADDC A,#0
MOV R5,A
MOV TEMP1,R5
MOV TEMP2,R6
MOV TEMP3,R7
MOV R3,#TEMP1
MOV R4,#BCDBUF1
MOV R5,#3
CALL BINBCD ;R5R6R7三字节16位二进制转换位BCD码
MOV R4,BCDBUF1
MOV R5,BCDBUF2
MOV R6,BCDBUF3
MOV R7,BCDBUF4
CALL RRC4
CALL RRC4
CALL RRC4
CALL RRC4 ;
CONVER1: MOV WS_H_BCD,R6
MOV WS_L_BCD,R7
MOV A,WS_H_BCD
SUBB A,#2 ;减二
JNC CONVER2 ;不为零转到 CONVER2
MOV WINDSCALE_BCD,#1H ;1级风
RET
CONVER2: MOV A,WS_H_BCD
SUBB A,#3H ;不为零转到 CONVER3
JNC CONVER3
MOV WINDSCALE_BCD,#2H ;2级风
RET
CONVER3: MOV A,WS_H_BCD
SUBB A,#5H ;不为零转到 CONVER4
JNC CONVER4
MOV WINDSCALE_BCD,#3H ;3级风
RET
CONVER4: MOV A,WS_H_BCD
SUBB A,#7H ;不为零转到 CONVER5
JNC CONVER5
MOV WINDSCALE_BCD,#4H ;4级风
RET
CONVER5: MOV A,WS_H_BCD
SUBB A,#9H ;不为零转到 CONVER6
JNC CONVER6
MOV WINDSCALE_BCD,#5H ;5级风
RET
CONVER6: MOV A,WS_H_BCD
SUBB A,#11H ;不为零转到 CONVER7
JNC CONVER7
MOV WINDSCALE_BCD,#6H ;6级风
RET
CONVER7: MOV A,WS_H_BCD
SUBB A,#14H ;不为零转到 CONVER8
JNC CONVER8
MOV WINDSCALE_BCD,#7H ;7级风
RET
CONVER8: MOV A,WS_H_BCD
SUBB A,#17H ;不为零转到 CONVER9
JNC CONVER9
MOV WINDSCALE_BCD,#8H ;8级风
RET
CONVER9: MOV A,WS_H_BCD
SUBB A,#21H ;不为零转到 CONVER10
JNC CONVER10
MOV WINDSCALE_BCD,#9H ;9级风
RET
CONVER10: MOV A,WS_H_BCD
SUBB A,#28H ;不为零转到 CONVER11
JNC CONVER11
MOV WINDSCALE_BCD,#10H ;10级风
RET
CONVER11: MOV A,WS_H_BCD
SUBB A,#34H ;不为零转到 CONVER12
JNC CONVER12
MOV WINDSCALE_BCD,#11H ;11级风
RET
CONVER12: MOV WINDSCALE_BCD,#12H ;12级风
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ALARM: MOV DPTR,#WINDSC_M1
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,AM0
MOV DPTR,#WINDSCALE1
CALL BYTRD_VERIFY
MOV TEMP1,A
JMP AM1
AM0: MOV TEMP1,#5
AM1: MOV DPTR,#WINDSC_M2
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,AM2
MOV DPTR,#WINDSCALE2
CALL BYTRD_VERIFY
MOV TEMP2,A
JMP AM3
AM2: MOV TEMP2,#6
AM3: MOV A,WINDSCALE_BCD
SUBB A,TEMP1
JNC AM4
CLR ALM
CLR ALM1
CLR ALM2
CLR OL
JMP ALMSLCTRL
AM4: SETB ALM
SETB ALM1
MOV A,WINDSCALE_BCD
SUBB A,TEMP2
JNC AM5
CLR ALM2
CLR OL
JMP ALMSLCTRL
AM5: SETB ALM2
SETB OL
JMP ALMSLCTRL
;风级控制报警
ALMSLCTRL: JB ALM,ASC1
CLR LED3
SETB LED4
JNB ALMSODEN,ASC0
LED2CTRL: SETB LED2
MOV R2,#20
CALL DELAYX1
CLR LED2
RET
;显示风速
DISPWIND: JB DESKTOP,DW0
RET
DW0: MOV A,WS_H_BCD
ANL A,#0F0H
SWAP A
MOV DISP0,A
MOV A,WS_H_BCD
ANL A,#0FH
ORL A,#80H
MOV DISP1,A
MOV A,WS_L_BCD
ANL A,#0F0H
SWAP A
MOV DISP2,A
MOV A,WS_L_BCD
ANL A,#0FH
MOV DISP3,A
MOV DISP4,#0FH
MOV DISP5,#0FH
MOV A,WINDSCALE_BCD
ANL A,#0FH
MOV DISP7,A
MOV A,WINDSCALE_BCD
ANL A,#0F0H
JNZ DW1
MOV DISP6,#0FH
RET
DW1: SWAP A
MOV DISP6,A
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;TWINKLE BIT
;闪烁位
TWINK1: DJNZ TWINBIT1CNT,TWK1OUT
MOV TWINBIT1CNT,#TWINKLEINTVL1
CPL TWINBIT1
TWK1OUT: RET
TWINK2: MOV A,TWINBIT2CNT1
JZ TWK2_0
SETB TWINBIT2
DJNZ TWINBIT2CNT1,TWK2OUT
MOV TWINBIT2CNT2,#TWINBIT2OFF
TWK2_0: CLR TWINBIT2
DJNZ TWINBIT2CNT2,TWK2OUT
MOV TWINBIT2CNT1,#TWINBIT2ON
TWK2OUT: RET
TWINK3: MOV A,TWINBIT3CNT1
JZ TWK3_0
SETB TWINBIT3
DJNZ TWINBIT3CNT1,TWK3OUT
MOV TWINBIT3CNT2,#TWINBIT3OFF
TWK3_0: CLR TWINBIT3
DJNZ TWINBIT3CNT2,TWK3OUT
MOV TWINBIT3CNT1,#TWINBIT3ON
TWK3OUT: RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;按键控制
KEYCTRL: CALL KEYSCAN
CALL TOPDISP
CALL FUNSEL
CALL P1SET
CALL P2SET
RET
TOPDISP: JB DESKTOP,TOP1
RET
TOP1: CLR FS
CLR F1_1
CLR F1_2
CLR ADJBUF_PS_OK
MOV FUNSEL_REG,#1
JNB FUN,TOP2
SETB FS
CLR DESKTOP
TOP2: RET
FUNSEL: JB FS,FS1
RET
FS1: MOV DISP0,#0FH
MOV DISP1,#0FH
MOV DISP2,#0EH
MOV R2,FUNSEL_REG
MOV R5,#1
MOV R6,#2
CLR SEQADJ_SW
CALL BCDADJ_16
SETB SEQADJ_SW
MOV A,ADJBUF
MOV FUNSEL_REG,A
CJNE A,#1,FS4
MOV DISP3,#1
MOV DPTR,#WINDSC_M1
CALL BYTRD_VERIFY
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -