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

📄 bc728x与pic单片机接口程序(汇编).txt

📁 一个我自己一直认为是编译的最好用的也是最实用的BC728X与PIC单片机接口程序(汇编) 通讯的好原码
💻 TXT
字号:

;
; 引用时如用于16C5X请注意堆栈深度为两级,调
; 用子程序时请注意子程序嵌套层数
;*******************************************

		TITLE		BC728X REA
		LIST		P=16C57
		INCLUDE		P16C5X.INC



;****************************************
; 寄存器定义
;****************************************
BIT_COUNT		EQU		0X10
TIMER			EQU		0X11
TIMER1			EQU		0X12
DATA_IN			EQU		0X13
DATA_OUT		EQU		0X14



;****************************************
; I/O 口定义
;****************************************
CLK				EQU		0		;PORTA.0 连接到BC7281的 CLK
DAT				EQU		1		;PORTA.1 连接到BC7281的 DAT
KEY				EQU		2		;PORTA.2 连接到BC7281的 KEY


;********************************
; 上电复位
;********************************
				ORG		0X7FF
				GOTO	START

				ORG		0X000
;**********************************************
; 向BC7281发送一个字节,待发数据存于W
;**********************************************
SEND			MOVWF	DATA_OUT
CLK_OUT			BCF		PORTA,CLK		;在CLK输出一脉冲
				BSF		PORTA,CLK
WAIT1			BTFSC	PORTA,DAT		;如果DAT未变为低电平,则继续输出脉冲
				GOTO	CLK_OUT
				BCF		PORTA,CLK		;如果检测到DAT低电平,则15us内再送一脉冲
				BSF		PORTA,CLK
WAIT2			BTFSS	PORTA,DAT		;等待DAT恢复高电平
				GOTO	WAIT2
				MOVLW	8
				MOVWF	BIT_COUNT		;设定发送计数器
				MOVLW	0XFC
				TRIS	PORTA			;DAT线设为输出状态
SEND_LOOP		BCF		PORTA,DAT		;输出一位
				BTFSC	DATA_OUT,7
				BSF		PORTA,DAT
				BCF		PORTA,CLK		;输出一CLK脉冲
				BSF		PORTA,CLK
				RLF		DATA_OUT
				NOP						;短暂延时
				NOP
				NOP
				NOP
				DECFSZ	BIT_COUNT
				GOTO	SEND_LOOP
				BSF		PORTA,DAT
				MOVLW	0XFE			;重设DAT为输入状态
				TRIS	PORTA
				NOP						;指令间短暂间隔
				NOP
				NOP
				RETLW	0


;***********************************************
; 从BC728X读出一个字节,读出的字节在 DATA_IN
;***********************************************
RECEIVE			BCF		PORTA,CLK		;输出一CLK脉冲
				BSF		PORTA,CLK
WAIT3			BTFSC	PORTA,DAT		;等待DAT低电平
				GOTO	WAIT3
				BCF		PORTA,CLK		;再输出一CLK脉冲
				BSF		PORTA,CLK
				MOVLW	8
				MOVWF	BIT_COUNT		;设定计数器
RECV_LOOP		NOP						;短暂延时
				NOP
				NOP
				NOP
				NOP
				NOP
				NOP
				NOP
				NOP
				RLF		DATA_IN			;DATA_IN左移一位
				BCF		DATA_IN,0		;设置bit0
				BTFSC	PORTA,DAT
				BSF		DATA_IN,0
				BCF		PORTA,CLK		;输出CLK脉冲
				BSF		PORTA,CLK
				DECFSZ	BIT_COUNT
				GOTO	RECV_LOOP
				NOP
				NOP
				NOP
				NOP
				RETLW	0


;*********************************************
; 初始化
;*********************************************
START			MOVLW	0XFE
				TRIS	PORTA			;设置各线状态, CLK为输出,其余为输入
				MOVLW	0XFF
				MOVWF	PORTA			;设置CLK为高电平
				MOVLW	0X32
				MOVWF	TIMER
START_DELAY		MOVLW	0XFF			;上电延时以确保BC728X复位
				MOVWF	TIMER1
START_DELAY1	DECFSZ	TIMER1
				GOTO	START_DELAY1
				DECFSZ	TIMER
				GOTO	START_DELAY
				MOVLW	0X12			;BC728X 初始化
				CALL	SEND
				MOVLW	0X80			;设为164模式,不反相
				CALL	SEND
;*********************************************
; 主程序
;*********************************************
MAIN			BTFSC	PORTA,KEY		;等待按键
				GOTO	MAIN
				MOVLW	0X93			;读键值锁存器指令(地址0x13)
				CALL	SEND
				CALL	RECEIVE			;读出键值
				MOVLW	0X15			;HEX译码寄存器
				CALL	SEND
				MOVLW	0X0F
				ANDWF	DATA_IN,1		;键值低四位显示在DIG0
				CALL	SEND
				MOVLW	0X15			;HEX译码寄存器
				CALL	SEND
				MOVLW	0XF0
				ANDWF	DATA_IN
				SWAPF	DATA_IN,1		;取键值高四位,存入W
				IORLW	0X10			;写入DIG1
				CALL	SEND
				GOTO	MAIN
				
				
				END

⌨️ 快捷键说明

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