📄 scale.asm
字号:
MOV R_PubReg_1, A
SNZ C
JMP L_MainCaliKeyErr2 ;80>120,重新读基准
AND A, 11111110B
SNZ Z
JMP $+2
JMP L_MainCaliKeyErr2 ;差太小,出错
MOV A, R_Mark2_0
SUB A, R_Mark1_0
MOV R_PubReg_0, A
MOV A, R_Mark2_1
SBC A, R_Mark1_1
MOV R_PubReg_1, A
SNZ C
JMP L_MainCaliKeyErr2 ;40>80,重新读基准
AND A, 11111110B
SNZ Z
JMP $+2
JMP L_MainCaliKeyErr2 ;差太小,出错
MOV A, R_Mark1_0
SUB A, R_Mark0M_0
MOV R_PubReg_0, A
MOV A, R_Mark1_1
SBC A, R_Mark0M_1
MOV R_PubReg_1, A
SNZ C
JMP L_MainCaliKeyErr2 ;0>40,重新读基准
AND A, 11111110B
SNZ Z
JMP $+2
JMP L_MainCaliKeyErr2 ;差太小,出错
MOV A, R_Mark0M_1
SNZ Z
JMP L_MainCaliKeyWrite
MOV A, R_Mark0M_0
AND A, 11111110B
SNZ Z
JMP L_MainCaliKeyWrite
L_MainCaliKeyErr2: ;标定值错误
MOV A, LOW TabLCDErr2 ;显示'Err2',表示重量正溢出
CALL B_ReadWord
CALL B_LCD
CALL B_Delay2000mS
CLR R_ModeFlag
SET R_ModeCali_F ;
MOV A, 00H
MOV R_CaliReg, A
JMP L_OFF ;去关机
L_MainCaliKeyWrite: ;Write2402
MOV A, R_Mark3_0
SUB A, R_Mark2_0
MOV R_Mark3_0, A
MOV A, R_Mark3_1
SBC A, R_Mark2_1
MOV R_Mark3_1, A
MOV A, R_Mark2_0
SUB A, R_Mark1_0
MOV R_Mark2_0, A
MOV A, R_Mark2_1
SBC A, R_Mark1_1
MOV R_Mark2_1, A
MOV A, R_Mark1_0
SUB A, R_Mark0M_0
MOV R_Mark1_0, A
MOV A, R_Mark1_1
SBC A, R_Mark0M_1
MOV R_Mark1_1, A
L_MainCaliKeyWriteSP: ;一段标定的入口
CALL B_InitCalc
MOV A, R_Mark1_0
MOV R_FCalcIn_0, A
MOV A, R_Mark1_1
MOV R_FCalcIn_1, A
MOV A, 100
SZ R_SetMarkWeig_F ;50KG
MOV A, 125
MOV R_FCalcDiv_0, A
CALL B_Calc
SZ R_FCalcOut_1
JMP L_MainCaliKeyErr2
MOV A, R_FCalcOut_0
MOV R_Mark4DReg, A
MOV A, 9
MOV R_F24C02Cnt, A
MOV A, OFFSET R_Mark0M_0
MOV R_FArrayAddr_L, A
MOV A, Addr0M_0
MOV R_F24C02Addr, A
CLR R_FI2CRead_F ;写操作
CALL B_24C02
SZ R_FI2CErr_F
JMP L_MainCaliKeyErr1
L_MainCaliKeyWriteClr: ;把记忆值清除
CLR R_PubCnt_0
CLR R_PubCnt_1
MOV A, 2
MOV R_F24C02Cnt, A
MOV A, OFFSET R_PubCnt_0
MOV R_FArrayAddr_L, A
MOV A, AddrBase
MOV R_F24C02Addr, A
CLR R_FI2CRead_F ;写操作
CALL B_24C02
L_MainCaliKeyFinish: ;显示'PASS'
MOV A, LOW TabLCDPASS
CALL B_ReadWord
CALL B_LCD
CALL B_Delay2000mS
JMP L_OFF ;去关机
L_MainCaliKeyErr1: ;写2402出错
MOV A, LOW TabLCDErr1 ;显示'Err '
JMP L_OFFDelay ;去显示,延时3秒,关机的入口.
L_MainCaliKeyEnd:
;主程序/标定模式/显示内容
L_MainCaliWord: ;显示提示
SET R_ShowWord_F
SZ R_CaliReg.0
JMP L_MainCaliWordCode
SET R_CaliDelay_F
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_0, A
MOV R_LCDReg_3, A
CLR R_LCDReg_1
MOV A, R_CaliReg
MOV R_PubReg_2, A
CLR C
RRC R_PubReg_2
MOV A, R_PubReg_2
SDZ Acc
JMP $+2
JMP L_MainCaliWord1
SDZ Acc
JMP L_MainCaliWord3
JMP L_MainCaliWord2
L_MainCaliWord1:
MOV A, 04 ;'40 '
SZ R_SetMarkWeig_F
MOV A, 05 ;'50 '
MOV R_LCDReg_2, A
JMP L_MainCaliWordLoop
L_MainCaliWord2:
MOV A, 08 ;'80 '
SZ R_SetMarkWeig_F
MOV A, 00 ;'100 '
MOV R_LCDReg_2, A
MOV A, 01
SZ R_SetMarkWeig_F
MOV R_LCDReg_3, A
JMP L_MainCaliWordLoop
L_MainCaliWord3:
MOV A, 02 ;'120 '
SZ R_SetMarkWeig_F
MOV A, 05 ;'150 '
MOV R_LCDReg_2, A
MOV A, 01
MOV R_LCDReg_3, A
L_MainCaliWordLoop:
CLR R_LCDFlag
SET R_ShowWord_F
SZ R_SetMarkMode_F
JMP L_MainCaliWordEnd
MOV A, 02
SUB A, R_CaliReg
SNZ Z
JMP L_MainCaliWordEnd
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_0, A
CLR R_LCDReg_1
MOV A, 02 ;'120 '
MOV R_LCDReg_2, A
MOV A, 01
MOV R_LCDReg_3, A
SNZ R_SetMarkWeig_F
JMP L_MainCaliWordEnd
MOV A, 05 ;'150 '
MOV R_LCDReg_2, A
MOV A, 01
MOV R_LCDReg_3, A
JMP L_MainCaliWordEnd
L_MainCaliWordCode: ;显示内码
MOV A, R_WeigFilReg_20
MOV R_PubReg_0, A
MOV A, R_WeigFilReg_21
MOV R_PubReg_1, A
CLR C
RRC R_PubReg_1
RRC R_PubReg_0
CLR C
RRC R_PubReg_1
RRC R_PubReg_0
CLR C
RRC R_PubReg_1
RRC R_PubReg_0
L_MainCaliWordEnd:
;主程序/标定模式/显示
L_MainCaliShow:
SNZ R_CaliReg.0
JMP L_MainCaliShowEnd
CALL B_ClrLCDReg ;清显示
L_MainCaliShowHex2Deci: ;十六进制到十进制
MOV A, R_PubReg_0
MOV R_F2Hex2DeciIn_0, A
MOV A, R_PubReg_1
MOV R_F2Hex2DeciIn_1, A
CALL B_2Hex2Deci
MOV A, R_F2Hex2DeciOut_0
MOV R_PubReg_0, A
MOV A, R_F2Hex2DeciOut_1
MOV R_PubReg_1, A
MOV A, R_F2Hex2DeciOut_2
L_MainCaliShowReadTab:
MOV A, R_PubReg_0 ;取个位
AND A, 00001111B
MOV R_LCDReg_0, A
SWAPA R_PubReg_0 ;取拾位
AND A, 00001111B
MOV R_LCDReg_1, A
MOV A, R_PubReg_1 ;取佰位
AND A, 00001111B
MOV R_LCDReg_2, A
SWAPA R_PubReg_1 ;取仟位
AND A, 00001111B
MOV R_LCDReg_3, A
L_MainCaliShowEnd:
;主程序/标定模式/结束
L_MainCaliEnd:
;主程序/模式/结束
L_MainModeEnd:
;主程序/显示处理
L_MainShow: ;显示重量
SZ R_ShowWord_F ;.NOT. 显示提示
JMP L_MainShowLCD
CALL B_ClrLCDReg ;清显示
L_MainShowLock: ;锁存
SNZ R_ModeNormaL_F ;正常模式 ?
JMP L_MainShowCalc
SNZ R_ShowLock_F ;锁存 ?
JMP L_MainShowUnLock
SET R_ShowPosi_F ;正
JMP L_MainShowCalc
L_MainShowUnLock: ;没锁存
CLR R_ClrLockCnt
L_MainShowCalc: ;十六进制到十进制
SZ R_UnitST_F
JMP L_MainShowCalcST
MOV A, R_PubReg_0
MOV R_F2Hex2DeciIn_0, A
MOV A, R_PubReg_1
MOV R_F2Hex2DeciIn_1, A
CALL B_2Hex2Deci
MOV A, R_F2Hex2DeciOut_0
MOV R_PubReg_0, A
MOV A, R_F2Hex2DeciOut_1
MOV R_PubReg_1, A
L_MainShowReadTab:
MOV A, R_PubReg_0 ;取个位
AND A, 00001111B
MOV R_LCDReg_0, A
SWAPA R_PubReg_0 ;取拾位
AND A, 00001111B
MOV R_LCDReg_1, A
MOV A, R_PubReg_1 ;取佰位
AND A, 00001111B
MOV R_LCDReg_2, A
SWAPA R_PubReg_1 ;取仟位
AND A, 00001111B
MOV R_LCDReg_3, A
L_MainShowClearZero: ;清除'0'
SZ R_LCDReg_3 ;仟位
JMP L_MainShowWriteLCD
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_3, A
SZ R_LCDReg_2 ;佰位
JMP L_MainShowWriteLCD
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_2, A
JMP L_MainShowWriteLCD
L_MainShowCalcST:
MOV A, R_PubReg_0
AND A, 00000011B
MOV R_LCDReg_0, A
CLR C
RRC R_PubReg_1
RRC R_PubReg_0
CLR C
RRC R_PubReg_1
RRC R_PubReg_0
CLR R_PubCnt_0
L_MainShowCalcSTLoop:
MOV A, R_PubReg_0
SUB A, 14
MOV R_PubReg_0, A
CLR R_PubReg_2
MOV A, R_PubReg_1
SBC A, R_PubReg_2
MOV R_PubReg_1, A
SNZ C
JMP $+3
INC R_PubCnt_0
JMP L_MainShowCalcSTLoop
MOV A, 14
ADDM A, R_PubReg_0
MOV A, R_PubReg_0
MOV R_F2Hex2DeciIn_0, A
CLR R_F2Hex2DeciIn_1
CALL B_2Hex2Deci
MOV A, R_F2Hex2DeciOut_0
AND A, 00001111B
MOV R_LCDReg_0, A
SWAPA R_F2Hex2DeciOut_0
AND A, 00001111B
MOV R_LCDReg_1, A
MOV A, R_PubCnt_0
MOV R_F2Hex2DeciIn_0, A
CLR R_F2Hex2DeciIn_1
CALL B_2Hex2Deci
MOV A, R_F2Hex2DeciOut_0
AND A, 00001111B
MOV R_LCDReg_2, A
SWAPA R_F2Hex2DeciOut_0
AND A, 00001111B
MOV R_LCDReg_3, A
L_MainShowCalcSTClearZero: ;清除'0'
SZ R_LCDReg_3
JMP $+3
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_3, A
SZ R_LCDReg_1
JMP $+3
MOV A, LOW TabLCDEmpty
MOV R_LCDReg_1, A
L_MainShowWriteLCD:
CLR R_LCDFlag
SZ R_ShowPosi_F
JMP $+3
MOV A, LOW TabLCDNega ;显示负号
MOV R_LCDReg_3, A
L_MainShowWriteLCDPoin:
SNZ R_UnitKG_F ;KG ?
JMP $+3
SET R_LCDP1_F ;P1
SET R_LCDKG_F ;'KG'
SNZ R_UnitLB_F ;LB ?
JMP $+3
SET R_LCDP1_F ;P1
SET R_LCDLB_F ;'KG'
SNZ R_UnitST_F ;ST ?
JMP $+3
SET R_LCDST_F ;'ST'
SET R_LCDCOL_F
JMP L_MainShowLCD
L_MainShowLCD:
; SZ R_WeigLow_F ;.NOT. 重量很小 ?
; JMP L_MainShowLCDDo
SNZ R_ShowLock_F ;锁存 ?
JMP L_MainShowLCDDo
SZ R_LockFlashCnt
JMP $+2
JMP L_MainShowLCDDo
DEC R_LockFlashCnt
SNZ R_LockFlashCnt.1
JMP L_MainShowLCDDo
CLR R_LCDFlag
MOV A, TabLCDEmpty
MOV R_LCDReg_0, A
MOV R_LCDReg_1, A
MOV R_LCDReg_2, A
MOV R_LCDReg_3, A
L_MainShowLCDDo:
CALL B_LCD
L_MainShowEnd:
;主程序/电池检测
L_MainBatter: ;低电显示
MOV A, R_MainLoopCnt
AND A, 00001100B
SNZ Z
JMP L_MainBatterEnd
SNZ LVDO ;低电?
JMP L_MainBatterEnd
MOV A, LOW TabLCDPL ;显示' PL ',表示低电.
CALL B_ReadWord
CALL B_LCD
L_MainBatterEnd:
;主程序/自动关机
L_MainAutoOFF: ;自动关机
SNZ R_ModeNormaL_F ;称重才关机
JMP L_MainAutoOFFEnd
SZ R_ShowLock_F ;锁定时不关机
JMP L_MainAutoOFFEnd
SZ R_HalfSecond_F
INC R_AutoOFFCnt
SIZA R_SetOFFCnt ;为FF则不关机.
JMP $+2
JMP L_MainAutoOFFEnd
MOV A, R_SetOFFCnt
SUB A, R_AutoOFFCnt
SNZ C
JMP L_OFF ;去关机.
L_MainAutoOFFEnd:
;主程序/结束
L_MainEnd:
SNZ R_CaliDelay_F
JMP $+6
CALL B_Delay100mS
CALL B_Delay100mS
CALL B_Delay100mS
CALL B_Delay100mS
CALL B_Delay100mS
CLR R_CaliDelay_F
INC R_MainLoopCnt
SNZ R_HalfSecond_F
JMP $+4
SIZ R_PowerOFFCnt
JMP $+2
JMP L_OFF
CLR R_HalfSecond_F
SZ R_FHalfSecond_F
SET R_HalfSecond_F
CLR R_FHalfSecond_F
CLR R_ShowWord_F
JMP L_Main
;=============================================================================
;==============================================<<<<<<<<<<<<<<子程序
;=============================================================================
L_OFF: ;关机
JMP L_OFFLCD
L_OFFDelay: ;显示延时2秒,关机的入口
CALL B_ReadWord
CALL B_LCD
CALL B_Delay2000mS
L_OFFLCD:
CALL B_ClrLCD ;清空LCD的RAM
L_OFFLooseKey:
CALL B_Delay10mS
SNZ P_KeyON_F ;重物离秤 ?
JMP L_OFFLooseKey
CALL B_Delay10mS
L_OFFSPRAM: ;
MOV A, 11101111B
MOV PA, A
MOV A, 00001111B
MOV PB, A
CLR INTC0
CLR INTC1
CLR TMR0C
CLR TMR1C
CLR ADCR
CLR WDTC
CLR CHPEN ;关电压泵
CLR REGCEN ;关稳压器
L_OFFHALT:
HALT
NOP
NOP
L_PowerOFF:
JMP L_Start
;=============================================================================
;=============================================================================
; 定时中断0
; INPUT RAM : TMR0, R_TmrInt0Cnt_0, R_TmrInt0Cnt_1,
; USER RAM : R_IAccReg, R_IStatReg
; OUTPUTRAM : TMR0, R_TmrInt0Cnt_0, R_TmrInt0Cnt_1
;=============================================================================
B_TmrInt0 PROC
L_TmrInt0:
MOV R_IAccReg, A
MOV A, Status
MOV R_IStatReg, A
SIZ R_TmrInt0Cnt
JMP L_TmrInt0End
SET R_FHalfSecond_F
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -