首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
PCF8563时钟程序
来源:本站整理  作者:佚名  2011-02-05 21:44:48



PCF8563时钟程序

#include<reg51.h>
#include<stdlib.h>
#define byte unsigned char

sbit scl=0x81;                     //定义串行I/O口
sbit sda=0x80;
idata byte rom_sed[9];
idata byte rom_rec[7];
idata byte j,k;
bit flag,flag1;

void delay(void)                         //延时子程序
{
data byte i;
for(i=0;i<6;i++);
}

void I_start(void)                 //发送I2C总线起始条件子程序
{
sda=1;
;
scl=1;
delay();
sda=0;
delay();
scl=0;
;
}

void I_stop(void)                 //I2C总线停止条件子程序
{
sda=0;
;
scl=1;
delay();
sda=1;
delay();
}

bit I_send(byte I_data)             //字节数据传送子程序
{
data byte i;
for(i=0;i<8;i++)
{
sda=(bit)(I_data&0x80);
I_data=I_data<<1;
;
scl=1;
delay();
scl=0;
}
;
;
sda=1;
;
;                            //准备接收ACK位
scl=1;
;
;                            //开始接收ack位
flag=0;
if(sda==0)flag=0;
else flag=1;                     //返回(~I_cLOCk());
scl=0;
return(flag);
}

byte I_receive(void)                 //字节数据接收子程序
{
data byte i;
byte I_data=0;
sda=1;
for(i=0;i<8;i++)
{
I_data*=2;
;
scl=0;
delay();
scl=1; 
;
;
if(sda==1)I_data++;
;
;
}
scl=0; 
;
;
;
sda=0;
if(flag1==0)                     //不是最后一个ACK
{
;
;
scl=1;
delay();
scl=0;
}
else                        //是最后一个ACK
{
sda=1; 
;
;
scl=1;
delay();
scl=0;
flag1=0;
}
return(I_data);
}

void main()                     //主程序
{
data byte i;
rom_sed[0]=0x00; rom_sed[1]=0x00;
rom_sed[2]=0x00; rom_sed[3]=0x55;
rom_sed[4]=0x23; rom_sed[5]=0x31;
rom_sed[6]=0x06; rom_sed[7]=0x92;
rom_sed[8]=0x99;
for(i=0;i<255;i++)delay();
I_start();
if(~I_send(0xa2))                 //pcf_write地址
{
if(~I_send(0x02))             //pcf_status寄存器地址
{
for(i=0;i<9;i++)
{
if(~I_send(rom_sed[i]));
else;
}
I_stop();
}
else;
}
else;

start: I_start();
if(~I_send(0xa2))                 // pcf_write地址
{
if(~I_send(0x02))             // pcf_status寄存器地址
{
I_start();
if(~I_send(0xa3))             //写状态寄存器
{
for(i=0;i<7;i++)
{
if(i==6)
flag1=1;
else
flag1=0;
rom_rec[i]=I_receive();
switch(i)
{
case 1:rom_rec[i]=rom_rec[i]&0x7f;break;
case 2:
case 3:rom_rec[i]=rom_rec[i]&0x3f;break;
case 4:rom_rec[i]=rom_rec[i]&0x07;break;
case 5:rom_rec[i]=rom_rec[i]&0x9f;break;
default:break;
}
}
I_stop();
}
}
}
goto start;
}

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:303,914.10000 毫秒