3. FM24C16读写子程序
START: SETB SDA
NOP
SETB SCL ;起始条件建立时间大于4.7us
ACALL DELAY
CLR SDA
ACALL DELAY
CLR SCL ;钳住总线,准备发数据
NOP
RET
STOP: CLR SDA
NOP
SETB SCL ;发送结束条件的时钟信号
ACALL DELAY
SETB SDA ;结束总线
ACALL DELAY
RET
MACK: CLR SDA ;将SDA置0
NOP
NOP
SETB SCL
ACALL DELAY
CLR SCL
NOP
NOP
RET
MNACK: SETB SDA ;将SDA置1
NOP
NOP
SETB SCL
ACALL DELAY
CLR SCL
NOP
NOP
RET
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP
MOV C,SDA
JC CEND
SETB ACK ;判断应答位
CEND: NOP
CLR SCL
NOP
RET
WRBYTE: MOV R0,#08H
www.zhoogoo.cn
SJMP WLP1
WR0: CLR SDA ;发送0
NOP
SETB SCL
ACALL DELAY
CLR SCL
SJMP WLP1
RDBYTE: MOV R0,#08H
RLP: SETB SDA
NOP
SETB SCL ;时钟线为高,接收数据位
NOP
NOP
MOV C,SDA ;读取数据位
MOV A,R2
CLR SCL ;将SCL拉低,时间大于4.7us
RLC A ;进行数据位的处理
MOV R2,A
NOP
NOP
NOP
DJNZ R0,RLP ;未够8位,再来一次
RET
IWRNBYTE: MOV A,#11
MOV R3,A
LCALL START ;起动总线
MOV A,SLA
LCALL WRBYTE ;发送器件从地址
LCALL CACK
JNB ACK,RETWRN ;无应答则退出
MOV A,SUBA ;指定子地址
LCALL WRBYTE
LCALL CACK
MOV R1,#MTD
WRDA: MOV A,@R1
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页