EEPROM通过IIC协议进行读写操作
2016-11-24 09:33
274 查看
EEPROM通过IIC协议可以进行快速简单的读写操作:
写操作:
1,简单随机写入一个8字节的数据
2,一次写入一页数据,而不需要再次写入从机地址和单元地址,一页数据为32个字节。
每次页操作之间要间隔10ms
可以不硬性规定页操作的间隔时间,用另一种方法,轮询法进行连续的页操作,即不断地往EEPROM写入从机地址(第一个需要写入的数据),通过应答信号检测数据端口是否忙,如果忙,则写入失败,继续访问,知道成功为止。
读操作:
读操作就相对比较简单,只要写入一次从机地址等信息,就可以把EEPROM数据全部读出来
要注意读写时序,保证时钟的均匀和稳定
/******************************************************/
iic_start:
set1 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SDA
nop
set0 IIC_SCL
iic_start_end:
ret
/******************************************************/
iic_stop:
set0 IIC_SCL
nop
set0 IIC_SDA
nop
set1 IIC_SCL
nop
set1 IIC_SDA
iic_stop_end:
ret
/******************************************************/
iic_test_ack:
set1 IIC_SCL
t0sn IIC_SDA
set0 bflag_ack
t1sn IIC_SDA
set1 bflag_ack
set0 IIC_SCL
iic_test_ack_end:
ret
/******************************************************/
iic_send_ack:
set0 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SCL
iic_send_ack_end:
ret
/******************************************************/
iic_send_no_ack:
set0 IIC_SCL
nop
set1 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SCL
iic_send_ack_no_end:
ret
/******************************************************/
iic_writebyte:
mov a,8
mov iic_data_bit_numb,a
iic_writebyte_1:
sl iic_data_write
swapc IIC_SDA
set1 IIC_SCL
nop
set0 IIC_SCL
dzsn iic_data_bit_numb
goto iic_writebyte_1
iic_writebyte_end:
ret
/******************************************************/
iic_readbyte:
mov a,8
mov iic_data_bit_numb,a
iic_readbyte_1:
set1 IIC_SCL
t1sn IIC_SDA
set0 CF
t0sn IIC_SDA
set1 CF
slc iic_data_receive
set0 IIC_SCL
dzsn iic_data_bit_numb
goto iic_readbyte_1
iic_readbyte_end:
ret
/******************************************************/
写操作:
1,简单随机写入一个8字节的数据
2,一次写入一页数据,而不需要再次写入从机地址和单元地址,一页数据为32个字节。
每次页操作之间要间隔10ms
可以不硬性规定页操作的间隔时间,用另一种方法,轮询法进行连续的页操作,即不断地往EEPROM写入从机地址(第一个需要写入的数据),通过应答信号检测数据端口是否忙,如果忙,则写入失败,继续访问,知道成功为止。
读操作:
读操作就相对比较简单,只要写入一次从机地址等信息,就可以把EEPROM数据全部读出来
要注意读写时序,保证时钟的均匀和稳定
/******************************************************/
iic_start:
set1 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SDA
nop
set0 IIC_SCL
iic_start_end:
ret
/******************************************************/
iic_stop:
set0 IIC_SCL
nop
set0 IIC_SDA
nop
set1 IIC_SCL
nop
set1 IIC_SDA
iic_stop_end:
ret
/******************************************************/
iic_test_ack:
set1 IIC_SCL
t0sn IIC_SDA
set0 bflag_ack
t1sn IIC_SDA
set1 bflag_ack
set0 IIC_SCL
iic_test_ack_end:
ret
/******************************************************/
iic_send_ack:
set0 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SCL
iic_send_ack_end:
ret
/******************************************************/
iic_send_no_ack:
set0 IIC_SCL
nop
set1 IIC_SDA
nop
set1 IIC_SCL
nop
set0 IIC_SCL
iic_send_ack_no_end:
ret
/******************************************************/
iic_writebyte:
mov a,8
mov iic_data_bit_numb,a
iic_writebyte_1:
sl iic_data_write
swapc IIC_SDA
set1 IIC_SCL
nop
set0 IIC_SCL
dzsn iic_data_bit_numb
goto iic_writebyte_1
iic_writebyte_end:
ret
/******************************************************/
iic_readbyte:
mov a,8
mov iic_data_bit_numb,a
iic_readbyte_1:
set1 IIC_SCL
t1sn IIC_SDA
set0 CF
t0sn IIC_SDA
set1 CF
slc iic_data_receive
set0 IIC_SCL
dzsn iic_data_bit_numb
goto iic_readbyte_1
iic_readbyte_end:
ret
/******************************************************/
相关文章推荐
- EEPROM通过IIC协议进行读写操作
- EEPROM通过IIC协议进行读写操作
- S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作。
- Linux ARM IIC I2C EEPROM 读写操作
- Asp.net通过Jquery操作WebService进行Ajax读写
- 基于FPGA EEPROM读写实现及IIC总线协议和时序分析
- Linux下的eeprom读写操作(IIC)
- java各种文件的读写,通过不同的方式进行操作。
- 通过文件的方式对硬盘扇区进行直接读写操作
- linux下通过IIC总线读写EEPROM
- LPC2478通过I2C对AT24C04(EEPROM)进行读写
- 通过字节流来对文件进行读写操作
- C328R 通过模拟器进行操作
- C++中对文件进行读写操作
- 通过进程ID查看进程信息,调出进程线程集合,查看进程模块,并对其进行操作!
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- VB中通过oo4o进行Oracle数据库操作-Select
- DELPHI通过ACTIVESYNC连接到移动设备,并进行文件的复制,删除等操作!
- C++中对文件进行读写操作