AT24C02数据存储I2C协议-串口通讯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RS_String("Writing Finished ! \n");
RS_String("Data size is ");
RS_Byte(sizeof(EEPROM_WriteBuffer) / 10 + '0');
RS_Byte(sizeof(EEPROM_WriteBuffer) % 10 + '0');
delay(10000);//延时
}
LED = 0x80;
for(i=0;i<8;i++) //低位向高位流动
{
P0 = ~(LED >> i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
}
LED = 0xfe;//高位向低位流动
for(i=0;i<8;i++)
TMOD = 0x20;//定时器T1使用工作方式2
TL1 = 0xfa;
TH1 = 0xfa;
TR1 = 1;//开始计时
SCON = 0x50;//工作方式1,波特率9600bps @ 11.0592,允许接收
PCON |= 0x80;
//ES = 1;
//EA = 1;//打开所有中断
TI = 0;
//串口发送一字节数据
void RS_Byte(uchar R_Byte)
{
SBUF = R_Byte;
while(TI == 0);//查询法
TI = 0;
}
/******************************************/
//串口发送字符串数据
void RS_String(uchar *p)
uchar EEPROM_ReadBuffer[20];
//函数声明
/******************************************/
//延时子函时,
//参数d_time控制延时的时间
//作用,灯亮和熄灭必须持续一定时间,人眼才能看到
void delay(unsigned int ຫໍສະໝຸດ Baiduime);
#include <intrins.h>
//宏定义
#define uchar unsigned char
#define uint unsigned int
//引脚定义
sbit Scl= P3^6;//AT24C0x串行时钟
sbit Sda= P3^7;//AT24C0x串行数据
//全局变量
uchar EEPROM_WriteBuffer[] = {"www.21eos.com"};
//毫秒级延时子函数
void mDelay(uchar j)
{
uchar i;
for(;j>0;j--)
for(i=0;i<125;i--);
}
//------------------------------------------------串口初始化------------------------------------------------------
Stop();
}
}
//------------------------------------------------串口初始化------------------------------------------------------
void Uart_Init( void )
{//波特率9600
BitCounter--;
}while(BitCounter);
Scl=0;
}
//I2C读取一字节数据
uchar Read(void)
{
uchar temp=0;
uchar temp1=0;
uchar BitCounter=8;
Sda=1;
do{
Scl=0;
_nop_();_nop_();_nop_();_nop_();
Ack();
Send(Address);//发送地址
Ack();
for(i=0;i<Num;i++)
{
Send(iData[i]);
Ack();
}
Stop();
mDelay(4); //延时4ms。。。。
}
//I2C读取多个字节数据
void RdFromROM(uchar Data[],uchar Address,uchar Num)
/******************************************/
//延时子函数
//参数范围0-65536
void delay(unsigned int time) //参数time大小
{//决定延时时间长短
while(time--);
}
/******************************************/
RS_String("Uart Initializing...... \n");
delay(50000);
RS_String("Uart Initializing Finished !! \n");
delay(50000);
RS_String("Welcome to use Green Shield Products ! \n");
uchar temp;//中间变量控制
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)//如果最高位是1
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;//RLC
Data=temp;
{
uchar i = 0;
while(*(p+i) != '\0' )
{
RS_Byte(*(p+i));
i++;
}
}
/******************************************/
//主函数
void main(void)
{
uchar LED;//LED灯输出变量
Uart_Init();
}
}
}
Sda=1;
_nop_();_nop_();_nop_();_nop_();
}
//I2C应答位
void Ack(void)
{
Sda=0;
_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
//I2C反向应答位
uint time;//主循环次数记录
time++;
RS_String("It is ");
RS_Byte(time + '0');
RS_String(" Loop ! \n");
LED = 0x01;//高位向低位流动
for(i=0;i<8;i++)
{
P0 = ~(LED << i);//按照原理图,单片机输出低电平时,LED发光
//I2C起始位
void Start(void)
{
Sda=1;
Scl=1;
_nop_();_nop_();_nop_();_nop_();
Sda=0;
_nop_();_nop_();_nop_();_nop_();
}
//I2C停止位
void Stop(void)
{
Sda=0;
Scl=1;
_nop_();_nop_();_nop_();_nop_();
RS_String(" Bytes ! \n ");
delay(50000);
RS_String("Reading Data form AT24C02....Address = 0x00 \n");
RdFromROM(EEPROM_ReadBuffer,0x00,sizeof(EEPROM_WriteBuffer));//从AT24C02读取数据,起始地址0x00
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(0xa0);
Ack();
Send(Address+i);
Ack();
Start();
Send(0xa1);
Ack();
*(PData+i)=Read();
Scl=0;
NoAck();
RS_String("Writing Data to AT24C02 .... Address = 0x00 \n");
WrToROMs(EEPROM_WriteBuffer,0x00,sizeof(EEPROM_WriteBuffer));//向AT24C02写入数据,起始地址0x00
delay(50000);
{
P0 = (LED << i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
}
LED = 0x7f;//高位向低位流动
for(i=0;i<8;i++)
{
P0 = (LED >> i);//按照原理图,单片机输出低电平时,LED发光
delay(10000);//延时
串口输出数据,串口是单片机程序调试种
最常用最重要的工具。在使用前需要主要
开发板当前晶振频率是否为11.0592MHz,如
不是,请更换晶振,或者自行计算定时器
数值。
时间:2011-8-23
******************************************/
//头文件
#include "reg51.h"
RS_String("We got message text is : \"");
RS_String(EEPROM_ReadBuffer);
RS_String("\" \n");
RS_String("Going to Main Loop.. \n");
while(1)//主程序循环
{
uchar i;//循环变量
//RI = 0;
//REN = 1;
}
//------------------------------------------------串口显示----------------------------------------------------------
/******************************************/
Scl=1;
_nop_();_nop_();_nop_();_nop_();
if(Sda)//如果Sda=1
temp=temp|0x01;//temp的最低位置1
else
temp=temp&0xfe;//否则temp的最低位清0
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
void NoAck(void)
{
Sda=1;
_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
//I2C写入一字节数据
void Send(uchar Data)
{
uchar BitCounter=8;//位数控制
}
BitCounter--;
}while(BitCounter);
return(temp);
}
//I2C写入多个字节数据
void WrToROMs(uchar *iData,uchar Address,uchar Num)
{
uchar i;
Start();//发送启动信号
Send(0xa0);//发送SLA+W
/******************************************
绿盾电子
X-13多传感器开发板
功能:实现读写AT24C02型号的EEPROM存储。该类
型存储器具有掉电数据保护功能,是单片
机项目开发中常用的芯片。AT24C02使用
I2C总线与的单片机通信,只需两根线即
可完成读写功能。
相关文档
最新文档