9821h620.lst
来自「用台湾富晶单片机开发的电子称包括源码和编译器」· LST 代码 · 共 1,108 行 · 第 1/5 页
LST
1,108 行
0441 00DE 069E ADDWF R_DifferenceL,1 ; | [R_DifferenceH:R_DifferenceL]+[R_PubReg5:R_PubReg4]
0442 00DF 208C MOVFW R_PubReg5 ; | ->R_DifferenceH:R_DifferenceL (累计差值)
0443 00E0 269F ADDWFC R_DifferenceH,1 ;/
0444 00E1 209E MOVFW R_DifferenceL ;\
0445 00E2 228B MOVWF R_PubReg4 ; | [R_DifferenceH:R_DifferenceL]
0446 00E3 209F MOVFW R_DifferenceH ; | ->R_PubReg5:R_PubReg4
0447 00E4 228C MOVWF R_PubReg5 ;/
0448 00E5 FE8C BTFSS R_PubReg5,7
0449 00E6 A0E8 GOTO L_MainAdcP_2 ;[R_PubReg5].7=0(正数) 转
0450 00E7 8454 CALL S_CalcABS1 ;计算[R_PubReg5:R_PubReg4]的补码->R_PubReg5:R_PubReg4
0451 L_MainAdcP_2:
0452 00E8 4000 MOVLW 0
0453 00E9 188C SUBWF R_PubReg5,0
0454 00EA F004 BTFSS STATUS,Z
0455 00EB A120 GOTO L_MainAdcP_7 ;[R_PubReg5]>0 (数据不稳) 转
0456 00EC 208B MOVFW R_PubReg4
0457 00ED 18E3 SUBWF R_OffsetCode,0
0458 00EE F204 BTFSS STATUS,C
0459 00EF A120 GOTO L_MainAdcP_7 ;[R_PubReg4]>[R_OffsetCode] (数据不稳) 转
0460 00F0 EA85 BTFSC R_PubFlag0,5
0461 00F1 A10C GOTO L_MainAdcP_5 ;[R_PubFlag0].5=1(已锁定) 转
0462 00F2 20E2 MOVFW R_LockCodeNum
0463 00F3 189D SUBWF R_SteadyCnt,0
0464 00F4 E204 BTFSC STATUS,C
0465 00F5 A0F8 GOTO L_MainAdcP_3 ;[R_SteadyCnt]≥[R_LockCodeNum](稳定次数到)转
0466 00F6 0A9D INCF R_SteadyCnt,1 ;稳定次数未到,[R_SteadyCnt]+1->R_SteadyCnt
0467 00F7 A124 GOTO L_MainAdcP_8
0468 L_MainAdcP_3:
0469 00F8 DA85 BSF R_PubFlag0,5 ;1->R_PubFlag0.5 锁定
0470 00F9 EC85 BTFSC R_PubFlag0,6
0471 00FA A0FD GOTO L_MainAdcP_4 ;[R_PubFlag0].6=1 转
0472 00FB DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0473 00FC DE85 BSF R_PubFlag0,7 ;1->R_PubFlag0.7
0474 L_MainAdcP_4:
0475 00FD 2082 MOVFW R_WorkStatus
0476 00FE 6870 ANDLW 70H
0477 00FF 7030 XORLW 30H
0478 0100 F004 BTFSS STATUS,Z
0479 0101 A107 GOTO L_MainAdcP_41 ;[R_WorkStatus]的高4位≠3且≠B,转
0480 0102 209A MOVFW R_LastAverageL ;\
0481 0103 22A0 MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0482 0104 209B MOVFW R_LastAverageH ; | 标定中保存当前锁定内码
0483 0105 22A1 MOVWF R_ZeroCodeH ;/
0484 0106 A124 GOTO L_MainAdcP_8
0485 L_MainAdcP_41:
0486 0107 209A MOVFW R_LastAverageL ;\
0487 0108 22A3 MOVWF R_SteadyCodeL ; | [R_LastAverageH:R_LastAverageL]
0488 0109 209B MOVFW R_LastAverageH ; | ->R_SteadyCodeH:R_SteadyCodeL 保存稳定内码数据
0489 010A 22A4 MOVWF R_SteadyCodeH ;/
0490 010B A124 GOTO L_MainAdcP_8
0491 ;
0492 L_MainAdcP_5:
0493 ; 自动追重暂不处理
0494 010C A124 GOTO L_MainAdcP_8
0495 L_MainAdcP_6:
0496 010D 4001 MOVLW 1
0497 010E 8431 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0498 010F 2087 MOVFW R_PubReg0 ;\
0499 0110 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0500 0111 2088 MOVFW R_PubReg1 ; |
0501 0112 229B MOVWF R_LastAverageH ;/
0502 0113 4008 MOVLW 8
0503 0114 2284 MOVWF R_Count ;8->R_Count
0504 0115 40F0 MOVLW R_CodeBuffer
0505 0116 2202 MOVWF FSR0 ;R_CodeBuffer->FSR0
0506 L_MainAdcP_L1:
0507 0117 2087 MOVFW R_PubReg0
0508 0118 2200 MOVWF IND0
0509 0119 0A02 INCF FSR0,1
0510 011A 2088 MOVFW R_PubReg1
0511 011B 2200 MOVWF IND0
0512 011C 0A02 INCF FSR0,1
0513 011D 1684 DECFSZ R_Count,1
0514 011E A117 GOTO L_MainAdcP_L1
0515 011F 02EF CLRF R_CodePointer ;0->R_CodePointer
0516 L_MainAdcP_7:
0517 0120 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5 (数据不稳)
0518 0121 029D CLRF R_SteadyCnt ;0->R_SteadyCnt
0519 0122 029E CLRF R_DifferenceL ;0->R_DifferenceL
0520 0123 029F CLRF R_DifferenceH ;0->R_DifferenceH
0521 L_MainAdcP_8:
0522 0124 4001 MOVLW 1
0523 0125 8431 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0524 0126 D886 BSF R_PubFlag1,4 ;1->R_PubFlag1.4
0525 0127 4024 MOVLW D_OverCodeL ;\
0526 0128 1887 SUBWF R_PubReg0,0 ; | [R_PubReg1:R_PubReg0]-D_OverCodeH:D_OverCodeL
0527 0129 40F4 MOVLW D_OverCodeH ; | (内码超载判断)
0528 012A 3888 SUBWFC R_PubReg1,0 ;/
0529 012B F204 BTFSS STATUS,C
0530 012C C886 BCF R_PubFlag1,4 ;内码不超载,0->R_PubFlag1.4
0531 012D FA85 BTFSS R_PubFlag0,5
0532 012E A138 GOTO L_Main_5 ;[R_PubFlag0].5=0(内码未锁定) 转
0533 012F FE85 BTFSS R_PubFlag0,7
0534 0130 A138 GOTO L_Main_5 ;[R_PubFlag0].7=0, 转
0535 0131 CE85 BCF R_PubFlag0,7 ;0->R_PubFlag0.7
0536 0132 E886 BTFSC R_PubFlag1,4
0537 0133 A138 GOTO L_Main_5 ;[R_PubFlag1]=1(内码超载) 转
0538 0134 209A MOVFW R_LastAverageL ;\
0539 0135 22A0 MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0540 0136 209B MOVFW R_LastAverageH ; | 保存零点内码
0541 0137 22A1 MOVWF R_ZeroCodeH ;/
0542 L_Main_5:
0543 0138 FE92 BTFSS R_KeyStatus,7
0544 0139 A155 GOTO L_Main_6 ;[R_KeyStatus].7=0 转
0545 013A 8354 CALL S_CalcOffTime ;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0546 013B 2082 MOVFW R_WorkStatus
0547 013C 6870 ANDLW 70H
0548 013D 7030 XORLW 30H
0549 013E E004 BTFSC STATUS,Z
0550 013F A155 GOTO L_Main_6 ;[R_WorkStatus]的高4位=3或=B(标定状态),转
0551 0140 400C MOVLW 0CH
0552 0141 1893 SUBWF R_KeyCode,0
0553 0142 F004 BTFSS STATUS,Z
0554 0143 A146 GOTO L_Main_51 ;[R_KeyCode]≠0CH(不是"OFF"键短键释放) 转
0555 0144 4040 MOVLW 40H ;"OFF"键短键释放
0556 0145 2282 MOVWF R_WorkStatus ;40H->R_WorkStatus 关机
0557 L_Main_51:
0558 0146 40E5 MOVLW 0E5H
0559 0147 1892 SUBWF R_KeyStatus,0
0560 0148 F004 BTFSS STATUS,Z
0561 0149 A155 GOTO L_Main_6 ;[R_KeyStatus]≠0E5H 转
0562 014A 4030 MOVLW 30H
0563 014B 2282 MOVWF R_WorkStatus ;同时按"OFF"+"TARE"键5秒以上进入标定状态
0564 014C 02A0 CLRF R_ZeroCodeL ;0->R_ZeroCodeL
0565 014D 02A1 CLRF R_ZeroCodeH ;0->R_ZeroCodeH
0566 014E 02A3 CLRF R_SteadyCodeL ;0->R_SteadyCodeL
0567 014F 02A4 CLRF R_SteadyCodeH ;0->R_SteadyCodeH
0568 0150 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5
0569 0151 DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0570 0152 CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0571 0153 CC92 BCF R_KeyStatus,6 ;0->R_KeyStatus.6
0572 0154 D892 BSF R_KeyStatus,4 ;1->R_KeyStatus.4
0573 L_Main_6:
0574 0155 815B CALL S_MainFunc ;主要功能
0575 0156 CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0576 0157 C885 BCF R_PubFlag0,4 ;0->R_PubFlag0.4
0577 0158 C285 BCF R_PubFlag0,1 ;0->R_PubFlag0.1
0578 0159 C085 BCF R_PubFlag0,0 ;0->R_PubFlag0.0
0579 015A A07C GOTO L_MainLoop
0580 ;------------------------------------------------------------------------------
0581 ;子程序S_MainFunc ;主要功能
0582 S_MainFunc:
0583 015B FE82 BTFSS R_WorkStatus,7
0584 015C A165 GOTO L_MainFunc_1 ;[R_WorkStatus].7=0 转
0585 015D 208E MOVFW R_PubCnt1
0586 015E 68FF ANDLW 0FFH
0587 015F E004 BTFSC STATUS,Z
0588 0160 A165 GOTO L_MainFunc_1 ;[R_PubCnt1]=0 转
0589 0161 F085 BTFSS R_PubFlag0,0
0590 0162 A173 GOTO L_MainFuncRet ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0591 0163 168E DECFSZ R_PubCnt1,1 ;[R_PubCnt1]-1->R_PubCnt1
0592 0164 A173 GOTO L_MainFuncRet ;[R_PubCnt1]>0 转,返回
0593 L_MainFunc_1:
0594 0165 CE82 BCF R_WorkStatus,7 ;0->R_WorkStatus.7
0595 0166 40F0 MOVLW 0F0H
0596 0167 2882 ANDWF R_WorkStatus,0
0597 0168 E004 BTFSC STATUS,Z
0598 0169 A174 GOTO L_MainFunc0 ;[R_WorkStatus].7:4=0 转
0599 016A 44F0 ADDLW 0F0H
0600 016B E004 BTFSC STATUS,Z
0601 016C A189 GOTO L_CalcHeft ;[R_WorkStatus].7:4=1 转 计算并显示重量值
0602 016D 44E0 ADDLW 0E0H
0603 016E E004 BTFSC STATUS,Z
0604 016F A269 GOTO L_CaliProc ;[R_WorkStatus].7:4=3 转 标定处理
0605 0170 44F0 ADDLW 0F0H
0606 0171 E004 BTFSC STATUS,Z
0607 0172 A34A GOTO L_OFF_Proc ;[R_WorkStatus].7:4=4 转 关机处理
0608 L_MainFuncRet:
0609 0173 0003 RETURN
0610 ;------------------------------------------------------------------------------
0611 L_MainFunc0: ;找零点
0612 0174 E0CF BTFSC R_DispFlag,0
0613 0175 A17D GOTO L_BattLowProc ;[R_DispFlag].0=1(电池电压低) 转
0614 ;
0615 0176 832F CALL S_DispCaliCode ;去显示内码
0616 ; CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
0617 ; INCF R_WorkStatus,1 ;[R_WorkStatus]+1->R_WorkStatus
0618 ; BCF R_WorkStatus,2 ;0->R_WorkStatus.2
0619 ; MOVFW R_WorkStatus
0620 ; ANDLW 03H
0621 ; SUBLW R_DispBuff3
0622 ; MOVWF FSR0
0623 ; MOVLW 08H
0624 ; MOVWF IND0 ;08H("8")->IND0
0625 ; MOVLW 08H
0626 ; MOVWF R_DispMode ;1->R_DispMode.3 显示提示信息
0627 ; CALL S_Display ;显示
0628 ; MOVLW 08H
0629 ; MOVWF R_PubCnt1 ;08H->R_PubCnt1,定时0.5秒
0630 ; BSF R_WorkStatus,7 ;1->R_WorkStatus.7
0631 ;
0632 0177 FC85 BTFSS R_PubFlag0,6
0633 0178 A17C GOTO L_MainFunc0Ret ;[R_PubFlag0].6=0 转
0634 0179 4010 MOVLW 10H
0635 017A 2282 MOVWF R_WorkStatus ;10H->R_WorkStatus 进入称重状态
0636 017B 8354 CALL S_CalcOffTime ;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0637 L_MainFunc0Ret:
0638 017C 0003 RETURN
0639 L_BattLowProc: ;电池低电压处理
0640 017D 4020 MOVLW 20H
0641 017E 228E MOVWF R_PubCnt1 ;20H->R_PubCnt1,定时2秒
0642 017F 40C0 MOVLW 0C0H
0643 0180 2282 MOVWF R_WorkStatus ;0C0H->R_WorkStatus,2秒后关机
0644 0181 8535 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
0645 0182 4012 MOVLW 12H
0646 0183 22CC MOVWF R_DispBuff2 ;12H("L")->R_DispBuff2
0647 0184 4013 MOVLW 13H
0648 0185 22CB MOVWF R_DispBuff1 ;13H("o")->R_DispBuff1
0649 0186 4008 MOVLW 08H
0650 0187 22C9 MOVWF R_DispMode ;1->R_DispMode.3 显示提示信息
0651 0188 A551 GOTO S_Display ;去显示" Lo "
0652 ;------------------------------------------------------------------------------
0653 L_CalcHeft: ;计算并显示重量值
0654 0189 E692 BTFSC R_KeyStatus,3
0655 018A A1D2 GOTO L_CalcHeft3 ;[R_KeyStatus].3=1 转
0656 018B FE92 BTFSS R_KeyStatus,7
0657 018C A1E3 GOTO L_CalcHeft4 ;[R_KeyStatus].7=0 转
0658 018D 2093 MOVFW R_KeyCode
0659 018E 580E SUBLW 0EH
0660 018F E004 BTFSC STATUS,Z
0661 0190 A1B3 GOTO L_CalcHeft1 ;[R_KeyCode]=0EH("TARE"键释放)转,去皮
0662 0191 2093 MOVFW R_KeyCode
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?