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 + -
显示快捷键?