资源简介
本程序通过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
相关资源
- 简易c51单片机矩阵式键盘密码锁
- 电子密码锁 proteus仿真
- 心形流水灯仿真电路
- 51单片机方波发生器频率计lcd.zip
- 基于msp430单片机的电子万年历LCD 128
- 基于msp430单片机的红外线遥控解码L
- PCF8591 ad转换及lcd显示
- 步进电机实现的悬挂运动控制系统
- 调频接收机multisim仿真文件,分电路,
- 最牛的交通灯proteus仿真附keil程序
- 8255单片机led显示实验
- 宏晶STC单片机常见封装及PCB库
- 大型光伏并网系统的建模与仿真
- 7,4,3汉明码的仿真程序
- 调幅仿真AM 信号调制
- Buck/Boost电路设计与仿真验证
- wsn 路由协议 仿真
- LCD12864 万年历 单片机 农历 显示 温度
- 056 货车超重监测系统 51单片机 仿真
- 030 矩阵键盘 电子琴 仿真 51单片机
- 025 四路定时开关 51单片机仿真
- 014 电流表 仿真 51单片机 proteus仿真
- 单片机 汇编语言 简易红绿灯
- PIC18单片机 官方所有程序 包含AD TI
- 基于51单片机的16X16点阵电子琴
- 并行干扰抵消器的设计与仿真
- 步进电机运行源代码及protues仿真
- Flexsim快餐店仿真案列
- MSP430G25534个简单的小程序
- 郑州大学07级随机信号处理仿真
评论
共有 条评论