问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

51单片机编程实现运行参数的串行EEPROM存取和现场数据随即转存至闪盘...

发布网友 发布时间:2022-04-22 20:22

我来回答

2个回答

热心网友 时间:2024-09-30 01:30

/***************************************************************
功能:实现存储器EEPROM AT24C02的数据读写操作 采用IIC总线读写
作者:SG
时间:2004-03-15
版本:V1.0
***************************************************************/
#include "INTRINS.H"
#include "reg52.h"
#define WriteDeviceAddress 0xa0 //写驱动地址指令
#define ReadDeviceAddress 0xa1 //读驱动地址指令
sbit AT24C02_SCL = 0xa4;
sbit AT24C02_SDA = 0xa5;
/*-------------------------------------------------------------
功能:发起始信号
------------------------------------------------------------*/
void Start_Cond()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SDA = 0;
_nop_();
}
/*-------------------------------------------------------------
功能:发停止信号
------------------------------------------------------------*/
void Stop_Cond()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 0;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SDA = 1;
_nop_();
}
/*-------------------------------------------------------------
功能:发确认信号
------------------------------------------------------------*/
void Ack()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 0;
AT24C02_SCL = 1;
_nop_();
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
}
/*-------------------------------------------------------------
功能:发无确认信号
------------------------------------------------------------*/
void NoAck()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SCL = 0;
_nop_();
}
/*-------------------------------------------------------------
功能:写一个字节数据
------------------------------------------------------------*/
bit Write8Bit(unsigned char input)
{
unsigned char i;
for (i=0;i<8;i++)
{
AT24C02_SCL = 0;
input <<= 1;
AT24C02_SDA = CY;
AT24C02_SCL = 1;

}
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
AT24C02_SCL = 1;
_nop_();
CY = AT24C02_SDA;
return(CY) ;
}
/*-------------------------------------------------------------
功能:读一个字节数据
------------------------------------------------------------*/
unsigned char Read8Bit()
{
unsigned char temp,rbyte=0;
for (temp = 8;temp != 0;temp--)
{
AT24C02_SCL = 0;
_nop_();
rbyte = (rbyte << 1) | AT24C02_SDA;
AT24C02_SCL = 1;
_nop_();
}
return rbyte;
}
/*-------------------------------------------------------------
功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针
nContent开头的往下内容。
------------------------------------------------------------*/
bit Read_Flash ( unsigned char *nContent, unsigned char nAddr, unsigned char nLen )
{
unsigned char Addr;
Addr = nAddr;
Start_Cond(); //写开始信号
Write8Bit(WriteDeviceAddress); //写驱动地址
Write8Bit(Addr); //写从EEPROM中读的开始地址
Start_Cond(); //写开始信号
Write8Bit(ReadDeviceAddress); //写读数据指令
while(--nLen)
{
*nContent=Read8Bit(); //读出内容
nContent++; //指针加1
Ack(); //发确认信号
}
*nContent=Read8Bit(); //读一字节
NoAck(); //没有确认信号
Stop_Cond(); //发停止信号
return(0); //返回
}
/*-------------------------------------------------------------
功能:初始化EEPROM子程序内容为FF
------------------------------------------------------------*/
bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF
{
unsigned char nLen;
unsigned char Addr;
nLen=8;
Addr=8 *nPage;
Start_Cond();
Write8Bit(WriteDeviceAddress);
Write8Bit(Addr);
for(;nLen!=0;nLen--)
{
if(Write8Bit(0xff)) break; //if Write8Bit() Return 1 Write Flase
}
Stop_Cond();
return(CY);
}
/*-------------------------------------------------------------
功能:从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针
nContent开头的往下内容。
------------------------------------------------------------*/
bit Write_Flash ( unsigned char *nContent, unsigned char nAddr,unsigned char nLen)
{
unsigned char i,temp;
unsigned char Addr;
Addr = nAddr;
Start_Cond(); //写开始信号
Write8Bit(WriteDeviceAddress); //写驱动地址
Write8Bit(Addr); //写从EEPROM中写的开始地址
for(i = 0;i < nLen;i++)
{
if(Addr%8==0) //每页8字节 //换页
{
Stop_Cond();
_nop_();
Start_Cond();
Write8Bit(WriteDeviceAddress);
Write8Bit(Addr);
}
temp = *nContent;
if(Write8Bit(temp)) break; //CY
nContent++;
Addr++;
}
Stop_Cond(); //发停止信号
return(CY);
}
/*-------------------------------------------------------------
主程序
功能:实现存储器EEPROM AT24C02的数据读写操作
------------------------------------------------------------*/
void main()
{
unsigned char dat[16],i;
Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中
Init_Flash(0); //将AT24C02的第0页初始化为FF
Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中
for(i = 0;i < 16;i++ )
{
dat[i] = i; //对数组dat初始化为0---F
}
Write_Flash(dat,0,16); //将dat数组中的数据写入AT24C02中地址从0开始
Read_Flash(dat,1,16); //读出AT24C02中从地址1开始依次往后16个字节放入dat数组中
while(1)
{
i = 9;
}
}

热心网友 时间:2024-09-30 01:28

一般的做法是采用USB接口芯片,通过这个接口芯片边接USB与51通讯
你如果不懂USB协义,还得学学如何转存至USB

热心网友 时间:2024-09-30 01:32

/***************************************************************
功能:实现存储器EEPROM AT24C02的数据读写操作 采用IIC总线读写
作者:SG
时间:2004-03-15
版本:V1.0
***************************************************************/
#include "INTRINS.H"
#include "reg52.h"
#define WriteDeviceAddress 0xa0 //写驱动地址指令
#define ReadDeviceAddress 0xa1 //读驱动地址指令
sbit AT24C02_SCL = 0xa4;
sbit AT24C02_SDA = 0xa5;
/*-------------------------------------------------------------
功能:发起始信号
------------------------------------------------------------*/
void Start_Cond()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SDA = 0;
_nop_();
}
/*-------------------------------------------------------------
功能:发停止信号
------------------------------------------------------------*/
void Stop_Cond()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 0;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SDA = 1;
_nop_();
}
/*-------------------------------------------------------------
功能:发确认信号
------------------------------------------------------------*/
void Ack()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 0;
AT24C02_SCL = 1;
_nop_();
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
}
/*-------------------------------------------------------------
功能:发无确认信号
------------------------------------------------------------*/
void NoAck()
{
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
_nop_();
AT24C02_SCL = 1;
_nop_();
AT24C02_SCL = 0;
_nop_();
}
/*-------------------------------------------------------------
功能:写一个字节数据
------------------------------------------------------------*/
bit Write8Bit(unsigned char input)
{
unsigned char i;
for (i=0;i<8;i++)
{
AT24C02_SCL = 0;
input <<= 1;
AT24C02_SDA = CY;
AT24C02_SCL = 1;

}
AT24C02_SCL = 0;
_nop_();
AT24C02_SDA = 1;
AT24C02_SCL = 1;
_nop_();
CY = AT24C02_SDA;
return(CY) ;
}
/*-------------------------------------------------------------
功能:读一个字节数据
------------------------------------------------------------*/
unsigned char Read8Bit()
{
unsigned char temp,rbyte=0;
for (temp = 8;temp != 0;temp--)
{
AT24C02_SCL = 0;
_nop_();
rbyte = (rbyte << 1) | AT24C02_SDA;
AT24C02_SCL = 1;
_nop_();
}
return rbyte;
}
/*-------------------------------------------------------------
功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针
nContent开头的往下内容。
------------------------------------------------------------*/
bit Read_Flash ( unsigned char *nContent, unsigned char nAddr, unsigned char nLen )
{
unsigned char Addr;
Addr = nAddr;
Start_Cond(); //写开始信号
Write8Bit(WriteDeviceAddress); //写驱动地址
Write8Bit(Addr); //写从EEPROM中读的开始地址
Start_Cond(); //写开始信号
Write8Bit(ReadDeviceAddress); //写读数据指令
while(--nLen)
{
*nContent=Read8Bit(); //读出内容
nContent++; //指针加1
Ack(); //发确认信号
}
*nContent=Read8Bit(); //读一字节
NoAck(); //没有确认信号
Stop_Cond(); //发停止信号
return(0); //返回
}
/*-------------------------------------------------------------
功能:初始化EEPROM子程序内容为FF
------------------------------------------------------------*/
bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF
{
unsigned char nLen;
unsigned char Addr;
nLen=8;
Addr=8 *nPage;
Start_Cond();
Write8Bit(WriteDeviceAddress);
Write8Bit(Addr);
for(;nLen!=0;nLen--)
{
if(Write8Bit(0xff)) break; //if Write8Bit() Return 1 Write Flase
}
Stop_Cond();
return(CY);
}
/*-------------------------------------------------------------
功能:从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针
nContent开头的往下内容。
------------------------------------------------------------*/
bit Write_Flash ( unsigned char *nContent, unsigned char nAddr,unsigned char nLen)
{
unsigned char i,temp;
unsigned char Addr;
Addr = nAddr;
Start_Cond(); //写开始信号
Write8Bit(WriteDeviceAddress); //写驱动地址
Write8Bit(Addr); //写从EEPROM中写的开始地址
for(i = 0;i < nLen;i++)
{
if(Addr%8==0) //每页8字节 //换页
{
Stop_Cond();
_nop_();
Start_Cond();
Write8Bit(WriteDeviceAddress);
Write8Bit(Addr);
}
temp = *nContent;
if(Write8Bit(temp)) break; //CY
nContent++;
Addr++;
}
Stop_Cond(); //发停止信号
return(CY);
}
/*-------------------------------------------------------------
主程序
功能:实现存储器EEPROM AT24C02的数据读写操作
------------------------------------------------------------*/
void main()
{
unsigned char dat[16],i;
Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中
Init_Flash(0); //将AT24C02的第0页初始化为FF
Read_Flash(dat,0,16); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中
for(i = 0;i < 16;i++ )
{
dat[i] = i; //对数组dat初始化为0---F
}
Write_Flash(dat,0,16); //将dat数组中的数据写入AT24C02中地址从0开始
Read_Flash(dat,1,16); //读出AT24C02中从地址1开始依次往后16个字节放入dat数组中
while(1)
{
i = 9;
}
}

热心网友 时间:2024-09-30 01:28

一般的做法是采用USB接口芯片,通过这个接口芯片边接USB与51通讯
你如果不懂USB协义,还得学学如何转存至USB
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高启强与陈书婷结婚是哪一集 陈舒婷和高启强第几集结婚 高启强陈书婷结婚是第几集 高启强和陈书婷结婚是第几集 高启强和陈书婷第几集结的婚 狂飙高启强第几集和大嫂在一起的 2021年清明节时间(是公历几月几号) js中类似`${xx,xxxy}`的语句是什么意思? 用支付宝帐号注册的淘宝帐号但是淘宝显示未绑定支付宝帐号如图 银行黑户影响子女什么 如何转北京户口,条件有哪些? 现在的人动不动就崩溃大哭,这是为什么? 单片机编程&#39;AT24C02Read&#39;: requires ANSI-style prototype怎么办?谢谢大神,麻烦了 为什么用360浏览器登录新浪微博时常不能正常显示 怎么登都不行?!! 为什么用360极速浏览器不能上微博?(新浪) 怎样才可以获取北京户口? 我想问下AT24C02BN和AT24C02B还有不带后缀的AT24C02,他们之间有什么区别?有时还能看到带后缀A的, 为什么我电脑的谷歌、360浏览器登陆不了新浪微博? QQ电话标志怎么弄一直浮现在屏幕上?1 北京市户口落户条件是什么 北京落户的最新政策是怎样? 新浪微博登陆不上去,已经用360清除了cookie,还是打不开,求解决。 关于AT24C02哪位高手帮我看下这个程序,编译时出现 return-expression on void-function,这是哪里错了 需要什么条件才能办理北京户口 360浏览器侧边栏的微博和邮箱账号都登陆不了 如何在qq视频聊天时播放手机屏幕? 如何成为北京户口 换了台电脑登录360安全浏览器,新浪微博授权界面出现此图,不能成功登录这是怎么回事,怎么解决啊? 我想请问,我的手机是S4,在360手机助手下载的新浪微博,登陆时一直都显示我密码或登录名错误?咋回事? 外地农村户口如何迁入北京市城镇户口? 打QQ电话为什么会黑屏? 360浏览器上不了新浪微博,显示的是糟糕,无法访问,连接错误,如果这样要怎么设置或调试?急急急 怎样才能拿到北京户口?需要去哪样的单位,拥有怎样的学历?工作经验呢? 为什么情绪不稳定,动不动就崩溃,感觉很绝望 SUPERPO 烧录器中元件选择AT24C02C@SOIC与AT24C02C@SOIC(GANG-4)有什么区别? 用360或猎豹登陆微博一直登不进去用ie或者手机就可以 如何取得北京户口 知乎 IIC AT24C02用在51单片机上, 动不动就心态崩,什么原因 新浪微博登录不上怎么回事?提示“登陆失败请稍候再试” AT24C02D-SSHM-T型号的元器件怎么样?在立创商城中能找到这个元器件吗? 360极速浏览器登陆不了微博贴吧等等账号? 为什么我的网页动不动就崩溃要刷新用的是SOGOU AT24C02封装类型PDIP8、SOP8、TSOT23-5L什么意思?有什么区别 360极速浏览器无法登陆新浪微博 为什么我的浏览器这段时间动不动就崩溃啊?我人也崩溃了!!! AT24C02C与AT24C02B与AT24C02的差异 网页新浪微博在我的电脑上登陆不上,IE9、360极速浏览器都不行,输入账号密码后点击登录页面没有反应 电脑动不动就死机究竟怎么回事啊 手机usb连接电脑没反应只显示充电怎么办?