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

📄 9821h620.asm

📁 用台湾富晶单片机开发的电子称包括源码和编译器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
			MOVFW	R_UnitData1		; | ->R_PubReg5:R_PubReg4
			MOVWF	R_PubReg5		;/
			MOVFW	R_UnitData2
			ADDWF	R_PubCnt3,1		;[R_PubCnt3]+[R_UnitData2]->R_PubCnt3
			CALL	S_Multi			;[R_PubReg3:R_PubReg2]×[R_PubReg5:R_PubReg4]->R_PubReg3:R_PubReg0
L_CalcHeft4L1:
			MOVFW	R_PubCnt3
			ANDLW	0FFH
			BTFSC	STATUS,Z
			GOTO	L_DispHeft		;[R_PubCnt3]=0 转
			BTFSC	R_PubCnt3,7
			GOTO	L_CalcHeft43	;[R_PubCnt3]≥80H 转
			DECF	R_PubCnt3,1		;[R_PubCnt3]-1->R_PubCnt3
			BCF		STATUS,C		;0->Cy
			RRF		R_PubReg3,1		;\
			RRF		R_PubReg2,1		; | [R_PubReg3:R_PubReg0]右移1位
			RRF		R_PubReg1,1		; | ->R_PubReg3:R_PubReg0
			RRF		R_PubReg0,1		;/
			GOTO	L_CalcHeft4L1
L_CalcHeft43:
			MOVLW	1
			MOVWF	R_Count			;1->R_Count
			CALL	S_RL1Bit	;[R_PubCnt3]+1->R_PubCnt3,[R_PubReg3:R_PubReg0]左移1位->R_PubReg3:R_PubReg0
			GOTO	L_CalcHeft4L1
L_DispHeft:
			MOVFW	R_DecimalDigits
			MOVWF	R_DispMode		;[R_DecimalDigits](小数位数)->R_DispMode
			BSF		R_DispMode,2	;1->R_DispMode.2 显示计量单位
			BTFSC	R_PubFlag0,5
			BSF		R_DispFlag,3	;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
			MOVFW	R_ScaleMarkV
			ADDPCW
			GOTO	L_DispHeft_11	;[R_ScaleMarkV]=0
			GOTO	L_DispHeft_11	;[R_ScaleMarkV]=1
			GOTO	L_DispHeft_12	;[R_ScaleMarkV]=2
			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=3
			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=4
;			GOTO	L_DispHeft_15	;[R_ScaleMarkV]=5
L_DispHeft_15:						;分度值=5
			MOVLW	80H				;\
			ADDWF	R_PubReg1,0		; |
			MOVLW	2				; | [R_PubReg3:R_PubReg2]+2.5
			ADDWFC	R_PubReg2,1		; | ->R_PubReg3:R_PubReg2
			MOVLW	0				; | (四舍五入)
			ADDWFC	R_PubReg3,1		;/
			GOTO	L_DispHeft_2
L_DispHeft_12:						;分度值=2
			MOVLW	1				;\
			ADDWF	R_PubReg2,1		; | [R_PubReg3:R_PubReg2]+1
			MOVLW	0				; | ->R_PubReg3:R_PubReg2
			ADDWFC	R_PubReg3,1		;/  (四舍五入)
			BCF		R_PubReg2,0		;0->R_PubReg2.0
			GOTO	L_DispHeft_2
L_DispHeft_11:						;分度值=1
			MOVLW	80H				;\
			ADDWF	R_PubReg1,0		; |
			MOVLW	0				; | [R_PubReg3:R_PubReg2]+0.5
			ADDWFC	R_PubReg2,1		; | ->R_PubReg3:R_PubReg2
			MOVLW	0				; | (四舍五入)
			ADDWFC	R_PubReg3,1		;/
L_DispHeft_2:
			MOVFW	R_PubReg2
			IORWF	R_PubReg3,0
			BTFSS	STATUS,Z
			GOTO	L_DispHeft_3	;[R_PubReg3:R_PubReg2]>0 转
			BCF		R_DispFlag,2	;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.2 不显示负号
			BCF		R_DispFlag,3	;[R_PubReg3:R_PubReg2]=0,0->R_DispFlag.3 不显示锁符
L_DispHeft_3:
			MOVLW	8
			SUBWF	R_SteadyTimer,0
			BTFSC	STATUS,C
			BCF		PT1,7			;[R_SteadyTimer]≥8(称重稳定到1秒),0->PT1.7(关背光灯)
			CALL    S_Hex2BCD		;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
			MOVLW	3
			SUBWF	R_ScaleMarkV,0
			BTFSS	STATUS,C
			GOTO	L_DispHeft_4	;[R_ScaleMarkV]<3(分度值≠5) 转
			MOVLW	5				;分度值=5
			SUBWF	R_DispBuff0,0
			MOVLW	5				;[R_DispBuff0]≥5,5->R_DispBuff0
			BTFSS	STATUS,C
			MOVLW	0				;[R_DispBuff0]<5,0->R_DispBuff0
			MOVWF	R_DispBuff0
L_DispHeft_4:
			GOTO	S_Display		;去显示
L_CalcHeftRet:
			RETURN
;
L_DispOverErr:						;显示超载错误
			CALL	S_ClrDisp
			MOVLW	0FH
			MOVWF	R_DispBuff3		;0FH("F")->R_DispBuff3
			MOVWF	R_DispBuff2		;0FH("F")->R_DispBuff2
			MOVWF	R_DispBuff1		;0FH("F")->R_DispBuff1
			MOVWF	R_DispBuff0		;0FH("F")->R_DispBuff0
			MOVLW	08H	
			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
			GOTO	S_Display		;去显示
;------------------------------------------------------------------------------
L_CaliProc:							;标定处理		
			MOVLW	01H
			ANDWF	R_DispFlag,1	;0->R_DispFlag.7:1
			BTFSC	R_WorkStatus,1
			GOTO	L_CaliPara		;[R_WorkStatus].1=1 转去标定功能状态字
			BTFSC	R_WorkStatus,0
			GOTO	L_CaliCode_1	;[R_WorkStatus].0=1 转
			BTFSS	R_PubFlag0,5
			GOTO	L_DispCaliCode	;[R_PubFlag0].5=0(称重数据不稳定) 转去显示内码
			MOVFW	R_ZeroCodeL		;\
			MOVWF	R_CaliCode0L	; | [R_ZeroCodeH:R_ZeroCodeL]
			MOVFW	R_ZeroCodeH		; | ->R_CaliCode0H:R_CaliCode0L 保存零点内码
			MOVWF	R_CaliCode0H	;/
			INCF	R_WorkStatus,1	;[R_WorkStatus]+1->R_WorkStatus
			GOTO	L_DispCaliCode	;去显示内码
L_CaliCode_1:
			BTFSS	R_PubFlag0,4
			GOTO	L_CaliCode_11	;[R_PubFlag0].4=0(无新的有效内码) 转
			BTFSS	R_PubFlag0,5
			GOTO	L_CaliCode_11	;[R_PubFlag0].5=0(称重数据不稳定) 转
			MOVFW	R_ZeroCodeL		;\
			MOVWF	R_PubReg4		; | [R_ZeroCodeH:R_ZeroCodeL]
			MOVFW	R_ZeroCodeH		; | ->R_PubReg5:R_PubReg4
			MOVWF	R_PubReg5		;/
			MOVFW	R_CaliCode0L	;\
			MOVWF	R_PubReg0		; | [R_CaliCode0H:R_CaliCode0L]
			MOVFW	R_CaliCode0H	; | ->R_PubReg1:R_PubReg0
			MOVWF	R_PubReg1		;/
			CALL	S_CalcABS		;计算[R_PubReg5:R_PubReg4]-[R_PubReg1:R_PubReg0]绝对值->R_PubReg5:R_PubReg4
			MOVFW	R_PubReg5
			ANDLW	0FFH
			BTFSS	STATUS,Z
			GOTO	L_CaliCode_11	;[R_PubReg5]>0 转
			MOVFW	R_ZeroCodeL		;\
			MOVWF	R_CaliCode0L	; | [R_ZeroCodeH:R_ZeroCodeL]
			MOVFW	R_ZeroCodeH		; | ->R_CaliCode0H:R_CaliCode0L 保存零点内码
			MOVWF	R_CaliCode0H	;/
L_CaliCode_11:
			BTFSC	R_KeyStatus,7
			GOTO	L_CaliCode_2	;[R_KeyStatus].7=1 转
			BTFSC	R_KeyStatus,4	;[R_KeyStatus].7=0
			GOTO	L_DispCaliCode	;[R_KeyStatus].4=1 转去显示内码
			MOVFW	R_KeyCode
			ANDLW	0FH
			SUBLW	06H
			BTFSC	STATUS,Z
			GOTO	L_DispDate		;[R_KeyCode].2:0=6("TARE"键按下)转去显示日期
			GOTO	L_DispCaliCode	;去显示内码
L_CaliCode_2:
			MOVLW	0CH
			SUBWF	R_KeyCode,0
			BTFSS	STATUS,Z
			GOTO	L_CaliProcRet	;[R_KeyCode]≠0CH(不是"OFF"键短键释放) 转,返回
			BTFSC	R_PubFlag0,5
			GOTO	L_CaliCode_3	;[R_PubFlag0].5=1(称重数据稳定),转
			MOVFW	R_LastAverageL	;\
			MOVWF	R_SteadyCodeL	; | [R_LastAverageH:R_LastAverageL]
			MOVFW	R_LastAverageH	; | ->R_SteadyCodeH:R_SteadyCodeL 数据不稳,取当前的平均值
			MOVWF	R_SteadyCodeH	;/
			GOTO	L_CaliCode_4
L_CaliCode_3:
			MOVFW	R_ZeroCodeL		;\  称重数据稳定
			MOVWF	R_SteadyCodeL	; | [R_ZeroCodeH:R_ZeroCodeL]
			MOVFW	R_ZeroCodeH		; | ->R_SteadyCodeH:R_SteadyCodeL
			MOVWF	R_SteadyCodeH	;/
L_CaliCode_4:
			CLRF	R_PubCnt1		;0->R_PubCnt1
			BCF		R_KeyStatus,7	;0->R_KeyStatus.7
			MOVLW	70H
			IORWF	R_KeyStatus,1	;07H->R_KeyStatus.7:4
			INCF	R_WorkStatus,1	;[R_WorkStatus]+1->R_WorkStatus
;
L_CaliPara:							;标定功能状态字
			BTFSS	R_KeyStatus,7
			GOTO	L_DispCaliP_0	;[R_KeyStatus].7=0 转 显示标定参数
			MOVLW	05H
			SUBWF	R_KeyCode,0
			BTFSC	STATUS,Z
			GOTO	L_AdjustPara	;[R_KeyCode]=05H(是"UNIT"键按下) 转 调整标定值
			MOVLW	0F0H
			ANDWF	R_KeyStatus,0
			SUBLW	80H
			BTFSS	STATUS,Z
			GOTO	L_CaliPara_1	;[R_KeyStatus].7:4≠8 转
			MOVLW	06H
			SUBWF	R_KeyCode,0
			BTFSC	STATUS,Z
			GOTO	L_SeleParaBit	;[R_KeyCode]=6("TARE"键按下) 转 选择标定数据位
L_CaliPara_1:
			MOVLW	0CH
			SUBWF	R_KeyCode,0
			BTFSC	STATUS,Z
			GOTO	L_AdjustPara	;[R_KeyCode]=0CH("OFF"短键释放) 转 调整标定值
			BTFSS	R_KeyStatus,5
			GOTO	L_DispCaliP_0	;[R_KeyStatus].5=0(按键未到2秒) 转
			MOVLW	04H
			SUBWF	R_KeyCode,0
			BTFSC	STATUS,Z
			GOTO	L_CaliNextPara	;[R_KeyCode]=04H("OFF"键按下2秒) 转 进入下一个项目
L_DispCaliP_0:
			BTFSS	R_TimerCnt,2
			GOTO	L_DispCaliPara	;[R_TimerCnt].2=0 转 显示标定参数
			MOVFW	R_PubCnt1
			ANDLW	03H
			SUBLW	R_DispBuff3
			MOVWF	FSR0
			MOVLW	10H				;" "
			MOVWF	IND0			;10H(" ")->IND0
			GOTO	L_DispCaliPa_1
L_DispCaliPara:						;显示当前标定的参数
			RRF		R_PubCnt1,0
			RRF		WORK,0
			RRF		WORK,0
			ANDLW	06H
			ADDLW	R_CaliMarkL
			MOVWF	FSR0			;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
			MOVFW	IND0
			ANDLW	0FH
			MOVWF	R_DispBuff0
			MOVFW	IND0
			CALL	S_RR4Work		;[WORK]右移4位->WORK,0->WORK.7:4
			MOVWF	R_DispBuff1
			INCF	FSR0,1
			MOVFW	IND0
			ANDLW	0FH
			MOVWF	R_DispBuff2
			MOVFW	IND0
			CALL	S_RR4Work		;[WORK]右移4位->WORK,0->WORK.7:4
			MOVWF	R_DispBuff3
			MOVLW	10H
			MOVWF	R_DispBuff4		;10H(" ")->R_DispBuff4
L_DispCaliPa_1:
			MOVLW	08H	
			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
			GOTO	S_Display		;去显示
;
L_SeleParaBit:						;"TARE"键按下,选择标定数据位
			INCF	R_PubCnt1,1		;[R_PubCnt1]+1->R_PubCnt1
			BCF		R_PubCnt1,2		;0->R_PubCnt1.2,[R_PubCnt1]=0-3
			GOTO	L_DispCaliPara	;去显示当前标定的参数
;
L_AdjustPara:						;UNIT"键按下或"OFF"短键释放,调整标定值
			RRF		R_PubCnt1,0
			RRF		WORK,0
			RRF		WORK,0
			ANDLW	06H
			ADDLW	R_CaliMarkL
			MOVWF	FSR0			;根据[R_PubCnt1].5:4计算出当前参数的地址->FSR0
			BTFSS	R_PubCnt1,1
			INCF	FSR0,1
			MOVLW	0FH				;0FH->WORK
			BTFSS	R_PubCnt1,0
			MOVLW	0F0H			;[R_PubCnt1].0=0,0F0H->WORK
			MOVWF	R_PubReg1		;[WORK]->R_PubReg1
			MOVLW	01H				;01H->WORK
			BTFSS	R_PubCnt1,0
			MOVLW	10H				;[R_PubCnt1].0=0,10H->WORK
			ADDWF	IND0,1			;[IND0]+[WORK]->IND0
			BTFSS	R_PubCnt1,0
			GOTO	L_AdjPara_1		;[R_PubCnt1].0=0 转
			MOVFW	IND0			;[R_PubCnt1].1=1
			ANDLW	0FH
			BTFSS	STATUS,Z
			GOTO	L_AdjPara_1		;[IND0].3:0>0 转
			MOVLW	10H
			SUBWF	IND0,1			;[IND0]-10H->IND0
L_AdjPara_1:
			MOVLW	R_CaliMarkL
			SUBWF	FSR0,0
			CALL	S_RdParaMaxV	;读出当前参数的最大值
			ANDWF	R_PubReg1,0
			MOVWF	R_PubReg0
			MOVFW	R_PubReg1
			ANDWF	IND0,0
			SUBWF	R_PubReg0,0
			BTFSC	STATUS,C
			GOTO	L_DispCaliPara	;当前设定的参数未超过最大值,去显示当前标定的参数
			COMF	R_PubReg1,0
			ANDWF	IND0,1			;超过最大值,当前设定值清0
			GOTO	L_DispCaliPara	;当前设定的参数未超过最大值,去显示当前标定的参数
;
L_CaliNextPara:						;"OFF"键按下2秒,进入下一个项目
			BSF		R_KeyStatus,4	;1->R_KeyStatus.4
			BSF		R_KeyStatus,5	;1->R_KeyStatus.5
			MOVLW	0F0H
			ANDWF	R_PubCnt1,0
			BTFSC	STATUS,Z
			CALL	S_CaliCodeProc	;[R_PubCnt1].7:4=0 处理重量标定数据
			MOVLW	20H
			SUBWF	R_PubCnt1,0
			BTFSC	STATUS,C
			GOTO	L_CaliParaOver	;[R_PubCnt1].7:4≥2 转 标定完成处理
			MOVFW	R_PubCnt1
			ADDLW	10H
			ANDLW	30H
			MOVWF	R_PubCnt1
			GOTO	L_DispCaliPara	;去显示下一个标定参数
L_CaliParaOver:						;标定完成处理
			CALL	S_ClrDisp		;清LCD显示缓冲区LCD1-LCD6
			MOVLW	D_CaliMark1
			MOVWF	R_CaliParaFlag	;D_CaliMark1->R_CaliParaFlag
			CALL	S_WrCaliData	;将[R_CaliChksumH:R_CaliMarkL]的8个16位数据写入到93LC46的00H-07H中
			MOVLW	20H
			MOVWF	R_PubCnt1		;20H->R_PubCnt1,定时2秒
			MOVLW	0C0H
			MOVWF	R_WorkStatus	;0C0H->R_WorkStatus,2秒后关机。
			MOVLW	15H				;"H"					;\
			MOVWF	R_DispBuff4		;15H("H")->R_DispBuff4	; |
			MOVLW	06H										; | 显示版本号
			MOVWF	R_DispBuff3		;06H("6")->R_DispBuff3	; | "H620 "
			MOVLW	02H										; |
			MOVWF	R_DispBuff2		;02H("2")->R_DispBuff2	; |
			MOVLW	00H										; |
			MOVWF	R_DispBuff1		;00H("0")->R_DispBuff1	;/
			MOVLW	08H	
			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
			GOTO	S_Display		;去显示
L_CaliProcRet:
			RETURN
;
S_DispCaliCode:						;显示内码
L_DispCaliCode:						;显示内码
			BTFSS	R_PubFlag0,4
			GOTO	L_CaliProcRet	;[R_PubFlag0].4=0(未得到新的有效内码) 转,返回
			BCF		R_DispFlag,3	;0->R_DispFlag.3
			BTFSC	R_PubFlag0,5
			BSF		R_DispFlag,3	;[R_PubFlag0].5=1(称重数据稳定),1->R_DispFlag.3 显示锁符
;			MOVLW	1
;			CALL	S_ReadCode		;读当前内码->R_PubReg1:R_PubReg0
;			MOVFW	R_PubReg0		;\
;			MOVWF	R_PubReg2		; | [R_PubReg1:R_PubReg0]
;			MOVFW	R_PubReg1		; | ->R_PubReg3:R_PubReg2
;			MOVWF	R_PubReg3		;/
			MOVFW	R_LastAverageL	;\
			MOVWF	R_PubReg2		; | [R_LastAverageH:R_LastAverageL]
			MOVFW	R_LastAverageH	; | ->R_PubReg3:R_PubReg2
			MOVWF	R_PubReg3		;/
			CALL	S_Hex2BCD		;将[R_PubReg3:R_PubReg2]转换为5位BCD码->R_DispBuff4:R_DispBuff0
			MOVLW	08H	
			MOVWF	R_DispMode		;08H->R_DispMode,无小数点,16进制显示方式
			BTFSC	R_TimerCnt,3
			BSF		R_DispMode,0
			GOTO	S_Display		;去显示
;
L_DispDate:							;显示日期
			MOVLW	D_MonthH		;修改日期的月十位
			MOVWF	R_DispBuff4		;->R_DispBuff4
			MOVLW	D_MonthL		;修改日期的月个位
			MOVWF	R_DispBuff3		;->R_DispBuff3
			MOVLW	11H
			MOVWF	R_DispBuff2		;11H("-")->R_DispBuff2
			MOVLW	D_DayH			;修改日期的日十位
			MOVWF	R_DispBuff1		;->R_DispBuff1
			MOVLW	D_DayL			;修改日期的日个位

⌨️ 快捷键说明

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