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 + -
显示快捷键?