📄 9821h621.lst
字号:
0433 00C8 3888 SUBWFC R_PubReg1,0 ; /
0434 00C9 228C MOVWF R_PubReg5 ;/
0435 00CA 2087 MOVFW R_PubReg0 ;\
0436 00CB 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0437 00CC 2088 MOVFW R_PubReg1 ; |
0438 00CD 229B MOVWF R_LastAverageH ;/
0439 00CE 208B MOVFW R_PubReg4 ;\
0440 00CF 069C ADDWF R_DifferenceL,1 ; | [R_DifferenceH:R_DifferenceL]+[R_PubReg5:R_PubReg4]
0441 00D0 208C MOVFW R_PubReg5 ; | ->R_DifferenceH:R_DifferenceL (累计差值)
0442 00D1 269D ADDWFC R_DifferenceH,1 ;/
0443 00D2 209C MOVFW R_DifferenceL ;\
0444 00D3 228B MOVWF R_PubReg4 ; | [R_DifferenceH:R_DifferenceL]
0445 00D4 209D MOVFW R_DifferenceH ; | ->R_PubReg5:R_PubReg4
0446 00D5 228C MOVWF R_PubReg5 ;/
0447 00D6 FE8C BTFSS R_PubReg5,7
0448 00D7 A0D9 GOTO L_MainAdcP_2 ;[R_PubReg5].7=0(正数) 转
0449 00D8 83FA CALL S_CalcABS1 ;计算[R_PubReg5:R_PubReg4]的补码->R_PubReg5:R_PubReg4
0450 L_MainAdcP_2:
0451 00D9 4000 MOVLW 0
0452 00DA 188C SUBWF R_PubReg5,0
0453 00DB F004 BTFSS STATUS,Z
0454 00DC A10D GOTO L_MainAdcP_7 ;[R_PubReg5]>0 (数据不稳) 转
0455 00DD 208B MOVFW R_PubReg4
0456 00DE 18E3 SUBWF R_OffsetCode,0
0457 00DF F204 BTFSS STATUS,C
0458 00E0 A10D GOTO L_MainAdcP_7 ;[R_PubReg4]>[R_OffsetCode] (数据不稳) 转
0459 00E1 EA85 BTFSC R_PubFlag0,5
0460 00E2 A0F9 GOTO L_MainAdcP_5 ;[R_PubFlag0].5=1(已锁定) 转
0461 00E3 20E2 MOVFW R_LockCodeNum
0462 00E4 18A2 SUBWF R_SteadyCnt,0
0463 00E5 E204 BTFSC STATUS,C
0464 00E6 A0E9 GOTO L_MainAdcP_3 ;[R_SteadyCnt]≥[R_LockCodeNum](稳定次数到)转
0465 00E7 0AA2 INCF R_SteadyCnt,1 ;稳定次数未到,[R_SteadyCnt]+1->R_SteadyCnt
0466 00E8 A112 GOTO L_MainAdcP_8
0467 L_MainAdcP_3:
0468 00E9 DA85 BSF R_PubFlag0,5 ;1->R_PubFlag0.5 锁定
0469 00EA EC85 BTFSC R_PubFlag0,6
0470 00EB A0EE GOTO L_MainAdcP_4 ;[R_PubFlag0].6=1 转
0471 00EC DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0472 00ED DE85 BSF R_PubFlag0,7 ;1->R_PubFlag0.7
0473 L_MainAdcP_4:
0474 00EE 2082 MOVFW R_WorkStatus
0475 00EF 6870 ANDLW 70H
0476 00F0 7030 XORLW 30H
0477 00F1 F004 BTFSS STATUS,Z
0478 00F2 A0F8 GOTO L_MainAdcP_41 ;[R_WorkStatus]的高4位≠3且≠B,转
0479 00F3 209A MOVFW R_LastAverageL ;\
0480 00F4 229E MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0481 00F5 209B MOVFW R_LastAverageH ; | 标定中保存当前锁定内码
0482 00F6 229F MOVWF R_ZeroCodeH ;/
0483 00F7 A112 GOTO L_MainAdcP_8
0484 L_MainAdcP_41:
0485 00F8 A112 GOTO L_MainAdcP_8
0486 ;
0487 L_MainAdcP_5:
0488 00F9 A112 GOTO L_MainAdcP_8
0489 L_MainAdcP_6:
0490 00FA 4001 MOVLW 1
0491 00FB 83D7 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0492 00FC 2087 MOVFW R_PubReg0 ;\
0493 00FD 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0494 00FE 2088 MOVFW R_PubReg1 ; |
0495 00FF 229B MOVWF R_LastAverageH ;/
0496 0100 4008 MOVLW 8
0497 0101 2284 MOVWF R_Count ;8->R_Count
0498 0102 40F0 MOVLW R_CodeBuffer
0499 0103 2202 MOVWF FSR0 ;R_CodeBuffer->FSR0
0500 L_MainAdcP_L1:
0501 0104 2087 MOVFW R_PubReg0
0502 0105 2200 MOVWF IND0
0503 0106 0A02 INCF FSR0,1
0504 0107 2088 MOVFW R_PubReg1
0505 0108 2200 MOVWF IND0
0506 0109 0A02 INCF FSR0,1
0507 010A 1684 DECFSZ R_Count,1
0508 010B A104 GOTO L_MainAdcP_L1
0509 010C 02EF CLRF R_CodePointer ;0->R_CodePointer
0510 L_MainAdcP_7:
0511 010D CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5 (数据不稳)
0512 010E 02A2 CLRF R_SteadyCnt ;0->R_SteadyCnt
0513 010F 029C CLRF R_DifferenceL ;0->R_DifferenceL
0514 0110 029D CLRF R_DifferenceH ;0->R_DifferenceH
0515 0111 02A3 CLRF R_2dWeightCnt ;0->R_2dWeightCnt
0516 L_MainAdcP_8:
0517 0112 4001 MOVLW 1
0518 0113 83D7 CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0519 0114 D886 BSF R_PubFlag1,4 ;1->R_PubFlag1.4
0520 0115 4024 MOVLW D_OverCodeL ;\
0521 0116 1887 SUBWF R_PubReg0,0 ; | [R_PubReg1:R_PubReg0]-D_OverCodeH:D_OverCodeL
0522 0117 40F4 MOVLW D_OverCodeH ; | (内码超载判断)
0523 0118 3888 SUBWFC R_PubReg1,0 ;/
0524 0119 F204 BTFSS STATUS,C
0525 011A C886 BCF R_PubFlag1,4 ;0->R_PubFlag1.4
0526 011B FA85 BTFSS R_PubFlag0,5
0527 011C A126 GOTO L_Main_5 ;[R_PubFlag0].5=0(内码未锁定) 转
0528 011D FE85 BTFSS R_PubFlag0,7
0529 011E A126 GOTO L_Main_5 ;[R_PubFlag0].7=0, 转
0530 011F CE85 BCF R_PubFlag0,7 ;0->R_PubFlag0.7
0531 0120 E886 BTFSC R_PubFlag1,4
0532 0121 A126 GOTO L_Main_5 ;[R_PubFlag1].4=1 转
0533 0122 209A MOVFW R_LastAverageL ;\
0534 0123 229E MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0535 0124 209B MOVFW R_LastAverageH ; | 保存零点内码
0536 0125 229F MOVWF R_ZeroCodeH ;/
0537 L_Main_5:
0538 0126 FE92 BTFSS R_KeyStatus,7
0539 0127 A13C GOTO L_Main_6 ;[R_KeyStatus].7=0 转
0540 0128 8356 CALL S_CalcOffTime ;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0541 0129 2082 MOVFW R_WorkStatus
0542 012A 6870 ANDLW 70H
0543 012B 7030 XORLW 30H
0544 012C E004 BTFSC STATUS,Z
0545 012D A13C GOTO L_Main_6 ;[R_WorkStatus]的高4位=3或=B(标定状态),转
0546 012E 400C MOVLW 0CH
0547 012F 1893 SUBWF R_KeyCode,0
0548 0130 F004 BTFSS STATUS,Z
0549 0131 A13C GOTO L_Main_6 ;[R_KeyCode]≠0CH(不是"Cali"键短键释放) 转
0550 0132 4030 MOVLW 30H
0551 0133 2282 MOVWF R_WorkStatus ;"Cali"键短键释放进入标定状态
0552 0134 029E CLRF R_ZeroCodeL ;0->R_ZeroCodeL
0553 0135 029F CLRF R_ZeroCodeH ;0->R_ZeroCodeH
0554 0136 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5
0555 0137 DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0556 0138 CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0557 0139 CC92 BCF R_KeyStatus,6 ;0->R_KeyStatus.6
0558 013A D892 BSF R_KeyStatus,4 ;1->R_KeyStatus.4
0559 013B CA86 BCF R_PubFlag1,5 ;0->R_PubFlag1.5
0560 L_Main_6:
0561 013C 8142 CALL S_MainFunc ;主要功能
0562 013D CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0563 013E C885 BCF R_PubFlag0,4 ;0->R_PubFlag0.4
0564 013F C285 BCF R_PubFlag0,1 ;0->R_PubFlag0.1
0565 0140 C085 BCF R_PubFlag0,0 ;0->R_PubFlag0.0
0566 0141 A077 GOTO L_MainLoop
0567 ;------------------------------------------------------------------------------
0568 ;子程序S_MainFunc ;主要功能
0569 S_MainFunc:
0570 0142 FE82 BTFSS R_WorkStatus,7
0571 0143 A14C GOTO L_MainFunc_1 ;[R_WorkStatus].7=0 转
0572 0144 208E MOVFW R_PubCnt1
0573 0145 68FF ANDLW 0FFH
0574 0146 E004 BTFSC STATUS,Z
0575 0147 A14C GOTO L_MainFunc_1 ;[R_PubCnt1]=0 转
0576 0148 F085 BTFSS R_PubFlag0,0
0577 0149 A15A GOTO L_MainFuncRet ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0578 014A 168E DECFSZ R_PubCnt1,1 ;[R_PubCnt1]-1->R_PubCnt1
0579 014B A15A GOTO L_MainFuncRet ;[R_PubCnt1]>0 转,返回
0580 L_MainFunc_1:
0581 014C CE82 BCF R_WorkStatus,7 ;0->R_WorkStatus.7
0582 014D 40F0 MOVLW 0F0H
0583 014E 2882 ANDWF R_WorkStatus,0
0584 014F E004 BTFSC STATUS,Z
0585 0150 A15B GOTO L_MainFunc0 ;[R_WorkStatus].7:4=0 转
0586 0151 44F0 ADDLW 0F0H
0587 0152 E004 BTFSC STATUS,Z
0588 0153 A178 GOTO L_CalcHeft ;[R_WorkStatus].7:4=1 转 计算并显示重量值
0589 0154 44E0 ADDLW 0E0H
0590 0155 E004 BTFSC STATUS,Z
0591 0156 A273 GOTO L_CaliProc ;[R_WorkStatus].7:4=3 转 标定处理
0592 0157 44F0 ADDLW 0F0H
0593 0158 E004 BTFSC STATUS,Z
0594 0159 A313 GOTO L_OFF_Proc ;[R_WorkStatus].7:4=4 转 关机处理
0595 L_MainFuncRet:
0596 015A 0003 RETURN
0597 ;------------------------------------------------------------------------------
0598 L_MainFunc0: ;找零点
0599 015B F0CF BTFSS R_DispFlag,0
0600 015C A15E GOTO L_MainFunc0_0 ;[R_DispFlag].0=0(电池电压正常) 转
0601 015D 0AAA INCF R_BattLowCnt,1 ;[R_DispFlag].0=1(电池电压低),[R_BattLowCnt]+1->R_BattLowCnt
0602 ; MOVLW 4
0603 ; SUBWF R_BattLowCnt,0
0604 ; BTFSC STATUS,C
0605 ; GOTO L_BattLowProc ;[R_BattLowCnt]≥4 转
0606 L_MainFunc0_0:
0607 015E F0CF BTFSS R_DispFlag,0
0608 015F 02AA CLRF R_BattLowCnt ;[R_DispFlag].0=0(电池电压正常),0->R_BattLowCnt
0609 ;
0610 ; CALL S_DispCaliCode ;去显示内码
0611 ;
0612 0160 FC85 BTFSS R_PubFlag0,6
0613 0161 A16B GOTO L_MainFunc0Ret ;[R_PubFlag0].6=0 转
0614 0162 E082 BTFSC R_WorkStatus,0
0615 0163 A168 GOTO L_MainFunc0_1 ;[R_WorkStatus].0=1 转
0616 0164 DE20 BSF PT1,7 ;1->PT1.7 点亮背光灯
0617 0165 D082 BSF R_WorkStatus,0 ;1->R_WorkStatus.0
0618 0166 0285 CLRF R_PubFlag0,6 ;0->R_PubFlag0.6
0619 0167 A16A GOTO L_MainFunc0_2
0620 L_MainFunc0_1:
0621 0168 4010 MOVLW 10H
0622 0169 2282 MOVWF R_WorkStatus ;10H->R_WorkStatus 进入称重状态
0623 L_MainFunc0_2:
0624 016A 8356 CALL S_CalcOffTime ;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0625 L_MainFunc0Ret:
0626 016B 0003 RETURN
0627 L_BattLowProc: ;电池低电压处理
0628 016C 4020 MOVLW 20H
0629 016D 228E MOVWF R_PubCnt1 ;20H->R_PubCnt1,定时2秒
0630 016E 40C0 MOVLW 0C0H
0631 016F 2282 MOVWF R_WorkStatus ;0C0H->R_WorkStatus,2秒后关机
0632 0170 8482 CALL S_ClrDisp ;清LCD显示缓冲区LCD1-LCD6
0633 0171 4012 MOVLW 12H
0634 0172 22CC MOVWF R_DispBuff2 ;12H("L")->R_DispBuff2
0635 0173 4013 MOVLW 13H
0636 0174 22CB MOVWF R_DispBuff1 ;13H("o")->R_DispBuff1
0637 0175 4008 MOVLW 08H
0638 0176 22C9 MOVWF R_DispMode ;1->R_DispMode.3 显示提示信息
0639 0177 A49E GOTO S_Display ;去显示" Lo "
0640 ;------------------------------------------------------------------------------
0641 ;下面计算出重量值,并根据公/英制要求送显示缓冲区
0642 L_CalcHeft: ;计算并显示重量值
0643 0178 F885 BTFSS R_PubFlag0,4
0644 0179 A25E GOTO L_CalcHeftRet ;[R_PubFlag0].4=0(无新的有效内码) 转,返回
0645 017A 4001 MOVLW 01H
0646 017B 2ACF ANDWF R_DispFlag,1 ;0->R_DispFlag.7:1
0647 017C E886 BTFSC R_PubFlag1,4
0648 017D A26A GOTO L_DispOverErr ;[R_PubFlag1].4=1(超载) 转,显示超载错误
0649 L_CalcHeft_1:
0650 017E 209E MOVFW R_ZeroCodeL ;\
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -