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

📄 uvi_4245 nov 08 08.dt

📁 一个测试紫外钱的程序源码
💻 DT
📖 第 1 页 / 共 5 页
字号:
		
		MOV			A,@0X0C
		MOV			PORTC,A
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&一般寄存器初始化
		
		MOV			A,@0X55				;掉电检测
		XOR			A,POWERTEST1
		JBS			STATUS,Z
		LJMP		CLR_RAM
		
		MOV			A,@0XAA
		XOR			A,POWERTEST2
		JBS			STATUS,Z
		LJMP		CLR_RAM
		
;		MOV			A,@0X18			;test power on T=1,P=1
;		AND			A,STATUS
;		XOR			A,@0X18
;		JBS			STATUS,Z
	
		LJMP			MAIN1

CLR_RAM:					;清除SRAM
		BANK		0
		MOV			A,@0XFF
		MOV			R4,A
		
CLR_RAM1:	
		BANK		0
		CLR			R0
		DEC			R4
			
		MOV			A,@0XCF
		SUB			A,R4
		JBC			STATUS,C
		LJMP		CLR_RAM1
		
		MOV			A,@0X55
		MOV			POWERTEST1,A
		MOV			A,@0XAA
		MOV			POWERTEST2,A
		
		MOV			A,@0X01
		MOV			MONTH,A
		MOV			DAY,A
		MOV			A,@0X0C
		MOV			HOUR,A			;初始上电显示中午12点
		MOV			HOUR_12,A
		
		
;=============================================================================主程序
MAIN1:
		BANK		0
		MOV			A,@0X81
		MOV			IMR,A
		
		BANK		1
		MOV			A,@0XC0
		MOV			EIMR,A		;允许SET,UV按键中断
		ENI
		
MAIN:
		BANK		1
		MOV			A,@0XC0
		MOV			EIMR,A
		
		BANK		0
		BS			FLAG2,SET_MODE_FLAG
		MOV			A,@0X81
		MOV			IMR,A
		
		BANK		0
		JBC			PRST,FTBAT		;电池电压不足标志
		LCALL		POWER_TEST			;检查电池
		
		BANK		0
		JBC			PRST,FUV
		LCALL		UV_TEST			;UV长按标志 测试UV

		BANK		0
		JBC			PRST,FDEM
		LCALL		D_TIME_MODE
		
		BANK		0
		JBC			FLAG1,UV_SHORT
		LCALL		UV_SHORT_M		;UV短按标志 显示UV和相应倒计时时间
		
		BANK		0
		JBC			FLAG2,SET_LONG
		LCALL		D_TIME_SET
		
		BANK		0
		JBC			PRST,FSET
		LCALL		TIME_SET		;SET标志,设置时间或调整12/24小时制
		
		JBC			PRST,FDEM
		LJMP		MAIN
		
		JBC			PRST,FUV
		LJMP		MAIN
		
		BANK		0
		LCALL		TIME_DISPLAY	;显示时间
		
		BANK		0
		JBS			PORTB,UV
		LJMP		MAIN
		
		MOV			KEY_TIME,KEY_TIME
		JBS			STATUS,Z
		LJMP		MAIN	
		
		JBS			PORTB,SET
		LJMP		MAIN	
		
;=========================================================================POWER_DOWN IDLE模式
POWER_DOWN:
		BANK		3
		MOV			A,@0X00
		MOV			ADCR,A
		MOV			ADICH,A
		MOV			ADICL,A		;关AD
		
		BANK		4
		MOV			A,@0X04
		MOV			IOC7,A
		MOV			A,@0XA2
		MOV			IOC8,A
		MOV			A,@0X09
		MOV			IOC9,A		;P90,P93 2.5V,VS
		MOV			A,@0X00
		MOV			IOCA,A
		MOV			A,@0X0C
		MOV			IOCB,A
		MOV			A,@0X0C
		MOV			IOCC,A
		
		
		BANK		5
		MOV			A,@0X04
		MOV			P7PHCR,A		;PULL HIGH
		MOV			A,@0X0C
		MOV			PBPHCR,A
		MOV			A,@0X00
		MOV			PCPHCR,A
		
		MOV			A,@0X00
		MOV			P8PHCR,A
		MOV			A,@0X00
		MOV			P9PHCR,A
		MOV			PAPHCR,A		;设置上拉
		
		
		BANK	0
		MOV			A,@0X04
		MOV			PORT7,A
		MOV			A,@0XE2
		MOV			PORT8,A		;关闭uvi检测
		MOV			A,@0X09
		MOV			PORT9,A
		MOV			A,@0X00
		MOV			PORTA,A
		MOV			A,@0X0C
		MOV			PORTB,A
		MOV			A,@0X80
		MOV			IMR,A			;使能T1,TCC中断(0.5s,50ms)
		
		BANK		1
		MOV			A,@0XC0
		MOV			EIMR,A		;允许SET,UV按键中断
		
		BANK		4
		MOV			A,@0XC0
		MOV			WKCR,A		;允许SET,UV唤醒
		
		BANK		0
		BS			SCCR,IDLE	;IDLE模式
		ENI
		
		SLEP
		NOP
		NOP
		NOP
		NOP
		
WAKE_UP:
		
		LJMP		MAIN
		
;========================================================POWER_TEST电压检测

POWER_TEST:
		BANK		4
		BC			IOC8,POWER
		
		BANK		0
		MOV			A,@0XA2
		MOV			PORT8,A			;P86=0 开启UV测试电路
		BC			PRST,FTBAT
		
		BANK		3
		MOV			A,@0X00
		MOV			ADICH,A
		MOV			A,@0X08			;AD3,2.5V检测
		MOV			ADICL,A

POWER_TEST1:
		MOV			A,@0X73			;FC/64
		MOV			ADCR,A
		BS			ADCR,ADRUN

POWER_TEST1A:
		JBC			ADCR,ADRUN
		LJMP		POWER_TEST1A
		
		NOP
		NOP
		NOP
		BS			ADCR,ADRUN
POWER_TEST1A1:
		JBC			ADCR,ADRUN
		LJMP		POWER_TEST1A1

POWER_TEST1B:
		MOV			A,ADDH
		
		BANK		0
		MOV			TEMP1,A			;读取结果高8位
		
POWER_TEST2:
		JBC			PRST,FBAT	
		LJMP		POWER_TEST2B	;电量不足

POWER_TEST2A:
		MOV			A,@0XF5			;2.5/2.6*255=245
		SUB			A,TEMP1
		JBC			STATUS,C			
		BS			PRST,FBAT		;大于245表示电池电压不足2.6V
		LJMP		POWER_RET
		
POWER_TEST2B:
		MOV			A,@0XF1			;2.5/2.63*255=242
		SUB			A,TEMP1
		JBS			STATUS,C
		BC			PRST,FBAT		;小于242表示电池电压大于2.63V
		
POWER_RET:
		MOV			A,@0XE2
		MOV			PORT8,A
		RET
		
;==========================================================UVI AND	D_TIME	倒计时和UVI显示
UV_SHORT_M:
		BANK		1
		MOV			A,@0X00
		MOV			EIMR,A
		
	 	BANK		0
	 	BC			FLAG2,SET_MODE_FLAG
	 	MOV			A,@0X64
		MOV			SHORT_COUNT,A

UV_SHORT_DIS:
		BANK		0
		CLR			FLAG
		JBC			PRST,FSEC
		LJMP		UV_SHORT_DIS_ON
	
UV_SHORT_DIS_OFF:
		MOV			A,@0X0A
		MOV			DIS1,A
		MOV			DIS2,A
		MOV 		DIS3,A
		MOV			DIS4,A
    	LJMP		UV_SHORT_DIS_OUT
		
UV_SHORT_DIS_ON:
		BC			FLAG,FDDIS
		BS			FLAG,FDOTDIS
		MOV			A,@0X0A
		MOV			DIS4,A
		CLR			DIS1
		CLR			DIS2
		CLR			DIS3
		
		MOV			A,UVIMAX
		MOV			TEMP1,A
	
UV_SHORT_DIS1:
		MOV			A,@0X64
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		UV_SHORT_DIS2
		
		MOV			TEMP1,A
		INC			DIS1
		LJMP		UV_SHORT_DIS1
	
UV_SHORT_DIS2:
		MOV			A,@0X0A
		SUB			A,TEMP1
		JBS			STATUS,C
		LJMP		UV_SHORT_DIS3
		
		MOV			TEMP1,A
		INC			DIS2
		LJMP		UV_SHORT_DIS2
	
UV_SHORT_DIS3:
		MOV			A,TEMP1
		MOV			DIS3,A
	
		MOV			A,@0X01
		SUB			A,DIS1
		JBC			STATUS,C
		LJMP		UV_SHORT_DIS_OUT
	
		MOV			A,@0X0A
		MOV			DIS1,A
	
UV_SHORT_DIS_OUT:
		BANK		0
		LCALL		SEG_COM
		LCALL		COM_RAM

WAIT1:	
		BANK		0
		JBS			PRST,F50MS
		LJMP		WAIT1	
	
		BC			PRST,F50MS
		DJZ			SHORT_COUNT
		LJMP		UV_SHORT_DIS

		BC			FLAG2,SET_LONG
		BC			FLAG2,SET_SHORT
		BC			FLAG1,UV_SHORT
		BC			PRST,FUV
		BC			PRST,FSET
		BS			PRST,FDEM	
		RET		
			
;==========================================================UV_TEST 紫外线测试		
		
UV_TEST:
		BANK		4
		BC			IOC8,POWER
		
		BANK		1
		MOV			A,@0X00
		MOV			EIMR,A		;禁止SET,UV按键中断
		
		BANK		0
		MOV			A,@0XA2
		MOV			PORT8,A			;P86=0 开启UV测试电路	
		MOV			A,@0X81
		MOV			IMR,A			;ENBALE T1 AND TCC中断
		BC			PRST,FSET
		BC			PRST,FUV
		BC			FLAG1,UV_SHORT
		BC			PRST,F50MS
		BS			PRST,FAN
		CLR			UVIMAX
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UV_TEST0:
			
		MOV			A,@0X3C
		MOV			T_COUNT,A		;0.5S*60=30S
		
		BANK		3
		MOV			A,@0X00
		MOV			ADICH,A
		MOV			A,@0X59
		MOV			ADICL,A			;AD0,3,4,6
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UV_TEST1:
		BANK		0
		MOV			A,@0X0A			;0.05S*10=0.5S
		MOV			T10SEC,A
		CLR			FLAG
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&传感器电压AD转换VS*20

UV_TEST31:
		BANK		3
		MOV			A,@0X70
		MOV			ADCR,A			;AD0 VS
		BS			ADCR,ADRUN

WAIT2:
		JBC			ADCR,ADRUN
		LJMP		WAIT2				;先启动一次
		BANK     3
    	MOV      A,ADDH
    	MOV      A,ADDL
				
		BANK		0
		CLR			VSL
		CLR			VSH
		MOV			A,@0X14
		MOV			AD_COUNT,A			;AD转换20次
		
UV_TEST31A:
		BANK		3
		BS			ADCR,ADRUN

WAIT3:		
		JBC			ADCR,ADRUN
		LJMP		WAIT3
		
		BANK		3
		MOV			A,ADDH
		
		BANK		0
		MOV			TEMP1,A			;读取高8位
		
		BANK		3
		MOV			A,ADDL
		AND			A,@0X0F
		
		BANK		0
		MOV			TEMP2,A			;读取低4位
		
		SWAPA		TEMP1
		MOV			TEMP1,A
		AND			A,@0XF0
		OR			TEMP2,A			;AD低8位
		MOV			A,@0X0F
		AND			TEMP1,A			;AD高4位

		
		MOV			A,TEMP2			;VS1=VS1+VS低位
		ADD			VSL,A
		JBC			STATUS,C
		INC			VSH				;进位
		
		MOV			A,TEMP1
		ADD			VSH,A
		
		DJZ			AD_COUNT
		LJMP		UV_TEST31A
		

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&传感器偏置电压AD VB	VOUT*20 AD6

UV_TEST32:
		BANK		3
		MOV			A,@0X76
		MOV			ADCR,A
		BS			ADCR,ADRUN

WAIT4:		
		JBC			ADCR,ADRUN
		LJMP		WAIT4			;先启动一次
		BANK     3
    	MOV      A,ADDH
    	MOV      A,ADDL
					
		
		BANK		0
		CLR			VBL
		CLR			VBH
		MOV			A,@0X14
		MOV			AD_COUNT,A		;AD转化20次

UV_TEST32A:		
		BANK		3
		BS			ADCR,ADRUN

WAIT5:		
		JBC			ADCR,ADRUN
		LJMP		WAIT5
		
		BANK		3	
		MOV			A,ADDH
		
		BANK		0
		MOV			TEMP1,A
		
		BANK		3
		MOV			A,ADDL
		AND			A,@0X0F
		
		BANK		0
		MOV			TEMP2,A
		
		SWAPA		TEMP1
		MOV			TEMP1,A
		AND			A,@0XF0
		OR			TEMP2,A
		MOV			A,@0X0F
		AND			TEMP1,A
		
		MOV			A,TEMP2
		ADD			VBL,A
		JBC			STATUS,C
		INC			VBH
		
		MOV			A,TEMP1
		ADD			VBH,A
		
		DJZ			AD_COUNT
		LJMP		UV_TEST32A
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&两检测电压差值VS=(VS-VB)*12

UV_TEST33:
		BANK		0
		MOV			A,VBL
		SUB			VSL,A
		JBS			STATUS,C
		INC			VBH			;有借位
		
		MOV			A,VBH
		SUB			VSH,A
		JBS			STATUS,C
		CLR			VSH			;VS<VB	VS=0
		JBS			STATUS,C
		CLR			VSL
		
UV_TEST33A:
		MOV			A,@0X0C
		MOV			AD_COUNT,A	;VS=VS*12
		MOV			A,VSL
		MOV			VBL,A
		MOV			A,VSH
		MOV			VBH,A
		CLR			VSL
		CLR			VSH
		
UV_TEST33B:
		MOV			A,VBL
		ADD			VSL,A
		JBC			STATUS,C
		INC			VSH
		
		MOV			A,VBH
		ADD			VSH,A
		DJZ			AD_COUNT
		LJMP		UV_TEST33B
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&计算UVI值(扩大10倍)

UV_TEST34:
		BANK		0
		CLR			UVI
		MOV			A,@0X60	;3(mv/uvi)/3000*4096*20*12=983.4因为UV传感器的灵敏度逐渐增大所以除数逐渐增大近似认为100 0-5 0.3uvi 5-10 0.5uvi	10以上误差较大
		MOV			VBL,A
		MOV			A,@0X00
		MOV			VBH,A
		
UV_TEST34A:
		MOV			A,VBL
		SUB			VSL,A
		JBC			STATUS,C
		LJMP		UV_TEST34B
		
		MOV			A,@0X01		;有借位vsl<vbl
		SUB			VSH,A
		JBS			STATUS,C
		LJMP		UV_TEST34E	;有借位vsH=0
		
UV_TEST34B:
		MOV			A,VBH
		SUB			VSH,A
		JBS			STATUS,C
		LJMP		UV_TEST34E	
		
UV_TEST34D:
		INC			UVI
		MOV			A,@0X01
		ADD			VBL,A
		JBC			STATUS,C
		INC			VBH				;增大除数VB
		
		MOV			A,@0XFC		;254
		SUB			A,UVI
		JBS			STATUS,C
		LJMP		UV_TEST34A

UV_TEST34E:
		NOP
		NOP

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UV_TEST4校正UVI 电源校正2.5V AD转换AD3

UV_TEST41:
		BANK		3
		MOV			A,@0X73
		MOV			ADCR,A
		BS			ADCR,ADRUN

WAIT6:		
		JBC			ADCR,ADRUN
		LJMP		WAIT6
		BANK		3
		MOV			A,ADDH
		MOV			A,ADDL
		
UV_TEST41A:
		BANK		3
		BS			ADCR,ADRUN
WAIT7:
		JBC			ADCR,ADRUN
		LJMP		WAIT7
		
		BANK		3
		MOV			A,ADDH
		
		BANK		0
		MOV			TEMP1,A
		
		MOV			A,@0XB6		;2.5V AD结果TEMP1
		SUB			A,TEMP1
		JBC			STATUS,C
		LJMP		UV_TEST42
		
		MOV			A,@0XB6
		MOV			TEMP1,A
		

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&UVI校正 UVI1=UVI*213/TEMP1

UV_TEST42:
		BANK		0
		CLR			VSL
		CLR			VSH
		MOV			A,@0XD5		;2.5/3*255=213=0XD5
		MOV			AD_COUNT,A
		
UV_TEST42A:
		MOV			A,UVI
		ADD			VSL,A
		JBC			STATUS,C
		INC			VSH
		
		DJZ			AD_COUNT		;电源校正VS=UVI*213
		LJMP		UV_TEST42A
		
		CLR			UVI
		
UV_TEST42B:									;UVI1=UVI*213/TEMP1(校正)
		MOV			A,TEMP1
		SUB			VSL,A
		JBC			STATUS,C
		LJMP		UV_TEST42C
		
		MOV			A,@0X01			;借位
		SUB			VSH,A
		JBS			STATUS,C
		LJMP		UV_TEST42D
		
UV_TEST42C:
		INC			UVI
		MOV			A,@0XFC			;254
		SUB			A,UVI
		JBS			STATUS,C
		LJMP		UV_TEST42B
		
UV_TEST42D:
		NOP
		NOP
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&VR调节放大系数0.8-1.43	80+(0-255)/4	

UV_TEST51:							;VR AD转换
		BANK		3
		MOV			A,@0X74
		MOV			ADCR,A
		BS			ADCR,ADRUN

WAIT8:		
		JBC			ADCR,ADRUN
		LJMP		WAIT8					;先启动一次
		BANK		3
		MOV			A,ADDH
		
		NOP
		NOP
		NOP
		BANK		3
		BS			ADCR,ADRUN

WAIT9:
		JBC			ADCR,ADRUN
		LJMP		WAIT9
		
		BANK		3
		MOV			A,ADDH
		BANK		0
		MOV			TEMP1,A
		CLR			VBL

UV_TEST51A:
		MOV			A,@0X04
		SUB			TEMP1,A
		JBS			STATUS,C
		LJMP		UV_TEST51B
		
		INC			VBL		;VBL=VR/4
		LJMP		UV_TEST51A
		
UV_TEST51B:
		MOV			A,@0X50
		ADD			VBL,A			;80+VR/4
		
		CLR			VSL
		CLR			VSH
		
UV_TEST51C:
		MOV			A,UVI		;VS=UVI*(80+VR/4)
		ADD			VSL,A

⌨️ 快捷键说明

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