📄 9821h620.lst
字号:
0678 0197 68FF ANDLW 0FFH
0679 0198 F004 BTFSS STATUS,Z
0680 0199 A1A7 GOTO L_CalcHeft42 ;[R_PubReg3]>0 转
0681 019A 2089 MOVFW R_PubReg2
0682 019B 68FE ANDLW 0FEH
0683 019C F004 BTFSS STATUS,Z
0684 019D A1A7 GOTO L_CalcHeft42 ;[R_PubReg2]≥2 转
0685 019E FA85 BTFSS R_PubFlag0,5
0686 019F A1A5 GOTO L_CalcHeft41 ;[R_PubFlag0].5=0(称重数据不稳定) 转
0687 01A0 209A MOVFW R_LastAverageL ;\
0688 01A1 22A0 MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0689 01A2 209B MOVFW R_LastAverageH ; | 保存零点内码
0690 01A3 22A1 MOVWF R_ZeroCodeH ;/
0691 01A4 0289 CLRF R_PubReg2 ;0->R_PubReg2
0692 L_CalcHeft41:
0693 01A5 0288 CLRF R_PubReg1 ;0->R_PubReg1
0694 01A6 A1C7 GOTO L_DispHeft
0695 L_CalcHeft42:
0696 01A7 20E6 MOVFW R_MaxScaleMarkL ;\
0697 01A8 1889 SUBWF R_PubReg2,0 ; |
0698 01A9 20E7 MOVFW R_MaxScaleMarkH ; | [R_PubReg3:R_PubReg2]≥[R_MaxScaleMarkH:R_MaxScaleMarkL]
0699 01AA 388A SUBWFC R_PubReg3,0 ; | (称重结果≥最大分度数+9) 转 显示超载错误
0700 01AB E204 BTFSC STATUS,C ; |
0701 01AC A1FD GOTO L_DispOverErr ;/
0702 01AD 0290 CLRF R_PubCnt3 ;0->R_PubCnt3
0703 01AE 8406 CALL S_LeftMove ;[R_PubReg3:R_PubReg0]左移,直到[R_PubReg3]≥80H,最多移16次
0704 ; 实际移位次数加入[R_PubCnt3]
0705 01AF 20EA MOVFW R_UnitData0 ;\
0706 01B0 228B MOVWF R_PubReg4 ; | [R_UnitData1:R_UnitData0]
0707 01B1 20EB MOVFW R_UnitData1 ; | ->R_PubReg5:R_PubReg4
0708 01B2 228C MOVWF R_PubReg5 ;/
0709 01B3 20EC MOVFW R_UnitData2
0710 01B4 0690 ADDWF R_PubCnt3,1 ;[R_PubCnt3]+[R_UnitData2]->R_PubCnt3
0711 01B5 8514 CALL S_Multi ;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0712 L_CalcHeft4L1:
0713 01B6 2090 MOVFW R_PubCnt3
0714 01B7 68FF ANDLW 0FFH
0715 01B8 E004 BTFSC STATUS,Z
0716 01B9 A1C7 GOTO L_DispHeft ;[R_PubCnt3]=0 转
0717 01BA EE90 BTFSC R_PubCnt3,7
0718 01BB A1C3 GOTO L_CalcHeft43 ;[R_PubCnt3]≥80H 转
0719 01BC 1290 DECF R_PubCnt3,1 ;[R_PubCnt3]-1->R_PubCnt3
0720 01BD C204 BCF STATUS,C ;0->Cy
0721 01BE 3E8A RRF R_PubReg3,1 ;\
0722 01BF 3E89 RRF R_PubReg2,1 ; | [R_PubReg3:R_PubReg0]右移1位
0723 01C0 3E88 RRF R_PubReg1,1 ; | ->R_PubReg3:R_PubReg0
0724 01C1 3E87 RRF R_PubReg0,1 ;/
0725 01C2 A1B6 GOTO L_CalcHeft4L1
0726 L_CalcHeft43:
0727 01C3 4001 MOVLW 1
0728 01C4 2284 MOVWF R_Count ;1->R_Count
0729 01C5 840A CALL S_RL1Bit ;[R_PubCnt3]+1->R_PubCnt3,[R_PubReg3:R_PubReg0]左移1位->R_PubReg3:R_PubReg0
0730 01C6 A1B6 GOTO L_CalcHeft4L1
0731 L_DispHeft:
0732 01C7 20E0 MOVFW R_DecimalDigits
0733 01C8 22C9 MOVWF R_DispMode ;[R_DecimalDigits](小数位数)->R_DispMode
0734 01C9 D4C9 BSF R_DispMode,2 ;1->R_DispMode.2 显示计量单位
0735 01CA EA85 BTFSC R_PubFlag0,5
0736 01CB D6CF BSF R_DispFlag,3 ;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
0737 01CC 20E1 MOVFW R_ScaleMarkV
0738 01CD 0008 ADDPCW
0739 01CE A1E0 GOTO L_DispHeft_11 ;[R_ScaleMarkV]=0
0740 01CF A1E0 GOTO L_DispHeft_11 ;[R_ScaleMarkV]=1
0741 01D0 A1DA GOTO L_DispHeft_12 ;[R_ScaleMarkV]=2
0742 01D1 A1D3 GOTO L_DispHeft_15 ;[R_ScaleMarkV]=3
0743 01D2 A1D3 GOTO L_DispHeft_15 ;[R_ScaleMarkV]=4
0744 ; GOTO L_DispHeft_15 ;[R_ScaleMarkV]=5
0745 L_DispHeft_15: ;分度值=5
0746 01D3 4080 MOVLW 80H ;\
0747 01D4 0488 ADDWF R_PubReg1,0 ; |
0748 01D5 4002 MOVLW 2 ; | [R_PubReg3:R_PubReg2]+2.5
0749 01D6 2689 ADDWFC R_PubReg2,1 ; | ->R_PubReg3:R_PubReg2
0750 01D7 4000 MOVLW 0 ; | (四舍五入)
0751 01D8 268A ADDWFC R_PubReg3,1 ;/
0752 01D9 A1E6 GOTO L_DispHeft_2
0753 L_DispHeft_12: ;分度值=2
0754 01DA 4001 MOVLW 1 ;\
0755 01DB 0689 ADDWF R_PubReg2,1 ; | [R_PubReg3:R_PubReg2]+1
0756 01DC 4000 MOVLW 0 ; | ->R_PubReg3:R_PubReg2
0757 01DD 268A ADDWFC R_PubReg3,1 ;/ (四舍五入)
0758 01DE C089 BCF R_PubReg2,0 ;0->R_PubReg2.0
0759 01DF A1E6 GOTO L_DispHeft_2
0760 L_DispHeft_11: ;分度值=1
0761 01E0 4080 MOVLW 80H ;\
0762 01E1 0488 ADDWF R_PubReg1,0 ; |
0763 01E2 4000 MOVLW 0 ; | [R_PubReg3:R_PubReg2]+0.5
0764 01E3 2689 ADDWFC R_PubReg2,1 ; | ->R_PubReg3:R_PubReg2
0765 01E4 4000 MOVLW 0 ; | (四舍五入)
0766 01E5 268A ADDWFC R_PubReg3,1 ;/
0767 L_DispHeft_2:
0768 01E6 2089 MOVFW R_PubReg2
0769 01E7 2C8A IORWF R_PubReg3,0
0770 01E8 F004 BTFSS STATUS,Z
0771 01E9 A1EC GOTO L_DispHeft_3 ;[R_PubReg3:R_PubReg2]>0 转
0772 01EA C4CF BCF R_DispFlag,2 ;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.2 不显示负号
0773 01EB C6CF BCF R_DispFlag,3 ;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.3 不显示锁符
0774 L_DispHeft_3:
0775 01EC 4008 MOVLW 8
0776 01ED 18A5 SUBWF R_SteadyTimer,0
0777 01EE E204 BTFSC STATUS,C
0778 01EF CE20 BCF PT1,7 ;[R_SteadyTimer]≥8(称重稳定到1秒),0->PT1.7(关背光灯)
0779 01F0 8546 CALL S_Hex2BCD ;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
0780 01F1 4003 MOVLW 3
0781 01F2 18E1 SUBWF R_ScaleMarkV,0
0782 01F3 F204 BTFSS STATUS,C
0783 01F4 A1FB GOTO L_DispHeft_4 ;[R_ScaleMarkV]<3(分度值≠5) 转
0784 01F5 4005 MOVLW 5 ;分度值=5
0785 01F6 18CA SUBWF R_DispBuff0,0
0786 01F7 4005 MOVLW 5 ;[R_DispBuff0]≥5,5->R_DispBuff0
0787 01F8 F204 BTFSS STATUS,C
0788 01F9 4000 MOVLW 0 ;[R_DispBuff0]<5,0->R_DispBuff0
0789 01FA 22CA MOVWF R_DispBuff0
0790 L_DispHeft_4:
0791 01FB A4C0 GOTO S_Display ;去显示
0792 L_CalcHeftRet:
0793 01FC 0003 RETURN
0794 ;
0795 L_DispOverErr: ;显示超载错误
0796 01FD 84A4 CALL S_ClrDisp
0797 01FE 400F MOVLW 0FH
0798 01FF 22CD MOVWF R_DispBuff3 ;0FH("F")->R_DispBuff3
0799 0200 22CC MOVWF R_DispBuff2 ;0FH("F")->R_DispBuff2
0800 0201 22CB MOVWF R_DispBuff1 ;0FH("F")->R_DispBuff1
0801 0202 22CA MOVWF R_DispBuff0 ;0FH("F")->R_DispBuff0
0802 0203 4008 MOVLW 08H
0803 0204 22C9 MOVWF R_DispMode ;08H->R_DispMode,无小数点,16进制显示方式
0804 0205 A4C0 GOTO S_Display ;去显示
0805 ;------------------------------------------------------------------------------
0806 L_CaliProc: ;标定处理
0807 0206 4001 MOVLW 01H
0808 0207 2ACF ANDWF R_DispFlag,1 ;0->R_DispFlag.7:1
0809 0208 E282 BTFSC R_WorkStatus,1
0810 0209 A247 GOTO L_CaliPara ;[R_WorkStatus].1=1 转去标定功能状态字
0811 020A E082 BTFSC R_WorkStatus,0
0812 020B A214 GOTO L_CaliCode_1 ;[R_WorkStatus].0=1 转
0813 020C FA85 BTFSS R_PubFlag0,5
0814 020D A2CC GOTO L_DispCaliCode ;[R_PubFlag0].5=0(称重数据不稳定) 转去显示内码
0815 020E 20A0 MOVFW R_ZeroCodeL ;\
0816 020F 22DA MOVWF R_CaliCode0L ; | [R_ZeroCodeH:R_ZeroCodeL]
0817 0210 20A1 MOVFW R_ZeroCodeH ; | ->R_CaliCode0H:R_CaliCode0L 保存零点内码
0818 0211 22DB MOVWF R_CaliCode0H ;/
0819 0212 0A82 INCF R_WorkStatus,1 ;[R_WorkStatus]+1->R_WorkStatus
0820 0213 A2CC GOTO L_DispCaliCode ;去显示内码
0821 L_CaliCode_1:
0822 0214 F885 BTFSS R_PubFlag0,4
0823 0215 A229 GOTO L_CaliCode_11 ;[R_PubFlag0].4=0(无新的有效内码) 转
0824 0216 FA85 BTFSS R_PubFlag0,5
0825 0217 A229 GOTO L_CaliCode_11 ;[R_PubFlag0].5=0(称重数据不稳定) 转
0826 0218 20A0 MOVFW R_ZeroCodeL ;\
0827 0219 228B MOVWF R_PubReg4 ; | [R_ZeroCodeH:R_ZeroCodeL]
0828 021A 20A1 MOVFW R_ZeroCodeH ; | ->R_PubReg5:R_PubReg4
0829 021B 228C MOVWF R_PubReg5 ;/
0830 021C 20DA MOVFW R_CaliCode0L ;\
0831 021D 2287 MOVWF R_PubReg0 ; | [R_CaliCode0H:R_CaliCode0L]
0832 021E 20DB MOVFW R_CaliCode0H ; | ->R_PubReg1:R_PubReg0
0833 021F 2288 MOVWF R_PubReg1 ;/
0834 0220 83BB CALL S_CalcABS ;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
0835 0221 208C MOVFW R_PubReg5
0836 0222 68FF ANDLW 0FFH
0837 0223 F004 BTFSS STATUS,Z
0838 0224 A229 GOTO L_CaliCode_11 ;[R_PubReg5]>0 转
0839 0225 20A0 MOVFW R_ZeroCodeL ;\
0840 0226 22DA MOVWF R_CaliCode0L ; | [R_ZeroCodeH:R_ZeroCodeL]
0841 0227 20A1 MOVFW R_ZeroCodeH ; | ->R_CaliCode0H:R_CaliCode0L 保存零点内码
0842 0228 22DB MOVWF R_CaliCode0H ;/
0843 L_CaliCode_11:
0844 0229 EE92 BTFSC R_KeyStatus,7
0845 022A A233 GOTO L_CaliCode_2 ;[R_KeyStatus].7=1 转
0846 022B E892 BTFSC R_KeyStatus,4 ;[R_KeyStatus].7=0
0847 022C A2CC GOTO L_DispCaliCode ;[R_KeyStatus].4=1 转去显示内码
0848 022D 2093 MOVFW R_KeyCode
0849 022E 680F ANDLW 0FH
0850 022F 5806 SUBLW 06H
0851 0230 E004 BTFSC STATUS,Z
0852 0231 A2DB GOTO L_DispDate ;[R_KeyCode].2:0=6("TARE"键按下)转去显示日期
0853 0232 A2CC GOTO L_DispCaliCode ;去显示内码
0854 L_CaliCode_2:
0855 0233 400C MOVLW 0CH
0856 0234 1893 SUBWF R_KeyCode,0
0857 0235 F004 BTFSS STATUS,Z
0858 0236 A2CB GOTO L_CaliProcRet ;[R_KeyCode]≠0CH(不是"OFF"键短键释放) 转,返回
0859 0237 EA85 BTFSC R_PubFlag0,5
0860 0238 A23E GOTO L_CaliCode_3 ;[R_PubFlag0].5=1(称重数据稳定),转
0861 0239 209A MOVFW R_LastAverageL ;\
0862 023A 22A3 MOVWF R_SteadyCodeL ; | [R_LastAverageH:R_LastAverageL]
0863 023B 209B MOVFW R_LastAverageH ; | ->R_SteadyCodeH:R_SteadyCodeL 数据不稳,取当前的平均值
0864 023C 22A4 MOVWF R_SteadyCodeH ;/
0865 023D A242 GOTO L_CaliCode_4
0866 L_CaliCode_3:
0867 023E 20A0 MOVFW R_ZeroCodeL ;\ 称重数据稳定
0868 023F 22A3 MOVWF R_SteadyCodeL ; | [R_ZeroCodeH:R_ZeroCodeL]
0869 0240 20A1 MOVFW R_ZeroCodeH ; | ->R_SteadyCodeH:R_SteadyCodeL
0870 0241 22A4 MOVWF R_SteadyCodeH ;/
0871 L_CaliCode_4:
0872 0242 028E CLRF R_PubCnt1 ;0->R_PubCnt1
0873 0243 CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0874 0244 4070 MOVLW 70H
0875 0245 2E92 IORWF R_KeyStatus,1 ;07H->R_KeyStatus.7:4
0876 0246 0A82 INCF R_WorkStatus,1 ;[R_WorkStatus]+1->R_WorkStatus
0877 ;
0878 L_CaliPara: ;标定功能状态字
0879 0247 FE92 BTFSS R_KeyStatus,7
0880 0248 A260 GOTO L_DispCaliP_0 ;[R_KeyStatus].7=0 转 显示标定参数
0881 0249 4005 MOVLW 05H
0882 024A 1893 SUBWF R_KeyCode,0
0883 024B E004 BTFSC STATUS,Z
0884 024C A284 GOTO L_AdjustPara ;[R_KeyCode]=05H(是"UNIT"键按下) 转 调整标定值
0885 024D 40F0 MOVLW 0F0H
0886 024E 2892 ANDWF R_KeyStatus,0
0887 024F 5880 SUBLW 80H
0888 0250 F004 BTFSS STATUS,Z
0889 0251 A256 GOTO L_CaliPara_1 ;[R_KeyStatus].7:4≠8 转
0890 0252 4006 MOVLW 06H
0891 0253 1893 SUBWF R_KeyCode,0
0892 0254 E004 BTFSC STATUS,Z
0893 0255 A281 GOTO L_SeleParaBit ;[R_KeyCode]=6("TARE"键按下) 转 选择标定数据位
0894 L_CaliPara_1:
0895 0256 400C MOVLW 0CH
0896 0257 1893 SUBWF R_KeyCode,0
0897 0258 E004 BTFSC STATUS,Z
0898 0259 A284 GOTO L_AdjustPara ;[R_KeyCode]=0CH("OFF"短键释放) 转 调整标定值
0899 025A FA92 BTFSS R_KeyStatus,5
0900 025B A260 GOTO L_DispCaliP_0 ;[R_KeyStatus].5=0(按键未到2秒) 转
0901 025C 4004 MOVLW 04H
0902 025D 1893 SUBWF R_KeyCode,0
0903 025E E004 BTFSC STATUS,Z
0904 025F A2A9 GOTO L_CaliNextPara ;[R_KeyCode]=04H("OFF"键按下2秒) 转 进入下一个项目
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -