资源简介
proteus_24C08—有注释(proteus里面使用的是24c02)(注释比较全面,适合初学者)
代码片段和文件信息
/**************************************************************************************
*使用24C08的时候,只要使用下面这两个函数即可
*uchar read_e2p(uint address):在24c02中的某地址读取一个字节
*void write_e2p(uchar chuint address):在24c02的某地址写入一字节ch
******************************************************************************************/
#include
#include
/***定义数据类型*****/
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define delay5NOP() {_nop_();_nop_();_nop_();_nop_();_nop_();}
/*********由于使用的是24C08,所以有四个地址****/
#define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
#define WriteDeviceAddress1 0xa2
#define ReadDviceAddress 0xa1
#define ReadDviceAddress1 0xa3
/*******定义管脚******/
sbit SCL=P2^0;//24C08的管脚6连接的连线
sbit SDA=P2^1;//24C08的管脚5连接的连线
sbit BUTTON=P1^0;
/***定时函数***/
void DelayMs(uint number)
{
uchar temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--);
}
}
/**************
*IIC总线的开始位
*****************/
void Start()
{
SDA=1;
delay5NOP();
SCL=1;
delay5NOP();
SDA=0;//在SCL高电位的时候,数据线由高变低
delay5NOP();
SCL=0;
}
/*****************
*IIC总线的结束位
****************/
void Stop()
{
SCL=0;
delay5NOP();
SDA=0;
delay5NOP();
SCL=1;//在SCL高电位的时候,数据线由低变高
delay5NOP();
SDA=1;
}
/**************
*测试位:用于检查24C08这个器件有没有收到数据
**************/
bit TestAck()
{
bit ErrorBit;
SDA=1;
delay5NOP();
SCL=1;//SDA和SCL同时拉高,看看SDA会不会被24C08给拉低了
delay5NOP();
ErrorBit=SDA;
SCL=0;
return(ErrorBit);//如果这时的ErrorBit是低电位的时候,说明是正确的
}
/********************
*这个函数和TestAck() 是一样的,只是TestAck() 有错误返回
*********************/
void NoAck()
{
SDA=1;
delay5NOP();
SCL=1;
delay5NOP();
SCL=0;
}
/********************
*传输8个数据到24C08上面去
******************/
Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=( bit )( input&0x80 );//这里采用强制转换的方式,数据被强制转换成bit的形式
//8位数据被强制转化成bit后,只保留最高位
SCL=1;
delay5NOP();
SCL=0;//数据准备好后,在SCL的下降沿读入数据
input=input<<1;//继续分解这个8位数
}
}
/*********************
*指定一个地址,对这个地址写入一个数
**********************/
void write_e2p(uchar chuint address)
{
Start();
if(address<256)
{
Write8Bit(WriteDeviceAddress);//24C08器件的地址,可以理解为24C08的一个block
TestAck();
Write8Bit(address);//写入这个block具体的地址
TestAck();
}
else
{
Write8Bit(WriteDeviceAddress1);
TestAck();
Write8Bit(address-256);
TestAck();
}
Write8Bit(ch);//对这个地址写入一个数据
TestAck();
Stop();
DelayMs(10);//这个延时是为了防止两次调用write_e2p的间隔太短,而导致数据重叠
}
/******************************
*从24C08读出8个bit的数据
***************************/
uchar Read8Bit()
{
uchar tempread_byte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
read_byte <<= 1;
read_byte |= SDA;//对位进行强制转换成uchar后,高位全为零,只有最低位才是“这个bit”
SCL=0;
}
return( read_byte );
}
/**************************
*指定一个地址,并从这个地址里面读出一个数,返回这个数
************************/
uchar read_e2p(uint address)
{
uchar ch;
Start();
if(address<256)
{
Write8Bit(Write
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 517 2010-04-11 11:44 24C08\24c08.plg
文件 4088 2010-04-11 11:43 24C08\main.c
文件 26 2010-04-11 11:43 24C08\24c08.lnp
文件 10377 2010-04-11 11:43 24C08\24c08.M51
文件 1035 2010-04-11 11:43 24C08\24c08.hex
....... 0 2010-04-11 10:11 24C08\24c08_Uv2.Bak
文件 2158 2010-04-11 11:43 24C08\24c08.Uv2
文件 1261 2010-04-11 11:43 24C08\24c08.Opt
文件 110390 2010-04-11 10:45 24C08\Last Loaded 24C08.DBK
文件 114420 2010-04-11 11:43 24C08\24C08.DSN
文件 1507 2010-04-11 11:44 24C08\24C08.PWI
文件 8823 2010-04-11 11:43 24C08\main.LST
文件 9237 2010-04-11 11:43 24C08\main.OBJ
文件 8413 2010-04-11 11:43 24C08\24c08
目录 0 2010-04-10 21:31 24C08
----------- --------- ---------- ----- ----
272252 15
相关资源
- IIC proteus仿真实验
- STM32使用模拟IIC实现24C02读取
- 用stm32硬件I2C和模拟I2C读写EEPROM
- stm32I读写AT24c02IIC通讯
- 初级教程篇:按键(中断方式)实现
- 24C02掉电保护程序
- 24c04系列读写代码
- FM24C04驱动程序并带有测试程序
- 24c02c中文资料PDF
- STM32F AT24c02软件驱动程序
- FM24C04读写程序
- AT24C02_Random.rar
- EEProm存储器AT24C02读写程序
- STM32 IIC软件模拟读写24C02
- EEPROM 24c02中文资料
- IIC总线读写AT24C02BEEPROM源程序 有详细
- 24C02存储显示计时时间
- 51单片机模拟IIC协议读写EEPROM(24C02)
- LCD12864 万年历 单片机 农历 显示 温度
- zw_wangxingse-6021953-24C04与1602LCD设计电子
- 基于24C02和LCD液晶显示的电子密码锁
- 24C02掉电存储
- AT24C02 实现断电记忆程序
- 用24C04与1602LCD设计电子密码锁课程设
- 模拟I2C读写24C256和24C02
- STC单片机读取AT24C02程序
- 24C01C/24C02C/24LC01B中文资料 I2C串行EEP
- I2C读写AT24C02 基于STM32F103 cube
- 51单片机LCD1602模拟门禁系统 源代码
- 24c02页写连续也写。读写程序,C文件
评论
共有 条评论