/*-----------------------------------------------
名称:IIC协议 EEPROM24c02
公司:上海浩豚电子科技有限公司
编写:师访
日期:2009.5
修改:无
内容: 每次开机都将次数加1 并存储到EEPROM。这样就能直观的看到机器的使用次数
用P1口 LED做为显示,次数大于256是将溢出,按复位模拟开机 或者直接通过开关开机
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include <intrins.h> //包含NOP空指令函数_nop_();
#define AddWr 0xae //写数据地址,需要参考24c02芯片文档
#define AddRd 0xaf //读数据地址
sbit Sda=P1^2; //定义总线连接端口
sbit Scl=P1^1;
sbit WP=P1^0; //写保护,这里不使用
/*------------------------------------------------
延时程序
------------------------------------------------*/
void mDelay(unsigned char j)
{
unsigned int i;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
/*------------------------------------------------
启动IIC总线
------------------------------------------------*/
void Start(void)
{
Sda=1;
_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
/*------------------------------------------------
停止IIC总线
------------------------------------------------*/
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
/*------------------------------------------------
应答IIC总线
------------------------------------------------*/
void Ack(void)
{
Sda=0;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
/*------------------------------------------------
非应答IIC总线
------------------------------------------------*/
void NoAck(void)
{
Sda=1;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*------------------------------------------------
读入一个字节并返回
------------------------------------------------*/
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/*------------------------------------------------
写入数据
------------------------------------------------*/
void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr); //写入芯片地址
Ack();
Send(Address+i);//写入存储地址
Ack();
Send(*(PData+i));//写数据
Ack();
Stop();
mDelay(20);
}
}
/*------------------------------------------------
读出数据
------------------------------------------------*/
void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start(); //写入芯片地址
Send(AddWr);
Ack();
Send(Address+i);//写入存储地址
Ack();
Start();
Send(AddRd); //读入地址
Ack();
*(PData+i)=Read();//读数据
Scl=0;
NoAck();
Stop();
}
}
//以上程序是EEPROM24C02程序部分,IIC协议Scl=0;
/*------------------------------------------------
主程序
------------------------------------------------*/
void main()
{
unsigned char Number[1];
unsigned char i;
WP=0;//写保护关掉
RdFromROM(Number,0,1);//调用存储数据 从地址0开始写一个数据
Number[0]++;
WrToROM(Number,0,1);//写入24c02
P1 = ~ Number[0];//在P1口上显示 反向显示 LED亮代表1
while(1)
{
}
}
//用户可以自己把程序移植到数码管显示或者液晶显示 ,可以直观的看到数字 ,也可以定义int类型 用于计数万次以上
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Proteus仿真和代码)235-开机次数记忆(51单片机C语言实例Pro
资源推荐
资源详情
资源评论
收起资源包目录
235-开机次数记忆(51单片机C语言实例Proteus仿真和代码).rar (11个子文件)
235-开机次数记忆
开机次数.OBJ 9KB
开机次数记忆.Uv2 2KB
开机次数记忆.plg 473B
开机次数记忆.M51 11KB
开机次数记忆_Opt.Bak 1KB
开机次数.c 5KB
开机次数.LST 10KB
开机次数记忆.Opt 1024B
开机次数记忆.hex 1KB
开机次数记忆_Uv2.Bak 0B
开机次数记忆 8KB
共 11 条
- 1
资源评论
荣华富贵8
- 粉丝: 212
- 资源: 7653
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- VESTA 软件,计算材料学、DFT计算必备!
- ToWCL,一个模型的独白
- 《编译原理》课件-第6章LR分析程序.pptx
- Quantum ESPRESSO DFT软件
- vscode-pylance-2023.11.12-vsixhub.com.vsix
- word最新版2024年秋季信息素养-学术研究选修课,期末考试答案研究生MOOC,直接cv,3秒交卷,辛苦整理,制作不易
- springboot数控信息管理系统62293(数据库+源码)
- 【java毕业设计】springboot英语学习平台(springboot+vue+mysql+说明文档).zip
- 材料类SCI必备:230空间群所属晶系,包括空间群符号,可复制可编辑
- (三)最小梯度平滑预处理下的K-Means的道路分割实验(附资源)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功