www.pudn.com > 双音多频(DTMF)信号发生器的使用源程序.rar > ht9200.asm


include ht48c10.inc 
 
data .section 'data' 
HT9200A		EQU	0 
HT9200B		EQU	1 
SERIAL		EQU	0 
PARALLEL	EQU	1 
;----------------------- 
DATA	EQU	PA.0 
CE	EQU	PA.1 
CLK	EQU	PA.2 
;----------------------- 
SP	EQU	PA.3 
D0	EQU	PB.0 
D1	EQU	PB.1 
D2	EQU	PB.2 
D3	EQU	PB.3 
;----------------------- 
count	db	? 
buffer	db	? 
bit_count	db	? 
send_data	db	? 
delay_count1	db	? 
delay_count2	db	? 
delay_count3	db	? 
;----------------------- 
TYPE_MODE MACRO TYPE,MODE 
IFE TYPE 
	_TYPE	EQU 0 
	_MODE	EQU 0 
ELSE 
	_TYPE	EQU 1 
IFE MODE 
	_MODE	EQU 0 
ELSE 
	_MODE	EQU 1 
ENDIF 
ENDIF 
ENDM 
;----------------------- 
_SERIAL_MODE MACRO 
	LOCAL	loop,next 
	clr	pac 
	clr	SP 
	clr	CE 
	set	CLK 
	call	delay 
loop:	mov	a,18h 
	mov	count,a 
	clr	buffer 
next:	mov	a,buffer 
	mov	send_data,a 
	call	send_byte 
	call	delay 
	inc	buffer 
	sdz	count 
	jmp	next 
	mov	a,0ffh 
	mov	send_data,a 
	call	send_byte 
	call	delay 
	jmp	loop 
ENDM 
;----------------------- 
_PARALLEL_MODE MACRO 
	LOCAL	loop,next 
	clr	pac 
	clr	pbc 
	set	SP 
	clr	CE 
loop:	mov	a,10h 
	mov	count,a 
	clr	buffer 
next:	mov	a,buffer 
	mov	pb,a 
	set	CE 
	clr	CE 
	call	delay 
	inc	buffer 
	sdz	count 
	jmp	next 
	jmp	loop 
ENDM 
;--------------------------------- 
code .section at 0 'code' 
	org	00h 
	jmp	start 
	org	04h 
	reti 
	org	08h 
	reti 
;--------------------------------- 
send_byte proc 
	mov	a,05h 
	mov	bit_count,a 
next_bit: 
	rrc	send_data 
	sz	c 
	jmp	send_1 
send_0: 
	clr	DATA 
	jmp	act 
send_1: 
	set	DATA 
act: 
	clr	CLK 
	set	CLK 
	sdz	bit_count 
	jmp	next_bit 
	ret 
send_byte endp 
;--------------------------------- 
delay proc 
	mov	a,02h 
	mov	delay_count1,a 
	mov	delay_count2,a 
	mov	delay_count3,a 
d:	sdz	delay_count1 
	jmp	d 
	sdz	delay_count2 
	jmp	d 
	sdz	delay_count3 
	jmp	d 
	ret 
delay endp 
;--------------------------------- 
start: 
;	TYPE_MODE HT9200A/HT9200B,SERIAL/PARALLEL 
	TYPE_MODE HT9200A,SERIAL 
IF	_TYPE 
IF	_MODE 
	_PARALLEL_MODE 
ELSE 
	_SERIAL_MODE 
ENDIF 
ELSE 
	_SERIAL_MODE 
ENDIF 
END