📄 9821h621.lst
字号:
0435 00C9 83DA CALL S_ReadCode ;计算最近4次的内码的平均值->R_PubReg1:R_PubReg0
0436 00CA 209A MOVFW R_LastAverageL ;\
0437 00CB 1887 SUBWF R_PubReg0,0 ; \
0438 00CC 228B MOVWF R_PubReg4 ; | [R_PubReg1:R_PubReg0]-[R_LastAverageH:R_LastAverageL]
0439 00CD 209B MOVFW R_LastAverageH ; | ->R_PubReg5:R_PubReg4
0440 00CE 3888 SUBWFC R_PubReg1,0 ; /
0441 00CF 228C MOVWF R_PubReg5 ;/
0442 00D0 2087 MOVFW R_PubReg0 ;\
0443 00D1 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0444 00D2 2088 MOVFW R_PubReg1 ; |
0445 00D3 229B MOVWF R_LastAverageH ;/
0446 00D4 208B MOVFW R_PubReg4 ;\
0447 00D5 069C ADDWF R_DifferenceL,1 ; | [R_DifferenceH:R_DifferenceL]+[R_PubReg5:R_PubReg4]
0448 00D6 208C MOVFW R_PubReg5 ; | ->R_DifferenceH:R_DifferenceL (累计差值)
0449 00D7 269D ADDWFC R_DifferenceH,1 ;/
0450 00D8 209C MOVFW R_DifferenceL ;\
0451 00D9 228B MOVWF R_PubReg4 ; | [R_DifferenceH:R_DifferenceL]
0452 00DA 209D MOVFW R_DifferenceH ; | ->R_PubReg5:R_PubReg4
0453 00DB 228C MOVWF R_PubReg5 ;/
0454 00DC FE8C BTFSS R_PubReg5,7
0455 00DD A0DF GOTO L_MainAdcP_2 ;[R_PubReg5].7=0(正数) 转
0456 00DE 83FD CALL S_CalcABS1 ;计算[R_PubReg5:R_PubReg4]的补码->R_PubReg5:R_PubReg4
0457 L_MainAdcP_2:
0458 00DF 4000 MOVLW 0
0459 00E0 188C SUBWF R_PubReg5,0
0460 00E1 F004 BTFSS STATUS,Z
0461 00E2 A113 GOTO L_MainAdcP_7 ;[R_PubReg5]>0 (数据不稳) 转
0462 00E3 208B MOVFW R_PubReg4
0463 00E4 18E3 SUBWF R_OffsetCode,0
0464 00E5 F204 BTFSS STATUS,C
0465 00E6 A113 GOTO L_MainAdcP_7 ;[R_PubReg4]>[R_OffsetCode] (数据不稳) 转
0466 00E7 EA85 BTFSC R_PubFlag0,5
0467 00E8 A0FF GOTO L_MainAdcP_5 ;[R_PubFlag0].5=1(已锁定) 转
0468 00E9 20E2 MOVFW R_LockCodeNum
0469 00EA 18A2 SUBWF R_SteadyCnt,0
0470 00EB E204 BTFSC STATUS,C
0471 00EC A0EF GOTO L_MainAdcP_3 ;[R_SteadyCnt]≥[R_LockCodeNum](稳定次数到)转
0472 00ED 0AA2 INCF R_SteadyCnt,1 ;稳定次数未到,[R_SteadyCnt]+1->R_SteadyCnt
0473 00EE A118 GOTO L_MainAdcP_8
0474 L_MainAdcP_3:
0475 00EF DA85 BSF R_PubFlag0,5 ;1->R_PubFlag0.5 锁定
0476 00F0 EC85 BTFSC R_PubFlag0,6
0477 00F1 A0F4 GOTO L_MainAdcP_4 ;[R_PubFlag0].6=1 转
0478 00F2 DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0479 00F3 DE85 BSF R_PubFlag0,7 ;1->R_PubFlag0.7
0480 L_MainAdcP_4:
0481 00F4 2082 MOVFW R_WorkStatus
0482 00F5 6870 ANDLW 70H
0483 00F6 7030 XORLW 30H
0484 00F7 F004 BTFSS STATUS,Z
0485 00F8 A0FE GOTO L_MainAdcP_41 ;[R_WorkStatus]的高4位≠3且≠B,转
0486 00F9 209A MOVFW R_LastAverageL ;\
0487 00FA 229E MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0488 00FB 209B MOVFW R_LastAverageH ; | 标定中保存当前锁定内码
0489 00FC 229F MOVWF R_ZeroCodeH ;/
0490 00FD A118 GOTO L_MainAdcP_8
0491 L_MainAdcP_41:
0492 00FE A118 GOTO L_MainAdcP_8
0493 ;
0494 L_MainAdcP_5:
0495 00FF A118 GOTO L_MainAdcP_8
0496 L_MainAdcP_6:
0497 0100 4001 MOVLW 1
0498 0101 83DA CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0499 0102 2087 MOVFW R_PubReg0 ;\
0500 0103 229A MOVWF R_LastAverageL ; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0501 0104 2088 MOVFW R_PubReg1 ; |
0502 0105 229B MOVWF R_LastAverageH ;/
0503 0106 4008 MOVLW 8
0504 0107 2284 MOVWF R_Count ;8->R_Count
0505 0108 40F0 MOVLW R_CodeBuffer
0506 0109 2202 MOVWF FSR0 ;R_CodeBuffer->FSR0
0507 L_MainAdcP_L1:
0508 010A 2087 MOVFW R_PubReg0
0509 010B 2200 MOVWF IND0
0510 010C 0A02 INCF FSR0,1
0511 010D 2088 MOVFW R_PubReg1
0512 010E 2200 MOVWF IND0
0513 010F 0A02 INCF FSR0,1
0514 0110 1684 DECFSZ R_Count,1
0515 0111 A10A GOTO L_MainAdcP_L1
0516 0112 02EF CLRF R_CodePointer ;0->R_CodePointer
0517 L_MainAdcP_7:
0518 0113 CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5 (数据不稳)
0519 0114 02A2 CLRF R_SteadyCnt ;0->R_SteadyCnt
0520 0115 029C CLRF R_DifferenceL ;0->R_DifferenceL
0521 0116 029D CLRF R_DifferenceH ;0->R_DifferenceH
0522 0117 02A3 CLRF R_2dWeightCnt ;0->R_2dWeightCnt
0523 L_MainAdcP_8:
0524 0118 4001 MOVLW 1
0525 0119 83DA CALL S_ReadCode ;读当前内码->R_PubReg1:R_PubReg0
0526 011A D886 BSF R_PubFlag1,4 ;1->R_PubFlag1.4
0527 011B 4024 MOVLW D_OverCodeL ;\
0528 011C 1887 SUBWF R_PubReg0,0 ; | [R_PubReg1:R_PubReg0]-D_OverCodeH:D_OverCodeL
0529 011D 40F4 MOVLW D_OverCodeH ; | (内码超载判断)
0530 011E 3888 SUBWFC R_PubReg1,0 ;/
0531 011F F204 BTFSS STATUS,C
0532 0120 C886 BCF R_PubFlag1,4 ;0->R_PubFlag1.4
0533 0121 FA85 BTFSS R_PubFlag0,5
0534 0122 A12C GOTO L_Main_5 ;[R_PubFlag0].5=0(内码未锁定) 转
0535 0123 FE85 BTFSS R_PubFlag0,7
0536 0124 A12C GOTO L_Main_5 ;[R_PubFlag0].7=0, 转
0537 0125 CE85 BCF R_PubFlag0,7 ;0->R_PubFlag0.7
0538 0126 E886 BTFSC R_PubFlag1,4
0539 0127 A12C GOTO L_Main_5 ;[R_PubFlag1].4=1 转
0540 0128 209A MOVFW R_LastAverageL ;\
0541 0129 229E MOVWF R_ZeroCodeL ; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0542 012A 209B MOVFW R_LastAverageH ; | 保存零点内码
0543 012B 229F MOVWF R_ZeroCodeH ;/
0544 L_Main_5:
0545 012C FE92 BTFSS R_KeyStatus,7
0546 012D A142 GOTO L_Main_6 ;[R_KeyStatus].7=0 转
0547 012E 8359 CALL S_CalcOffTime ;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0548 012F 2082 MOVFW R_WorkStatus
0549 0130 6870 ANDLW 70H
0550 0131 7030 XORLW 30H
0551 0132 E004 BTFSC STATUS,Z
0552 0133 A142 GOTO L_Main_6 ;[R_WorkStatus]的高4位=3或=B(标定状态),转
0553 0134 400C MOVLW 0CH
0554 0135 1893 SUBWF R_KeyCode,0
0555 0136 F004 BTFSS STATUS,Z
0556 0137 A142 GOTO L_Main_6 ;[R_KeyCode]≠0CH(不是"Cali"键短键释放) 转
0557 0138 4030 MOVLW 30H
0558 0139 2282 MOVWF R_WorkStatus ;"Cali"键短键释放进入标定状态
0559 013A 029E CLRF R_ZeroCodeL ;0->R_ZeroCodeL
0560 013B 029F CLRF R_ZeroCodeH ;0->R_ZeroCodeH
0561 013C CA85 BCF R_PubFlag0,5 ;0->R_PubFlag0.5
0562 013D DC85 BSF R_PubFlag0,6 ;1->R_PubFlag0.6
0563 013E CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0564 013F CC92 BCF R_KeyStatus,6 ;0->R_KeyStatus.6
0565 0140 D892 BSF R_KeyStatus,4 ;1->R_KeyStatus.4
0566 0141 CA86 BCF R_PubFlag1,5 ;0->R_PubFlag1.5
0567 L_Main_6:
0568 0142 8148 CALL S_MainFunc ;主要功能
0569 0143 CE92 BCF R_KeyStatus,7 ;0->R_KeyStatus.7
0570 0144 C885 BCF R_PubFlag0,4 ;0->R_PubFlag0.4
0571 0145 C285 BCF R_PubFlag0,1 ;0->R_PubFlag0.1
0572 0146 C085 BCF R_PubFlag0,0 ;0->R_PubFlag0.0
0573 0147 A078 GOTO L_MainLoop
0574 ;------------------------------------------------------------------------------
0575 ;子程序S_MainFunc ;主要功能
0576 S_MainFunc:
0577 0148 FE82 BTFSS R_WorkStatus,7
0578 0149 A152 GOTO L_MainFunc_1 ;[R_WorkStatus].7=0 转
0579 014A 208E MOVFW R_PubCnt1
0580 014B 68FF ANDLW 0FFH
0581 014C E004 BTFSC STATUS,Z
0582 014D A152 GOTO L_MainFunc_1 ;[R_PubCnt1]=0 转
0583 014E F085 BTFSS R_PubFlag0,0
0584 014F A160 GOTO L_MainFuncRet ;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0585 0150 168E DECFSZ R_PubCnt1,1 ;[R_PubCnt1]-1->R_PubCnt1
0586 0151 A160 GOTO L_MainFuncRet ;[R_PubCnt1]>0 转,返回
0587 L_MainFunc_1:
0588 0152 CE82 BCF R_WorkStatus,7 ;0->R_WorkStatus.7
0589 0153 40F0 MOVLW 0F0H
0590 0154 2882 ANDWF R_WorkStatus,0
0591 0155 E004 BTFSC STATUS,Z
0592 0156 A161 GOTO L_MainFunc0 ;[R_WorkStatus].7:4=0 转
0593 0157 44F0 ADDLW 0F0H
0594 0158 E004 BTFSC STATUS,Z
0595 0159 A17A GOTO L_CalcHeft ;[R_WorkStatus].7:4=1 转 计算并显示重量值
0596 015A 44E0 ADDLW 0E0H
0597 015B E004 BTFSC STATUS,Z
0598 015C A275 GOTO L_CaliProc ;[R_WorkStatus].7:4=3 转 标定处理
0599 015D 44F0 ADDLW 0F0H
0600 015E E004 BTFSC STATUS,Z
0601 015F A315 GOTO L_OFF_Proc ;[R_WorkStatus].7:4=4 转 关机处理
0602 L_MainFuncRet:
0603 0160 0003 RETURN
0604 ;------------------------------------------------------------------------------
0605 L_MainFunc0: ;找零点
0606 0161 F6CF BTFSS R_DispFlag,3
0607 0162 A167 GOTO L_MainFunc0_0 ;[R_DispFlag].3=0(电池电压正常) 转
0608 0163 4004 MOVLW 4
0609 0164 18AA SUBWF R_BattLowCnt,0
0610 0165 E204 BTFSC STATUS,C
0611 0166 A16E GOTO L_BattLowProc ;[R_BattLowCnt]≥4 转
0612 L_MainFunc0_0:
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 4008 MOVLW 08H
0651 017D 2ACF ANDWF R_DispFlag,1 ;0->R_DispFlag.7:4、2:0
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 + -