单片机--掉电保护24C02(c51)
#include"reg52.h"
#define uchar unsigned char
#define uintunsigned int
sbitsda=P3^4;
sbitscl=P3^6;
void delay_ee()//1us左右
{
;;
}
void start_ee()//开始信号在scl为高电平器件,sda产生一个下降沿
{
sda=1;
delay_ee();
scl=1;
delay_ee();
sda=0;
delay_ee();
}
void stop_ee()//停止信号在scl为高电平器件,sda产生一个上升沿
{
sda=0;
delay_ee();
scl=1;
delay_ee();
sda=1;
delay_ee();
}
void respons_ee()//应答信号时钟信号是高电平,如果sda被拉低,或者等到一定的时间,认定产生了应答
{
uchar i;
scl=1;
delay_ee();
while((sda==1)&&(i<20)) i++;
//while(sda==1)
scl=0;
delay_ee();
}
void init_ee()//初始化两条线
{
sda=1;
delay_ee();
scl=1;
delay_ee();
//ce=0;
}
void write_byte_ee(uchar date)//写一个字节的数据
{
uchari,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=(temp<1);
scl=0;
delay_ee();
sda=CY;
delay_ee();
scl=1;
delay_ee();
}
scl=0;//scl一定要是低电平,才允许改变sda的状态
delay_ee();
sda=1;//释放sda数据线
delay_ee();
}
uchar read_byte_ee() //读一个字节的数据
{
uchar i,j,k;
scl=0;
delay_ee();
sda=1;
delay_ee();
for(i=0;i<8;i++)
{
scl=1;
delay_ee();
j=sda;
k=(k<1)|j;
scl=0;
delay_ee();
}
returnk;
}
void write_add_ee(uchar address,uchar date)
{
start_ee();
write_byte_ee(0xa0);//器件的地址,最后一位是0,表示写
respons_ee();
write_byte_ee(address);
respons_ee();
write_byte_ee(date);
respons_ee();
stop_ee();
}
ucharread_add_ee(uchar address) //读EEPROM里面某个地址里面的值
{
uchar date;
start_ee();
write_byte_ee(0xa0);
respons_ee();
write_byte_ee(address);
respons_ee();
start_ee();
write_byte_ee(0xa1);
respons_ee();
date=read_byte_ee();
stop_ee();
return date;
}
单片机掉电保护24C0 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)