⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9821h620.lst

📁 用台湾富晶单片机开发的电子称包括源码和编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
0224                L_InitClrR_Loop:					;  | RAM [0FFH:80H]清零
0225  002F  0200    			CLRF	IND0			;  |
0226  0030  0E02    			INCFSZ	FSR0,1			; /
0227  0031  A02F    			GOTO	L_InitClrR_Loop	;/
0228                L_InitSFR:
0229  0032  401A          		MOVLW   00011010B		;00011010B
0230  0033  221C          		MOVWF   NETE    		;ENVS,LB输入选AIN4,ENLB
0231  0034  4063          		MOVLW   01100011B  
0232  0035  221D          		MOVWF   NETF    		;ENBAND,ENVDDA,ENAGND,ENVB
0233  0036  4041          		MOVLW   01000001b
0234  0037  2215          		MOVWF   PCK				;ENPUMP=1,S_CH1CK[1:0]=00,S_BEEP=0,S_PCK=1
0235  0038  8576    			CALL	S_Delay
0236                ;
0237                ;      		MOVLW   11000100B
0238                ;      		MOVWF   NETA   			;INL=TEMPL,FTIN=OP1O,FTB=FTIN,INH=FTB
0239                ;      		MOVLW   00001110B
0240                ;      		MOVWF   NETB    		;OP1N=OP1O,VRL=VR2P,VRH=VR1P
0241                ;      		MOVLW   00001110B
0242                ;      		MOVWF   NETD     		;OP1EN=1,OP1P=TEMPH
0243                ;
0244  0039  4044          		MOVLW   01000100B
0245  003A  2218          		MOVWF   NETA   			;INL=AIN2,FTIN=OP1O,FTB=FTIN,INH=FTB
0246  003B  4024          		MOVLW   00100100B
0247  003C  2219          		MOVWF   NETB    		;OP1N=AIN5,VRL=AIN1,VRH=AIN0
0248  003D  400B          		MOVLW   00001011B
0249  003E  221B          		MOVWF   NETD     		;OP1EN=1,OP1P=AIN3
0250                ;
0251  003F  4086          		MOVLW	10000110B		;10000110B
0252  0040  221A          		MOVWF	NETC			;SREFO=1,ADG=1,ADEN=1,AZ=0
0253  0041  400C          		MOVLW   00001100b		;00001111b	;ADM=110bADCF/8000
0254  0042  2213          		MOVWF   ADCON			;ADRST=1,ADM=100b=ADCF/2000
0255                ;
0256  0043  84A4    			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
0257  0044  402F          		MOVLW   00101111b		;00100111b
0258  0045  2254          		MOVWF   LCDENR			;start LCD clock,1/2bias,1/4duty
0259  0046  408B          		MOVLW   10001011B
0260  0047  220F          		MOVWF   TMCON			;1/16秒中断
0261                L_InitCaliData:
0262  0048  85DB    			CALL	S_RdCaliData	;读93LC46中00H-0AH的标定数据送至RAM R_CaliMarkL-R_CaliChksumH
0263  0049  861E    			CALL	S_CalcChksum	;计算标定数据之和->R_PubReg3:R_PubReg2
0264  004A  2089    			MOVFW	R_PubReg2
0265  004B  2C8A    			IORWF	R_PubReg3,0
0266  004C  F004    			BTFSS	STATUS,Z
0267  004D  A066    			GOTO	L_InitCaliErr	;[R_PubReg3:R_PubReg2]≠0 (93LC46中00H-0AH的值错误) 转
0268  004E  405A    			MOVLW	D_CaliMark1
0269  004F  18D8    			SUBWF	R_CaliParaFlag,0
0270  0050  F004    			BTFSS	STATUS,Z
0271  0051  A066    			GOTO	L_InitCaliErr	;[R_CaliParaFlag]≠D_CaliMark1 (未标定参数) 转
0272  0052  40A5    			MOVLW	D_CaliMark2
0273  0053  18D9    			SUBWF	R_CaliCodeFlag,0
0274  0054  F004    			BTFSS	STATUS,Z
0275  0055  A066    			GOTO	L_InitCaliErr	;[R_CaliCodeFlag]≠D_CaliMark2 (未标定内码) 转
0276                L_InitScaleMark:
0277  0056  20D3    			MOVFW	R_CaliP1H		;标定参数,D7:D4=P1.3,D3:D0=P1.2
0278  0057  833A    			CALL	S_RR4Work		;[WORK]右移4位->WORK,0->WORK.7:4
0279  0058  8499    			CALL	S_RdScaleMark 	;读分度数->WORK
0280  0059  2289    			MOVWF	R_PubReg2		;[WORK]->R_PubReg2
0281  005A  028A    			CLRF	R_PubReg3		;0->R_PubReg3
0282  005B  4064    			MOVLW	100
0283  005C  228B    			MOVWF	R_PubReg4		;100->R_PubReg4
0284  005D  028C    			CLRF	R_PubReg5		;0->R_PubReg5
0285  005E  8514    			CALL	S_Multi			;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
0286  005F  4009    			MOVLW	9
0287  0060  0487    			ADDWF	R_PubReg0,0
0288  0061  22E6    			MOVWF	R_MaxScaleMarkL	;计算出的最大分度数(+9)低字节->R_MaxScaleMarkL
0289  0062  4000    			MOVLW	0
0290  0063  2488    			ADDWFC	R_PubReg1,0
0291  0064  22E7    			MOVWF	R_MaxScaleMarkH	;计算出的最大分度数(+9)高字节->R_MaxScaleMarkH
0292  0065  A076    			GOTO	L_InitOther
0293                L_InitCaliErr:
0294  0066  02D0    			CLRF	R_CaliMarkL		;\
0295  0067  4001    			MOVLW	01H				; | 0100H->R_CaliMarkH:R_CaliMarkL
0296  0068  22D1    			MOVWF	R_CaliMarkH		;/
0297  0069  400F    			MOVLW	0FH
0298  006A  22D2    			MOVWF	R_CaliP1L		;0FH(缺省值)->R_CaliP1L
0299  006B  4031    			MOVLW	31H
0300  006C  22D3    			MOVWF	R_CaliP1H		;31H(缺省值)->R_CaliP1H
0301  006D  4052    			MOVLW	52H
0302  006E  22D4    			MOVWF	R_CaliP2L		;52H(缺省值)->R_CaliP2L
0303  006F  4022    			MOVLW	22H
0304  0070  22D5    			MOVWF	R_CaliP2H		;22H(缺省值)->R_CaliP2H
0305  0071  40A0    			MOVLW	0A0H
0306  0072  228E    			MOVWF	R_PubCnt1		;0A0H->R_PubCnt1,定时10秒
0307                ;			MOVLW	30H
0308                ;			MOVWF	R_WorkStatus	;30H->R_WorkStatus,临时修改,用于显示内码
0309  0073  40C0    			MOVLW	0C0H
0310  0074  2282    			MOVWF	R_WorkStatus	;0C0H->R_WorkStatus,10秒后关机。
0311  0075  84B3    			CALL	S_Disp9346		;LCD显示" 9346"
0312                L_InitOther:
0313  0076  83CA                CALL   	S_CalcUnitData	;计算1d对应的不同计量单位的值(浮点数),
0314                ;            		结果->R_UnitData2(2的指数)、R_UnitData1:R_UnitData0(有效数字)
0315  0077  8451    			CALL	S_CalcLockCode	;计算锁定判断的内码值->R_OffsetCode
0316                ;            CALL    S_CalcDelay	;计算自动关机时间(单位:秒)->3DH:3CH
0317  0078  0206    			CLRF	INTF
0318  0079  4094    			MOVLW	10010100B
0319  007A  2207    			MOVWF	INTE			;GIE=1,TMIE=1,ADIE=1
0320                L_InitEnd:
0321                ;
0322                L_MainLoop:					;主循环
0323  007B  FE86          		BTFSS   R_PubFlag1,7
0324  007C  A09B          		GOTO	L_MainAdcProc	;[R_PubFlag1].7=0(未到1/16秒),转
0325  007D  CE86    			BCF		R_PubFlag1,7	;0->R_PubFlag1.7
0326  007E  D085          		BSF		R_PubFlag0,0	;1/16秒到
0327  007F  8340                CALL    S_ReadKey		;读按键,并作简单判断处理
0328  0080  4004    			MOVLW	04H
0329  0081  3285    			XORWF	R_PubFlag0,1	;R_PubFlag0.2取反
0330  0082  E485    			BTFSC	R_PubFlag0,2
0331  0083  A09B    			GOTO	L_MainAdcProc	;[R_PubFlag0.2]=1 (未到1/8秒) 转
0332  0084  0A91    			INCF	R_TimerCnt,1	;[R_TimerCnt]+1->R_TimerCnt
0333                ;
0334  0085  C0CF    			BCF		R_DispFlag,0	;0->R_DispFlag.0(电池符号)
0335  0086  F01F    			BTFSS	SVD,LBOUT
0336  0087  D0CF    			BSF		R_DispFlag,0	;LBOUT=0(电池低电压),1->R_DispFlag.0 显示电池符号
0337                ;
0338  0088  2082    			MOVFW	R_WorkStatus
0339  0089  68F0    			ANDLW	0F0H
0340  008A  5810    			SUBLW	10H
0341  008B  F004    			BTFSS	STATUS,Z
0342  008C  A092    			GOTO	L_Main_1		;[R_WorkStatus].7:4≠1(不是称重状态) 转
0343  008D  FA85    			BTFSS	R_PubFlag0,5
0344  008E  02A5    			CLRF	R_SteadyTimer	;[R_PubFlag0].5=0(称重不稳定),0->R_SteadyTimer
0345  008F  0AA5    			INCF	R_SteadyTimer,1	;[R_SteadyTimer]+1->R_SteadyTimer
0346  0090  E004    			BTFSC	STATUS,Z
0347  0091  12A5    			DECF	R_SteadyTimer,1	;[R_SteadyTimer]=0,[R_SteadyTimer]-1->R_SteadyTimer
0348                L_Main_1:
0349  0092  4003    			MOVLW	03H
0350  0093  2891    			ANDWF	R_TimerCnt,0
0351  0094  F004    			BTFSS	STATUS,Z
0352  0095  A09B    			GOTO	L_MainAdcProc	;[R_TimerCnt]&03H≠0(未到1/2秒) 转
0353  0096  D285    			BSF		R_PubFlag0,1	;1->R_PubFlag0.1
0354  0097  4007    			MOVLW	07H
0355  0098  2891    			ANDWF	R_TimerCnt,0
0356  0099  F004    			BTFSS	STATUS,Z
0357  009A  A09B    			GOTO	L_MainAdcProc	;[R_TimerCnt]&07H≠0(未到1秒) 转
0358                ;  			CALL    S_DecOffTime ;自动关机时间(单位:秒)-1->3DH:3CH,若已减到0则4->46H,0->47H准备关机
0359                ;
0360                L_MainAdcProc:
0361  009B  F685    			BTFSS	R_PubFlag0,3
0362  009C  A131    			GOTO	L_Main_5		;未读到ADC内码,转
0363  009D  C685    			BCF		R_PubFlag0,3	;0->R_PubFlag0.3
0364  009E  20ED    			MOVFW	R_AdcDataL		;\
0365  009F  0696    			ADDWF	R_AdcSumL,1		; \
0366  00A0  20EE    			MOVFW	R_AdcDataH		;  | [R_AdcSumH:R_AdcSumL]+[R_AdcDataH:R_AdcDataL]
0367  00A1  2697    			ADDWFC	R_AdcSumM,1		;  | ->R_AdcSumH:R_AdcSumL
0368  00A2  4000    			MOVLW	0				; /
0369  00A3  2698    			ADDWFC	R_AdcSumH,1		;/
0370  00A4  0A99    			INCF	R_AdcDataCnt,1	;[R_AdcDataCnt]+1->R_AdcDataCnt
0371                ;
0372  00A5  F699    			BTFSS	R_AdcDataCnt,3
0373  00A6  A131    			GOTO	L_Main_5		;[R_AdcDataCnt]<8 转
0374                ;
0375                ;			BTFSS	R_AdcDataCnt,3
0376                ;			GOTO	L_Main_5		;[R_AdcDataCnt]<8 转
0377                ;
0378  00A7  2096    			MOVFW	R_AdcSumL		;\
0379  00A8  2287    			MOVWF	R_PubReg0		; \
0380  00A9  2097    			MOVFW	R_AdcSumM		;  |
0381  00AA  2288    			MOVWF	R_PubReg1		;  | [R_AdcSumH:R_AdcSumL]->R_PubReg3:R_PubReg0
0382  00AB  2098    			MOVFW	R_AdcSumH		;  |
0383  00AC  2289    			MOVWF	R_PubReg2		; /
0384  00AD  028A    			CLRF	R_PubReg3		;/
0385  00AE  0296    			CLRF	R_AdcSumL		;0->R_AdcSumL
0386  00AF  0297    			CLRF	R_AdcSumM		;0->R_AdcSumM
0387  00B0  0298    			CLRF	R_AdcSumH		;0->R_AdcSumH
0388  00B1  0299    			CLRF	R_AdcDataCnt	;0->R_AdcDataCnt
0389                ;
0390  00B2  4004    			MOVLW	4				;\
0391  00B3  228B    			MOVWF	R_PubReg4		; | 4->R_PubReg5:R_PubReg4
0392  00B4  028C    			CLRF	R_PubReg5		;/
0393                ;
0394                ;			MOVLW	8				;\
0395                ;			MOVWF	R_PubReg4		; | 08H->R_PubReg5:R_PubReg4
0396                ;			CLRF	R_PubReg5		;/
0397                ;
0398  00B5  852C    			CALL	S_DivisM	;[R_PubReg3:R_PubReg0]÷[R_PubReg5:R_PubReg4]->R_PubReg1:R_PubReg0
0399  00B6  D885    			BSF		R_PubFlag0,4	;1->R_PubFlag0.4 (有效内码)
0400  00B7  0AEF    			INCF	R_CodePointer,1	;内码存储指针+1
0401  00B8  C4EF    			BCF		R_CodePointer,2	;0->R_CodePointer.2
0402  00B9  10EF    			DECF	R_CodePointer,0	;\
0403  00BA  6803    			ANDLW	03H				; \
0404  00BB  C204    			BCF		STATUS,C		;  |
0405  00BC  3405    			RLF		WORK,0			;  |
0406  00BD  44F0    			ADDLW	R_CodeBuffer	;  |
0407  00BE  2202    			MOVWF	FSR0			;  | 新的有效内码[R_PubReg1:R_PubReg0]
0408  00BF  2087    			MOVFW	R_PubReg0		;  | ->内码缓冲区保存
0409  00C0  2200    			MOVWF	IND0			;  |
0410  00C1  0A02    			INCF	FSR0,1			;  |
0411  00C2  2088    			MOVFW	R_PubReg1		; /
0412  00C3  2200    			MOVWF	IND0			;/
0413                ;
0414  00C4  209A    			MOVFW	R_LastAverageL	;\
0415  00C5  228B    			MOVWF	R_PubReg4		; | [R_LastAverageH:R_LastAverageL]
0416  00C6  209B    			MOVFW	R_LastAverageH	; | ->R_PubReg5:R_PubReg4
0417  00C7  228C    			MOVWF	R_PubReg5		;/
0418  00C8  83BB    			CALL	S_CalcABS		;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
0419                L_MainAdcP_1:			
0420  00C9  20E4    			MOVFW	R_10dCodeL
0421  00CA  188B    			SUBWF	R_PubReg4,0
0422  00CB  20E5    			MOVFW	R_10dCodeH
0423  00CC  388C    			SUBWFC	R_PubReg5,0
0424  00CD  E204    			BTFSC	STATUS,C
0425  00CE  A106    			GOTO	L_MainAdcP_6	;[R_PubReg5:R_PubReg4]≥[R_10dCodeH:R_10dCodeL] (数据不稳)转
0426  00CF  4004    			MOVLW	4
0427  00D0  83A0    			CALL	S_ReadCode	;计算最近4次的内码的平均值->R_PubReg1:R_PubReg0
0428  00D1  209A    			MOVFW	R_LastAverageL	;\
0429  00D2  1887    			SUBWF	R_PubReg0,0		; \
0430  00D3  228B    			MOVWF	R_PubReg4		;  | [R_PubReg1:R_PubReg0]-[R_LastAverageH:R_LastAverageL]
0431  00D4  209B    			MOVFW	R_LastAverageH	;  | ->R_PubReg5:R_PubReg4
0432  00D5  3888    			SUBWFC	R_PubReg1,0		; / 
0433  00D6  228C    			MOVWF	R_PubReg5		;/
0434  00D7  2087    			MOVFW	R_PubReg0		;\
0435  00D8  229A    			MOVWF	R_LastAverageL	; | [R_PubReg1:R_PubReg0]->R_LastAverageH:R_LastAverageL
0436  00D9  2088    			MOVFW	R_PubReg1		; |
0437  00DA  229B    			MOVWF	R_LastAverageH	;/
0438  00DB  208B    			MOVFW	R_PubReg4		;\
0439  00DC  069E    			ADDWF	R_DifferenceL,1	; | [R_DifferenceH:R_DifferenceL]+[R_PubReg5:R_PubReg4]
0440  00DD  208C    			MOVFW	R_PubReg5		; | ->R_DifferenceH:R_DifferenceL (累计差值)
0441  00DE  269F    			ADDWFC	R_DifferenceH,1	;/
0442  00DF  209E    			MOVFW	R_DifferenceL	;\
0443  00E0  228B    			MOVWF	R_PubReg4		; | [R_DifferenceH:R_DifferenceL]
0444  00E1  209F    			MOVFW	R_DifferenceH	; | ->R_PubReg5:R_PubReg4
0445  00E2  228C    			MOVWF	R_PubReg5		;/
0446  00E3  FE8C    			BTFSS	R_PubReg5,7
0447  00E4  A0E6    			GOTO	L_MainAdcP_2	;[R_PubReg5].7=0(正数) 转
0448  00E5  83C3    			CALL	S_CalcABS1		;计算[R_PubReg5:R_PubReg4]的补码->R_PubReg5:R_PubReg4
0449                L_MainAdcP_2:			
0450  00E6  4000    			MOVLW	0

⌨️ 快捷键说明

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