×
单片机 > 单片机程序设计 > 详情

单片机--掉电保护24C02(c51)

发布时间:2020-08-31 发布时间:
|
51单片机驱动24C02芯片程序,功能:实现掉电保护。

 

#include"reg52.h"

#define uchar unsigned char

#define uint  unsigned int

sbit   sda=P3^4;

sbit   scl=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();

}

uchar read_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;

}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计