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

📄 rw2401.asm

📁 24c系列汇编驱动程序,本人用这个程序在设备上已经2年了,没有发现任何不稳定现象,请放心使用.
💻 ASM
字号:
public _read2401
public _r2401
public _write2401
public _w2401
public _rd42401
public _w42401

pro2401 segment code
rseg  pro2401

SDA	equ	p1.7
Scl	equ	p1.6

;*****************************************************          
;从24C01读一字节
;入口参数: R7    地址
;出口参数: R7    读出数据
;-----------------------------------------------------
_r2401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H                 ;发送写命令
        LCALL   LSEND
        MOV     A,R7                    ;写地址
        LCALL   LSEND

        LCALL   LSTART
        MOV     A,#0A1H                 ;发送读命令
        LCALL   LSEND
        LCALL   LREAD                   ;读出数据到A
        MOV     R7,A
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;*****************************************************
;从24C01读两字节
;入口参数: R7    地址
;出口参数: R7    读出数据低位
;          R6    读出数据高位
;-----------------------------------------------------
_read2401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H
        LCALL   LSEND			;发送写命令
        MOV     A,R7
        LCALL   LSEND			;写地址

        LCALL   LSTART
        MOV     A,#0A1H
        LCALL   LSEND			;发送读命令
        LCALL   LREAD
        MOV     R6,A			;读出数据高位
        LCALL   LREAD
        MOV     R7,A			;读出数据低位
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;*****************************************************
;从24C01读四字节
;入口参数: R7    地址
;出口参数: R6,R7    读出数据低位
;          R4,R5    读出数据高位
;-----------------------------------------------------
_rd42401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H
        LCALL   LSEND			;发送写命令
        MOV     A,R7
        LCALL   LSEND			;写地址

        LCALL   LSTART
        MOV     A,#0A1H
        LCALL   LSEND
        LCALL   LREAD
        MOV     R4,A
        LCALL   LREAD
        MOV     R5,A			;发送读命令
        LCALL   LREAD
        MOV     R6,A			;读出数据高位
        LCALL   LREAD
        MOV     R7,A			;读出数据低位
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;************************************************
;写24C01一字节
;入口参数:R7	地址
;          R5   数据
;------------------------------------------------
_w2401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H                 ;发送写命令
        LCALL   LSEND
        MOV     A,R7                    ;地址
        LCALL   LSEND                   ;写入地址
        MOV     A,R5
        LCALL   LSEND                   ;写入数据
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;************************************************
;写24C01两字节
;入口参数: R7    地址
;          R5    数据低位
;          R4    数据高位
;------------------------------------------------
_write2401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H
        LCALL   LSEND			;发送写命令
        MOV     A,R7
        LCALL   LSEND			;写地址

        MOV     A,R4
        LCALL   LSEND			;写入数据高位
        MOV     A,R5
        LCALL   LSEND			;写入数据低位
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;************************************************
;写24C01四字节
;入口参数: R7    地址
;          R5    数据低位
;          R4    数据高位
;------------------------------------------------
_w42401:
		PUSH	ACC
		PUSH	07H
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		MOV		R7,#255
		DJNZ	R7,$
		POP		07H
		CLR		ET0
        LCALL   LSTART
        MOV     A,#0A0H
        LCALL   LSEND			;发送写命令
        MOV     A,R7
        LCALL   LSEND			;写地址
        MOV     A,R2
        LCALL   LSEND
        MOV     A,R3
        LCALL   LSEND
        MOV     A,R4
        LCALL   LSEND			;写入数据高位
        MOV     A,R5
        LCALL   LSEND			;写入数据低位
        LCALL   LSTOP
        POP		ACC
        SETB	ET0
        RET
;************************************************
;24LC01子程序
;开始命令子程序
LSTART:
        SETB    SDA                     ;确认SDA高
        NOP
        SETB    SCL                     ;SDA=SDA
        NOP
        NOP
        CLR     SDA                     ;产生开始条件
        NOP
        NOP
        NOP
        NOP
        CLR     SCL                     ;让SCL低
        RET
;--------------------------------------------------
LSTOP:
        CLR     SDA
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        SETB    SDA
        NOP
        NOP
        NOP
        CLR     SCL
        NOP
        RET
;------------------------------------------------------
;向01发送数据
;INPUT=ACC
LSEND:
        PUSH    07H
        MOV     R7,#08H
        CLR     SCL
SLOOP:
        RLC     A
        MOV     SDA,C
        NOP
        NOP
        SETB    SCL
        NOP
        NOP
        CLR     SCL
        DJNZ    R7,SLOOP
        SETB    SDA
        SETB    SCL
        NOP
        CLR     SCL
        POP     07H
        RET
;--------------------------------------------------
;读取一个字节
LREAD:
        PUSH    05H
        MOV     R5,#08H                 ;之所以为8 在结束时产生一个无效位(即ACK位)
        CLR     SCL                     ;Scl
LRE1:
        SETB    SDA
        NOP
        NOP
        SETB    SCL
        NOP
        MOV     C,SDA                   ;SDA
        RLC     A
        NOP
        NOP
        CLR     SCL
        DJNZ    R5,LRE1
        CLR     SDA                     ;问不产生应答条件  TTTT
        NOP
        SETB    SCL
        POP     05H
        RET
        END
        
 

⌨️ 快捷键说明

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