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

📄 dac8512.asm

📁 DA
💻 ASM
字号:
;Writed by LinXiwei,on 2006.06.15

	;*******ZLG7289 PARAMETERS*******
	ZLG_BIT_CNT	EQU	30H	;The number of data sended
	ZLG_REC_BUF	EQU	31H	;The buffer of data sended
	ZLG_SEND_BUF	EQU	32H	;The buffer of data received

	DAC_NUMBER	EQU	3FH	;The nuber to D/A

	ZLG_HUNDRED	EQU	40H	;The digit of hundred
	ZLG_DECIMAL	EQU	41H	;The digit of decimal
	ZLG_ONE		EQu	42H	;The digit of one

	ZLG_CS		EQU	P1.0	;/CS  of ZLG7289
	ZLG_CLK		EQU	P1.1	;CLK  of ZLG7289
	ZLG_DATA	EQU	P1.2	;DIO  of ZLG7289
	ZLG_KEY		EQU	P1.3	;/KEY of ZLG7289

	DAC8512_DATA	EQU	P0.4	;SCLK of DAC8512
	DAC8512_SCLK	EQU	P0.5	;/CS  of DAC8512
	DAC8512_LD	EQU	P0.6	;LD   OF DAC8512
	DAC8512_CS	EQU	P0.7	;DOUT of DAC8512

	;*******DELAY PARAMETERS*******
	VAR_DELAY	EQU	71H	;The variable for delay function
	VAR_DELAY_2	EQU	72H	;The variable for delay function
;*****************************************************************
	org	0000H
	ljmp	MAIN
;*****************************************************************
	org	0030H
MAIN:
	lcall	sys_initialize

	lcall	func_display
	lcall	DASUB		;Start D/A change 

MAIN_LOOP:
	jb	ZLG_KEY,$		;Wait for keyboard

	mov	ZLG_SEND_BUF,#00010101B		;Send the command of reading keyboard
	lcall	zlg_send
	lcall	zlg_receive			;Read the data of keyboard
	setb	ZLG_CS				;Set standby mode

	mov	r6,ZLG_REC_BUF
	;Inc 
	cjne	r6,#15,KEY_DEC
	inc	DAC_NUMBER
	jmp	MAIN_LOOP_NEXT

KEY_DEC:
	;Dec
	cjne	r6,#7,MAIN_LOOP_NEXT
	dec	DAC_NUMBER
	;Display the number
	
MAIN_LOOP_NEXT:
	lcall	func_display
	lcall	DASUB			;Start D/A change 
	jnb	ZLG_KEY,$		;Wait the key to pop
	ajmp	MAIN_LOOP
	
	ret				;main return
;*****************************************************************
sys_initialize:
	;Initialize TLC5615
	SETB	DAC8512_CS
	SETB	DAC8512_DATA
	SETB	DAC8512_SCLK
	SETB 	DAC8512_LD

	;***Initialize ZLG7289***
	setb	ZLG_CS
	setb	ZLG_KEY
	setb	ZLG_DATA

	lcall	delay_50

	mov	ZLG_SEND_BUF,#10100100B		
	lcall	zlg_send
	setb	ZLG_CS				;Set standby mode

	/*Parameter initialize*/
	mov	DAC_NUMBER,#00H
	mov	ZLG_HUNDRED,#00H
	mov	ZLG_DECIMAL,#00H
	mov	ZLG_ONE,#00H
	
	lcall	delay_125ms
ret
;*****************************************************************
;Send DA number to TLC5615
DASUB:
	PUSH 	PSW
	PUSH 	ACC

	MOV	R3,#0FH
	MOV	R2,#0FFH
	MOV 	R7,#04H
DASUB0:
	CLR 	C 
	MOV 	A,R2
	RLC 	A
	MOV 	R2,A
	MOV 	A,R3
	RLC 	A
	MOV 	R3,A
	DJNZ 	R7,DASUB0
	MOV 	R7,#0CH
DASUB1:
	CLR 	DAC8512_CS
	NOP
	MOV 	A,R2
	RLC	A
	MOV 	R2,A
	MOV 	A,R3
	RLC 	A
	MOV 	R3,A
	MOV 	DAC8512_DATA,C
	CLR	DAC8512_SCLK
	NOP
	SETB 	DAC8512_SCLK
	DJNZ 	R7,DASUB1
	CLR 	DAC8512_LD
	NOP
	SETB 	DAC8512_LD
	POP 	ACC
	POP 	PSW
	RET
;*****************************************************************
;Display then DA number
;Using  a,b
func_display:
	/*Get the hundred*/
	mov	acc,DAC_NUMBER
	mov	b,#100
	div	ab
	mov	ZLG_HUNDRED,a

	/*Get the decimal and one*/
	mov	acc,b
	mov	b,#10
	div	ab
	mov	ZLG_DECIMAL,a
	mov	ZLG_ONE,b

	;***Display the hundred***
	mov	ZLG_SEND_BUF,#10000010B		;Download data and encode in mode 0
	lcall	zlg_send
	mov	ZLG_SEND_BUF,ZLG_HUNDRED
	lcall	zlg_send
	setb	ZLG_CS

	;***Display the decimal***
	mov	ZLG_SEND_BUF,#10000001B		;Download data and encode in mode 0
	lcall	zlg_send
	mov	ZLG_SEND_BUF,ZLG_DECIMAL
	lcall	zlg_send
	setb	ZLG_CS

	;***Display the one***
	mov	ZLG_SEND_BUF,#10000000B		;Download data and encode in mode 0
	lcall	zlg_send
	mov	ZLG_SEND_BUF,ZLG_ONE
	lcall	zlg_send
	setb	ZLG_CS
ret
;*****************************************************************
;Send a byte to MCU with higer bit first
zlg_send:
	mov	ZLG_BIT_CNT,#8		;Set the number of data sended
	clr	ZLG_CS			;Set set ZLG7289 ready,T1
	lcall	delay_50;T1

ZLG_SEND_LP:
	;Send a bit
	mov	acc,ZLG_SEND_BUF
	rlc	a
	mov	ZLG_SEND_BUF,acc
	mov	ZLG_DATA,c
	nop				;Wait for data to ready
	nop

	setb	ZLG_CLK			;T2
	lcall	delay_8
	clr	ZLG_CLK			;T3
	lcall	delay_8
	
	djnz	ZLG_BIT_CNT,ZLG_SEND_LP	;Loop to next bit

	clr	ZLG_DATA

	ret
;*****************************************************************
;Receive a byte to ZLG7289 with higer bit first
zlg_receive:
	mov	ZLG_BIT_CNT,#8		;Set the number of data received
	clr	ZLG_CS			;Set set ZLG7289 ready,T1
	lcall	delay_50

ZLG_REC_LP:
	;Receive a bit
	setb	ZLG_CLK			;T2
	lcall	delay_8

	mov	c,ZLG_DATA
	mov	acc,ZLG_REC_BUF
	rlc	a
	mov	ZLG_REC_BUF,acc

	clr	ZLG_CLK			;T3
	lcall	delay_8

	djnz	ZLG_BIT_CNT,ZLG_REC_LP	;Loop to next bit

	clr	ZLG_DATA

	ret
;*****************************************************************
;Delay for 25ms
delay_125ms:
	mov	VAR_DELAY_2,#250
DELAY_25MS_LOOP:
	mov	VAR_DELAY,#250
	djnz	VAR_DELAY,$
	djnz	VAR_DELAY_2,DELAY_25MS_LOOP
	ret
;*****************************************************************
;Delay for (50+2) us
delay_50:
	mov	VAR_DELAY,#25
	djnz	VAR_DELAY,$
	ret
;*****************************************************************
;Delay for (8+2) us
delay_8:
	mov	VAR_DELAY,#4
	djnz	VAR_DELAY,$
	ret
;*****************************************************************
END

⌨️ 快捷键说明

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