资源简介

本程序通过51单片机的普通IO口,模拟IIC的总线时序,并且通过IIC总线向24C02的EEPROM写入数独,并且读出EEPROM的数据。

资源截图

代码片段和文件信息

#include“reg51.h“
#define uchar unsigned char
#define uint unsigned int

sbit SCK=P2^0;     //时钟总线
sbit SDA=P2^1;    //数据总线
sbit WP=P2^2; //写保护

void delay(uchar a)
{
while(a--);
} //延时

void delay1(uint a)
{
while(a--);
} //延时

void start()
{
 SCK=1;
 SDA=1;
 delay(5);  
 SDA=0; //在SCK 为高电平时,数据总线来一个下降沿,开始通信信号
}

void stop()
{
     SDA=0;
 SCK=0;
 SCK=1;
 SDA=1; //在SCK 为高电平时,数据总线来一个上升沿,结束通信信号 
}

void write(uchar a)
{
  uchar i=0;
  uchar b;
  while(1)
  {
b=a;
   for(i=0;i<8;i++)
   {
   SCK=0; //开始时时钟总线保持为低 
   SDA=b&0x80; //在时钟总线保持低时,数据总线输出要发送数据的最高位
   b=b<<1; //数据左移一位
   SCK=1; //时钟总线保持为高,在高电平期间,存储器读取电平 
delay(5);
     }
 SCK=0;
 SDA=1; //释放数据总线 
 SCK=1;
      delay(5);
 if(SDA==0) //读取第九位,如果是低,表示收到存储器应答信号,否则重写数据 
  break;
   }
}

uchar read()
{
uchar i;
uchar a=0;
for(i=0;i<8;i++)
{
SCK=0; //开始时时钟总线保持为低 
delay(5);
SCK=1; //释放数据总线 
a=a<<1; //数据左移一位,腾出最低位
if(SDA==1)
   a=a|0x01; //存取读到的数据 
  
}
delay(5);
return a;
}

void write24xx(uchar adduchar a)
{
start(); //开始通信信号 
write(0xa0); //发送写命令 
write(add); //写入要存储数据的地址 
write(a); //写入待存取的数据 
stop(); //结束通信信号
delay1(5000); //延时一段时间,待写入结束 
}

uchar read24xx(uchar add)
{
uchar a;
start(); //开始通信信号 
write(0xa0); //发送写命令 
write(add); //写入要读取数据的地址 
stop(); //结束通信信号 
start(); //开始通信信号 
write(0xa1); //发送读命令 
a=read(); //读出数据 
stop(); //结束通信信号 
return a;
}

void main()
{
uchar ij;
WP=0; //关闭写保护 
for(i=0;i<32;i++)
write24xx(ii); //向存储器写入32个数据 
WP=1; //写保护 
for(i=0;i<32;i++)
{
j=read24xx(i);
P1=j;
delay1(50000); //隔一段时间读出刚才存储的数据 
}
while(1);
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      98198  2010-06-10 11:14  IIC总线时序模拟\24c02\a.DSN

     文件       1885  2010-06-10 11:35  IIC总线时序模拟\24c02\a.PWI

     文件       5657  2010-06-10 11:12  IIC总线时序模拟\24c02\i2c

     文件       2141  2010-06-10 11:12  IIC总线时序模拟\24c02\I2c.c

     文件        831  2010-06-10 11:12  IIC总线时序模拟\24c02\i2c.hex

     文件         39  2010-06-10 11:12  IIC总线时序模拟\24c02\i2c.lnp

     文件       6173  2010-06-10 11:12  IIC总线时序模拟\24c02\I2c.LST

     文件      10112  2010-06-10 11:12  IIC总线时序模拟\24c02\i2c.M51

     文件       5863  2010-06-10 11:12  IIC总线时序模拟\24c02\I2c.OBJ

     文件       1391  2010-06-10 11:14  IIC总线时序模拟\24c02\i2c.Opt

     文件        199  2010-06-10 11:14  IIC总线时序模拟\24c02\i2c.plg

     文件       2198  2010-06-04 10:11  IIC总线时序模拟\24c02\i2c.Uv2

    .......      1390  2010-06-10 11:12  IIC总线时序模拟\24c02\i2c_Opt.Bak

    .......         0  2010-06-04 09:44  IIC总线时序模拟\24c02\i2c_Uv2.Bak

     文件      98249  2010-06-04 19:55  IIC总线时序模拟\24c02\Last Loaded a.DBK

     文件       6376  2005-03-22 15:22  IIC总线时序模拟\24c02\STARTUP.A51

     文件      14049  2010-06-10 11:12  IIC总线时序模拟\24c02\STARTUP.LST

     文件        749  2010-06-10 11:12  IIC总线时序模拟\24c02\STARTUP.OBJ

     文件        188  2010-06-10 14:03  IIC总线时序模拟\说明.txt

     目录          0  2010-06-10 11:35  IIC总线时序模拟\24c02

     目录          0  2010-06-10 11:15  IIC总线时序模拟

----------- ---------  ---------- -----  ----

               255688                    21


评论

共有 条评论