I2C总线芯片AT24C02程序设计(精简版)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

uchar i; scl=1; delay(); while((sda==1)&&(i<250))i++; scl=0; delay(); }
void init()//初始化函数,拉高 sda 和 scl 两条总线 {
sda=1; scl=1; }
/*****************************************************************************/ /*根据数据有效性规则,读写数据时必须将 SCL 拉高,然后送入或读出数据,完毕后再将 SCL 拉低*/ /*****************************************************************************/
//scl 拉低数据写完毕
delay();
}
}
uchar read_byte()//读取一字节,从 AT24C02 中读取一个字节
{
uchar i,k;
for(i=0;i<8;i++)
Leabharlann Baidu
{
scl=1;
//scl 拉高准备读数据
delay();
k=(k<<1)|sda; //将 sda 中的数据读出
scl=0;
void write_byte(uchar date)//写一字节,将 date 写入 AT24C02 中
{
uchar i;
scl=0;
for(i=0;i<8;i++)
{
date=date<<1;
sda=CY;
//将要送入数据送入 sda
scl=1;
//scl 拉高准备写数据
delay();
scl=0;
void write_add(uchar address,uchar date)//向 AT24C02 中写数据 {
start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); }
respons(); date=read_byte(); stop(); return date; }
void main() {
init();//初始化 AT24C02 write_add(23,0x55);//在 23 地址处写入数据 0x55; delay1(100); P1=read_add(23);//读出地址为 23 处的数据 while(1); }
//scl 拉低数据写完毕
delay();
}
return k;
}
void delay1(uchar x)//延时程序,放在写入与读出直接 {
uchar a,b; for(a=x;a>0;a--)
for(b=100;b>0;b--); } /*******************************************************************/ /*读出与写入数据时必须严格遵守时序要求*/ /******************************************************************/
uchar read_add(uchar address)//从 AT24C02 中读出数据 {
uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1);
I2C 总线芯片 AT24C02 程序设计(精简版)
#include<reg52.h> #define uchar unsigned char sbit sda=P2^0; sbit scl=P2^1; uchar a; void delay()//延时函数 { ;; }
void start() {
sda=1; delay(); scl=1; delay(); sda=0; delay(); }
//开始信号
void stop() {
sda=0; delay(); scl=1; delay(); sda=1; delay(); }
//停止
void respons() //应答,在数据传送 8 位后,等待或者发送一个应答信号 {
相关文档
最新文档