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

📄 9821h621.lst

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

⌨️ 快捷键说明

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