2004420165933.c
字号:
//=======================================
// 时钟 PCF8563T 编程
//=======================================
// 启动PCF8563T
void Sta_PCF8563T(void)
{
PCF8563T_SDA=1;
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=0;
return;
}
// 停止 PCF8563T
void Stop_PCF8563T(void)
{
PCF8563T_SDA=0;
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=0;
return;
}
//主器件应答信号 Master_Ack
void Master_Ack(void)
{
PCF8563T_SDA=0;
PCF8563T_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=0;
return;
}
//主器件应答非信号Master_NAck
void Master_NAck(void)
{
PCF8563T_SDA=1;
PCF8563T_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=0;
return;
}
// 从器件应答信号 Slave_Ack
bit Slave_Ack(void)
{
bit flag_pcf=0;
PCF8563T_SDA=1;
PCF8563T_SCL=1;
if((P0&BIT6)==BIT6){
flag_pcf=1;
}
else flag_pcf=0;
PCF8563T_SCL=0;
return(flag_pcf);
}
// 发送一个字节数据子程序,即向 PCF8563T 写数据字节(一个字节)
void Out_PCF8563T_Byte(unsigned char byte)
{
unsigned char i;
PCF8563T_SCL=0;
for(i=0;i<8;i++){
PCF8563T_SDA=(bit)(byte&0x80);
PCF8563T_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=0;
PCF8563T_SDA=0;
byte<<=1;
}
return;
}
// 从SDA上接收一个字节数据子程序
unsigned char In_PCF8563T_Byte(void)
{
unsigned char byte1=0;
unsigned char i;
for(i=0;i<8;i++){
byte1=byte1<<1;
PCF8563T_SDA=1;
PCF8563T_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
PCF8563T_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if((P0&BIT6)==BIT6) byte1|=0x01;
PCF8563T_SCL=0;
}
PCF8563T_SCL=0;
return(byte1);
}
// 主器件向 PCF8563T 写数据字节(四个字节) */
void Write_PCF8563T_nByte(unsigned char address,unsigned char idata *PCF8563T,unsigned char number)
{
unsigned char i;
bit flag_ack=0;
do{
do{
do{
Sta_PCF8563T(); // 启动PCF8563T
Out_PCF8563T_Byte(0xa2); // 器件地址写 0xa0 10100000
flag_ack=Slave_Ack();
}while(flag_ack!=0);
Out_PCF8563T_Byte(address);
flag_ack=Slave_Ack();
}while(flag_ack!=0);
for(i=0;i<number;i++){
Out_PCF8563T_Byte(*PCF8563T); // 寄存器地址 0xa0
PCF8563T++;
flag_ack=Slave_Ack();
if(flag_ack==1) break;
}
}while(flag_ack!=0);
Stop_PCF8563T(); // 停止
return;
}
//主器件读取 PCF8563T 中的数据, 读四个字节
void Read_PCF8563T_nByte(unsigned char address,unsigned char idata *PCF8563T,unsigned char number)
{
unsigned char i;
bit flag_ack=0;
do{
do{
do{
Sta_PCF8563T(); // 启动PCF8563T
Out_PCF8563T_Byte(0xa2); // 器件地址写 0xa0 10100000
flag_ack=Slave_Ack();
}while(flag_ack!=0);
Out_PCF8563T_Byte(address);
flag_ack=Slave_Ack();
}while(flag_ack!=0);
Sta_PCF8563T();
Out_PCF8563T_Byte(0xa3); // 器件地址读
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -