9821h620.lst

来自「用台湾富晶单片机开发的电子称包括源码和编译器」· LST 代码 · 共 1,108 行 · 第 1/5 页

LST
1,108
字号
0441  00DE  069E    			ADDWF	R_DifferenceL,1	; | [R_DifferenceH:R_DifferenceL]+[R_PubReg5:R_PubReg4]
0442  00DF  208C    			MOVFW	R_PubReg5		; | ->R_DifferenceH:R_DifferenceL (累计差值)
0443  00E0  269F    			ADDWFC	R_DifferenceH,1	;/
0444  00E1  209E    			MOVFW	R_DifferenceL	;\
0445  00E2  228B    			MOVWF	R_PubReg4		; | [R_DifferenceH:R_DifferenceL]
0446  00E3  209F    			MOVFW	R_DifferenceH	; | ->R_PubReg5:R_PubReg4
0447  00E4  228C    			MOVWF	R_PubReg5		;/
0448  00E5  FE8C    			BTFSS	R_PubReg5,7
0449  00E6  A0E8    			GOTO	L_MainAdcP_2	;[R_PubReg5].7=0(正数) 转
0450  00E7  8454    			CALL	S_CalcABS1		;计算[R_PubReg5:R_PubReg4]的补码->R_PubReg5:R_PubReg4
0451                L_MainAdcP_2:			
0452  00E8  4000    			MOVLW	0
0453  00E9  188C    			SUBWF	R_PubReg5,0
0454  00EA  F004    			BTFSS	STATUS,Z
0455  00EB  A120    			GOTO	L_MainAdcP_7	;[R_PubReg5]>0 (数据不稳) 转
0456  00EC  208B    			MOVFW	R_PubReg4
0457  00ED  18E3    			SUBWF	R_OffsetCode,0
0458  00EE  F204    			BTFSS	STATUS,C
0459  00EF  A120    			GOTO	L_MainAdcP_7	;[R_PubReg4]>[R_OffsetCode] (数据不稳) 转
0460  00F0  EA85    			BTFSC	R_PubFlag0,5
0461  00F1  A10C    			GOTO	L_MainAdcP_5	;[R_PubFlag0].5=1(已锁定) 转
0462  00F2  20E2    			MOVFW	R_LockCodeNum
0463  00F3  189D    			SUBWF	R_SteadyCnt,0
0464  00F4  E204    			BTFSC	STATUS,C
0465  00F5  A0F8    			GOTO	L_MainAdcP_3	;[R_SteadyCnt]≥[R_LockCodeNum](稳定次数到)转
0466  00F6  0A9D    			INCF	R_SteadyCnt,1	;稳定次数未到,[R_SteadyCnt]+1->R_SteadyCnt
0467  00F7  A124    			GOTO	L_MainAdcP_8
0468                L_MainAdcP_3:
0469  00F8  DA85    			BSF		R_PubFlag0,5	;1->R_PubFlag0.5 锁定
0470  00F9  EC85    			BTFSC	R_PubFlag0,6
0471  00FA  A0FD    			GOTO	L_MainAdcP_4	;[R_PubFlag0].6=1 转
0472  00FB  DC85    			BSF		R_PubFlag0,6	;1->R_PubFlag0.6
0473  00FC  DE85    			BSF		R_PubFlag0,7	;1->R_PubFlag0.7
0474                L_MainAdcP_4:
0475  00FD  2082    			MOVFW	R_WorkStatus
0476  00FE  6870    			ANDLW	70H
0477  00FF  7030    			XORLW	30H
0478  0100  F004    			BTFSS	STATUS,Z
0479  0101  A107    			GOTO	L_MainAdcP_41	;[R_WorkStatus]的高4位≠3且≠B,转
0480  0102  209A    			MOVFW	R_LastAverageL	;\
0481  0103  22A0    			MOVWF	R_ZeroCodeL   	; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0482  0104  209B    			MOVFW	R_LastAverageH	; | 标定中保存当前锁定内码
0483  0105  22A1    			MOVWF	R_ZeroCodeH		;/
0484  0106  A124    			GOTO	L_MainAdcP_8
0485                L_MainAdcP_41:
0486  0107  209A    			MOVFW	R_LastAverageL	;\
0487  0108  22A3    			MOVWF	R_SteadyCodeL	; | [R_LastAverageH:R_LastAverageL]
0488  0109  209B    			MOVFW	R_LastAverageH	; | ->R_SteadyCodeH:R_SteadyCodeL 保存稳定内码数据
0489  010A  22A4    			MOVWF	R_SteadyCodeH	;/
0490  010B  A124    			GOTO	L_MainAdcP_8
0491                ;
0492                L_MainAdcP_5:
0493                ;			自动追重暂不处理
0494  010C  A124    			GOTO	L_MainAdcP_8
0495                L_MainAdcP_6:
0496  010D  4001    			MOVLW	1
0497  010E  8431    			CALL	S_ReadCode		;读当前内码->R_PubReg1:R_PubReg0
0498  010F  2087    			MOVFW	R_PubReg0		;\
0499  0110  229A    			MOVWF	R_LastAverageL	; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0500  0111  2088    			MOVFW	R_PubReg1		; |
0501  0112  229B    			MOVWF	R_LastAverageH	;/
0502  0113  4008    			MOVLW	8
0503  0114  2284    			MOVWF	R_Count			;8->R_Count
0504  0115  40F0    			MOVLW	R_CodeBuffer
0505  0116  2202    			MOVWF	FSR0			;R_CodeBuffer->FSR0
0506                L_MainAdcP_L1:
0507  0117  2087    			MOVFW	R_PubReg0
0508  0118  2200    			MOVWF	IND0
0509  0119  0A02    			INCF	FSR0,1
0510  011A  2088    			MOVFW	R_PubReg1
0511  011B  2200    			MOVWF	IND0
0512  011C  0A02    			INCF	FSR0,1
0513  011D  1684    			DECFSZ	R_Count,1
0514  011E  A117    			GOTO	L_MainAdcP_L1
0515  011F  02EF    			CLRF	R_CodePointer	;0->R_CodePointer
0516                L_MainAdcP_7:
0517  0120  CA85    			BCF		R_PubFlag0,5	;0->R_PubFlag0.5 (数据不稳)
0518  0121  029D    			CLRF	R_SteadyCnt		;0->R_SteadyCnt
0519  0122  029E    			CLRF	R_DifferenceL	;0->R_DifferenceL
0520  0123  029F    			CLRF	R_DifferenceH	;0->R_DifferenceH
0521                L_MainAdcP_8:
0522  0124  4001    			MOVLW	1
0523  0125  8431    			CALL	S_ReadCode		;读当前内码->R_PubReg1:R_PubReg0
0524  0126  D886    			BSF		R_PubFlag1,4	;1->R_PubFlag1.4
0525  0127  4024    			MOVLW	D_OverCodeL		;\
0526  0128  1887    			SUBWF	R_PubReg0,0		; | [R_PubReg1:R_PubReg0]-D_OverCodeH:D_OverCodeL
0527  0129  40F4    			MOVLW	D_OverCodeH		; | (内码超载判断)
0528  012A  3888    			SUBWFC	R_PubReg1,0		;/
0529  012B  F204    			BTFSS	STATUS,C
0530  012C  C886    			BCF		R_PubFlag1,4	;内码不超载,0->R_PubFlag1.4
0531  012D  FA85    			BTFSS	R_PubFlag0,5
0532  012E  A138    			GOTO	L_Main_5		;[R_PubFlag0].5=0(内码未锁定) 转
0533  012F  FE85    			BTFSS	R_PubFlag0,7
0534  0130  A138    			GOTO	L_Main_5		;[R_PubFlag0].7=0, 转
0535  0131  CE85    			BCF		R_PubFlag0,7	;0->R_PubFlag0.7
0536  0132  E886    			BTFSC	R_PubFlag1,4
0537  0133  A138    			GOTO	L_Main_5		;[R_PubFlag1]=1(内码超载) 转
0538  0134  209A    			MOVFW	R_LastAverageL	;\
0539  0135  22A0    			MOVWF	R_ZeroCodeL   	; | [R_LastAverageH:R_LastAverageL]->R_ZeroCodeH:R_ZeroCodeL
0540  0136  209B    			MOVFW	R_LastAverageH	; | 保存零点内码
0541  0137  22A1    			MOVWF	R_ZeroCodeH		;/
0542                L_Main_5:
0543  0138  FE92    			BTFSS	R_KeyStatus,7
0544  0139  A155    			GOTO	L_Main_6		;[R_KeyStatus].7=0 转
0545  013A  8354                CALL    S_CalcOffTime	;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0546  013B  2082    			MOVFW	R_WorkStatus
0547  013C  6870    			ANDLW	70H
0548  013D  7030    			XORLW	30H
0549  013E  E004    			BTFSC	STATUS,Z
0550  013F  A155    			GOTO	L_Main_6		;[R_WorkStatus]的高4位=3或=B(标定状态),转
0551  0140  400C    			MOVLW	0CH
0552  0141  1893    			SUBWF	R_KeyCode,0
0553  0142  F004    			BTFSS	STATUS,Z
0554  0143  A146    			GOTO	L_Main_51		;[R_KeyCode]≠0CH(不是"OFF"键短键释放) 转
0555  0144  4040    			MOVLW	40H				;"OFF"键短键释放
0556  0145  2282    			MOVWF	R_WorkStatus	;40H->R_WorkStatus 关机
0557                L_Main_51:			
0558  0146  40E5    			MOVLW	0E5H
0559  0147  1892    			SUBWF	R_KeyStatus,0
0560  0148  F004    			BTFSS	STATUS,Z
0561  0149  A155    			GOTO	L_Main_6		;[R_KeyStatus]≠0E5H 转
0562  014A  4030    			MOVLW	30H
0563  014B  2282    			MOVWF	R_WorkStatus	;同时按"OFF"+"TARE"键5秒以上进入标定状态
0564  014C  02A0    			CLRF	R_ZeroCodeL		;0->R_ZeroCodeL
0565  014D  02A1    			CLRF	R_ZeroCodeH		;0->R_ZeroCodeH
0566  014E  02A3    			CLRF	R_SteadyCodeL	;0->R_SteadyCodeL
0567  014F  02A4    			CLRF	R_SteadyCodeH	;0->R_SteadyCodeH
0568  0150  CA85    			BCF		R_PubFlag0,5	;0->R_PubFlag0.5
0569  0151  DC85    			BSF		R_PubFlag0,6	;1->R_PubFlag0.6
0570  0152  CE92    			BCF		R_KeyStatus,7	;0->R_KeyStatus.7
0571  0153  CC92    			BCF		R_KeyStatus,6	;0->R_KeyStatus.6
0572  0154  D892    			BSF		R_KeyStatus,4	;1->R_KeyStatus.4
0573                L_Main_6:
0574  0155  815B    			CALL	S_MainFunc		;主要功能
0575  0156  CE92    			BCF		R_KeyStatus,7	;0->R_KeyStatus.7
0576  0157  C885    			BCF		R_PubFlag0,4	;0->R_PubFlag0.4
0577  0158  C285    			BCF		R_PubFlag0,1	;0->R_PubFlag0.1
0578  0159  C085    			BCF		R_PubFlag0,0	;0->R_PubFlag0.0
0579  015A  A07C    			GOTO	L_MainLoop
0580                ;------------------------------------------------------------------------------
0581                ;子程序S_MainFunc		;主要功能
0582                S_MainFunc:
0583  015B  FE82    			BTFSS	R_WorkStatus,7
0584  015C  A165    			GOTO	L_MainFunc_1	;[R_WorkStatus].7=0 转
0585  015D  208E    			MOVFW	R_PubCnt1
0586  015E  68FF    			ANDLW	0FFH
0587  015F  E004    			BTFSC	STATUS,Z
0588  0160  A165    			GOTO	L_MainFunc_1	;[R_PubCnt1]=0 转
0589  0161  F085    			BTFSS	R_PubFlag0,0
0590  0162  A173    			GOTO	L_MainFuncRet	;[R_PubFlag0].0=0(未到1/16秒) 转,返回
0591  0163  168E    			DECFSZ	R_PubCnt1,1		;[R_PubCnt1]-1->R_PubCnt1
0592  0164  A173    			GOTO	L_MainFuncRet	;[R_PubCnt1]>0 转,返回
0593                L_MainFunc_1:
0594  0165  CE82    			BCF		R_WorkStatus,7	;0->R_WorkStatus.7
0595  0166  40F0    			MOVLW	0F0H
0596  0167  2882    			ANDWF	R_WorkStatus,0
0597  0168  E004    			BTFSC	STATUS,Z
0598  0169  A174    			GOTO	L_MainFunc0		;[R_WorkStatus].7:4=0 转
0599  016A  44F0    			ADDLW	0F0H
0600  016B  E004    			BTFSC	STATUS,Z
0601  016C  A189    			GOTO	L_CalcHeft		;[R_WorkStatus].7:4=1 转 计算并显示重量值
0602  016D  44E0    			ADDLW	0E0H
0603  016E  E004    			BTFSC	STATUS,Z
0604  016F  A269    			GOTO	L_CaliProc		;[R_WorkStatus].7:4=3 转 标定处理
0605  0170  44F0    			ADDLW	0F0H
0606  0171  E004    			BTFSC	STATUS,Z
0607  0172  A34A    			GOTO	L_OFF_Proc		;[R_WorkStatus].7:4=4 转 关机处理
0608                L_MainFuncRet:
0609  0173  0003    			RETURN
0610                ;------------------------------------------------------------------------------
0611                L_MainFunc0:						;找零点
0612  0174  E0CF    			BTFSC	R_DispFlag,0
0613  0175  A17D    			GOTO	L_BattLowProc	;[R_DispFlag].0=1(电池电压低) 转
0614                ;
0615  0176  832F    			CALL	S_DispCaliCode	;去显示内码
0616                ;			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
0617                ;			INCF	R_WorkStatus,1	;[R_WorkStatus]+1->R_WorkStatus
0618                ;			BCF		R_WorkStatus,2	;0->R_WorkStatus.2
0619                ;			MOVFW	R_WorkStatus
0620                ;			ANDLW	03H
0621                ;			SUBLW	R_DispBuff3
0622                ;			MOVWF	FSR0
0623                ;			MOVLW	08H
0624                ;			MOVWF	IND0			;08H("8")->IND0
0625                ;			MOVLW	08H
0626                ;			MOVWF	R_DispMode		;1->R_DispMode.3 显示提示信息
0627                ;			CALL	S_Display		;显示
0628                ;			MOVLW	08H
0629                ;			MOVWF	R_PubCnt1		;08H->R_PubCnt1,定时0.5秒
0630                ;			BSF		R_WorkStatus,7	;1->R_WorkStatus.7
0631                ;
0632  0177  FC85    			BTFSS	R_PubFlag0,6
0633  0178  A17C    			GOTO	L_MainFunc0Ret	;[R_PubFlag0].6=0 转
0634  0179  4010    			MOVLW	10H
0635  017A  2282    			MOVWF	R_WorkStatus	;10H->R_WorkStatus 进入称重状态
0636  017B  8354                CALL    S_CalcOffTime	;计算自动关机时间(单位:秒)->R_OffTimerH:R_OffTimerL
0637                L_MainFunc0Ret:
0638  017C  0003    			RETURN
0639                L_BattLowProc:						;电池低电压处理
0640  017D  4020    			MOVLW	20H
0641  017E  228E    			MOVWF	R_PubCnt1		;20H->R_PubCnt1,定时2秒
0642  017F  40C0    			MOVLW	0C0H
0643  0180  2282    			MOVWF	R_WorkStatus	;0C0H->R_WorkStatus,2秒后关机
0644  0181  8535    			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
0645  0182  4012    			MOVLW	12H
0646  0183  22CC    			MOVWF	R_DispBuff2		;12H("L")->R_DispBuff2
0647  0184  4013    			MOVLW	13H
0648  0185  22CB    			MOVWF	R_DispBuff1		;13H("o")->R_DispBuff1
0649  0186  4008    			MOVLW	08H
0650  0187  22C9    			MOVWF	R_DispMode		;1->R_DispMode.3 显示提示信息
0651  0188  A551    			GOTO	S_Display		;去显示"  Lo "
0652                ;------------------------------------------------------------------------------
0653                L_CalcHeft:							;计算并显示重量值
0654  0189  E692                BTFSC   R_KeyStatus,3
0655  018A  A1D2                GOTO    L_CalcHeft3     ;[R_KeyStatus].3=1 转
0656  018B  FE92                BTFSS   R_KeyStatus,7
0657  018C  A1E3                GOTO    L_CalcHeft4     ;[R_KeyStatus].7=0 转
0658  018D  2093    			MOVFW	R_KeyCode
0659  018E  580E    			SUBLW	0EH
0660  018F  E004    			BTFSC	STATUS,Z
0661  0190  A1B3    			GOTO	L_CalcHeft1		;[R_KeyCode]=0EH("TARE"键释放)转,去皮
0662  0191  2093    			MOVFW	R_KeyCode

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?