这注定是一篇冗长的文章,但是我还是硬着头皮往下写......
简单介绍一下I2C总线原理:
注意到IIC总线是需要接上拉电阻的!因为连到IIC总线的器件的输出基本为开漏输出.
起始和终止信号 :SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。下图一目了然。
数据传送格式(1)字节传送与应答
每一个字节必须保证是8位长度。数据传送时,先传送{zg}位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)。如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。
对数据时进行位操作,即来一个SCL始终高电平就写入或者读出一位数据,这个一定要清楚!
下面介绍ATMEL公司的串行E2PROM产品——AT24C系列
AT24C01:128字节(128×8位);
AT24C02:256字节(256×8位);
AT24C04:512字节(512×8位)AT24C08:1K字节(1K×8位);
AT24C16:2K字节(2K×8位);
本次实验用的是AT24C02,所以存储器的地址有256字节(在IIC总线寻址中读取存储器首地址时首地址的范围为0~256,因为AT24C02的容量为256字节)
下面是AT24C02的电路图,注意到SDA和SCL均有连接10K的上拉电阻,本实验中SDA接89C52的P2.0口,SCL接89C52的P2.1口。
AT24C02的芯片地址(0xa0为写,0xa1为读)
任意地址写入数据和任意地址读取数据分别如下图所示
读取数据:
注意,读数据的时候也要先进行写操作,目的是写入器件地址以寻找合适的器件,当器件与地址匹配时,器件会发出一个应答信号,这样就可以让单片机确定该读哪个器件,这样就可以开始读取数据了.
写入数据:
下面是程序:
#include<reg52.h>
#define uchar unsigned char
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay()
{ ;; }
void start()
{
}
void stop()
{
}
void respons()
{
}
void init()
{
}
void write_byte(uchar
date)
{
}
uchar
read_byte()
{
}
void delay1(uchar x)
{
}
void write_add(uchar address,uchar date)
{
}
uchar read_add(uchar address)
{
}
void main()
{
}
已投稿到: |
|
---|