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