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