⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drv_1161.h

📁 pcf8563的读写程序
💻 H
字号:

// ==== 1161 ====
void Sta_PCF1161T(void)	 //起始
{
    IIC_1161=1;
	NOP;
	NOP;

    IIC_CLK=1;
	NOP;
	NOP;
	NOP;
	NOP;

    IIC_1161=0;
	NOP;
	NOP;
	NOP;
	NOP;

    IIC_CLK=0;
	NOP;
	NOP;
}

void Stop_PCF1161T(void)	//停止
{
    IIC_1161=0;
	NOP;
	NOP;

    IIC_CLK=1;
	NOP;
	NOP;
	NOP;
	NOP;

    IIC_1161=1;
	NOP;
	NOP;
	NOP;
	NOP;

    IIC_CLK=0;
	NOP;
	NOP;
}

void Master_NAck(void)	//主器件应答非信号
{
    IIC_1161=1;
	NOP;

    IIC_CLK=1;
	NOP;

    IIC_CLK=0;
	NOP;
	NOP;
}

bit Slave_Ack(void)	//检测应答信号,返回SDA状态
{
    bit flag_pcf=0;

    IIC_1161=1;
	NOP;

    IIC_CLK=1;
	NOP;
	NOP;
	NOP;
	NOP;

    if (IIC_1161)
	{
        flag_pcf=1;		//对方没应答
    }
    else 
	{
		flag_pcf=0;	//对方应答了
	}

	NOP;

    IIC_CLK=0;

    return(flag_pcf);
}

void out_1b_1161(unsigned char byte)	//发送一个字节
{
    unsigned char i;

    IIC_CLK = 0;
	NOP;
	NOP;

    for (i=0;i<8;i++)
	{
		IIC_1161=(bit)(byte & 0x80);
		NOP;
		NOP;
		IIC_CLK=1;
		NOP;
		NOP;
		NOP;
		NOP;
		IIC_CLK=0;
		NOP;
		NOP;
		NOP;
		NOP;
        IIC_1161=0;
		NOP;
		NOP;
		byte <<= 1;
    }
}

unsigned char in_1b_1161(void)		//接收一个字节
{
    unsigned char byte1 = 0;
    unsigned char i;
	
    for (i=0;i<8;i++)
	{
        byte1 <<= 1;

		IIC_CLK=1;
		NOP;
		if(IIC_1161) byte1 |= 0x01;
		NOP;
		NOP;
        IIC_CLK=0;
		NOP;
		NOP;
		NOP;
		NOP;
    }
    return(byte1);
}

unsigned char rd_1b_1161(unsigned char address)		//读一个字节
{
	unsigned char dat;	
    bit flag_ack=0;
	//WP_1021 = 0;

    do
	{
        do
		{
            do
			{
                Sta_PCF1161T(); // 启动PCF1161T
                out_1b_1161(0xa0);	//虚写 10100000
                flag_ack=Slave_Ack();
            }while (flag_ack);

            out_1b_1161(address);
            flag_ack=Slave_Ack();
        }while (flag_ack);

        Sta_PCF1161T();
        out_1b_1161(0xa1); // 10100001
        flag_ack=Slave_Ack();
    }while (flag_ack);

    dat = in_1b_1161();
    Master_NAck(); //无应答
    Stop_PCF1161T(); // 停止
	//WP_1021 = 1;
    return(dat);
}

void wt_1b_1161(unsigned char address,unsigned char dat)	//写一个数据字节
{
    bit flag_ack=0;

	//WP_1021 = 0;

    do
	{
        do
		{
            do
			{
                Sta_PCF1161T();// 启动PCF1161T
                out_1b_1161(0xa0); //虚写 10100000
                flag_ack=Slave_Ack();
            }while(flag_ack);

            out_1b_1161(address);
            flag_ack=Slave_Ack();
        }while(flag_ack);

        out_1b_1161(dat); // 寄存器地址 0xa0
        flag_ack=Slave_Ack();
    }while(flag_ack);

    Stop_PCF1161T(); // 停止
	//WP_1021 = 1;
}

void wt_nb_1161(unsigned char address,unsigned char *idata PCF1161T,unsigned char number) //写n个字节
{
    unsigned char i;
    bit flag_ack=0;

	//WP_1021 = 0;

    do
	{
        do
		{
            do
			{
                Sta_PCF1161T();// 启动PCF1161T
                out_1b_1161(0xa0); // 器件地址写 0xa0  10100000
                flag_ack=Slave_Ack();
            }while(flag_ack);

            out_1b_1161(address);
            flag_ack=Slave_Ack();
        }while(flag_ack);

        for (i=0;i<number;i++)
		{
            out_1b_1161(*PCF1161T); // 寄存器地址 0xa0
            PCF1161T++;
            flag_ack=Slave_Ack();
            if(flag_ack) break;
        }
    }while (flag_ack);
    Stop_PCF1161T(); // 停止

	//WP_1021 = 1;
}






                                      

                                            

                                                  

                                                        

                                                  

                                            

                                      

     

          

               

                    

                         

                              

                                   

                                        

                                             

                                                  

                                                       

                                                            

                                                                 

                                                                      

                                                                           





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -