您的位置 首页 FPGA

向24C02中写入当时的时刻

/*//1、向24C02中写入当前的时间,下次开机就会从上次断电时的时间开始计时//2、重点掌握IIC总线几个常用信号的写法;//*/#includereg51…

/*

//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;
}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/266099.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部