资源简介
本程序通过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
相关资源
- 51 单片机 红外避障小车 大集合136
- 基本放大电路multisim仿真.ms14
- STC8951系列单片机中方指南
- 一个labview仿真的函数信号发生器.vi
- 60个HFSS 仿真模型库
- 基于MCS_51单片机的工业屏柜散热方案
- MCS_51单片机与8255A的接口设计
- Quartus II 15.0中仿真Altera三速以太网I
- Quartus II 15.0中仿真Altera三速以太网I
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 瑞利信道的仿真,包括信号的调制,
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- proteus仿真 AT89C51输出各种波形
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 一种红外遥控编解码仿真
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 毕业论文之温度传感器DS18B20(源码
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
评论
共有 条评论