9821h620.lst

来自「用台湾富晶单片机开发的电子称包括源码和编译器」· LST 代码 · 共 1,084 行 · 第 1/5 页

LST
1,084 行
字号
0648  0193  C285    			BCF		R_PubFlag0,1	;0->R_PubFlag0.1
0649  0194  C085    			BCF		R_PubFlag0,0	;0->R_PubFlag0.0
0650  0195  A07C    			GOTO	L_MainLoop
0651                ;------------------------------------------------------------------------------
0652                ;子程序S_MainFunc		;主要功能
0653                S_MainFunc:
0654  0196  FE82    			BTFSS	R_WorkStatus,7
0655  0197  A1A0    			GOTO	L_MainFunc_1	;[R_WorkStatus].7=0 转
0656  0198  208E    			MOVFW	R_PubCnt1
0657  0199  68FF    			ANDLW	0FFH
0658  019A  E004    			BTFSC	STATUS,Z
0659  019B  A1A0    			GOTO	L_MainFunc_1	;[R_PubCnt1]=0 转
0660  019C  F085    			BTFSS	R_PubFlag0,0
0661  019D  A1AE    			GOTO	L_MainFuncRet	;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0662  019E  168E    			DECFSZ	R_PubCnt1,1		;[R_PubCnt1]-1->R_PubCnt1
0663  019F  A1AE    			GOTO	L_MainFuncRet	;[R_PubCnt1]>0 转,返回
0664                L_MainFunc_1:
0665  01A0  CE82    			BCF		R_WorkStatus,7	;0->R_WorkStatus.7
0666  01A1  40F0    			MOVLW	0F0H
0667  01A2  2882    			ANDWF	R_WorkStatus,0
0668  01A3  E004    			BTFSC	STATUS,Z
0669  01A4  A1AF    			GOTO	L_MainFunc0		;[R_WorkStatus].7:4=0 转
0670  01A5  44F0    			ADDLW	0F0H
0671  01A6  E004    			BTFSC	STATUS,Z
0672  01A7  A1C4    			GOTO	L_CalcHeft		;[R_WorkStatus].7:4=1 转 计算并显示重量值
0673  01A8  44E0    			ADDLW	0E0H
0674  01A9  E004    			BTFSC	STATUS,Z
0675  01AA  A2A4    			GOTO	L_CaliProc		;[R_WorkStatus].7:4=3 转 标定处理
0676  01AB  44F0    			ADDLW	0F0H
0677  01AC  E004    			BTFSC	STATUS,Z
0678  01AD  A385    			GOTO	L_OFF_Proc		;[R_WorkStatus].7:4=4 转 关机处理
0679                L_MainFuncRet:
0680  01AE  0003    			RETURN
0681                ;------------------------------------------------------------------------------
0682                L_MainFunc0:						;找零点
0683  01AF  E0CF    			BTFSC	R_DispFlag,0
0684  01B0  A1B8    			GOTO	L_BattLowProc	;[R_DispFlag].0=1(电池电压低) 转
0685                ;
0686  01B1  836A    			CALL	S_DispCaliCode	;去显示内码
0687                ;			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
0688                ;			INCF	R_WorkStatus,1	;[R_WorkStatus]+1->R_WorkStatus
0689                ;			BCF		R_WorkStatus,2	;0->R_WorkStatus.2
0690                ;			MOVFW	R_WorkStatus
0691                ;			ANDLW	03H
0692                ;			SUBLW	R_DispBuff3
0693                ;			MOVWF	FSR0
0694                ;			MOVLW	08H
0695                ;			MOVWF	IND0			;08H("8")->IND0
0696                ;			MOVLW	08H
0697                ;			MOVWF	R_DispMode		;1->R_DispMode.3 显示提示信息
0698                ;			CALL	S_Display		;显示
0699                ;			MOVLW	08H
0700                ;			MOVWF	R_PubCnt1		;08H->R_PubCnt1,定时0.5秒
0701                ;			BSF		R_WorkStatus,7	;1->R_WorkStatus.7
0702                ;
0703  01B2  FC85    			BTFSS	R_PubFlag0,6
0704  01B3  A1B7    			GOTO	L_MainFunc0Ret	;[R_PubFlag0].6=0 转
0705  01B4  4010    			MOVLW	10H
0706  01B5  2282    			MOVWF	R_WorkStatus	;10H->R_WorkStatus 进入称重状态
0707  01B6  838F                CALL    S_CalcOffTime	;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0708                L_MainFunc0Ret:
0709  01B7  0003    			RETURN
0710                L_BattLowProc:						;电池低电压处理
0711  01B8  4020    			MOVLW	20H
0712  01B9  228E    			MOVWF	R_PubCnt1		;20H->R_PubCnt1,定时2秒
0713  01BA  40C0    			MOVLW	0C0H
0714  01BB  2282    			MOVWF	R_WorkStatus	;0C0H->R_WorkStatus,2秒后关机
0715  01BC  8570    			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
0716  01BD  4012    			MOVLW	12H
0717  01BE  22CC    			MOVWF	R_DispBuff2		;12H("L")->R_DispBuff2
0718  01BF  4013    			MOVLW	13H
0719  01C0  22CB    			MOVWF	R_DispBuff1		;13H("o")->R_DispBuff1
0720  01C1  4008    			MOVLW	08H
0721  01C2  22C9    			MOVWF	R_DispMode		;1->R_DispMode.3 显示提示信息
0722  01C3  A58C    			GOTO	S_Display		;去显示"  Lo "
0723                ;------------------------------------------------------------------------------
0724                L_CalcHeft:							;计算并显示重量值
0725  01C4  E692                BTFSC   R_KeyStatus,3
0726  01C5  A20D                GOTO    L_CalcHeft3     ;[R_KeyStatus].3=1 转
0727  01C6  FE92                BTFSS   R_KeyStatus,7
0728  01C7  A21E                GOTO    L_CalcHeft4     ;[R_KeyStatus].7=0 转
0729  01C8  2093    			MOVFW	R_KeyCode
0730  01C9  580E    			SUBLW	0EH
0731  01CA  E004    			BTFSC	STATUS,Z
0732  01CB  A1EE    			GOTO	L_CalcHeft1		;[R_KeyCode]=0EH("TARE"键释放)转,去皮
0733  01CC  2093    			MOVFW	R_KeyCode
0734  01CD  5815                SUBLW   15H
0735  01CE  E004                BTFSC	STATUS,Z
0736  01CF  A1F0                GOTO    L_CalcHeft2     ;[R_KeyCode]=15H("Unit"键按下10秒) 转,快速标定
0737  01D0  2093    			MOVFW	R_KeyCode
0738  01D1  580D                SUBLW   0DH
0739  01D2  F004                BTFSS	STATUS,Z
0740  01D3  A21E                GOTO    L_CalcHeft4     ;[R_KeyCode]≠0DH(不是"Unit"键短键释放) 转
0741  01D4  D885                BSF     R_PubFlag0,4    ;1->R_PubFlag0.4 有效内码,待计算
0742  01D5  20D2                MOVFW   R_CaliP1L
0743  01D6  680F                ANDLW   0FH
0744  01D7  F004                BTFSS   STATUS,Z
0745  01D8  A1DB                GOTO    L_SelectUnit    ;[R_CaliP1L].3:0≠0(P1.0≠0) 转 切换计量单位
0746  01D9  02A2                CLRF    R_UnitSelect    ;0->R_UnitSelect 默认单位为g
0747  01DA  A1ED                GOTO    L_SelectUnit4
0748                ;-----------  切换计量单位  --------
0749                L_SelectUnit:
0750  01DB  0AA2                INCF    R_UnitSelect,1  ;[R_UnitSelect]+1->R_UnitSelect 切换计量单位
0751  01DC  C4A2                BCF     R_UnitSelect,2  ;0->R_UnitSelect.2
0752  01DD  20A2                MOVFW   R_UnitSelect
0753  01DE  0008     			ADDPCW
0754  01DF  A1EB                GOTO    L_SelectUnit0   ;[R_UnitSelect]=0
0755  01E0  A1E8                GOTO    L_SelectUnit1   ;[R_UnitSelect]=1
0756  01E1  A1E5                GOTO    L_SelectUnit2   ;[R_UnitSelect]=2
0757                ;            GOTO    L_SelectUnit3   ;[R_UnitSelect]=3
0758                L_SelectUnit3:
0759  01E2  F2D2                BTFSS   R_CaliP1L,1
0760  01E3  A1DB                GOTO    L_SelectUnit    ;[R_CaliP1L].1=0(未选择lb) 转 重新切换下一个计量单位
0761  01E4  A1ED                GOTO    L_SelectUnit4
0762                L_SelectUnit2:
0763  01E5  F0D2                BTFSS   R_CaliP1L,0
0764  01E6  A1DB                GOTO    L_SelectUnit    ;[R_CaliP1L].0=0(未选择kg) 转 重新切换下一个计量单位
0765  01E7  A1ED                GOTO    L_SelectUnit4
0766                L_SelectUnit1:
0767  01E8  F6D2                BTFSS   R_CaliP1L,3
0768  01E9  A1DB                GOTO    L_SelectUnit    ;[R_CaliP1L].3=0(未选择oz) 转 重新切换下一个计量单位
0769  01EA  A1ED                GOTO    L_SelectUnit4
0770                L_SelectUnit0:
0771  01EB  F4D2                BTFSS   R_CaliP1L,2
0772  01EC  A1DB                GOTO    L_SelectUnit    ;[R_CaliP1L].2(未选择g) 转 重新切换下一个计量单位
0773                L_SelectUnit4:
0774  01ED  A496                GOTO    S_CalcUnitData	;计算1d对应的不同计量单位的值(浮点数),
0775                ;            		结果->R_UnitData2(2的指数)、R_UnitData1:R_UnitData0(有效数字)
0776                ;-----------  去皮  ----------------
0777                L_CalcHeft1:
0778  01EE  DE85                BSF     R_PubFlag0,7    ;1->R_PubFlag0.7 读当前内码作为零点内码(去皮)
0779  01EF  A29A                GOTO    L_CalcHeftRet   ;返回
0780                ;-----------  快速标定  ------------
0781                L_CalcHeft2:
0782  01F0  4020                MOVLW   20H
0783  01F1  228E                MOVWF   R_PubCnt1       ;20H->R_PubCnt1
0784  01F2  C482                BCF     R_WorkStatus,2  ;0->R_WorkStatus.2
0785  01F3  D682                BSF     R_WorkStatus,3  ;1->R_WorkStatus.3
0786  01F4  20DC                MOVFW   R_CaliDataL     ;\
0787  01F5  22E8                MOVWF   R_TempCaliDataL ; | [R_CaliDataH:R_CaliDataL]
0788  01F6  20DD                MOVFW   R_CaliDataH     ; | ->R_TempCaliDataH:R_TempCaliDataL 暂存
0789  01F7  22E9                MOVWF   R_TempCaliDataH ;/
0790  01F8  EA85    			BTFSC	R_PubFlag0,5
0791  01F9  A1FE    			GOTO	L_CalcHeft21	;[R_PubFlag0].5=1(称重数据稳定),转
0792  01FA  209A    			MOVFW	R_LastAverageL	;\
0793  01FB  22A3    			MOVWF	R_SteadyCodeL	; | [R_LastAverageH:R_LastAverageL]
0794  01FC  209B    			MOVFW	R_LastAverageH	; | ->R_SteadyCodeH:R_SteadyCodeL 数据不稳,取当前的平均值
0795  01FD  22A4    			MOVWF	R_SteadyCodeH	;/
0796                L_CalcHeft21:
0797  01FE  4000    			MOVLW	00H		        ;\
0798  01FF  2287    			MOVWF	R_PubReg0		; | 0100H (快速标定分度数=1000)
0799  0200  2001    			MOVFW	01H		        ; | ->R_PubReg1:R_PubReg0
0800  0201  2288    			MOVWF	R_PubReg1		;/
0801  0202  A3C1                GOTO    S_CaliCodeComm	;标定时计算每个内码相当于重量的分度数×65536->R_CaliDataH:R_CaliDataL
0802                ;
0803                L_CalcHeft22:
0804  0203  20E8                MOVFW   R_TempCaliDataL ;\
0805  0204  22DC                MOVWF   R_CaliDataL     ; | [R_TempCaliDataH:R_TempCaliDataL]
0806  0205  20E9                MOVFW   R_TempCaliDataH ; | ->R_CaliDataH:R_CaliDataL 恢复原来的标定数据
0807  0206  22DD                MOVWF   R_CaliDataH     ;/
0808                L_CalcHeft23:
0809  0207  C682                BCF     R_WorkStatus,3  ;0->R_WorkStatus.3
0810  0208  2092                MOVFW   R_KeyStatus
0811  0209  687F                ANDLW   7FH
0812  020A  6C70                IORLW   70H
0813  020B  2292                MOVWF   R_KeyStatus     ;7->R_KeyStatus.3:0
0814  020C  A29A                GOTO    L_CalcHeftRet   ;返回
0815                ;
0816                L_CalcHeft3:
0817  020D  C886                BCF     R_PubFlag1,4    ;0->R_PubFlag1.4
0818  020E  E892                BTFSC   R_KeyStatus,4
0819  020F  A203                GOTO    L_CalcHeft22    ;[R_KeyStatus].4=1 转
0820  0210  F085                BTFSS   R_PubFlag0,0
0821  0211  A29A                GOTO    L_CalcHeftRet   ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0822  0212  168E                DECFSZ  R_PubCnt1,1     ;[R_PubCnt1]-1->R_PubCnt1
0823  0213  A21A                GOTO    L_CalcHeft31    ;[R_PubCnt1]>0 转
0824  0214  0207                CLRF    INTE            ;关所有中断
0825  0215  86E3                CALL    S_WrCaliData	;将[R_CaliChksumH:R_CaliMarkL]的8个16位数据写入到93LC46的00H-07H中
0826  0216  0206    			CLRF	INTF
0827  0217  4094    			MOVLW	10010100B
0828  0218  2207    			MOVWF	INTE			;GIE=1,TMIE=1,ADIE=1
0829  0219  A207                GOTO    L_CalcHeft23
0830                L_CalcHeft31:
0831  021A  F285                BTFSS   R_PubFlag0,1
0832  021B  A29A                GOTO    L_CalcHeftRet   ;[R_PubFlag0].1=0(未到1/2秒) 转,返回
0833  021C  E491                BTFSC   R_TimerCnt,2
0834  021D  A570                GOTO    S_ClrDisp       ;[R_TimerCnt].2=1 转,清显示
0835                ;下面计算出重量值,并根据公/英制要求送显示缓冲区
0836                L_CalcHeft4:
0837  021E  F885    			BTFSS	R_PubFlag0,4
0838  021F  A29A    			GOTO	L_CalcHeftRet	;[R_PubFlag0].4=0(无新的有效内码) 转,返回
0839  0220  4001    			MOVLW	01H
0840  0221  2ACF    			ANDWF	R_DispFlag,1	;0->R_DispFlag.7:1
0841  0222  E886    			BTFSC	R_PubFlag1,4
0842  0223  A29B    			GOTO	L_DispOverErr	;[R_PubFlag1].4=1(超载) 转,显示超载错误
0843  0224  20A0    			MOVFW	R_ZeroCodeL		;\
0844  0225  2287    			MOVWF	R_PubReg0		; | [R_ZeroCodeH:R_ZeroCodeL] (零点内码)
0845  0226  20A1    			MOVFW	R_ZeroCodeH		; | ->R_PubReg1:R_PubReg0
0846  0227  2288    			MOVWF	R_PubReg1		;/
0847  0228  209A    			MOVFW	R_LastAverageL	;\
0848  0229  228B    			MOVWF	R_PubReg4		; | [R_LastAverageH:R_LastAverageL] (当前平均内码)
0849  022A  209B    			MOVFW	R_LastAverageH	; | ->R_PubReg5:R_PubReg4
0850  022B  228C    			MOVWF	R_PubReg5		;/
0851  022C  8487    			CALL	S_CalcABS		;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
0852  022D  E686    			BTFSC	R_PubFlag1,3
0853  022E  D4CF    			BSF		R_DispFlag,2	;[R_PubFlag1].3=1,1->R_DispFlag.2 显示负号
0854  022F  20DC    			MOVFW	R_CaliDataL		;\
0855  0230  2289    			MOVWF	R_PubReg2		; | 重量标定数据[R_CaliDataH:R_CaliDataL]
0856  0231  20DD    			MOVFW	R_CaliDataH		; | ->R_PubReg3:R_PubReg2
0857  0232  228A    			MOVWF	R_PubReg3		;/
0858  0233  85E5    			CALL	S_Multi			;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0859  0234  208A    			MOVFW	R_PubReg3
0860  0235  68FF    			ANDLW	0FFH
0861  0236  F004    			BTFSS	STATUS,Z
0862  0237  A245    			GOTO	L_CalcHeft42	;[R_PubReg3]>0 转
0863  0238  2089    			MOVFW	R_PubReg2
0864  0239  68FE    			ANDLW	0FEH

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?