📄 subroutine.asm
字号:
L_DEAL_LOOP2: ;;binary to decimal
CALL DA999
XMOV R_LCD3, TO0
XMOV R_LCD2, TO1
XMOV R_LCD1, TO2 ;;(R_LCD3,R_LCD2,R_LCD1)=@@@
RET
SBR_CALT_LOOP:
SZ F_PSI ;;if Psi
JMP L_CALT_PSI
SZ F_BAR ;;if Bar
JMP L_CALT_BAR
SZ F_KPA ;;if Kpa
JMP L_CALT_KPA
SZ F_KGFCM2 ;;if Kgf/cm2
JMP L_CALT_KGFCM2
RET
L_CALT_PSI:
XMOV DATA4, LOW PSI_FULL
XMOV DATA5, HIGH PSI_FULL
CLR DATA6 ;;set the multiplier
RET
L_CALT_BAR:
XMOV DATA4, LOW BAR_FULL
XMOV DATA5, HIGH BAR_FULL
CLR DATA6 ;;set the multiplier
RET
L_CALT_KPA:
XMOV DATA4, LOW KPA_FULL_L16
XMOV DATA5, HIGH KPA_FULL_L16
XMOV DATA6, KPA_FULL_H16 ;;set the multiplier
RET
L_CALT_KGFCM2:
XMOV DATA4, LOW KGFCM2_FULL
XMOV DATA5, HIGH KGFCM2_FULL
CLR DATA6 ;;set the multiplier
RET
;;---------------------------------------------------------
SBR_KEY_SCAN: ;;detect key
;;---------------------------------------------------------
XMOV DEBOUNCE_COUNTER, R_20MS ;;detect key for 20mS
CLR F_KEY_TMP
SBR_KEY_SCAN_LOOP:
CLR TMR0C.4
XMOV TMR0, 208 ;;4mS
XMOV TMR0C, 0B0H
CLR WDT
SNZ INTC0.5
JMP $-2
CLR INTC0.5
CLR TMR0C.4
SNZ KEY_IO ;;check if key press or not
JMP $+3
CLR F_KEY ;;key no
JMP KEY_CHECK
SET F_KEY ;;key yes
KEY_CHECK:
CLR WDT ;;check if key change or not
SZ F_KEY
JMP $+4
SZ F_KEY_TMP
JMP KEY_CHANGE
JMP $+2
SZ F_KEY_TMP
JMP $+2
JMP KEY_CHANGE
DEC DEBOUNCE_COUNTER
SZ DEBOUNCE_COUNTER
JMP SBR_KEY_SCAN_LOOP
XMOV DEBOUNCE_COUNTER, R_20MS
JMP KEY_VERIFY1
KEY_CHANGE:
SZ F_KEY_TMP ;;save F_KEY to F_KEY_TMP
JMP $+3
SET F_KEY_TMP
JMP $+2
CLR F_KEY_TMP
XMOV DEBOUNCE_COUNTER, R_20MS
JMP SBR_KEY_SCAN_LOOP
KEY_VERIFY1: ;;save F_KEY to F_KEY_PREV
SZ F_KEY
JMP KEY_VERIFY2
SZ F_KEY_PREV
JMP $+3
SET F_REPEAT
JMP L_RET_LOOP
CLR F_REPEAT
CLR F_KEY_PREV
JMP L_RET_LOOP ;;ret
KEY_VERIFY2:
SZ F_KEY_PREV
JMP $+4
CLR F_REPEAT
SET F_KEY_PREV
JMP L_RET_LOOP
SET F_REPEAT
JMP L_RET_LOOP ;;ret
;;---------------------------------------------------------
SBR_KEY_JUMP: ;;deal with key
;;---------------------------------------------------------
CLR WDT
SZ F_KEY ;;if key yes or no
JMP L_KEY_CYCLE
L_KEY_NO: ;;key no
INC R_60S_L
SNZ Z
JMP $+2
INC R_60S_H
EJMP R_60S_L, 0B8H
RET
EJMP R_60S_H, 0BH ;;if timing for 60s or not
RET ;;if no,return
SET F_HALT ;;if yes, then set the flag of halt
RET
L_KEY_CYCLE: ;;key yes and changing the unit circularly
CLR R_60S_L
CLR R_60S_H
SZ F_REPEAT ;;if repeat key ,then return
RET
MOV A, R_UNIT ;;change the unit circularly
AND A, 00001111B
MOV R_TO0, A
XOR A, 00001000B
SNZ Z
JMP $+4
CLR ACC
SET ACC.0
JMP $+3
MOV A, R_TO0
RL ACC
SZ R_UNIT.4
SET ACC.4
SZ R_UNIT.5
SET ACC.5
SZ R_UNIT.6
SET ACC.6
MOV R_UNIT, A
RET
;;---------------------------------------------------------
SBR_DIS: ;;display the presure value(decimal )
;;---------------------------------------------------------
CLR WDT
XMOV TBLP, R_LCD1
XMOV BP, 01H
XMOV MP1, 40H
CALL SBR_DIS_LOOP ;;display R_LCD1
CLR R1.0
SNZ F_BAR
JMP $+2
SET R1.0 ;;display 'BAR'
CLR R1.2
SNZ F_LCD_DOT1
JMP $+2
SET R1.2 ;;display 'dot1'
XMOV TBLP, R_LCD2
INC MP1
CALL SBR_DIS_LOOP ;;display R_LCD2
CLR R1.0
SNZ F_KPA
JMP $+2
SET R1.0 ;;display 'KPA'
CLR R1.2
SNZ F_LCD_DOT2
JMP $+2
SET R1.2 ;;display 'dot2'
XMOV TBLP, R_LCD3
INC MP1
CALL SBR_DIS_LOOP ;;display R_LCD3
CLR R1.0
SNZ F_KGFCM2
JMP $+2
SET R1.0 ;;display 'KGFCM2'
CLR R1.2
SNZ F_PSI
JMP $+2
SET R1.2 ;;display 'PSI'
CLR BP
RET
;;-------------------------------------------------------
SBR_DIS_LOOP:
CLR WDT
TABRDL R_DIS ;;read the table value
XAND R_DIS, 07H
MOV R1, A ;;display 'D,E,F' segment
INC MP1
SWAPA R_DIS
AND A, 00000111B
MOV R1, A ;;display 'C,G,A' segment
INC MP1
SNZ R_DIS.3
JMP $+3
SET R1.1 ;;display 'B' segment
RET
CLR R1.1
RET
;;--------------------------------------------------------
DA999: ;;(DATA1,DATA0)H->(TO2,TO1,TO0)D
;;--------------------------------------------------------
CLR WDT
CLR TO0
CLR TO1
CLR TO2
DA_L2:
MOV A, DATA0
SUB A, 100
SZ C
JMP DA_L0
SZ DATA1
JMP DA_L1
DA_L4:
CLR WDT
MOV A, DATA0
SUB A, 10
SZ C
JMP DA_L3
MOV A, DATA0
MOV TO0, A
RET
DA_L3:
CLR WDT
MOV DATA0, A
INC TO1
JMP DA_L4
DA_L1:
DEC DATA1
DA_L0:
CLR WDT
MOV DATA0, A
INC TO2
JMP DA_L2
;=========================================================
;24 BIT DATA CALCULATION
;=========================================================
UNBIN_ADD_24 PROC
INIT
MOV A, DATA0 ;DATA0DATA1DATA2+DATA4DATA5DATA6---->TO0TO1TO2TO3
ADD A, DATA4
MOV TO0, A
MOV A, DATA1
ADC A, DATA5
MOV TO1, A
MOV A, DATA2
ADC A, DATA6
MOV TO2, A
MOV A, 00H
ADCM A, TO3
RET
UNBIN_ADD_24 ENDP
;24 BIT UNSIGNED SUB
UNBIN_SUB_24 PROC ;DATA0DATA1DATA2-DATA4DATA5DATA6---->TO0TO1TO2TO3
INIT
MOV A, DATA0
SUB A, DATA4
MOV TO0, A
MOV A, DATA1
SBC A, DATA5
MOV TO1, A
MOV A, DATA2
SBC A, DATA6
MOV TO2, A
MOV A, 00H
SBCM A, TO3
RET
UNBIN_SUB_24 ENDP
;24 BIT UNSIGNED MUL
UNBIN_MUL_24 PROC ;DATA0DATA1DATA2*DATA4DATA5DATA6---->TO0TO1TO2TO3TO4TO5
INIT
MOV A, 18H
MOV COUNT0, A
CLR [0AH].0
RRADD24:
CLR WDT
RRC TO5
RRC TO4
RRC TO3
RRC DATA6
RRC DATA5
RRC DATA4
SNZ [0AH].0
JMP RR124
MOV A, DATA0
ADDM A, TO3
MOV A, DATA1
ADCM A, TO4
MOV A, DATA2
ADCM A, TO5
RR124:
CLR WDT
SDZ COUNT0
JMP RRADD24
RRC TO5
RRC TO4
RRC TO3
RRC DATA6
RRC DATA5
RRC DATA4
MOV A, DATA4
MOV TO0, A
MOV A, DATA5
MOV TO1, A
MOV A, DATA6
MOV TO2, A
RET
UNBIN_MUL_24 ENDP
;24 BIT UNSIGNED DIV
UNBIN_DIV_24 PROC ;DATA0DATA1DATA2/DATA4DATA5DATA6---->DATA0DATA1DATA2(TO0TO1TO2)---TO4TO5TO6
INIT
MOV A,18H
MOV COUNT0, A
SZ DATA6
JMP START24
SZ DATA5
JMP START24
SZ DATA4
JMP START24
JMP OVER24
START24:
CLR WDT
SZ DATA2
JMP DIV24
SZ DATA1
JMP DIV24
SZ DATA0
JMP DIV24
JMP DISPA24
DIV24:
CLR WDT
CLR [0AH].0
RLC DATA0
RLC DATA1
RLC DATA2
RLC TO4
RLC TO5
RLC TO6
MOV A, TO4
SUB A, DATA4
MOV COM3, A
MOV A, TO5
SBC A, DATA5
MOV COM4, A
MOV A, TO6
SBC A, DATA6
SNZ [0AH].0
JMP NEXT24
MOV TO6, A
MOV A, COM3
MOV TO4, A
MOV A, COM4
MOV TO5, A
MOV A, 01H
ADDM A, DATA0
MOV A, 00H
ADCM A, DATA1
ADCM A, DATA2
NEXT24:
CLR WDT
SDZ COUNT0
JMP DIV24
DISPA24:
CLR WDT
MOV A, DATA0
MOV TO0, A
MOV A, DATA1
MOV TO1, A
MOV A, DATA2
MOV TO2, A
MOV A, 00H
MOV TO3, A
RET
OVER24:
RET
UNBIN_DIV_24 ENDP
;;---------------------------------------------------------
TABLE_CODE.SECTION AT 0700H 'CODE' ;;xcga bdef
DC 05FH, 048H, 03EH, 07CH, 069H ;;0~4;;0700H
DC 075H, 077H, 058H, 07FH, 07DH ;;5~9;;0709H
DC 020H, 000H, 000H, 000H, 000H ;;'-';;070EH
DC 000H ;; ;;070FH
;;********************* V-T table************************
DC 6526, 6155, 5838, 5520, 5203 ;0,5,10,15,20;;0~4mv
DC 4885, 4568, 4250, 3933, 3615 ;25,30,35,40,45;;5~9mv
DC 3298, 2980, 2662 ;50,55,60;;10~14mv
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -