/*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd
*
*This sample is used for EEPROM 24C02 Read and Write.
*
*write by Shifang 2007-4-29
*
*V1.1
*/
/*
每次开机都将次数加1 并存储到EEPROM。这样就能直观的看到机器的使用次数
用P1口 LED做为显示,次数大于256是将溢出,按复位模拟开机 或者直接通过开关开机
*/
#include <reg52.h>
#include <intrins.h>
#define AddWr 0xae //Write Address
#define AddRd 0xaf //Read Address
//全局变量
sbit Sda=P1^2; //定义总线连接端口
sbit Scl=P1^1;
sbit WP=P1^0;//No connect here
void mDelay(unsigned char j)//A normal delay
{
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);
}
//write to ROM
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);//Write Address
Ack();
Send(Address+i);//Write sub Address
Ack();
Send(*(PData+i));//Write Data
Ack();
Stop();
mDelay(20);
}
}
//read from ROM
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);//Write Address
Ack();
Send(Address+i);//Write sub Address
Ack();
Start();
Send(AddRd);//Read Address
Ack();
*(PData+i)=Read();//Read Data
Scl=0;
NoAck();
Stop();
}
}
//////////////////////////////////////////////////////////////////////////////////////////
//以上程序是EEPROM24C02程序部分,IIC协议
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,原来代表0
while(1)
{
}
}
//用户可以自己把程序移植到数码管显示或者液晶显示 ,可以直观的看到数字 ,也可以定义int类型 用于计数万次以上
单片机开机次数记忆源代码
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
lzuzhp07
- 粉丝: 1
- 资源: 48
最新资源
- python-leetcode面试题解之第274题H指数.zip
- python-leetcode面试题解之第270题最接近二叉搜索树值.zip
- python-leetcode面试题解之第267题回文排列II.zip
- python-leetcode面试题解之第264题丑数II.zip
- python-leetcode面试题解之第263题丑数.zip
- python-leetcode面试题解之第258题各位相加.zip
- python-leetcode面试题解之第257题二叉树的所有路径.zip
- python-leetcode面试题解之第253题会议室II.zip
- python-leetcode面试题解之第252题会议室.zip
- python-leetcode面试题解之第249题移位字符串分组.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)