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