📄 scale.asm
字号:
SNZ C
JMP L_MainNormCalcRangNega
MOV A, R_PubReg_0 ;<40?
SUB A, R_Mark1_0
MOV R_PubReg_0, A
MOV A, R_PubReg_1
SBC A, R_Mark1_1
MOV R_PubReg_1, A
SNZ C
JMP L_MainNormCalcRang00_40
MOV A, R_PubReg_0 ;40-80?
SUB A, R_Mark2_0
MOV R_PubReg_0, A
MOV A, R_PubReg_1
SBC A, R_Mark2_1
MOV R_PubReg_1, A
SNZ C
JMP L_MainNormCalcRang40_80
JMP L_MainNormCalcRangMore80
L_MainNormCalcRangNega: ;X<0克
CLR R_ShowPosi_F ;显示重量为正标志位
MOV A, 00H
SUBM A, R_PubReg_0
SBCM A, R_PubReg_1
MOV A, R_PubReg_0
MOV R_FCalcIn_0, A
MOV A, R_PubReg_1
MOV R_FCalcIn_1, A
MOV A, R_Mark1_0
MOV R_FCalcDiv_0, A
MOV A, R_Mark1_1
MOV R_FCalcDiv_1, A
CALL B_Calc ;得到结果为D值的4倍
JMP L_MainNormCalcRound
L_MainNormCalcRang00_40: ;0<X<40KG
MOV A, R_PubReg_0
ADD A, R_Mark1_0
MOV R_FCalcIn_0, A
MOV A, R_PubReg_1
ADC A, R_Mark1_1
MOV R_FCalcIn_1, A
MOV A, R_Mark1_0
MOV R_FCalcDiv_0, A
MOV A, R_Mark1_1
MOV R_FCalcDiv_1, A
CALL B_Calc ;得到结果为D值的4倍
JMP L_MainNormCalcRound
L_MainNormCalcRang40_80: ;40<X<80KG
MOV A, R_PubReg_0
ADD A, R_Mark2_0
MOV R_FCalcIn_0, A
MOV A, R_PubReg_1
ADC A, R_Mark2_1
MOV R_FCalcIn_1, A
MOV A, R_Mark2_0
MOV R_FCalcDiv_0, A
MOV A, R_Mark2_1
MOV R_FCalcDiv_1, A
CALL B_Calc ;得到结果为D值的4倍
MOV A, R_PubReg_2
ADDM A, R_FCalcOut_0
MOV A, R_PubReg_3
ADCM A, R_FCalcOut_1
CLR R_FCalcOut_2
JMP L_MainNormCalcRound
L_MainNormCalcRangMore80: ;X>80KG
MOV A, R_PubReg_0
MOV R_FCalcIn_0, A
MOV A, R_PubReg_1
MOV R_FCalcIn_1, A
MOV A, R_Mark3_0
MOV R_FCalcDiv_0, A
MOV A, R_Mark3_1
MOV R_FCalcDiv_1, A
CALL B_Calc ;得到结果为D值的4倍
CLR C ;*2
RLC R_PubReg_2
RLC R_PubReg_3
MOV A, R_PubReg_2
ADDM A, R_FCalcOut_0
MOV A, R_PubReg_3
ADCM A, R_FCalcOut_1
CLR R_FCalcOut_2
L_MainNormCalcRound: ;四舍五入,得显示精度
MOV A, 1
ADDM A, R_FCalcOut_0
MOV A, 00H
ADCM A, R_FCalcOut_1
CLR C
RRC R_FCalcOut_1
RRC R_FCalcOut_0
CLR C
RRC R_FCalcOut_1
RRC R_FCalcOut_0
L_MainNormCalcLoop3:
SZ R_PubCnt_0.0
JMP L_MainNormCalcEnd
INC R_PubCnt_0
MOV A, R_FCalcOut_0
MOV R_DReg_0, A
MOV A, R_FCalcOut_1
MOV R_DReg_1, A
JMP L_MainNormCalcLoop1
L_MainNormCalcEnd:
SNZ R_UnitLB_F ;LB单位时,少除2.
JMP $+4
CLR C
RLC R_FCalcOut_0
RLC R_FCalcOut_1
MOV A, R_FCalcOut_0
MOV R_PubReg_0, A
MOV A, R_FCalcOut_1
MOV R_PubReg_1, A
;主程序/普通模式/重量范围处理
L_MainNormRang: ;
SZ R_ShowWord_F
JMP L_MainNormRangEnd
SZ R_ShowLock_F ;.NOT.锁存 ?
JMP L_MainNormRangEnd
SNZ R_ShowPosi_F ;正 ?
JMP L_MainNormRangNega
L_MainNormRangPosi:
MOV A, R_SetMAX_L
MOV R_PubReg_2, A
MOV A, R_SetMAX_H
MOV R_PubReg_3, A
MOV A, 9 ;扩大9个D
ADDM A, R_PubReg_2
MOV A, 00
ADCM A, R_PubReg_3
L_MainNormRangPosiSub:
MOV A, R_PubReg_2
SUB A, R_DReg_0
MOV A, R_PubReg_3
SBC A, R_DReg_1
SZ C
JMP L_MainNormRangEnd
CLR R_ShowLockCnt ;不锁存
MOV A, LOW TabLCDErr ;显示'Err ',表示重量正溢出
CALL B_ReadWord
JMP L_MainNormRangEnd ;计程序重新开始
L_MainNormRangNega:
MOV A, 5 ;-5D以下显示‘----’
MOV R_PubReg_2, A
MOV A, 00H
MOV R_PubReg_3, A
MOV A, R_PubReg_2
SUB A, R_DReg_0
MOV A, R_PubReg_3
SBC A, R_DReg_1
SZ C
JMP L_MainNormRangEnd
MOV A, LOW TabLCD____ ;显示'----',表示重量负溢出
CALL B_ReadWord
L_MainNormRangEnd:
;主程序/普通模式/长时间有重量但不稳定关机处理
L_MainNormUnStabOFF: ;长时间有重量但不稳定, 关机.
SZ R_DReg_1
JMP L_MainNormUnStabOFFInc
MOV A, R_SetShowMin
SUB A, R_DReg_0
SNZ C ;显示0
JMP L_MainNormUnStabOFFInc
CLR R_UnStabOFFCnt
JMP L_MainNormUnStabOFFEnd
L_MainNormUnStabOFFInc:
SZ R_HalfSecond_F
INC R_UnStabOFFCnt
MOV A, D_UnStabOFFCnt
SUB A, R_UnStabOFFCnt
SNZ C
JMP L_OFF ;关机去
L_MainNormUnStabOFFEnd:
;主程序/普通模式/归零处理
L_MainNormAZ: ;归零
L_MainNormAZCatch: ;抓零
SZ R_ShowLock_F
CLR R_AutoZeroCnt
CLR R_WeigLow_F
MOV A, R_ShowLast1Reg_L
SUB A, R_Mark0M_0
MOV R_PubReg_3, A
MOV A, R_ShowLast1Reg_H
SBC A, R_Mark0M_1
MOV R_PubReg_4, A
SZ C
JMP $+4
MOV A, 00
SUBM A, R_PubReg_3
SBCM A, R_PubReg_4
CALL B_InitCalc
MOV A, R_Mark4DReg ;得到1D或者1/2个D.
MOV R_FCalcIn_0, A
MOV A, R_SetShowMin
MOV R_FCalcMuL_0, A
MOV A, 4
MOV R_FCalcDiv_0, A
CALL B_Calc
SZ R_FCalcOut_2
JMP L_MainNormAZUn
MOV A, R_FCalcOut_0
SUB A, R_PubReg_3
MOV A, R_FCalcOut_1
SBC A, R_PubReg_4
SNZ C
JMP L_MainNormAZUn
CLR R_ShowLockCnt
SET R_WeigLow_F ;设显示重量小标示
SZ R_HalfSecond_F
INC R_AutoZeroCnt
MOV A, D_AutoZeroCnt ;时间到 ?
SUB A, R_AutoZeroCnt
SZ C
JMP L_MainNormAZShow
; MOV A, R_ShowLast2Reg_L
; MOV R_Mark0M_0, A
; MOV A, R_ShowLast2Reg_H
; MOV R_Mark0M_1, A
CLR R_AutoZeroCnt
JMP L_MainNormAZShow
L_MainNormAZUn:
CLR R_AutoZeroCnt
L_MainNormAZShow: ;抓零
SZ R_DReg_1
JMP L_MainNormAZEnd
MOV A, R_DReg_0
MOV R_PubCnt_0, A
MOV A, R_SetShowMin
SUB A, R_PubCnt_0
SNZ C ;显示0
JMP L_MainNormAZEnd
CLR R_PubReg_0 ;显示归零
SET R_ShowPosi_F ;显示为正
L_MainNormAZEnd:
;主程序/普通模式/锁定处理
L_MainNormLock: ;锁存
SZ R_SetLockCnt
JMP $+2
JMP L_MainNormLockEnd
SZ R_ShowLock_F ;.NOT.锁存 ?
JMP L_MainNormLocked
CLR R_ShowLockOFFCnt
SNZ R_WeigLock_F ;可以锁存 ?
JMP L_MainNormLockNot
SNZ R_ShowPosi_F ;正 ?
JMP L_MainNormLockNot
MOV A, R_SetShowMin
MOV R_PubReg_2, A
MOV A, 00
MOV R_PubReg_3, A
MOV A, R_PubReg_2
SUB A, R_DReg_0
MOV A, R_PubReg_3
SBC A, R_DReg_1
SNZ C
JMP L_MainNormLockNow
L_MainNormLockNot:
CLR R_ShowLockCnt
CLR R_ShowLockReg_0
CLR R_ShowLockReg_1
JMP L_MainNormLockEnd
L_MainNormLockNow:
CLR R_LEDOFFCnt
SZ R_HalfSecond_F
INC R_ShowLockCnt
MOV A, R_ShowLockCnt ;
SUB A, R_SetInLockCnt
SNZ C
JMP L_MainNormLockEnd
CLR R_UnStabOFFCnt
CLR R_ShowWord_F
SET R_ShowLock_F ;设锁定标志位
MOV A, 8
MOV R_LockFlashCnt, A
CLR R_AutoOFFCnt
MOV A, 00H ;
MOV R_ShowLockCnt, A
MOV A, R_ShowCurrReg_L
MOV R_ShowLockReg_0, A
SUB A, R_Mark0M_0
MOV R_PubReg_2, A
MOV A, R_ShowCurrReg_H
MOV R_ShowLockReg_1, A
SBC A, R_Mark0M_1
MOV R_PubReg_3, A
SZ C
JMP $+4
MOV A, 00H
SUB A, R_PubReg_2
SBC A, R_PubReg_3
MOV A, 2
MOV R_F24C02Cnt, A
MOV A, OFFSET R_PubReg_2
MOV R_FArrayAddr_L, A
MOV A, AddrBase
MOV R_F24C02Addr, A
CLR R_FI2CRead_F ;写操作
CALL B_24C02
L_MainNormLockMagEnd:
JMP L_MainNormLockEnd
L_MainNormLocked: ;已经锁定
SZ R_HalfSecond_F
INC R_ShowLockOFFCnt
MOV A, R_SetLockCnt
SUB A, R_ShowLockOFFCnt
SZ C
JMP L_MainNormLockEnd
SNZ R_SetClrLockMode_F ;为1时, 解锁不关机
JMP L_OFF ;时间到, 去关机.
CLR R_ShowLock_F
CLR R_ShowLockCnt
CLR R_ShowLockReg_0
CLR R_ShowLockReg_1
CLR R_WeigLockOFF_F
L_MainNormLockEnd:
;主程序/普通模式/清除锁定值处理
L_MainNormClrLock:
L_MainNormClrLockComp: ;比较
MOV A, R_WeigCurrReg_L
SUB A, R_Mark0M_0
MOV R_PubReg_2, A
MOV A, R_WeigCurrReg_H
SBC A, R_Mark0M_1
MOV R_PubReg_3, A
SZ C
JMP $+4
MOV A, 00H ;少于零多少
SUBM A, R_PubReg_2
SBCM A, R_PubReg_3
CLR C
RRC R_PubReg_3
RRC R_PubReg_2
CLR C
RRC R_PubReg_3
RRC R_PubReg_2
MOV A, R_Mark4DReg
SUB A, R_PubReg_2
MOV A, 00H
SBC A, R_PubReg_3
SNZ C
JMP L_MainNormClrLockHigh
L_MainNormClrLockLow:
SET R_WeigLockOFF_F
SNZ R_ShowLock_F ;显示锁定
JMP $+3
SZ R_HalfSecond_F
INC R_ClrLockCnt
MOV A, R_SetClrLockCnt
SUB A, R_ClrLockCnt
SNZ C
JMP L_MainNormClrLockClr
JMP L_MainNormClrLockEnd
L_MainNormClrLockHigh:
CLR R_ClrLockCnt
SNZ R_WeigLockOFF_F
JMP L_MainNormClrLockEnd
L_MainNormClrLockClr: ;清锁存
CLR R_ShowLock_F
CLR R_PowerOFFCnt
CLR R_ShowLockCnt
CLR R_ShowLockReg_0
CLR R_ShowLockReg_1
CLR R_WeigLockOFF_F
L_MainNormClrLockEnd:
;主程序/普通模式/结束
L_MainNormEnd:
JMP L_MainModeEnd
; ;主程序/设置模式/
L_MainSet: ;判断进入测试状态
L_MainSetEnd:
JMP L_MainModeEnd
;主程序/标定模式/开始
L_MainCali:
SET R_ShowPosi_F
CLR R_ShowLock_F
;主程序/标定模式/按键处理
L_MainCaliKey:
SNZ R_CaliReg.0
JMP $+6
SNZ R_FKeyCaliP_F
JMP $+4
INC R_CaliReg
CLR R_FKeyCaliP_F
JMP L_MainCaliKeyMag
SZ R_CaliReg.0
JMP $+4
SZ R_FKeyCaliP_F
JMP $+2
INC R_CaliReg
CLR R_FKeyCaliP_F
JMP L_MainCaliKeyEnd
L_MainCaliKeyMag: ;新按键
CLR C
RRCA R_CaliReg
SDZ Acc
JMP $+2
JMP L_MainCaliKeyMag0
SDZ Acc
JMP $+2
JMP L_MainCaliKeyMag1
SDZ Acc
JMP $+2
JMP L_MainCaliKeyMag2
JMP L_MainCaliKeyMag3
L_MainCaliKeyMag0:
MOV A, R_ShowLast2Reg_L
MOV R_Mark0M_0, A
MOV A, R_ShowLast2Reg_H
MOV R_Mark0M_1, A
JMP L_MainCaliKeyEnd
L_MainCaliKeyMag1:
MOV A, R_ShowLast2Reg_L
MOV R_Mark1_0, A
MOV A, R_ShowLast2Reg_H
MOV R_Mark1_1, A
SZ R_SetMarkMode_F
JMP L_MainCaliKeyEnd
L_MainCaliKeyMag1SP: ;一段标定的特殊处理
MOV A, R_ShowLast2Reg_L
SUB A, R_Mark0M_0
MOV R_PubReg_0, A
MOV A, R_ShowLast2Reg_H
SBC A, R_Mark0M_1
MOV R_PubReg_1, A
SNZ C
JMP L_MainCaliKeyErr2 ;重新读基准
AND A, 11111110B
SNZ Z
JMP $+2
JMP L_MainCaliKeyErr2 ;差太小,出错
L_MainCaliKeyMag1SPDiv3: ;除3
CLR R_Mark1_0
CLR R_Mark1_1
CLR R_PubCnt_0
L_MainCaliKeyMag1SPDiv3Loop:
MOV A, R_PubReg_0
SUB A, 03
MOV R_PubReg_0, A
MOV A, R_PubReg_1
SBC A, R_PubCnt_0
MOV R_PubReg_1, A
SNZ C
JMP L_MainCaliKeyMag1SPMOV
SIZ R_Mark1_0
JMP L_MainCaliKeyMag1SPDiv3Loop
SIZ R_Mark1_1
JMP L_MainCaliKeyMag1SPDiv3Loop
L_MainCaliKeyMag1SPMOV:
MOV A, R_Mark1_0
MOV R_Mark2_0, A
MOV R_Mark3_0, A
MOV A, R_Mark1_1
MOV R_Mark2_1, A
MOV R_Mark3_1, A
JMP L_MainCaliKeyWriteSP
L_MainCaliKeyMag2:
MOV A, R_ShowLast2Reg_L
MOV R_Mark2_0, A
MOV A, R_ShowLast2Reg_H
MOV R_Mark2_1, A
JMP L_MainCaliKeyEnd
L_MainCaliKeyMag3:
MOV A, R_ShowLast2Reg_L
MOV R_Mark3_0, A
MOV A, R_ShowLast2Reg_H
MOV R_Mark3_1, A
JMP L_MainCaliKeyChk
L_MainCaliKeyChk: ;检查值是否出错
MOV A, R_Mark3_0
SUB A, R_Mark2_0
MOV R_PubReg_0, A
MOV A, R_Mark3_1
SBC A, R_Mark2_1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -