欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

2004420165933.c

单片机读写日历芯片8563的程序,试验通过
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 + -