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

📄 9821h620.lst

📁 用台湾富晶单片机开发的电子称包括源码和编译器
💻 LST
📖 第 1 页 / 共 5 页
字号:
0905                L_DispCaliP_0:
0906  0260  F491    			BTFSS	R_TimerCnt,2
0907  0261  A269    			GOTO	L_DispCaliPara	;[R_TimerCnt].2=0 转 显示标定参数
0908  0262  208E    			MOVFW	R_PubCnt1
0909  0263  6803    			ANDLW	03H
0910  0264  58CD    			SUBLW	R_DispBuff3
0911  0265  2202    			MOVWF	FSR0
0912  0266  4010    			MOVLW	10H				;" "
0913  0267  2200    			MOVWF	IND0			;10H(" ")->IND0
0914  0268  A27E    			GOTO	L_DispCaliPa_1
0915                L_DispCaliPara:						;显示当前标定的参数
0916  0269  3C8E    			RRF		R_PubCnt1,0
0917  026A  3C05    			RRF		WORK,0
0918  026B  3C05    			RRF		WORK,0
0919  026C  6806    			ANDLW	06H
0920  026D  44D0    			ADDLW	R_CaliMarkL
0921  026E  2202    			MOVWF	FSR0			;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
0922  026F  2000    			MOVFW	IND0
0923  0270  680F    			ANDLW	0FH
0924  0271  22CA    			MOVWF	R_DispBuff0
0925  0272  2000    			MOVFW	IND0
0926  0273  833A    			CALL	S_RR4Work		;[WORK]右移4位->WORK,0->WORK.7:4
0927  0274  22CB    			MOVWF	R_DispBuff1
0928  0275  0A02    			INCF	FSR0,1
0929  0276  2000    			MOVFW	IND0
0930  0277  680F    			ANDLW	0FH
0931  0278  22CC    			MOVWF	R_DispBuff2
0932  0279  2000    			MOVFW	IND0
0933  027A  833A    			CALL	S_RR4Work		;[WORK]右移4位->WORK,0->WORK.7:4
0934  027B  22CD    			MOVWF	R_DispBuff3
0935  027C  4010    			MOVLW	10H
0936  027D  22CE    			MOVWF	R_DispBuff4		;10H(" ")->R_DispBuff4
0937                L_DispCaliPa_1:
0938  027E  4008    			MOVLW	08H	
0939  027F  22C9    			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
0940  0280  A4C0    			GOTO	S_Display		;去显示
0941                ;
0942                L_SeleParaBit:						;"TARE"键按下,选择标定数据位
0943  0281  0A8E    			INCF	R_PubCnt1,1		;[R_PubCnt1]+1->R_PubCnt1
0944  0282  C48E    			BCF		R_PubCnt1,2		;0->R_PubCnt1.2,[R_PubCnt1]=0-3
0945  0283  A269    			GOTO	L_DispCaliPara	;去显示当前标定的参数
0946                ;
0947                L_AdjustPara:						;UNIT"键按下或"OFF"短键释放,调整标定值
0948  0284  3C8E    			RRF		R_PubCnt1,0
0949  0285  3C05    			RRF		WORK,0
0950  0286  3C05    			RRF		WORK,0
0951  0287  6806    			ANDLW	06H
0952  0288  44D0    			ADDLW	R_CaliMarkL
0953  0289  2202    			MOVWF	FSR0			;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
0954  028A  F28E    			BTFSS	R_PubCnt1,1
0955  028B  0A02    			INCF	FSR0,1
0956  028C  400F    			MOVLW	0FH				;0FH->WORK
0957  028D  F08E    			BTFSS	R_PubCnt1,0
0958  028E  40F0    			MOVLW	0F0H			;[R_PubCnt1].0=0,0F0H->WORK
0959  028F  2288    			MOVWF	R_PubReg1		;[WORK]->R_PubReg1
0960  0290  4001    			MOVLW	01H				;01H->WORK
0961  0291  F08E    			BTFSS	R_PubCnt1,0
0962  0292  4010    			MOVLW	10H				;[R_PubCnt1].0=0,10H->WORK
0963  0293  0600    			ADDWF	IND0,1			;[IND0]+[WORK]->IND0
0964  0294  F08E    			BTFSS	R_PubCnt1,0
0965  0295  A29C    			GOTO	L_AdjPara_1		;[R_PubCnt1].0=0 转
0966  0296  2000    			MOVFW	IND0			;[R_PubCnt1].1=1
0967  0297  680F    			ANDLW	0FH
0968  0298  F004    			BTFSS	STATUS,Z
0969  0299  A29C    			GOTO	L_AdjPara_1		;[IND0].3:0>0 转
0970  029A  4010    			MOVLW	10H
0971  029B  1A00    			SUBWF	IND0,1			;[IND0]-10H->IND0
0972                L_AdjPara_1:
0973  029C  40D0    			MOVLW	R_CaliMarkL
0974  029D  1802    			SUBWF	FSR0,0
0975  029E  8333    			CALL	S_RdParaMaxV	;读出当前参数的最大值
0976  029F  2888    			ANDWF	R_PubReg1,0
0977  02A0  2287    			MOVWF	R_PubReg0
0978  02A1  2088    			MOVFW	R_PubReg1
0979  02A2  2800    			ANDWF	IND0,0
0980  02A3  1887    			SUBWF	R_PubReg0,0
0981  02A4  E204    			BTFSC	STATUS,C
0982  02A5  A269    			GOTO	L_DispCaliPara	;当前设定的参数未超过最大值,去显示当前标定的参数
0983  02A6  1C88    			COMF	R_PubReg1,0
0984  02A7  2A00    			ANDWF	IND0,1			;超过最大值,当前设定值清0
0985  02A8  A269    			GOTO	L_DispCaliPara	;当前设定的参数未超过最大值,去显示当前标定的参数
0986                ;
0987                L_CaliNextPara:						;"OFF"键按下2秒,进入下一个项目
0988  02A9  D892    			BSF		R_KeyStatus,4	;1->R_KeyStatus.4
0989  02AA  DA92    			BSF		R_KeyStatus,5	;1->R_KeyStatus.5
0990  02AB  40F0    			MOVLW	0F0H
0991  02AC  288E    			ANDWF	R_PubCnt1,0
0992  02AD  E004    			BTFSC	STATUS,Z
0993  02AE  82F1    			CALL	S_CaliCodeProc	;[R_PubCnt1].7:4=0 处理重量标定数据
0994  02AF  4020    			MOVLW	20H
0995  02B0  188E    			SUBWF	R_PubCnt1,0
0996  02B1  E204    			BTFSC	STATUS,C
0997  02B2  A2B8    			GOTO	L_CaliParaOver	;[R_PubCnt1].7:4≥2 转 标定完成处理
0998  02B3  208E    			MOVFW	R_PubCnt1
0999  02B4  4410    			ADDLW	10H
1000  02B5  6830    			ANDLW	30H
1001  02B6  228E    			MOVWF	R_PubCnt1
1002  02B7  A269    			GOTO	L_DispCaliPara	;去显示下一个标定参数
1003                L_CaliParaOver:						;标定完成处理
1004  02B8  84A4    			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
1005  02B9  405A    			MOVLW	D_CaliMark1
1006  02BA  22D8    			MOVWF	R_CaliParaFlag	;D_CaliMark1->R_CaliParaFlag
1007  02BB  8612    			CALL	S_WrCaliData	;将[R_CaliChksumH:R_CaliMarkL]的8个16位数据写入到93LC46的00H-07H中
1008  02BC  4020    			MOVLW	20H
1009  02BD  228E    			MOVWF	R_PubCnt1		;20H->R_PubCnt1,定时2秒
1010  02BE  40C0    			MOVLW	0C0H
1011  02BF  2282    			MOVWF	R_WorkStatus	;0C0H->R_WorkStatus,2秒后关机。
1012  02C0  4015    			MOVLW	15H				;"H"					;\
1013  02C1  22CE    			MOVWF	R_DispBuff4		;15H("H")->R_DispBuff4	; |
1014  02C2  4006    			MOVLW	06H										; | 显示版本号
1015  02C3  22CD    			MOVWF	R_DispBuff3		;06H("6")->R_DispBuff3	; | "H620 "
1016  02C4  4002    			MOVLW	02H										; |
1017  02C5  22CC    			MOVWF	R_DispBuff2		;02H("2")->R_DispBuff2	; |
1018  02C6  4000    			MOVLW	00H										; |
1019  02C7  22CB    			MOVWF	R_DispBuff1		;00H("0")->R_DispBuff1	;/
1020  02C8  4008    			MOVLW	08H	
1021  02C9  22C9    			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
1022  02CA  A4C0    			GOTO	S_Display		;去显示
1023                L_CaliProcRet:
1024  02CB  0003    			RETURN
1025                ;
1026                S_DispCaliCode:						;显示内码
1027                L_DispCaliCode:						;显示内码
1028  02CC  F885    			BTFSS	R_PubFlag0,4
1029  02CD  A2CB    			GOTO	L_CaliProcRet	;[R_PubFlag0].4=0(未得到新的有效内码) 转,返回
1030  02CE  C6CF    			BCF		R_DispFlag,3	;0->R_DispFlag.3
1031  02CF  EA85    			BTFSC	R_PubFlag0,5
1032  02D0  D6CF    			BSF		R_DispFlag,3	;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
1033                ;			MOVLW	1
1034                ;			CALL	S_ReadCode		;读当前内码->R_PubReg1:R_PubReg0
1035                ;			MOVFW	R_PubReg0		;\
1036                ;			MOVWF	R_PubReg2		; | [R_PubReg1:R_PubReg0]
1037                ;			MOVFW	R_PubReg1		; | ->R_PubReg3:R_PubReg2
1038                ;			MOVWF	R_PubReg3		;/
1039  02D1  209A    			MOVFW	R_LastAverageL	;\
1040  02D2  2289    			MOVWF	R_PubReg2		; | [R_LastAverageH:R_LastAverageL]
1041  02D3  209B    			MOVFW	R_LastAverageH	; | ->R_PubReg3:R_PubReg2
1042  02D4  228A    			MOVWF	R_PubReg3		;/
1043  02D5  8546    			CALL	S_Hex2BCD		;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
1044  02D6  4008    			MOVLW	08H	
1045  02D7  22C9    			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
1046  02D8  E691    			BTFSC	R_TimerCnt,3
1047  02D9  D0C9    			BSF		R_DispMode,0
1048  02DA  A4C0    			GOTO	S_Display		;去显示
1049                ;
1050                L_DispDate:							;显示日期
1051  02DB  4000    			MOVLW	D_MonthH		;修改日期的月十位
1052  02DC  22CE    			MOVWF	R_DispBuff4		;->R_DispBuff4
1053  02DD  4009    			MOVLW	D_MonthL		;修改日期的月个位
1054  02DE  22CD    			MOVWF	R_DispBuff3		;->R_DispBuff3
1055  02DF  4011    			MOVLW	11H
1056  02E0  22CC    			MOVWF	R_DispBuff2		;11H("-")->R_DispBuff2
1057  02E1  4002    			MOVLW	D_DayH			;修改日期的日十位
1058  02E2  22CB    			MOVWF	R_DispBuff1		;->R_DispBuff1
1059  02E3  4005    			MOVLW	D_DayL			;修改日期的日个位
1060  02E4  22CA    			MOVWF	R_DispBuff0		;->R_DispBuff0
1061  02E5  02C9    			CLRF	R_DispMode		;0->R_DispMode,无小数点,10进制数显示
1062  02E6  A4C0    			GOTO	S_Display		;去显示
1063                ;------------------------------------------------------------------------------
1064                L_OFF_Proc:							;关机处理
1065  02E7  0207    			CLRF	INTE			;关所有中断
1066  02E8  84A4    			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
1067  02E9  CA54    			BCF		LCDENR,LCDEN	;关LCD输出
1068                L_OFF_Wait:
1069  02EA  4000    			MOVLW	00H
1070  02EB  2224    			MOVWF	PT2				;07H->PT2
1071  02EC  4000    			MOVLW	00H
1072  02ED  2220    			MOVWF	PT1				;00H->PT1
1073  02EE  0000    			NOP
1074  02EF  A2EA    			GOTO	L_OFF_Wait
1075  02F0  0003    			RETURN
1076                ;------------------------------------------------------------------------------
1077                ;子程序S_CaliCodeProc	;[R_PubCnt1].7:4=0 处理重量标定数据
1078                ;Input:		R_CaliMarkH:R_CaliMarkL
1079                ;			R_CaliCode0H:R_CaliCode0L
1080                ;			R_SteadyCodeH:R_SteadyCodeL
1081                ;Output:	R_CaliDataH:R_CaliDataL
1082                ;Call:		S_AddSub1,S_Mul2Sub1
1083                ;			S_CalcABS
1084                ;			S_Divis
1085                ;Use RAM:	WORK,R_Count,R_PubCnt0
1086                ;			R_PubReg1:R_PubReg0,R_PubReg3:R_PubReg2,R_PubReg5:R_PubReg4
1087                S_CaliCodeProc:
1088  02F1  20D0    			MOVFW	R_CaliMarkL		;\
1089  02F2  2287    			MOVWF	R_PubReg0		; | [R_CaliMarkH:R_CaliMarkL]
1090  02F3  20D1    			MOVFW	R_CaliMarkH		; | ->R_PubReg1:R_PubReg0
1091  02F4  2288    			MOVWF	R_PubReg1		;/
1092                S_CaliCodeComm:			;标定时计算每个内码相当于重量的分度数×65536->R_CaliDataH:R_CaliDataL
1093  02F5  2088    			MOVFW	R_PubReg1
1094  02F6  68FF    			ANDLW	0FFH
1095  02F7  E004    			BTFSC	STATUS,Z
1096  02F8  A329    			GOTO	L__CaliCodeP_Ret ;[R_PubReg1]=0(标定分度值<1000) 转,返回
1097                ;下面的程序将4位BCD码[R_PubReg1:R_PubReg0]转换为二进制数->R_PubReg3:R_PubReg2
1098  02F9  0289    			CLRF	R_PubReg2		;0->R_PubReg2
1099  02FA  028A    			CLRF	R_PubReg3		;0->R_PubReg3
1100  02FB  4004    			MOVLW	4
1101  02FC  228D    			MOVWF	R_PubCnt0		;4->R_PubCnt0
1102                L_BCD2HexLoop:
1103  02FD  028B    			CLRF	R_PubReg4		;0->R_PubReg4
1104  02FE  028C    			CLRF	R_PubReg5		;0->R_PubReg5
1105  02FF  4004    			MOVLW	4
1106  0300  2284    			MOVWF	R_Count			;4->R_Count
1107                L_BCD2HexL_1:
1108  0301  3687    			RLF		R_PubReg0,1
1109  0302  3688    			RLF		R_PubReg1,1
1110  0303  368B    			RLF		R_PubReg4,1
1111  0304  1684    			DECFSZ	R_Count,1
1112  0305  A301    			GOTO	L_BCD2HexL_1
1113                ;
1114  0306  832A    			CALL	S_AddSub1	;[R_PubReg3:R_PubReg2]+[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg2
1115  0307  832F    			CALL	S_Mul2Sub1	;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1116  0308  2089    			MOVFW	R_PubReg2		;\
1117  0309  228B    			MOVWF	R_PubReg4		; | [R_PubReg3:R_PubReg2]
1118  030A  208A    			MOVFW	R_PubReg3		; | ->R_PubReg5:R_PubReg4
1119  030B  228C    			MOVWF	R_PubReg5		;/
1120  030C  832F    			CALL	S_Mul2Sub1	;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1121  030D  832F    			CALL	S_Mul2Sub1	;[R_PubReg3:R_PubReg2]×2->R_PubReg3:R_PubReg2
1122  030E  832A    			CALL	S_AddSub1	;[R_PubReg3:R_PubReg2]+[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg2
1123                ;								以上17行相当于[R_PubReg3:R_PubReg2]×10
1124                L_BCD2Hex_Next:			
1125  030F  168D    			DECFSZ	R_PubCnt0,1
1126  0310  A2FD    			GOTO	L_BCD2HexLoop
1127                ;上面的程序将4位BCD码[R_PubReg1:R_PubReg0]转换为二进制

⌨️ 快捷键说明

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