📄 9821h620.lst
字号:
0451 00E7 188C SUBWF R_PubReg5,0
0452 00E8 F004 BTFSS STATUS,Z
0453 00E9 A119 GOTO L_MainAdcP_7 ;[R_PubReg5]>0 (数据不稳) 转
0454 00EA 208B MOVFW R_PubReg4
0455 00EB 18E3 SUBWF R_OffsetCode,0
0456 00EC F204 BTFSS STATUS,C
0457 00ED A119 GOTO L_MainAdcP_7 ;[R_PubReg4]>[R_OffsetCode] (数据不稳) 转
0458 00EE EA85 BTFSC R_PubFlag0,5
0459 00EF A105 GOTO L_MainAdcP_5 ;[R_PubFlag0].5=1(已锁定) 转
0460 00F0 20E2 MOVFW R_LockCodeNum
0461 00F1 189D SUBWF R_SteadyCnt,0
0462 00F2 E204 BTFSC STATUS,C
0463 00F3 A0F6 GOTO L_MainAdcP_3 ;[R_SteadyCnt]≥[R_LockCodeNum](稳定次数到)转
0464 00F4 0A9D INCF R_SteadyCnt,1 ;稳定次数未到,[R_SteadyCnt]+1->R_SteadyCnt
0465 00F5 A11D GOTO L_MainAdcP_8
0466 L_MainAdcP_3:
0467 00F6 DA85 BSF R_PubFlag0,5 ;1->R_PubFlag0.5 锁定
0468 00F7 EC85 BTFSC R_PubFlag0,6
0469 00F8 A0FB GOTO L_MainAdcP_4 ;[R_PubFlag0].6=1 转
0470 00F9 DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0471 00FA DE85 BSF R_PubFlag0,7 ;1->R_PubFlag0.7
0472 L_MainAdcP_4:
0473 00FB 2082 MOVFW R_WorkStatus
0474 00FC 6870 ANDLW 70H
0475 00FD 7030 XORLW 30H
0476 00FE F004 BTFSS STATUS,Z
0477 00FF A11D GOTO L_MainAdcP_8 ;[R_WorkStatus]的高4位≠3且≠B,转
0478 0100 209A MOVFW R_LastAverageL ;\
0479 0101 22A0 MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0480 0102 209B MOVFW R_LastAverageH ; | 标定中保存当前锁定内码
0481 0103 22A1 MOVWF R_ZeroCodeH ;/
0482 0104 A11D GOTO L_MainAdcP_8
0483 L_MainAdcP_5:
0484 ; 自动追重暂不处理
0485 0105 A11D GOTO L_MainAdcP_8
0486 L_MainAdcP_6:
0487 0106 4001 MOVLW 1
0488 0107 83A0 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0489 0108 2087 MOVFW R_PubReg0 ;\
0490 0109 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0491 010A 2088 MOVFW R_PubReg1 ; |
0492 010B 229B MOVWF R_LastAverageH ;/
0493 010C 4008 MOVLW 8
0494 010D 2284 MOVWF R_Count ;8->R_Count
0495 010E 40F0 MOVLW R_CodeBuffer
0496 010F 2202 MOVWF FSR0 ;R_CodeBuffer->FSR0
0497 L_MainAdcP_L1:
0498 0110 2087 MOVFW R_PubReg0
0499 0111 2200 MOVWF IND0
0500 0112 0A02 INCF FSR0,1
0501 0113 2088 MOVFW R_PubReg1
0502 0114 2200 MOVWF IND0
0503 0115 0A02 INCF FSR0,1
0504 0116 1684 DECFSZ R_Count,1
0505 0117 A110 GOTO L_MainAdcP_L1
0506 0118 02EF CLRF R_CodePointer ;0->R_CodePointer
0507 L_MainAdcP_7:
0508 0119 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5 (数据不稳)
0509 011A 029D CLRF R_SteadyCnt ;0->R_SteadyCnt
0510 011B 029E CLRF R_DifferenceL ;0->R_DifferenceL
0511 011C 029F CLRF R_DifferenceH ;0->R_DifferenceH
0512 L_MainAdcP_8:
0513 011D 4001 MOVLW 1
0514 011E 83A0 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0515 011F D886 BSF R_PubFlag1,4 ;1->R_PubFlag1.4
0516 0120 4024 MOVLW D_OverCodeL ;\
0517 0121 1887 SUBWF R_PubReg0,0 ; | [R_PubReg1:R_PubReg0]-D_OverCodeH:D_OverCodeL
0518 0122 40F4 MOVLW D_OverCodeH ; | (内码超载判断)
0519 0123 3888 SUBWFC R_PubReg1,0 ;/
0520 0124 F204 BTFSS STATUS,C
0521 0125 C886 BCF R_PubFlag1,4 ;内码不超载,0->R_PubFlag1.4
0522 0126 FA85 BTFSS R_PubFlag0,5
0523 0127 A131 GOTO L_Main_5 ;[R_PubFlag0].5=0(内码未锁定) 转
0524 0128 FE85 BTFSS R_PubFlag0,7
0525 0129 A131 GOTO L_Main_5 ;[R_PubFlag0].7=0, 转
0526 012A CE85 BCF R_PubFlag0,7 ;0->R_PubFlag0.7
0527 012B E886 BTFSC R_PubFlag1,4
0528 012C A131 GOTO L_Main_5 ;[R_PubFlag1]=1(内码超载) 转
0529 012D 209A MOVFW R_LastAverageL ;\
0530 012E 22A0 MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0531 012F 209B MOVFW R_LastAverageH ; | 保存零点内码
0532 0130 22A1 MOVWF R_ZeroCodeH ;/
0533 L_Main_5:
0534 0131 FE92 BTFSS R_KeyStatus,7
0535 0132 A14D GOTO L_Main_6 ;[R_KeyStatus].7=0 转
0536 ; CALL S_CalcDelay ;计算自动关机时间(单位:秒)->3DH:3CH
0537 0133 2082 MOVFW R_WorkStatus
0538 0134 6870 ANDLW 70H
0539 0135 7030 XORLW 30H
0540 0136 E004 BTFSC STATUS,Z
0541 0137 A14D GOTO L_Main_6 ;[R_WorkStatus]的高4位=3或=B(标定状态),转
0542 0138 400C MOVLW 0CH
0543 0139 1893 SUBWF R_KeyCode,0
0544 013A F004 BTFSS STATUS,Z
0545 013B A13E GOTO L_Main_51 ;[R_KeyCode]≠0CH(不是"OFF"键短键释放) 转
0546 013C 4040 MOVLW 40H ;"OFF"键短键释放
0547 013D 2282 MOVWF R_WorkStatus ;40H->R_WorkStatus 关机
0548 L_Main_51:
0549 013E 40E5 MOVLW 0E5H
0550 013F 1892 SUBWF R_KeyStatus,0
0551 0140 F004 BTFSS STATUS,Z
0552 0141 A14D GOTO L_Main_6 ;[R_KeyStatus]≠0E5H 转
0553 0142 4030 MOVLW 30H
0554 0143 2282 MOVWF R_WorkStatus ;同时按"OFF"+"TARE"键5秒以上进入标定状态
0555 0144 02A0 CLRF R_ZeroCodeL ;0->R_ZeroCodeL
0556 0145 02A1 CLRF R_ZeroCodeH ;0->R_ZeroCodeH
0557 0146 02A3 CLRF R_SteadyCodeL ;0->R_SteadyCodeL
0558 0147 02A4 CLRF R_SteadyCodeH ;0->R_SteadyCodeH
0559 0148 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5
0560 0149 DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0561 014A CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0562 014B CC92 BCF R_KeyStatus,6 ;0->R_KeyStatus.6
0563 014C D892 BSF R_KeyStatus,4 ;1->R_KeyStatus.4
0564 L_Main_6:
0565 014D 8153 CALL S_MainFunc ;主要功能
0566 014E CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0567 014F C885 BCF R_PubFlag0,4 ;0->R_PubFlag0.4
0568 0150 C285 BCF R_PubFlag0,1 ;0->R_PubFlag0.1
0569 0151 C085 BCF R_PubFlag0,0 ;0->R_PubFlag0.0
0570 0152 A07B GOTO L_MainLoop
0571 ;------------------------------------------------------------------------------
0572 ;子程序S_MainFunc ;主要功能
0573 S_MainFunc:
0574 0153 FE82 BTFSS R_WorkStatus,7
0575 0154 A15D GOTO L_MainFunc_1 ;[R_WorkStatus].7=0 转
0576 0155 208E MOVFW R_PubCnt1
0577 0156 68FF ANDLW 0FFH
0578 0157 E004 BTFSC STATUS,Z
0579 0158 A15D GOTO L_MainFunc_1 ;[R_PubCnt1]=0 转
0580 0159 F085 BTFSS R_PubFlag0,0
0581 015A A16B GOTO L_MainFuncRet ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0582 015B 168E DECFSZ R_PubCnt1,1 ;[R_PubCnt1]-1->R_PubCnt1
0583 015C A16B GOTO L_MainFuncRet ;[R_PubCnt1]>0 转,返回
0584 L_MainFunc_1:
0585 015D CE82 BCF R_WorkStatus,7 ;0->R_WorkStatus.7
0586 015E 40F0 MOVLW 0F0H
0587 015F 2882 ANDWF R_WorkStatus,0
0588 0160 E004 BTFSC STATUS,Z
0589 0161 A16C GOTO L_MainFunc0 ;[R_WorkStatus].7:4=0 转
0590 0162 44F0 ADDLW 0F0H
0591 0163 E004 BTFSC STATUS,Z
0592 0164 A180 GOTO L_CalcHeft ;[R_WorkStatus].7:4=1 转 计算并显示重量值
0593 0165 44E0 ADDLW 0E0H
0594 0166 E004 BTFSC STATUS,Z
0595 0167 A206 GOTO L_CaliProc ;[R_WorkStatus].7:4=3 转 标定处理
0596 0168 44F0 ADDLW 0F0H
0597 0169 E004 BTFSC STATUS,Z
0598 016A A2E7 GOTO L_OFF_Proc ;[R_WorkStatus].7:4=4 转 关机处理
0599 L_MainFuncRet:
0600 016B 0003 RETURN
0601 ;------------------------------------------------------------------------------
0602 L_MainFunc0: ;找零点
0603 016C E0CF BTFSC R_DispFlag,0
0604 016D A174 GOTO L_BattLowProc ;[R_DispFlag].0=1(电池电压低) 转
0605 ;
0606 016E 82CC CALL S_DispCaliCode ;去显示内码
0607 ; CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
0608 ; INCF R_WorkStatus,1 ;[R_WorkStatus]+1->R_WorkStatus
0609 ; BCF R_WorkStatus,2 ;0->R_WorkStatus.2
0610 ; MOVFW R_WorkStatus
0611 ; ANDLW 03H
0612 ; SUBLW R_DispBuff3
0613 ; MOVWF FSR0
0614 ; MOVLW 08H
0615 ; MOVWF IND0 ;08H("8")->IND0
0616 ; MOVLW 08H
0617 ; MOVWF R_DispMode ;1->R_DispMode.3 显示提示信息
0618 ; CALL S_Display ;显示
0619 ; MOVLW 08H
0620 ; MOVWF R_PubCnt1 ;08H->R_PubCnt1,定时0.5秒
0621 ; BSF R_WorkStatus,7 ;1->R_WorkStatus.7
0622 ;
0623 016F FC85 BTFSS R_PubFlag0,6
0624 0170 A173 GOTO L_MainFunc0Ret ;[R_PubFlag0].6=0 转
0625 0171 4010 MOVLW 10H
0626 0172 2282 MOVWF R_WorkStatus ;10H->R_WorkStatus 进入称重状态
0627 ; CALL S_CalcDelay ;计算自动关机时间(单位:秒)->3DH:3CH
0628 L_MainFunc0Ret:
0629 0173 0003 RETURN
0630 L_BattLowProc: ;电池低电压处理
0631 0174 4020 MOVLW 20H
0632 0175 228E MOVWF R_PubCnt1 ;20H->R_PubCnt1,定时2秒
0633 0176 40C0 MOVLW 0C0H
0634 0177 2282 MOVWF R_WorkStatus ;0C0H->R_WorkStatus,2秒后关机
0635 0178 84A4 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
0636 0179 4012 MOVLW 12H
0637 017A 22CC MOVWF R_DispBuff2 ;12H("L")->R_DispBuff2
0638 017B 4013 MOVLW 13H
0639 017C 22CB MOVWF R_DispBuff1 ;13H("o")->R_DispBuff1
0640 017D 4008 MOVLW 08H
0641 017E 22C9 MOVWF R_DispMode ;1->R_DispMode.3 显示提示信息
0642 017F A4C0 GOTO S_Display ;去显示" Lo "
0643 ;------------------------------------------------------------------------------
0644 L_CalcHeft: ;计算并显示重量值
0645 ; GOTO L_DispCaliCode ;去显示内码
0646 ;下面计算出重量值,并根据公/英制要求送显示缓冲区
0647 L_CalcHeft4:
0648 0180 F885 BTFSS R_PubFlag0,4
0649 0181 A1FC GOTO L_CalcHeftRet ;[R_PubFlag0].4=0(无新的有效内码) 转,返回
0650 0182 4001 MOVLW 01H
0651 0183 2ACF ANDWF R_DispFlag,1 ;0->R_DispFlag.7:1
0652 0184 E886 BTFSC R_PubFlag1,4
0653 0185 A1FD GOTO L_DispOverErr ;[R_PubFlag1].4=1(超载) 转,显示超载错误
0654 0186 20A0 MOVFW R_ZeroCodeL ;\
0655 0187 2287 MOVWF R_PubReg0 ; | [R_ZeroCodeH:R_ZeroCodeL] (零点内码)
0656 0188 20A1 MOVFW R_ZeroCodeH ; | ->R_PubReg1:R_PubReg0
0657 0189 2288 MOVWF R_PubReg1 ;/
0658 018A 209A MOVFW R_LastAverageL ;\
0659 018B 228B MOVWF R_PubReg4 ; | [R_LastAverageH:R_LastAverageL] (当前平均内码)
0660 018C 209B MOVFW R_LastAverageH ; | ->R_PubReg5:R_PubReg4
0661 018D 228C MOVWF R_PubReg5 ;/
0662 ;;
0663 ; MOVFW R_PubReg4
0664 ; MOVWF R_PubReg2
0665 ; MOVFW R_PubReg5
0666 ; MOVWF R_PubReg3
0667 ; GOTO L_DispHeft
0668 ;;
0669 018E 83BB CALL S_CalcABS ;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
0670 018F E686 BTFSC R_PubFlag1,3
0671 0190 D4CF BSF R_DispFlag,2 ;[R_PubFlag1].3=1,1->R_DispFlag.2 显示负号
0672 0191 20DC MOVFW R_CaliDataL ;\
0673 0192 2289 MOVWF R_PubReg2 ; | 重量标定数据[R_CaliDataH:R_CaliDataL]
0674 0193 20DD MOVFW R_CaliDataH ; | ->R_PubReg3:R_PubReg2
0675 0194 228A MOVWF R_PubReg3 ;/
0676 0195 8514 CALL S_Multi ;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0677 0196 208A MOVFW R_PubReg3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -