【急~~】懂I2C编程的汇编高手
我做的设计中要用89C51单片机的并行I/O去控制另一快芯片的I2C总线,对它的寄存器进行数据输入的操作,下面是我网上找到的一个写的子程序
;写串行E2PROM子程序EEPW
; (R3)=器件地址
; (R4)=片内字节地址
; (R1)=欲写数据存放地址指针
; (R7)=连续写字节数n
EEPW: MOV P1,#0FFH
CLR P1.0 ;发开始信号
MOV A,R3 ;送器件地址
ACALL SUBS
MOV A,R4 ;送片内字节地址
ACALL SUBS
AGAIN: MOV A,@R1
ACALL SUBS ;调发送单字节子程序INC R1
DJNZ R7,AGAIN;连续写n个字节
CLR P1.0 ;SDA置0, 准备送停止信号
ACALL DELAY ;延时以满足传输速率要求
SETB P1.1 ;发停止信号
ACALL DELAY
SETB P1.0
RET
SUBS: MOV R0,#08H ;发送单字节子程序
LOOP: CLR P1.1
RLC A
MOV P1.0,C
NOP
SETB P1.1
ACALL DELAY
DJNZ R0,LOOP ;循环8次送8个bit
CLR P1.1
ACALL DELAY
SETB P1.1
REP: MOV C,P1.0
JC REP ;判应答到否,未到则等待
CLR P1.1
RET
DELAY: NOP
NOP
RET
高手帮忙改改,比如我要在寄存器00H输入00H,寄存器09H输入80H,还有我就不列出来了
发表时间:2003年6月17日21:47:49