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

📄 uvi_4245 nov 08 08.dt

📁 一个测试紫外钱的程序源码
💻 DT
📖 第 1 页 / 共 5 页
字号:
;=========================================
/*
EM78P510
;CLOCK	MAIN: ERC R=51K 	SUB: 32.768K
;创建日期 2008 11 08
	备注:
	1, 在时钟模式下短按UV显示上一次UV测试最大值,之后进入倒计时模式
	2,在倒计时模式下长按SET两秒进入倒计时时间设置
	3,2.5V上面那个电阻(R9=1K)取消,否则无法进行电压检测(电池电量检测)
	4,样机耗电大约在44UA,需要将其降至20UA左右,将TCC50MS中断唤醒取消
	
;JASON HUANG 
;========================================================CONTROL RESGISTER
*/
;BANK	0
R0			==		0X00
TCC			==		0X01
PC			==		0X02
STATUS		==		0X03
	C		==		0
	Z		==		2
R4			==		0X04
R5			==		0X05

PORT7		==		0X07
	UP		==		2
PORT8		==		0X08
	VOUT	==		5
	POWER	==		6
	VR		==		7
PORT9		==		0X09
	V2.5	==		0
	VS		==		3
PORTA		==		0X0A
PORTB		==		0X0B
	UV		==		3
	SET		==		2
SCCR		==		0X0C
	IDLE	==		3
TWTCR		==		0X0D
IMR			==		0X0E
ISR			==		0X0F

;BANK	1
LCDCR		==		0X05
	LCDEN	==		7
LCDAR		==		0X06
LCDBR		==		0X07
LCDVCR		==		0X08
LCDCCR		==		0X09
LCDSCR0		==		0X0A
LCDSCR1		==		0X0B
LCDSCR2		==		0X0C

EIMR		==		0X0E
EISR		==		0X0F

;BANK	2
T1CR		==		0X05
TSR			==		0X06
T1PD		==		0X07
T1TD		==		0X08
T2CR		==		0X09
T2PD		==		0X0A
T2TD		==		0X0B
SPIS		==		0X0C
SPIC		==		0X0D
SPIR		==		0X0E
SPIW		==		0X0F

;BANK	3
URC			==		0X05
URS			==		0X06
URRD		==		0X07
URTD		==		0X08
ADCR		==		0X09
	ADRUN	==		7
ADICH		==		0X0A
ADICL		==		0X0B
ADDH		==		0X0C
ADDL		==		0X0D
EIESH		==		0X0E
EIESL		==		0X0F

;BANK	4
LEDDCR		==		0X05
WBCR		==		0X06
	BUZE	==		2
IOC7		==		0X07
IOC8		==		0X08
IOC9		==		0X09
IOCA		==		0X0A
IOCB		==		0X0B
IOCC		==		0X0C


WKCR		==		0X0F

;BANK	5
URC2		==		0X06
P7PHCR		==		0X07
P8PHCR		==		0X08
P9PHCR		==		0X09
PAPHCR		==		0X0A
PBPHCR		==		0X0B
PCPHCR		==		0X0C

;BANK	6
LVRCR		==		0X06
P7ODCR		==		0X07
P8ODCR		==		0X08
P9ODCR		==		0X09
PAODCR		==		0X0A
PBODCR		==		0X0B
PORTC		==		0X0C

;=======================================================RAM DEFIND

;BANK	0
TEMP1		==		0X10
TEMP2		==		0X11
DIS1		==		0X12
DIS2		==		0X13
DIS3		==		0X14
DIS4		==		0X15
FLAG		==		0X16
	FDOTDIS	==		0
	FPMDIS	==		1
	FBATDIS	==		2
	FDDIS	==		3
	FCOLDIS	==		4
	
PRST		==		0X17
	FTBAT	==		0
	FUV		==		1
	FBAT	==		2
	FSET	==		3
	F50MS	==		4
	FAN		==		5
	FSEC	==		6
	FDEM	==		7	;倒计时标志
	
FLAG1		==		0X18
	UV_SHORT==		0
	D_MODE_FLAG==	1
	FLAG_24	==		2
	UV_FLAG	==		3
	UV_STATE==		4
	SET_KEY_LONG==	5
	UP_KEY_LONG	==	6
	DOWN_KEY_LONG== 7

HOUR		==		0X19
HOUR_12		==		0X1A
D_HOUR		==		0X1B
MIN			==		0X1C
D_MIN		==		0X1D
SEC			==		0X1E
D_SEC		==		0X1F

;general resgister

LCDCOUNT	==		0X20
COM0BUF		==		0X21
COM1BUF		==		0X22
COM2BUF		==		0X23
COM3BUF		==		0X24
POWERTEST1	==		0X25
POWERTEST2	==		0X26
AD_COUNT	==		0X27
T_COUNT		==		0X28
SHORT_COUNT	==		0X29
T10SEC		==		0X2A
UVIMAX		==		0X2B
UVI			==		0X2C
VSH			==		0X2D
VSL			==		0X2E
VBH			==		0X2F
VBL			==		0X30
UP_TIME		==		0X31
UP_TIME1	==		0X32
DOWN_TIME	==		0X33
DOWN_TIME1	==		0X34
KEY_TIME	==		0X35
DAY			==		0X36
MONTH		==		0X37
DAYMAX		==		0X38
UVIBUF		==		0X39
D_HOUR_MAX	==		0X3A
D_MIN_MAX	==		0X3B
SPEAK_TIME	==		0X3C
FLAG2		==		0X3D
 SET_SHORT	==		0
 SET_FLAG	==		1
 SET_STATE	==		2
 SET_LONG	==		3
 SET_MODE_FLAG==	4
 SET_D_TIME_FLAG==	5
SET_KEY_TIME==		0X3E

 
;================================================================MACRO
BANK0		MACRO
			MOV		A,@0X00
			MOV		R5,A
			ENDM
			
BANK1		MACRO
			MOV		A,@0X01
			MOV		R5,A
			ENDM
			
BANK2		MACRO
			MOV		A,@0X02
			MOV		R5,A
			ENDM
			
BANK3		MACRO
			MOV		A,@0X03
			MOV		R5,A
			ENDM
			
BANK4		MACRO
			MOV		A,@0X04
			MOV		R5,A
			ENDM
			
BANK5		MACRO
			MOV		A,@0X05
			MOV		R5,A
			ENDM
			
BANK6		MACRO
			MOV		A,@0X06
			MOV		R5,A
			ENDM
			
BANK7		MACRO
			MOV		A,@0X07
			MOV		R5,A
			ENDM
;===============================================================INTERRUPTER SOURCE
		ORG			0000H
		LJMP		RESET
		NOP
		ORG			0003H
		LJMP		TCC_INT
		
		NOP
		ORG			0006H
		LJMP		EXT_INT
		
		NOP
		ORG			0009H	
		LJMP		RESET		;watch dog interrupter
		
		NOP
		ORG			000CH
		LJMP		T1_INT		;timer1 interrupter
		
		NOP
		ORG			000FH
		LJMP		TP_INT		;timer2	interrupter
		
		NOP
		ORG			0012H
		LJMP		TP_INT		;A/D interrupter
		
		NOP
		ORG			0015H
		LJMP		TP_INT		;UART interrupter
		
		NOP
		ORG			0018H
		LJMP		TP_INT		;SPI interrupter
		
		NOP
		ORG			001BH
		LJMP		RESET		;LVD interrupter
		
;==================================================================TAB
 		ORG     	0X0040

;================================================================UVI值对应的倒计时时间
UVI_TIME_TAB:
		ADD			PC,A
		RETL		@0X02		;UVI=0	时,分
		RETL		@0X1E
		RETL		@0X04
		RETL		@0X1E
		
		RETL		@0X01		;UVI=1
		RETL		@0X00
		RETL		@0X03
		RETL		@0X00
		
		RETL		@0X00		;UVI=2
		RETL		@0X1E
		RETL		@0X01
		RETL		@0X1E
		
		RETL		@0X00		;UVI=3
		RETL		@0X14
		RETL		@0X01
		RETL		@0X00
		
		RETL		@0X00		;UVI=4
		RETL		@0X0F		;15
		RETL		@0X00
		RETL		@0X2D		;45
		
		RETL		@0X00
		RETL		@0X0C		;UVI=5	;12
		RETL		@0X00
		RETL		@0X24			;36
		
		RETL		@0X00
		RETL		@0X0A		;6		;10
		RETL		@0X00
		RETL		@0X1E				;30
		
		RETL		@0X00
		RETL		@0X09		;7		;9
		RETL		@0X00
		RETL		@0X1A				;26
		
		RETL		@0X00
		RETL		@0X08		;8		;8
		RETL		@0X00
		RETL		@0X17				;23
		
		RETL		@0X00
		RETL		@0X07		;9		;7
		RETL		@0X00
		RETL		@0X14				;20
		
		RETL		@0X00
		RETL		@0X06		;10		;6
		RETL		@0X00
		RETL		@0X12				;18
		
		RETL		@0X00
		RETL		@0X05		;11		;5
		RETL		@0X00
		RETL		@0X10				;16
		
		RETL		@0X00
		RETL		@0X05		;12		;5
		RETL		@0X00
		RETL		@0X0F				;15
		
		RETL		@0X00
		RETL		@0X05		;13		;5
		RETL		@0X00
		RETL		@0X0E				;14
		
		RETL		@0X00
		RETL		@0X04		;14		;4
		RETL		@0X00
		RETL		@0X0D				;13
		
		RETL		@0X00
		RETL		@0X04		;15		;4
		RETL		@0X00
		RETL		@0X0C				;12
		
		RETL		@0X00
		RETL		@0X03		;16		;3
		RETL		@0X00
		RETL		@0X0B				;11
		
		RETL		@0X00
		RETL		@0X03		;17		;3
		RETL		@0X00
		RETL		@0X0A				;10
		
		RETL		@0X00
		RETL		@0X03		;18		;3
		RETL		@0X00
		RETL		@0X09				;9
		
		RETL		@0X00
		RETL		@0X03		;19		;3
		RETL		@0X00
		RETL		@0X08				;8
		
		RETL		@0X00
		RETL		@0X02		;20		;2
		RETL		@0X00
		RETL		@0X07				;7
		
		RETL		@0X00
		RETL		@0X02		;21		;2
		RETL		@0X00
		RETL		@0X06				;6
		
		RETL		@0X00
		RETL		@0X02		;22
		RETL		@0X00
		RETL		@0X05
		
		RETL		@0X00
		RETL		@0X02		;23
		RETL		@0X00
		RETL		@0X04
		
		RETL		@0X00
		RETL		@0X02		;24
		RETL		@0X00
		RETL		@0X03
		
		RETL		@0X00
		RETL		@0X01		;25
		RETL		@0X00
		RETL		@0X02
		
		
		RETL		@0X00
		RETL		@0X01		;26
		RETL		@0X00
		RETL		@0X01
		
		
		
		
 	 
;============================================     
	
DAY_LOOKUP:   
 	   	ADD      	PC,A    
		RETL     	@0X1F    ;0  31
    	RETL     	@0X20    ;1  32
    	RETL     	@0X1D    ;2  29
    	RETL     	@0X20    ;3  32
    	RETL     	@0X1F    ;4  31
    	RETL     	@0X20    ;5  32
    	RETL     	@0X1F    ;6  31
    	RETL     	@0X20    ;7  32
    	RETL     	@0X20    ;8  32
    	RETL     	@0X1F    ;9  31
    	RETL     	@0X20    ;10 32
    	RETL     	@0X1F    ;11 31
	    RETL     	@0X20    ;12 32
  
;============================================ 
;OK COM: 00 XXXXX
;============================================ 

COM_RAM:
     	BANK		0
	    MOV     	A,@0X08   ;8
     	MOV      	LCDCOUNT,A
     	BANK		1
     	MOV      	A,@0X07   ;SEG7-SEG0
     	MOV      	LCDAR,A
     
COM_RAM1:
     	BANK		0
     	CLR      	TEMP1
     	RRC      	COM0BUF  ;RLC
     	RLC      	TEMP1
     	RRC      	COM1BUF  ;RLC
     	RLC      	TEMP1
     	RRC      	COM2BUF  ;RLC
     	RLC      	TEMP1
     	RRC      	COM3BUF  ;RLC
     	RLC      	TEMP1
     	MOV      	A,TEMP1
      
     	BANK		1
     	MOV      	LCDBR,A
     	DEC      	LCDAR   ;DEC  LCDAR
     	BANK		0
     	DJZ      	LCDCOUNT
     	LJMP      	COM_RAM1
        
        BANK		1
        BS			LCDCR,LCDEN 
     	RET      

;============================================     
;OK G E F D B C A 0
;============================================  

SEG_COM:
     	BANK		0
    	MOV      	A,@0X01	;小数点
     	MOV      	TEMP1,A
     	MOV			A,@0X40	;PM
     	MOV			TEMP2,A
     	
     	MOV      	A,DIS1
     	LCALL     	LOOKUP
    	JBC     	FLAG,FDOTDIS
     	OR      	A,TEMP1
     	JBC			FLAG,FPMDIS
     	OR			A,TEMP2
     	LCALL     	SEG_COM1
     
     	MOV      	A,@0X01
     	MOV      	TEMP1,A
     	MOV      	A,DIS2
     	LCALL     	LOOKUP
     	JBC      	FLAG,FCOLDIS
     	OR       	A,TEMP1
     	LCALL     	SEG_COM1 
     	
     	MOV			A,@0X01
     	MOV			TEMP1,A
     	MOV      	A,DIS3
     	LCALL     	LOOKUP
     	JBC			FLAG,FDDIS
     	OR			A,TEMP1
     	LCALL     	SEG_COM1
   
     	MOV      	A,@0X01
     	MOV      	TEMP1,A  
     	MOV      	A,DIS4
     	LCALL     	LOOKUP
     	JBC      	FLAG,FBATDIS
     	OR       	A,TEMP1
     	LCALL     	SEG_COM1
     	RET
      
SEG_COM1:    
     	BANK		0
     	MOV      	TEMP1,A
     	RLC      	TEMP1
     	RLC      	COM3BUF
     	RLC      	TEMP1
     	RLC      	COM2BUF
     	RLC      	TEMP1
     	RLC      	COM1BUF
     	RLC      	TEMP1
     	RLC      	COM0BUF
     	RLC      	TEMP1
     	RLC     	COM3BUF
     	RLC      	TEMP1
     	RLC      	COM2BUF
     	RLC      	TEMP1
     	RLC      	COM1BUF
     	RLC      	TEMP1
     	RLC      	COM0BUF
     	RET
     
 LOOKUP:			;A,F,E,D,B,G,C,0
     	ADD      	PC,A    
     	RETL     	@0XFA    ;0
     	RETL     	@0X0A    ;1
     	RETL     	@0XBC    ;2
     	RETL     	@0X9E    ;3
     	RETL     	@0X4E    ;4
     	RETL     	@0XD6    ;5
     	RETL     	@0XF6    ;6
     	RETL     	@0X8A    ;7
     	RETL     	@0XFE    ;8
     	RETL     	@0XDE    ;9
     	RETL     	@0X00    ;A NULL
     
     	RETL     	@0X6E    ;B H  0807
     	RETL     	@0X60    ;C I  0807
     	RETL		@0X6E	 ;D	H
     




;=====================================================================INITIAL

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&I/O BANK4
RESET:
		DISI
		BANK		4
		MOV			A,@0X04
		MOV			IOC7,A		;P72 UP
		MOV			A,@0XA2
		MOV			IOC8,A		;P86 POWER
		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
		
		
		MOV			A,@0X00
		MOV			LEDDCR,A
		MOV			A,@0X03
		MOV			WBCR,A		;BUZ=0 4K		 WATCH TIME
		MOV			A,@0XC0
		MOV			WKCR,A		;中断唤醒 int7,6
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK0

		BANK		0
		MOV			A,@0X38
		MOV			TCC,A
		MOV			A,@0X00
		MOV			STATUS,A
		MOV			A,@0XFF
		MOV			R4,A		;BANK 控制位
		
		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,@0X09
		MOV			SCCR,A		;idle=1 主频3.997M PLL
		MOV			A,@0X0A
		MOV			TWTCR,A		;看门狗,TCC 8分频 32.768k
		MOV			A,@0X81
		MOV			IMR,A		;中断屏蔽寄存器
		MOV			A,@0X00
		MOV			ISR,A		;中断标志
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK1
	
		BANK		1
		MOV			A,@0X98
		MOV			LCDCR,A		;1/3BIAS 1/4 DUTY FCLK=64 LCD控制器
		MOV			A,@0X19		;仿真时选0.3VDD-VDD
		MOV			LCDVCR,A	;LCD电压及时钟	2M,0-VDD
		MOV			A,@0X0F
		MOV			LCDCCR,A	;COM0-3		COM选择
		MOV			A,@0XFF
		MOV			LCDSCR0,A	;SEG0-7
		MOV			A,@0X00
		MOV			LCDSCR1,A
		MOV			LCDSCR2,A	;SEGMENT选择
		MOV			A,@0XC0
		MOV			EIMR,A		;外部中断屏蔽寄存器 int7,6
		MOV			A,@0X00
		MOV			EISR,A
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK2
		BANK		2
		MOV			A,@0X80
		MOV			T1CR,A		;TXPD和TXTD TIMER1 fs/2 2分频
		MOV			A,@0X9C
		MOV			TSR,A		;16BIT TIMER fs=32.768k
		MOV			A,@0X20
		MOV			T1PD,A		;0.5S 32768/2=16384
		MOV			T1TD,A
		MOV			A,@0X00
		MOV			T2CR,A
		MOV			A,@0X04
		MOV			T2PD,A		;时间过快调整(0.5s过快)(69240秒快34秒)
		MOV			T2TD,A
		
		MOV			A,@0X00
		MOV			SPIS,A
		MOV			SPIC,A
		MOV			SPIR,A
		MOV			SPIW,A		;SPI初始化
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK3
		
		BANK		3
		MOV			A,@0X00
		MOV			URC,A
		MOV			URS,A
		MOV			URRD,A
		MOV			URTD,A			;UART初始化
		
		MOV			A,@0X00
		MOV			ADCR,A			;AD控制
		MOV			ADICH,A
		MOV			A,@0X19
		MOV			ADICL,A			;AD0,3,4
		
		MOV			A,@0X00
		MOV			EIESH,A
		MOV			EIESL,A			;外部中断边沿选择
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK5
		
		BANK		5
		MOV			A,@0X00
		MOV			URC2,A
		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		;设置上拉
		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&BANK6

		BANK		6
		MOV			A,@0X00
		MOV			LVRCR,A			;低电压保护寄存器
		
		MOV			P7ODCR,A
		MOV			PAODCR,A
		MOV			PBODCR,A
		MOV			A,@0X00			;AD6,4
		MOV			P8ODCR,A
		MOV			A,@0X00			;AD0,3
		MOV			P9ODCR,A		;OPEN DRAIN功能寄存器

⌨️ 快捷键说明

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