📄 wind1.asm
字号:
CJNE A,#STOREMARK,FS3
MOV DPTR,#WINDSCALE1
CALL BYTRD_VERIFY
MOV R0,A
ANL A,#0F0H
JNZ FS2
MOV DISP6,#0FH
MOV DISP7,R0
JMP FS7
FS2: SWAP A
MOV DISP6,A
ANL AR0,#0FH
MOV DISP7,R0
JMP FS7
FS3: MOV DISP7,#5
JMP FS7
FS4: MOV DISP3,#2
MOV DPTR,#WINDSC_M2
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,FS6
MOV DPTR,#WINDSCALE2
CALL BYTRD_VERIFY
MOV R0,A
ANL A,#0F0H
JNZ FS5
MOV DISP6,#0FH
MOV DISP7,R0
JMP FS7
FS5: SWAP A
MOV DISP6,A
ANL LR0,#0FH
MOV DISP7,R0
JMP FS7
FS6: MOV DISP7,#6
FS7: JNB ENT,FSESC
CLR ENT_OFF
CLR FS
CLR ADJBUF_PS_OK
MOV A,FUNSEL_REG
CJNE A,#1,FS8
SETB F1_1
RET
FS8: SETB F1_2
RET
FSESC: JB ESC,FSE1
SETB ESC_OFF
RET
FSE1: JNB ESC_OFF,FSOUT
CLR ESC_OFF
CLR ADJBUF_PS_OK
CLR FS
SETB DESKTOP
MOV FUNSEL_REG,#1
FSOUT: RET
;*****************************************************************************************
P1SET: JB F1_1,P1S0
RET
P1S0: MOV DISP4,#0FH
MOV DISP5,#0FH
MOV DPTR,#WINDSC_M1
CALL BYTRD_VERIFY
CJNE A,#STOREMARK,P1S1
MOV DPTR,#WINDSCALE1
CALL BYTRD_VERIFY
MOV R2,A
JMP P1S2
P1S1: MOV R2,#5
P1S2: MOV R5,#2
MOV R6,#12H
CALL BCDADJ_16
JB SEQADJ_EN,P1S3
JB TWINBIT1,P1S3
MOV DISP6,#0FH
MOV DISP7,#0FH
JMP P1S5
P1S3: MOV A,ADJBUF
ANL A,#0F0H
JNZ P1S4
MOV DISP6,#0FH
MOV DISP7,ADJBUF
JMP P1S5
P1S4: MOV A,ADJBUF
ANL A,#0F0H
SWAP A
MOV DISP6,A
MOV A,ADJBUF
ANL A,#0FH
MOV DISP7,A
P1S5: JB ENT,P1S6
SETB ENT_OFF
JMP P1ESC
P1S6: JB ENT_OFF,P1S7
RET
P1S7: CLR ENT_OFF
MOV A,ADJBUF
ANL A,#0F0H
JNZ P1S8
MOV DISP6,#0FH
MOV DISP7,ADJBUF
JMP P1S9
P1S8: MOV A,ADJBUF
ANL A,#0F0H
SWAP A
MOV DISP6,A
MOV A,ADJBUF
ANL A,#0FH
MOV DISP7,A
P1S9: SETB BUZR
;MOV R2,#5
;CALL DELAYX1
MOV DPTR,#WINDSCALE1
MOV R5,ADJBUF
CALL BYTWR_VERIFY
MOV DPTR,#WINDSC_M1
MOV R5,#STOREMARK
CALL BYTWR_VERIFY
CLR BUZR
CLR F1_1
SETB FS
CLR ADJBUF_PS_OK
RET
P1ESC: JB ESC,P1E0
SETB ESC_OFF
RET
P1E0: JB ESC_OFF,P1E1
RET
P1E1: CLR ESC_OFF
CLR F1_1
CLR ADJBUF_PS_OK
SETB FS
RET
;*****************************************************************************************
P2SET: JB F1_2,P2S0
RET
P2S6: JB ENT_OFF,P2S7
RET
P2S7: CLR ENT_OFF
MOV A,ADJBUF
ANL A,#0F0H
JNZ P2S8
MOV DISP6,#0FH
MOV DISP7,ADJBUF
JMP P2S9
P2S8: MOV A,ADJBUF
ANL A,#0F0H
SWAP A
MOV DISP6,A
MOV A,ADJBUF
ANL A,#0FH
MOV DISP7,A
P2S9: SETB BUZR
;MOV R2,#5
;CALL DELAYX1
MOV DPTR,#WINDSCALE2
MOV R5,ADJBUF
CALL BYTWR_VERIFY
MOV DPTR,#WINDSC_M2
MOV R5,#STOREMARK
CALL BYTWR_VERIFY
CLR BUZR
CLR F1_2
SETB FS
CLR ADJBUF_PS_OK
RET
P2ESC: JB ESC,P2E0
SETB ESC_OFF
RET
P2E0: JB ESC_OFF,P2E1
RET
P2E1: CLR ESC_OFF
CLR F1_2
CLR ADJBUF_PS_OK
SETB FS
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;BASIC KEYBOARD PROGRAMS
;基本按键程序
;*****************************************************************************************
;------------------------------------------------------------------------------------------
KEYSCAN: JB FUN_X,KS1
;MOV R2,#10
;CALL DELAYX2
JB FUN_X,KS1
JB FUN,KS2
SETB FUN
CALL KEYSOUND1
JMP KS2
KS1: CLR FUN
KS2: JB LEFTKEY_X,KS21
;MOV R2,#10
;CALL DELAYX2
JB LEFTKEY_X,KS21
JB LEFTKEY,KS3
SETB LEFTKEY
CALL KEYSOUND1
JMP KS3
KS21: CLR LEFTKEY
KS3: JB ENTKEY_X,KS31
;MOV R2,#10
;CALL DELAYX2
JB ENTKEY_X,KS31
JB ENT,KS4
SETB ENT
CALL KEYSOUND1
JMP KS4
KS31: CLR ENT
KS4: JB RIGHTKEY_X,KS41
;MOV R2,#10
;CALL DELAYX2
JB RIGHTKEY_X,KS41
JB RIGHTKEY,KS5
SETB RIGHTKEY
CALL KEYSOUND1
JMP KS5
KS41: CLR RIGHTKEY
KS5: JB ESC_X,KS52
;MOV R2,#10
;CALL DELAYX2
JB ESC_X,KS52
JB ESC,KS51
SETB ESC
CALL KEYSOUND1
KS51: RET
KS52: CLR ESC
RET
;-----------------------------------------------------------------------------------------
KEYSOUND1: JNB ALM,KEYSND
RET
KEYSND: SETB BUZR
;MOV R2,#KSL
;CALL DELAYX2
CLR BUZR
RET
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;*****************************************************************************************
;*
;*NAME: RRC4
;*FUNCTION: 4
;*DESCRIPTION:;*INPUT: R4R5R6R7
;*OUTPUT: R4R5R6R7,C
;*REGISTER USAGE: A,C,R4,R5,R6,R7
;-----------------------------------------------------------------------------------------
RRC4: CLR C
MOV A,R4
RRC A
MOV R4,A
MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
RET
;*****************************************************************************************
;*延时子程序1
;*NAME: DELAYX1
;*FUNCTION: (0.1 X R2 )
;*DESCRIPTION: 12M
;*INPUT: R2
;*OUTPUT: NONE
;*REGISTER USAGE: R2,R3,R4
;-----------------------------------------------------------------------------------------
;*****************************************************************************************
;*延时子程序2
;*NAME: DELAYX2
;*FUNCTION: (0.001 X R2 )
;*DESCRIPTION: 12M
;*INPUT: R2
;*OUTPUT: NONE
;*REGISTER USAGE: R2,R3
;-----------------------------------------------------------------------------------------
;*****************************************************************************************
;*双字节无符号数除法
;*NAME: DIV16_16
;*FUNCTION: 16/16
;*DESCRIPTION:;*INPUT: R4R5/R6R7
;*OUTPUT: R4R5,R2R3)
;*REGISTER USAGE: A,B,C,R2,R3,R4,R5,R6,R7
;-----------------------------------------------------------------------------------------
DIV16_16: MOV R2,#0
MOV R3,#0
MOV R1,#10H
DIV11: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
SUBB A,R7
MOV B,A
MOV A,R2
SUBB A,R6
JC NEXT
INC R5
MOV R2,A
MOV R3,B
NEXT: DJNZ R1,DIV11
RET
;*****************************************************************************************
;*
;*NAME: ROUND
;*FUNCTION:;*DESCRIPTION:;*INPUT: R6R7,R2R3,R4R5
;*OUTPUT: R4R5
;*REGISTER USAGE: A,C,R2,R3,R4,R5,R6,R7
;-----------------------------------------------------------------------------------------
ROUND: CLR C
MOV A,R7
RRC A
MOV R7,A
CLR C
MOV A,R6
RRC A
MOV R6,A
CLR C
MOV A,R7
SUBB A,R3
MOV A,R6
SUBB A,R2
JNC RND1
MOV A,R5
ADD A,#1
MOV R5,A
MOV A,R4
ADDC A,#0
MOV R4,A
RND1: RET
;双字节无符号数乘法
;*****************************************************************************************
;*R4R5*R6R7=R4R5R6R7
;*NAME: MUL16_16
;*FUNCTION: 16*16
;*DESCRIPTION:;*INPUT: R4R5,R6R7
;*OUTPUT: R4R5R6R7
;*REGISTER USAGE: A,B,C,R2,R3,R4,R5,R6,R7,F0
;-----------------------------------------------------------------------------------------
MUL16_16: MOV A,R5
MOV B,R7
MUL AB
XCH A,R7
MOV R3,B
MOV B,R4
MUL AB
ADD A,R3
MOV R2,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R6
MOV B,R5
MUL AB
ADD A,R2
XCH A,R6
XCH A,B
ADDC A,R3
MOV R3,A
MOV F0,C
MOV A,R4
MUL AB
ADD A,R3
MOV R5,A
CLR A
MOV ACC.0,C
MOV C,F0
ADDC A,B
MOV R4,A
RET
;*****************************************************************************************
;*二进制转换为BCD码
;*NAME: BINBCD
;*FUNCTION:;*DESCRIPTION:;*INPUT: R3,R4,R5
;*OUTPUT: R4
;*REGISTER USAGE: A,B,C,R0,R1,R2,R3,R4,R5,R6,R7
;-----------------------------------------------------------------------------------------
BINBCD: MOV A,R5
DEC A
ADD A,R3
MOV R6,A
MOV A,R5
ADD A,R4
MOV R7,A
MOV R0,LR4
MOV R1,LR5
INC R1
CLR A
BB1: MOV @R0,A
INC R0
DJNZ R1,BB1
MOV A,LR5
MOV B,#08H
MUL AB
MOV R2,A
BB2: MOV R0,LR6
MOV R1,LR5
CLR C
BB3: MOV A,@R0
RLC A
MOV @R0,A
DEC R0
DJNZ R1,BB3
MOV R1,LR5
INC R1
MOV A,R7
MOV R0,A
BB4: MOV A,@R0
ADDC A,@R0
DA A
MOV @R0,A
DEC R0
DJNZ R1,BB4
DJNZ R2,BB2
RET
;*****************************************************************************************
;*
;*NAME: INT5045
;*FUNCTION: INITIALIZE THE STATUS REGISTER OF X5045
;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: NONE
;*REGISTER USAGE: A,C,R2,R3,R5
;-----------------------------------------------------------------------------------------
INT5045: MOV R5,#X5045INT_VALUE
CALL WRSR_CMD
RET
;*****************************************************************************************
;*
;*NAME: WRSR_CMD
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: R5
;*OUTPUT: NONE
;*REGISTER USAGE: A,C,R2,R3,R5
;-----------------------------------------------------------------------------------------
WRSR_CMD: CLR EA
CALL WREN_CMD
CLR CS5045 ;BRING /CS5045 LOW
MOV A,#WRSR_INST
CALL OUTBYT ;SEND WRSR INSTRUCTION
MOV A,R5
CALL OUTBYT ;SEND STATUS REGISTER
SETB CS5045
CALL WIP_POLL ;POLL FOR COMPLETION OF WRITE CYCLE
SETB EA
RET
;*****************************************************************************************
;*
;*NAME: RDSR_CMD
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: A
;*REGISTER USAGE: A,C,R2
;-----------------------------------------------------------------------------------------
RDSR_CMD: CLR CS5045 ;BRING /CS5045 LOW
MOV A,#RDSR_INST
CALL OUTBYT ;SEND RDSR INSTRUCTION
CALL INBYT ;READ STATUS REGISTER
SETB CS5045 ;BRING /CS5045 HIGH
RET
;*****************************************************************************************
;字节写
;-----------------------------------------------------------------------------------------
BYTE_WRITE: CALL WREN_CMD
CLR CS5045 ;BRING /CS5045 LOW
MOV A,#WRITE_INST
MOV B,DPH
MOV C,B.0
MOV ACC.3,C
CALL OUTBYT ;SEND WRITE INSTRUCTION INCLUDING MSB OF ADDRESS
MOV A,DPL
CALL OUTBYT ;SEND 8 LSBS OF ADDRESS
MOV A,R5
CALL OUTBYT ;SEND DATA BYTE
SETB CS5045
CALL WIP_POLL ;POLL FOR COMPLETION OF WRITE CYCLE
RET
;*****************************************************************************************
;-----------------------------------------------------------------------------------------
BYTWR_VERIFY: CLR EA
MOV R4,#10 ;SET THE VERIFY TIMES COUNTER TO TEN
BYTE_REWR: CALL BYTE_WRITE
CALL BYTE_READ ;VERIFY THE CORRECTNESS OF THE WRITE OPERATION
CJNE A,LR5,WRBYT_POLL
RET
WRBYT_POLL: DJNZ R4,BYTE_REWR
SETB EA
RET
;*****************************************************************************************
;*
;*NAME: BYTE_READ
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: DPTR
;*OUTPUT: A
;*REGISTER USAGE: A,B,C,DPTR,R2
;-----------------------------------------------------------------------------------------
BYTE_READ: CLR CS5045 ;BRING /CS5045 LOW
MOV A,#READ_INST
MOV B,DPH
MOV C,B.0
MOV ACC.3,C
CALL OUTBYT ;SEND READ INSTRUCTION INCLUDING MSB OF ADDRESS
MOV A,DPL
CALL OUTBYT ;SEND 8 LSBS OF ADDRESS
CALL INBYT ;READ DATA BYTE
SETB CS5045 ;BING /CS5045 HIGH
RET
;*****************************************************************************************
;*
;*NAME: BYTRD_VERIFY
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: DPTR
;*OUTPUT: A
;*REGISTER USAGE: A,B,C,DPTR,R2,R3,R4
;-----------------------------------------------------------------------------------------
BYTRD_VERIFY: CLR EA
MOV R3,#10
BYTE_RERD: CALL BYTE_READ
MOV R4,A
CALL BYTE_READ
CJNE A,LR4,RDBYT_POLL
RET
RDBYT_POLL: DJNZ R3,BYTE_RERD
SETB EA
RET
;*****************************************************************************************
;*
;*NAME: WREN_CMD
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: NONE
;*REGISTER USAGE: A,C,R2
;-----------------------------------------------------------------------------------------
WREN_CMD: CLR CS5045 ;BRING /CS5045 LOW
MOV A,#WREN_INST
CALL OUTBYT ;SEND WREN INSTRUCTION
SETB CS5045 ;BRING /CS5045 HIGH
RET
;*****************************************************************************************
;*
;*NAME: OUTBYT
;*FUNCTION:;*DESCRIPTION:;*INPUT: A
;*OUTPUT: NONE
;*REGISTER USAGE: A,C,R2
;-----------------------------------------------------------------------------------------
OUTBYT: MOV R2,#08 ;SET BIT COUNTER TO EIGHT
OB1: CLR SCK ;BRING SCK LOW
RLC A ;SHIFT BYTE LEFT THROUGH CARRY
MOV SI,C ;SEND DATA BIT IN CARRY
SETB SCK ;BRING SCK HIGH
DJNZ R2,OB1 ;FINISH IF LAST DATA BIT
RET
;*****************************************************************************************
;*
;*NAME: INBYT
;*FUNCTION:;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: A
;*REGISTER USAGE: A,C,R2
;-----------------------------------------------------------------------------------------
INBYT: MOV R2,#08 ;SET BIT COUNTER TO EIGHT
IB1: SETB SCK ;BRING SCK HIGH
CLR SCK ;BRING SCK LOW
MOV C,SO ;RECEIVE DATA BIT AND STORE IN CARRY
RLC A ;SHIFT BYTE LEFT THROUGH CARRY
DJNZ R2,IB1 ;FINISH IF LAST DATA BIT
RET
;*****************************************************************************************
;*
;*NAME: WIP_POLL
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: NONE
;*REGISTER USAGE: A,C,R2,R3
;-----------------------------------------------------------------------------------------
WIP_POLL: MOV R3,#MAX_POLL ;SET MAXIMUM NUMBER OF POLLS
WIP_POLL1: CALL RDSR_CMD ;READ STATUS REGISTER
JNB ACC.0,WIP_POLL2 ;IF WIP BIT '0' WRITE CYCLE COMPLETED
DJNZ R3,WIP_POLL1 ;IF WIP BIT '1' CONTINUE POLLING
WIP_POLL2: RET
;*****************************************************************************************
;*
;*NAME: RST_WDOG
;*FUNCTION: X25045
;*DESCRIPTION:;*INPUT: NONE
;*OUTPUT: NONE
;*REGISTER USAGE: NONE
;-----------------------------------------------------------------------------------------
RST_WDOG: CLR EA
CLR CS5045 ;BRING /CS5045 LOW TO RESET WATCHDOG TIMER
SETB CS5045 ;BRING /CS5045 HIGH
SETB EA
RET
;*****************************************************************************************
;=========================================================================================
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;=========================================================================================
FILLBLANK
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -