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