9821h620.lst

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

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

⌨️ 快捷键说明

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