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

向24C02中写入当前的时间

发布时间:2020-05-30 发布时间:
|
/*

//1、向24C02中写入当前的时间,下次开机就会从
   上次断电时的时间开始计时

//2、重点掌握IIC总线几个常用信号的写法;
//

*/

#include
#define uint  unsigned int
#define uchar unsigned char
sbit sda=P1^0;
sbit scl=P1^1;
uchar num1,num1,flag1,flag2,sec;
void delay();
void delayms(uint z);
void start();
void stop();
void sck();
void writebyte(uchar date);
uchar readbyte();
void writeaddr(uchar addr,uchar date);
uchar readaddr(uchar addr);
void intc();
void disp();
//=========================
void main()
{  uchar temp;
   intc();
   P0=temp;
   sec=readaddr(2);
   if(sec>100)
     sec=0;
   while(1)
     {
  if(flag1==1)
            {flag1=0;
     writeaddr(2,sec);
   }
      disp();

 }
}
//-----初始化------
void intc()
{
 scl=1;
    delay();
    sda=1;
    delay();
    TMOD=0x01;
    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    EA=1;
    ET0=1;
    TR0=1;
}
//----------------
void delay()
{;;}
//-----------------
void delayms(uint z)
{
  uint x,y;
  for(x=0;x    for(y=0;y<112;y++);

}
//-------24C04启动信号---------

void start()
{
   sda=1;
   delay();
   scl=1;
   delay();
   sda=0;
   delay();
}
//--------24C04停止信号--------
void stop()
{
   sda=0;
   delay();
   scl=1;
   delay();
   sda=1;
   delay();

}

//-------24C04应答信号-------
void sck()
{  uchar i=0;
   scl=1;
   delay();
   while(sda==1&&i<255)
    i++;
   scl=0;
  delay();
}
//-------24C04写一个字节------
void writebyte(uchar date)
{
  uchar i;
  for(i=0;i<8;i++)
    {
 date=date<<1;
    scl=0;
 delay();  
 sda=CY;
    delay();
    scl=1;
    delay();
    }
   scl=0;//写完一个字节后再把总线拉成接收状态;
   delay();
   sda=1;
   delay();
 }

//---------24C04读一个字节---------

uchar readbyte()
{
   uchar i,k;
   scl=0;//写完一个字节后再把总线拉成接收状态;
   delay();
   sda=1;
   delay();
   for(i=0;i<8;i++)
    {
 scl=1;
 delay(); 
    k=(k<<1)||sda;   
    delay();
    scl=0;
    delay();
    }
   delay();
 return k;
}

//-------24C04指定地址写一个字节------
void writeaddr(uchar addr,uchar date)
{
  star();
  writebyte(0xa0);
  ack();
  writebyte(addr);
  ack();
  writebyte(date);
  ack();
  stop();
}

//--------24C04指定地址读一个字节--------
uchar readaddr(uchar addr)
{uchar date1;
  star();
  writebyte(0xa0);
  ack();
  writebyte(addr);
  ack();
  writebyte(0xa1);
  ack();
  date1=readbyte();
  stop();
  return date1;
}

//===================
void disp()
{
 P0=sec/10;
 P2=0xfe;
 delayms(5);
 P0=0;
 delayms(1);
 P0=sec%10;
 P2=0xfd;
 delayms(5);
 P0=0; 
 delayms(1);
}

//----------------
void timer0() interrupt 1
{
 TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    num1++;
    if(num1==100)
    {num1=0;flag1=1;sec++;
     if(sec>99)
      sec=0;
     }


}



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

热门文章 更多