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

📄 t7281a2.asm

📁 HD7279
💻 ASM
字号:
$ title (BC728X Test Program, AT89C2051 @ 11.0592MHz)
	$ DB

BIT_COUNT	DATA	07FH
TIMER		DATA	07EH
TIMER1		DATA	07DH
TEMP		DATA	07CH
DATA_IN	DATA	021H
DATA_OUT	DATA	020H

CLK		BIT	P3.5    		;定义I/O口
DAT		BIT	P3.7    		;
KEY		BIT	P3.3    		;

		ORG     000H
		JMP     START

;*************************************************************
;* 上电初始化
;*************************************************************
		ORG     100H
START:		MOV     SP,#2FH		;设置堆栈
		MOV     TIMER,#50
START_DELAY:	MOV     TIMER1,#255		;延时以确保BC728X完成复位
START_DELAY1:	DJNZ    TIMER1,START_DELAY1
		DJNZ    TIMER,START_DELAY
		MOV     DATA_OUT,#12H	;BC728X初始化
		CALL    SEND
		MOV     DATA_OUT,#80H	;设定为164模式, 不反相
		CALL    SEND
;*************************************************************
;* 主程序
;*************************************************************
MAIN:		JB     KEY,MAIN		;等待按键
		MOV	DATA_OUT,#93H		;读键值锁存器指令(地址13H)
		CALL	SEND
		CALL	RECEIVE		;读出数据
		MOV	DATA_OUT,#15H		;HEX译码指令
		CALL	SEND
		MOV	TEMP,DATA_IN
		ANL	TEMP,#0F0H		;键码高4位在第1位显示
		MOV	A,TEMP
		SWAP	A
		ORL	A,#10H
		MOV	DATA_OUT,A
		CALL	SEND
		MOV	DATA_OUT,#15H		;HEX译码指令
		CALL	SEND
		MOV	A,DATA_IN
		ANL	A,#0FH			;取键码的低4位
		MOV	DATA_OUT,A		;在第0位显示
		CALL	SEND
		JMP	MAIN

;***********************************************************
;* 向BC728X发送一个字节子程序,待发送数据存于DATA_OUT
;************************************************************
SEND:		CLR	CLK			;在CLK输出一脉冲
		SETB	CLK
WAIT1:		JB	DAT,WAIT1		;等待DAT变为低电平
		CLR	CLK			;再输出一CLK脉冲
		SETB	CLK
WAIT2:		JNB	DAT,WAIT2	;等待DAT恢复高电平(输入状态)
		MOV	BIT_COUNT,#8
SEND_LOOP:	MOV	C,DATA_OUT.7		;输出BIT7
		MOV	DAT,C
		CLR	CLK			;输出一CLK脉冲
		SETB	CLK
 		MOV	A,DATA_OUT
  		RL	A
 		MOV	DATA_OUT,A		;DATA_OUT左移一位
		NOP				;短暂延时
		NOP
 		NOP
		DJNZ	BIT_COUNT,SEND_LOOP
		SETB	DAT			;恢复DAT为高电平
		RET

;*************************************************************
;* 从BC728X接收一个字节子程序,接收到的数据存于DATA_IN
;*************************************************************
RECEIVE:	CLR	CLK			;发出一CLK脉冲
		SETB	CLK
WAIT3:		JB	DAT,WAIT3		;等待DAT低电平响应信号
		CLR	CLK		;再发出一CLK脉冲,准备接收数据
		SETB	CLK
		MOV	BIT_COUNT,#8
RECV_LOOP:	NOP				;短暂延时
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
 		MOV	A,DATA_IN
		MOV	C,DAT			;读入一位
  		RLC	A
		MOV	DATA_IN,A
		CLR	CLK			;发出CLK脉冲
		SETB	CLK
		DJNZ	BIT_COUNT,RECV_LOOP
		RET

		END

⌨️ 快捷键说明

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