9821h620.lst

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

LST
1,108
字号
0663  0192  5815                SUBLW   15H
0664  0193  E004                BTFSC	STATUS,Z
0665  0194  A1B5                GOTO    L_CalcHeft2     ;[R_KeyCode]=15H("Unit"键按下10秒) 转,快速标定
0666  0195  2093    			MOVFW	R_KeyCode
0667  0196  580D                SUBLW   0DH
0668  0197  F004                BTFSS	STATUS,Z
0669  0198  A1E3                GOTO    L_CalcHeft4     ;[R_KeyCode]≠0DH(不是"Unit"键短键释放) 转
0670  0199  D885                BSF     R_PubFlag0,4    ;1->R_PubFlag0.4 有效内码,待计算
0671  019A  20D2                MOVFW   R_CaliP1L
0672  019B  680F                ANDLW   0FH
0673  019C  F004                BTFSS   STATUS,Z
0674  019D  A1A0                GOTO    L_SelectUnit    ;[R_CaliP1L].3:0≠0(P1.0≠0) 转 切换计量单位
0675  019E  02A2                CLRF    R_UnitSelect    ;0->R_UnitSelect 默认单位为g
0676  019F  A1B2                GOTO    L_SelectUnit4
0677                ;-----------  切换计量单位  --------
0678                L_SelectUnit:
0679  01A0  0AA2                INCF    R_UnitSelect,1  ;[R_UnitSelect]+1->R_UnitSelect 切换计量单位
0680  01A1  C4A2                BCF     R_UnitSelect,2  ;0->R_UnitSelect.2
0681  01A2  20A2                MOVFW   R_UnitSelect
0682  01A3  0008     			ADDPCW
0683  01A4  A1B0                GOTO    L_SelectUnit0   ;[R_UnitSelect]=0
0684  01A5  A1AD                GOTO    L_SelectUnit1   ;[R_UnitSelect]=1
0685  01A6  A1AA                GOTO    L_SelectUnit2   ;[R_UnitSelect]=2
0686                ;            GOTO    L_SelectUnit3   ;[R_UnitSelect]=3
0687                L_SelectUnit3:
0688  01A7  F2D2                BTFSS   R_CaliP1L,1
0689  01A8  A1A0                GOTO    L_SelectUnit    ;[R_CaliP1L].1=0(未选择lb) 转 重新切换下一个计量单位
0690  01A9  A1B2                GOTO    L_SelectUnit4
0691                L_SelectUnit2:
0692  01AA  F0D2                BTFSS   R_CaliP1L,0
0693  01AB  A1A0                GOTO    L_SelectUnit    ;[R_CaliP1L].0=0(未选择kg) 转 重新切换下一个计量单位
0694  01AC  A1B2                GOTO    L_SelectUnit4
0695                L_SelectUnit1:
0696  01AD  F6D2                BTFSS   R_CaliP1L,3
0697  01AE  A1A0                GOTO    L_SelectUnit    ;[R_CaliP1L].3=0(未选择oz) 转 重新切换下一个计量单位
0698  01AF  A1B2                GOTO    L_SelectUnit4
0699                L_SelectUnit0:
0700  01B0  F4D2                BTFSS   R_CaliP1L,2
0701  01B1  A1A0                GOTO    L_SelectUnit    ;[R_CaliP1L].2(未选择g) 转 重新切换下一个计量单位
0702                L_SelectUnit4:
0703  01B2  A45B                GOTO    S_CalcUnitData	;计算1d对应的不同计量单位的值(浮点数),
0704                ;            		结果->R_UnitData2(2的指数)、R_UnitData1:R_UnitData0(有效数字)
0705                ;-----------  去皮  ----------------
0706                L_CalcHeft1:
0707  01B3  DE85                BSF     R_PubFlag0,7    ;1->R_PubFlag0.7 读当前内码作为零点内码(去皮)
0708  01B4  A25F                GOTO    L_CalcHeftRet   ;返回
0709                ;-----------  快速标定  ------------
0710                L_CalcHeft2:
0711  01B5  4020                MOVLW   20H
0712  01B6  228E                MOVWF   R_PubCnt1       ;20H->R_PubCnt1
0713  01B7  C482                BCF     R_WorkStatus,2  ;0->R_WorkStatus.2
0714  01B8  D682                BSF     R_WorkStatus,3  ;1->R_WorkStatus.3
0715  01B9  20DC                MOVFW   R_CaliDataL     ;\
0716  01BA  22E8                MOVWF   R_TempCaliDataL ; | [R_CaliDataH:R_CaliDataL]
0717  01BB  20DD                MOVFW   R_CaliDataH     ; | ->R_TempCaliDataH:R_TempCaliDataL 暂存
0718  01BC  22E9                MOVWF   R_TempCaliDataH ;/
0719  01BD  EA85    			BTFSC	R_PubFlag0,5
0720  01BE  A1C3    			GOTO	L_CalcHeft21	;[R_PubFlag0].5=1(称重数据稳定),转
0721  01BF  209A    			MOVFW	R_LastAverageL	;\
0722  01C0  22A3    			MOVWF	R_SteadyCodeL	; | [R_LastAverageH:R_LastAverageL]
0723  01C1  209B    			MOVFW	R_LastAverageH	; | ->R_SteadyCodeH:R_SteadyCodeL 数据不稳,取当前的平均值
0724  01C2  22A4    			MOVWF	R_SteadyCodeH	;/
0725                L_CalcHeft21:
0726  01C3  4000    			MOVLW	00H		        ;\
0727  01C4  2287    			MOVWF	R_PubReg0		; | 0100H (快速标定分度数=1000)
0728  01C5  2001    			MOVFW	01H		        ; | ->R_PubReg1:R_PubReg0
0729  01C6  2288    			MOVWF	R_PubReg1		;/
0730  01C7  A386                GOTO    S_CaliCodeComm	;标定时计算每个内码相当于重量的分度数×65536->R_CaliDataH:R_CaliDataL
0731                ;
0732                L_CalcHeft22:
0733  01C8  20E8                MOVFW   R_TempCaliDataL ;\
0734  01C9  22DC                MOVWF   R_CaliDataL     ; | [R_TempCaliDataH:R_TempCaliDataL]
0735  01CA  20E9                MOVFW   R_TempCaliDataH ; | ->R_CaliDataH:R_CaliDataL 恢复原来的标定数据
0736  01CB  22DD                MOVWF   R_CaliDataH     ;/
0737                L_CalcHeft23:
0738  01CC  C682                BCF     R_WorkStatus,3  ;0->R_WorkStatus.3
0739  01CD  2092                MOVFW   R_KeyStatus
0740  01CE  687F                ANDLW   7FH
0741  01CF  6C70                IORLW   70H
0742  01D0  2292                MOVWF   R_KeyStatus     ;7->R_KeyStatus.3:0
0743  01D1  A25F                GOTO    L_CalcHeftRet   ;返回
0744                ;
0745                L_CalcHeft3:
0746  01D2  C886                BCF     R_PubFlag1,4    ;0->R_PubFlag1.4
0747  01D3  E892                BTFSC   R_KeyStatus,4
0748  01D4  A1C8                GOTO    L_CalcHeft22    ;[R_KeyStatus].4=1 转
0749  01D5  F085                BTFSS   R_PubFlag0,0
0750  01D6  A25F                GOTO    L_CalcHeftRet   ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0751  01D7  168E                DECFSZ  R_PubCnt1,1     ;[R_PubCnt1]-1->R_PubCnt1
0752  01D8  A1DF                GOTO    L_CalcHeft31    ;[R_PubCnt1]>0 转
0753  01D9  0207                CLRF    INTE            ;关所有中断
0754  01DA  86A8                CALL    S_WrCaliData	;将[R_CaliChksumH:R_CaliMarkL]的8个16位数据写入到93LC46的00H-07H中
0755  01DB  0206    			CLRF	INTF
0756  01DC  4094    			MOVLW	10010100B
0757  01DD  2207    			MOVWF	INTE			;GIE=1,TMIE=1,ADIE=1
0758  01DE  A1CC                GOTO    L_CalcHeft23
0759                L_CalcHeft31:
0760  01DF  F285                BTFSS   R_PubFlag0,1
0761  01E0  A25F                GOTO    L_CalcHeftRet   ;[R_PubFlag0].1=0(未到1/2秒) 转,返回
0762  01E1  E491                BTFSC   R_TimerCnt,2
0763  01E2  A535                GOTO    S_ClrDisp       ;[R_TimerCnt].2=1 转,清显示
0764                ;下面计算出重量值,并根据公/英制要求送显示缓冲区
0765                L_CalcHeft4:
0766  01E3  F885    			BTFSS	R_PubFlag0,4
0767  01E4  A25F    			GOTO	L_CalcHeftRet	;[R_PubFlag0].4=0(无新的有效内码) 转,返回
0768  01E5  4001    			MOVLW	01H
0769  01E6  2ACF    			ANDWF	R_DispFlag,1	;0->R_DispFlag.7:1
0770  01E7  E886    			BTFSC	R_PubFlag1,4
0771  01E8  A260    			GOTO	L_DispOverErr	;[R_PubFlag1].4=1(超载) 转,显示超载错误
0772  01E9  20A0    			MOVFW	R_ZeroCodeL		;\
0773  01EA  2287    			MOVWF	R_PubReg0		; | [R_ZeroCodeH:R_ZeroCodeL] (零点内码)
0774  01EB  20A1    			MOVFW	R_ZeroCodeH		; | ->R_PubReg1:R_PubReg0
0775  01EC  2288    			MOVWF	R_PubReg1		;/
0776  01ED  209A    			MOVFW	R_LastAverageL	;\
0777  01EE  228B    			MOVWF	R_PubReg4		; | [R_LastAverageH:R_LastAverageL] (当前平均内码)
0778  01EF  209B    			MOVFW	R_LastAverageH	; | ->R_PubReg5:R_PubReg4
0779  01F0  228C    			MOVWF	R_PubReg5		;/
0780  01F1  844C    			CALL	S_CalcABS		;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
0781  01F2  E686    			BTFSC	R_PubFlag1,3
0782  01F3  D4CF    			BSF		R_DispFlag,2	;[R_PubFlag1].3=1,1->R_DispFlag.2 显示负号
0783  01F4  20DC    			MOVFW	R_CaliDataL		;\
0784  01F5  2289    			MOVWF	R_PubReg2		; | 重量标定数据[R_CaliDataH:R_CaliDataL]
0785  01F6  20DD    			MOVFW	R_CaliDataH		; | ->R_PubReg3:R_PubReg2
0786  01F7  228A    			MOVWF	R_PubReg3		;/
0787  01F8  85AA    			CALL	S_Multi			;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0788  01F9  208A    			MOVFW	R_PubReg3
0789  01FA  68FF    			ANDLW	0FFH
0790  01FB  F004    			BTFSS	STATUS,Z
0791  01FC  A20A    			GOTO	L_CalcHeft42	;[R_PubReg3]>0 转
0792  01FD  2089    			MOVFW	R_PubReg2
0793  01FE  68FE    			ANDLW	0FEH
0794  01FF  F004    			BTFSS	STATUS,Z
0795  0200  A20A    			GOTO	L_CalcHeft42	;[R_PubReg2]≥2 转
0796  0201  FA85    			BTFSS	R_PubFlag0,5
0797  0202  A208    			GOTO	L_CalcHeft41	;[R_PubFlag0].5=0(称重数据不稳定) 转
0798  0203  209A    			MOVFW	R_LastAverageL	;\
0799  0204  22A0    			MOVWF	R_ZeroCodeL   	; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0800  0205  209B    			MOVFW	R_LastAverageH	; | 保存零点内码
0801  0206  22A1    			MOVWF	R_ZeroCodeH		;/
0802  0207  0289    			CLRF	R_PubReg2		;0->R_PubReg2
0803                L_CalcHeft41:
0804  0208  0288    			CLRF	R_PubReg1		;0->R_PubReg1
0805  0209  A22A    			GOTO	L_DispHeft
0806                L_CalcHeft42:
0807  020A  20E6    			MOVFW	R_MaxScaleMarkL	;\
0808  020B  1889    			SUBWF	R_PubReg2,0		; |
0809  020C  20E7    			MOVFW	R_MaxScaleMarkH	; | [R_PubReg3:R_PubReg2]≥[R_MaxScaleMarkH:R_MaxScaleMarkL]
0810  020D  388A    			SUBWFC	R_PubReg3,0		; | (称重结果≥最大分度数+9) 转 显示超载错误
0811  020E  E204    			BTFSC	STATUS,C		; |
0812  020F  A260    			GOTO	L_DispOverErr	;/
0813  0210  0290    			CLRF	R_PubCnt3		;0->R_PubCnt3
0814  0211  8497    			CALL	S_LeftMove 		;[R_PubReg3:R_PubReg0]左移,直到[R_PubReg3]≥80H,最多移16次
0815                ;					 				 实际移位次数加入[R_PubCnt3]
0816  0212  20EA    			MOVFW	R_UnitData0		;\
0817  0213  228B    			MOVWF	R_PubReg4		; | [R_UnitData1:R_UnitData0]
0818  0214  20EB    			MOVFW	R_UnitData1		; | ->R_PubReg5:R_PubReg4
0819  0215  228C    			MOVWF	R_PubReg5		;/
0820  0216  20EC    			MOVFW	R_UnitData2
0821  0217  0690    			ADDWF	R_PubCnt3,1		;[R_PubCnt3]+[R_UnitData2]->R_PubCnt3
0822  0218  85AA    			CALL	S_Multi			;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0823                L_CalcHeft4L1:
0824  0219  2090    			MOVFW	R_PubCnt3
0825  021A  68FF    			ANDLW	0FFH
0826  021B  E004    			BTFSC	STATUS,Z
0827  021C  A22A    			GOTO	L_DispHeft		;[R_PubCnt3]=0 转
0828  021D  EE90    			BTFSC	R_PubCnt3,7
0829  021E  A226    			GOTO	L_CalcHeft43	;[R_PubCnt3]≥80H 转
0830  021F  1290    			DECF	R_PubCnt3,1		;[R_PubCnt3]-1->R_PubCnt3
0831  0220  C204    			BCF		STATUS,C		;0->Cy
0832  0221  3E8A    			RRF		R_PubReg3,1		;\
0833  0222  3E89    			RRF		R_PubReg2,1		; | [R_PubReg3:R_PubReg0]右移1位
0834  0223  3E88    			RRF		R_PubReg1,1		; | ->R_PubReg3:R_PubReg0
0835  0224  3E87    			RRF		R_PubReg0,1		;/
0836  0225  A219    			GOTO	L_CalcHeft4L1
0837                L_CalcHeft43:
0838  0226  4001    			MOVLW	1
0839  0227  2284    			MOVWF	R_Count			;1->R_Count
0840  0228  849B    			CALL	S_RL1Bit	;[R_PubCnt3]+1->R_PubCnt3,[R_PubReg3:R_PubReg0]左移1位->R_PubReg3:R_PubReg0
0841  0229  A219    			GOTO	L_CalcHeft4L1
0842                L_DispHeft:
0843  022A  20E0    			MOVFW	R_DecimalDigits
0844  022B  22C9    			MOVWF	R_DispMode		;[R_DecimalDigits](小数位数)->R_DispMode
0845  022C  D4C9    			BSF		R_DispMode,2	;1->R_DispMode.2 显示计量单位
0846  022D  EA85    			BTFSC	R_PubFlag0,5
0847  022E  D6CF    			BSF		R_DispFlag,3	;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
0848  022F  20E1    			MOVFW	R_ScaleMarkV
0849  0230  0008    			ADDPCW
0850  0231  A243    			GOTO	L_DispHeft_11	;[R_ScaleMarkV]=0
0851  0232  A243    			GOTO	L_DispHeft_11	;[R_ScaleMarkV]=1
0852  0233  A23D    			GOTO	L_DispHeft_12	;[R_ScaleMarkV]=2
0853  0234  A236    			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=3
0854  0235  A236    			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=4
0855                ;			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=5
0856                L_DispHeft_15:						;分度值=5
0857  0236  4080    			MOVLW	80H				;\
0858  0237  0488    			ADDWF	R_PubReg1,0		; |
0859  0238  4002    			MOVLW	2				; | [R_PubReg3:R_PubReg2]+2.5
0860  0239  2689    			ADDWFC	R_PubReg2,1		; | ->R_PubReg3:R_PubReg2
0861  023A  4000    			MOVLW	0				; | (四舍五入)
0862  023B  268A    			ADDWFC	R_PubReg3,1		;/
0863  023C  A249    			GOTO	L_DispHeft_2
0864                L_DispHeft_12:						;分度值=2
0865  023D  4001    			MOVLW	1				;\
0866  023E  0689    			ADDWF	R_PubReg2,1		; | [R_PubReg3:R_PubReg2]+1
0867  023F  4000    			MOVLW	0				; | ->R_PubReg3:R_PubReg2
0868  0240  268A    			ADDWFC	R_PubReg3,1		;/  (四舍五入)
0869  0241  C089    			BCF		R_PubReg2,0		;0->R_PubReg2.0
0870  0242  A249    			GOTO	L_DispHeft_2
0871                L_DispHeft_11:						;分度值=1
0872  0243  4080    			MOVLW	80H				;\
0873  0244  0488    			ADDWF	R_PubReg1,0		; |
0874  0245  4000    			MOVLW	0				; | [R_PubReg3:R_PubReg2]+0.5
0875  0246  2689    			ADDWFC	R_PubReg2,1		; | ->R_PubReg3:R_PubReg2
0876  0247  4000    			MOVLW	0				; | (四舍五入)
0877  0248  268A    			ADDWFC	R_PubReg3,1		;/
0878                L_DispHeft_2:
0879  0249  2089    			MOVFW	R_PubReg2
0880  024A  2C8A    			IORWF	R_PubReg3,0
0881  024B  F004    			BTFSS	STATUS,Z
0882  024C  A24F    			GOTO	L_DispHeft_3	;[R_PubReg3:R_PubReg2]>0 转
0883  024D  C4CF    			BCF		R_DispFlag,2	;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.2 不显示负号
0884  024E  C6CF    			BCF		R_DispFlag,3	;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.3 不显示锁符

⌨️ 快捷键说明

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