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

📄 a4_24c02.asm

📁 基于6502的WINBOND语音单片机的程序 W588D系列
💻 ASM
字号:
;*************************************************************************
;*************************************************************************
;*************************************************************************
;=========================函数说明========================================
;>>包括函数:
;	1.M24C02_WRITE
;		功能	:	写gIIC_DATA的连续的8个字节到指定的地址单元.
;			 		地址的指定有gTAB_Place给出。
;		使用说明:	写gIIC_DATA下,连续8个字节的数据到
;					24C02的0起使地址单元,单元地址由gTAB_Place指定
;		LDA #0
;		STA gTAB_Place
;		JSR M24C02_WRITE
;------------------------------------------------------------------
;	2.M24C02_READ
;		功能	:	从24C02的指定单元读出连续的8个字节,存入
;			 		到gIIC_DATA。地址的指定有gTAB_Place给出。
;		使用说明:	读24C02起始地址0下,连续8个字节的
;	  				数据到gIIC_DATA的连续8个单元中				 
;		LDA #0
;		STA gTAB_Place
;		JSR M24C02_READ
;=============================================================================
;>>修改日期	:2008/03/06
;>>程序员	:wb
;=========================================================================
;1.	从24c02中读数据
;	地址由gTAB_Place指定,数据读入gIIC_DATA中,连续读取7个
;-------------------------------------------------------------------------
M24C02_READ:
	JSR MIIC_START
	LDA #A0H			;虚拟写指令
	STA gIIC_WR_BUFF
	JSR MIIC_WBYTE
	JSR M_ACK_CHECK
;-----------------------------
	LDA gTAB_Place		;写地址指令
	STA gIIC_WR_BUFF
	JSR MIIC_WBYTE
	JSR M_ACK_CHECK
;-----------------------------
	JSR MIIC_START
	LDA #A1H			;读指令
	STA gIIC_WR_BUFF
	JSR MIIC_WBYTE
	JSR M_ACK_CHECK
;-----------------------------
	LDY #0
S24C02_READ_LP:
	JSR MIIC_RBYTE
	JSR M_ACK
	LDA gIIC_WR_BUFF
	STA gIIC_DATA,Y
	INY
	TYA
	CMP #7
	BCC S24C02_READ_LP 
	;-------------------前7个数据需要应答信号	
	JSR MIIC_RBYTE
	LDA gIIC_WR_BUFF
	STA gIIC_DATA+7
	JSR M_NOACK
	JSR MIIC_STOP
	RTS
;=========================================================================
;2.	读一个字节
;-------------------------------------------------------------------------
MIIC_RBYTE:
	JSR MIIC_SCL_L	
	LDA #MACRO_Port_SDL_DIR
	TSB MACRO_24C02_Port_DIR
	LDX #8
	STZ gIIC_WR_BUFF
SIIC_RBYTE_LP:
	JSR MIIC_SCL_L
	NOP
	NOP
	LDA !MACRO_24C02_Port
	AND #MACRO_24C02_SDL
	CLC
	BEQ SIIC_RBYTE_CP
	SEC
SIIC_RBYTE_CP:
	ROL gIIC_WR_BUFF
	JSR MIIC_SCL_H
	JSR MDELAY_20uS
	DEX
	BNE SIIC_RBYTE_LP
	LDA #MACRO_Port_SDL_DIR
	TRB MACRO_24C02_Port_DIR
	RTS
;=========================================================================
;3.	写数据到24c02
;	数据由gIIC_DATA指定
;	地址由gTAB_Place指定
;-------------------------------------------------------------------------
M24C02_WRITE:
	JSR MIIC_START
	LDA #A0H			;写指令
	STA gIIC_WR_BUFF
	JSR MIIC_WBYTE
	JSR M_ACK_CHECK
;------------------------
	LDA gTAB_Place
	STA gIIC_WR_BUFF
    JSR MIIC_WBYTE		;写地址
	JSR M_ACK_CHECK
;------------------------
	LDY #0
M24C02_DATA_LP:
	LDA gIIC_DATA,Y
	STA gIIC_WR_BUFF	;写数据
    JSR MIIC_WBYTE
	JSR M_ACK_CHECK
	INY
	TYA
	CMP #8
	BCC M24C02_DATA_LP
;------------------------
	JSR MIIC_STOP
	JSR MDELAY_1MS
	JSR MDELAY_1MS
	RTS
;=========================================================================
;4.	向24C0中写一个字节的数据
;-------------------------------------------------------------------------
MIIC_WBYTE:
	JSR MIIC_SCL_L
	LDX #8
SIIC_WBYTE_LP:
	ASL gIIC_WR_BUFF
	BCC SIIC_WBYTE_ZERO
	JSR MIIC_SDA_H
	BRA SIIC_WBYTE_CP
SIIC_WBYTE_ZERO:
	JSR MIIC_SDA_L
	JSR MDELAY_20uS
SIIC_WBYTE_CP
	JSR MIIC_SCL_H
	JSR MDELAY_20uS
	JSR MIIC_SCL_L
	DEX
	TXA
	BNE SIIC_WBYTE_LP
	RTS
;=========================================================================
;5.	在读最后一个数据结束后,向24C02中写NO应答
;-------------------------------------------------------------------------
M_NOACK:
	JSR MIIC_SCL_L 
	JSR MDELAY_20uS
	JSR MIIC_SDA_H
	JSR MDELAY_20uS
	JSR MIIC_SCL_H
	JSR MDELAY_20uS
	JSR MIIC_SCL_L	
	RTS
;=========================================================================
;6.	在读数据时,向24C02中写应答
;-------------------------------------------------------------------------
M_ACK:
	JSR MIIC_SCL_L 
	JSR MDELAY_20uS
	JSR MIIC_SDA_L
	JSR MDELAY_20uS
	JSR MIIC_SCL_H
	JSR MDELAY_20uS
	JSR MIIC_SCL_L 
	RTS
;=========================================================================
;7.	写数据时,从24C02中读入应答信号,F_24C02_SUCC
;-------------------------------------------------------------------------
M_ACK_CHECK:
	LDA #MACRO_Port_SDL_DIR
	TSB !MACRO_24C02_Port_DIR
	;------------------------------
	JSR MIIC_SCL_H
	NOP
	NOP	
	LDA !MACRO_24C02_Port
	AND #MACRO_24C02_SDL
	BEQ S_ACK_CHECK_SUCC 
;	LDA #1				;判断写数据是否成功
;	STA F_24C02_SUCC
	BRA S_ACK_CHECK_END
S_ACK_CHECK_SUCC:
;	STZ F_24C02_SUCC
S_ACK_CHECK_END:
	;------------------------------
	LDA #MACRO_Port_SDL_DIR
	TRB !MACRO_24C02_Port_DIR
	RTS
;=========================================================================
;8.	24C02开始信号
;-------------------------------------------------------------------------
MIIC_START:
	JSR MIIC_SCL_L
	JSR MIIC_SDA_H
	JSR MIIC_SCL_H
	JSR MDELAY_20uS	
	JSR MIIC_SDA_L
	RTS
;=========================================================================
;9.	24C02结束信号
;-------------------------------------------------------------------------
MIIC_STOP:
	JSR MIIC_SCL_L
	JSR MDELAY_20uS
	JSR MIIC_SDA_L
	JSR MDELAY_20uS
	JSR MIIC_SCL_H
	JSR MDELAY_20uS
	JSR MIIC_SDA_H
	RTS
;=========================================================================
;10.24C02硬件接口
;-------------------------------------------------------------------------
MIIC_SCL_H:
	LDA #MACRO_24C02_SCL
	TSB !MACRO_24C02_Port
	RTS
;--------------------------
MIIC_SCL_L:
	LDA #MACRO_24C02_SCL
	TRB !MACRO_24C02_Port
	RTS
;--------------------------
MIIC_SDA_H:
	LDA #MACRO_24C02_SDL
	TSB !MACRO_24C02_Port
	RTS
;--------------------------
MIIC_SDA_L:
	LDA #MACRO_24C02_SDL
	TRB !MACRO_24C02_Port
	RTS
;=========================================================================
;11.延时20US
MDELAY_20uS:
	LDA #01H
	STA !WDTC	
	LDA #15 
SDELAY_20uS_LP:
	NOP
	NOP
	NOP
	NOP
	DEC A
	BNE SDELAY_20uS_LP
	RTS
;=========================================================================
;12.延时1MS
MDELAY_1MS:
	LDA #01H
	STZ !WDTC
	LDA #200 
SDELAY_1MS_LP:
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	NOP
	DEC A
	BNE SDELAY_1MS_LP
	LDA #01H
	STZ !WDTC
	RTS

⌨️ 快捷键说明

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