登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请大家看一下我这段程序有什么问题(I2C的)

作者:wx7134 栏目:单片机
请大家看一下我这段程序有什么问题(I2C的)
我是用I/O口模拟的
void readPCF563(void)
{
    i2cstart();
    i2csend(0xa2);
    i2csend(0x00);
    i2cstop();
    i2cstart();
    i2csend(0xa3);
    for (i=0;i<10;i++)
    {
    i2cstart();
    time_buf[i]=i2creceive();
    if(i!=1)
    i2cack();//除最后一个字节外,其他都要从MASTER发应答。
    }
    i2cnack();
    i2cstop();
}

// I2C起始
void i2cstart (void)
{
    SDA=1;delay(0);
    SCL=1;delay(0);
    SDA=0;delay(0);
    SCL=0;delay(0);
}

// I2C停止            
void i2cstop  (void)
{
    SDA=0;delay(50);
    SCL=1;delay(50);
    SDA=1;delay(50);    
}
    
// I2C应答
void i2cack   (void)
{
    SDA=0;delay(50);
    SCL=1;delay(50);
    SCL=0;delay(50);
}        

// I2C非应答
void i2cnack  (void)
{
    SDA=1;delay(50);
    SCL=1;delay(50);
    SCL=0;delay(50);
}
            
// I2C发送一个字节
void i2csend  (uchar out_byte)
{
    for(i=0;i<8;i++)
    {
        SCL=0;        delay(50);
        if(((out_byte >> 7) & 0x01) == 0x01)
        {
        SDA=1;delay(50);
        }
        else
        {
        SDA=0;delay(50);
        }
        SCL=1;        delay(50);
        out_byte<<=1;
    }
        SCL=0;        delay(50);
        SDA=1;        delay(50);
}

// I2C接收一个字节
uchar i2creceive  (void)
{
    timesfr=0;
    SCL=0;delay(50);
    SDA=1;delay(50);

    for(i=0;i<8;i++)
    {
    timesfr<<=1;
    SCL=0;delay(50);
    SCL=1;delay(50);
    timesfr|=SDA;delay(50);
    }
    SCL=0;delay(50);
    return timesfr;                
}

2楼: >>参与讨论
wx7134
我用的单片机是C8051F005
我用的单片机是C8051F005

3楼: >>参与讨论
freego
你在这里没有使用从机应答位
延时当然也可以但是这样异常时诊断就成问题了。其实iic看起来挺简单,但是编得严谨也挺花功夫的。

参与讨论
昵称:
讨论内容:
 
 
相关帖子
我用AD574A芯片,请问+5V的基准电压芯片有哪些?
求求大家谁知道菲利普的那个型号的单片机有PWM输出?
请问操作RTL8019时,MAC地址与IP地址有何关系?
PCF8563寄存器中的无效位
从串口往mega8的flash写数据,写入的数据还可读取
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号