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

📄 摩托罗拉8位单片机24c02读写程序.c

📁 24c02 摩托罗拉8为单片机c语言读写程序 单片机为gt8
💻 C
字号:
 /*============================================================================*
	函数:	void Delayiic(void)
	功能:	ns延时。
	参数:	ns——延时时间设定。
  返回值:	无。
最深嵌套:  0层
-------------------------------------------------------------------------------
更新日期:	2004.9.24
*============================================================================*/
void Delayiic(void)
{
    return;
}

/**************************************************************/
 //延时ms程序
 /**************************************************************/
void delay1ms(uchar n)
{
    uchar i,j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<200; j++);
        __RESET_WATCHDOG(); 
    }
    return;
} 

/*============================================================================*
	函数:	void IIC_Start(void)
	功能:	读写EEPROM开始程序。
	参数:	无。
  返回值:	无。
最深嵌套:  1层

更新日期:	2004.9.24
*============================================================================*/
void IIC_Start(void)
{
    Delayiic();
    IIC_SCL = 1;
    IIC_SDA = 1;
    Delayiic();
    IIC_SDA = 0;
    Delayiic();
    IIC_SCL = 0;
    Delayiic();
    return;
}

/*============================================================================*
	函数:	void IIC_Stop(void)
	功能:	读写EEPROM结束子程序。
	参数:	无。
  返回值:	无。
最深嵌套:  1层

更新日期:	2004.9.24
*============================================================================*/
void IIC_Stop(void)
{
    IIC_SCL = 0;
    Delayiic();
    IIC_SDA = 0;
    IIC_SCL = 1;
    Delayiic();
    IIC_SDA = 1;
    Delayiic();
    IIC_SCL = 0;
    Delayiic();
    IIC_SCL = 1;
    return;
}

/*============================================================================*
	函数:	void IIC_Transmit(void)
	功能:	向EEPROM输入一个字节的数据。
	参数:	word 要输入的数据。
  返回值:	出错标志。
  最深嵌套:   1层

更新日期:	2004.9.24
*============================================================================*/
uchar IIC_Transmit(uchar word)
{
    uchar iii,sample;
    for (iii=0; iii<8; iii++) 
    {
        if (word > 0x7f)    //先输出word的最高位
        {
            IIC_SDA = 1;
        }
        else 
        {
            IIC_SDA = 0;
        }
        IIC_SCL = 1;
        Delayiic();
        IIC_SCL = 0;        //注意读写EEPROM时要确保延时够用
        word <<= 1;
    }
    IIC_SDA = 1;
    IIC_SDA_D = 0;
    Delayiic();
    IIC_SCL = 1;
    Delayiic();
    sample = IIC_SDA;
    IIC_SCL = 0;
    IIC_SDA_D = 1;
    if (sample == 0)
    {
        return(1);
    }
    else
    {
        return(0);
    }
}

/*============================================================================*
	函数:	uchar Read_nByte_IIC(uchar address,uchar length)
	功能:	从EEPROM指定地址处读出n个字节,存入r_buf[]中。
	参数:	address 	——指定地址。
	        length    ——待读字节长度
  返回值:	——  出错标志
最深嵌套:  2层 读1个字节大约需要700us
更新日期:	2005.8.9
*============================================================================*/
uchar Read_nByte_IIC(uchar address,uchar length)
{
    uchar i,j,new_data;
    DisableInterrupts;
    IIC_SDA_D = 1;
    for (i=0; i<length; i++)
    {
        new_data = 0;
        IIC_Start();
        if (IIC_Transmit(0xa0) == 0) 
        {
            return(0);
        }
        if (IIC_Transmit(address) == 0)
        {
            return(0);
        }
        Delayiic();
        IIC_Start();
        if (IIC_Transmit(0xa1) == 0)
        {
            return(0);
        }
        Delayiic();
        IIC_SCL = 0;
        IIC_SDA_D = 0;
        for (j=0; j<8; j++)
        {
            new_data <<= 1; //先读出数据的最低位
            new_data &= 0xFE;
            IIC_SCL = 1;
            Delayiic();
            if (IIC_SDA == 1)
            {
                new_data++;
            }
            IIC_SCL = 0;
            Delayiic();
        }
        IIC_SCL = 0;
        Delayiic();
        IIC_SCL = 1;        //程序中可增加应答判断
        Delayiic();
        IIC_SCL = 0;
        IIC_SDA_D = 1;
        Delayiic();
        IIC_Stop();
        r_buf[i] = new_data;
        address++;
        __RESET_WATCHDOG(); //kicks the dog
    }
    EnableInterrupts;
    return(1);
}

/*============================================================================*
	函数:	void Write_nByte_IIC(uchar,uchar)
	功能:	向EEPROM指定地址处写入n个字节,内容存在w_buf[]中。
	参数:	address     ——指定地址。
  			lengrh		——待写字节数。
  返回值: ——  出错标志
最深嵌套:  3层
更新日期:	2005.8.9
*============================================================================*/
uchar Write_nByte_IIC(uchar address,uchar length)
{
    uchar i,j;              //j为存储不成功可再存储的次数,如始终不成功,则返回0;
    DisableInterrupts;
    for (i=0; i<length; i++)
    {
        for (j=0; j<3; j++)
        {
            IIC_SDA_D = 1;
            Delayiic();
            IIC_Start();
            if ((IIC_Transmit(0xa0) == 1) && (IIC_Transmit(address) == 1) && (IIC_Transmit(w_buf[i]) == 1))
            {
                Delayiic();
                IIC_Stop();
                delay1ms(10);
                if ((Read_nByte_IIC(address,1) == 1) && (r_buf[0] == w_buf[i])) 
                {
                    break;
                }
            }
            if (j == 2)
            {
                return(0);
            }
        }
        address++;
    }
    EnableInterrupts;
    return(1);
}

⌨️ 快捷键说明

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