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