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