新人求助帖

2019-03-24 20:33发布

AVR用TWi通信的时候 发出开始指令 接受不到应答信号怎么搞 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
ThetisEliza
2019-03-25 05:02
程序如下:
void twi_init()
{
    TWBR = 0x02;
    TWAR = 0xD1;
    TWCR = 0x44;
    TWSR = 0x00;   
}

uchar iic_write(uchar wdata, uchar addr)
{
    start();
    wait();
    if(test_ack()!=START) return 1;
   
    write_8bit(WD_DEVICE_ADDR);
    wait();
    if(test_ack()!=MT_SLA_ACK) return 2;
   
    write_8bit(wdata);
    wait();
    if(test_ack()!=MT_DATA_ACK) return 3;
   
    write_8bit(addr);
    wait();
    if(test_ack()!=MT_DATA_ACK) return 4;
   
    write_8bit(wdata);
    wait();
    if(test_ack() != MT_DATA_ACK) return 5;
   
    stop();
   
    return 0;
}

uchar iic_read(uchar addr)
{
    uchar temp;
   
    start();   
    wait();
    if((test_ack()!=START))   
    return 1;
   
    write_8bit(WD_DEVICE_ADDR);
    wait();   
    if(test_ack() != MT_SLA_ACK)
    return 2;
   
    write_8bit(addr);
    wait();
    if(test_ack()!=MT_DATA_ACK) return 3;
   
    start();
    wait();
    if(test_ack()!= RE_START) return 4;
   
    write_8bit(RD_DEVICE_ADDR+1);
    wait();
    if(test_ack() != MR_SLA_ACK) return 5;
   
    twi();
    wait();
    if(test_ack()!= MR_DATA_NOACK) return 6;
   
    temp = TWDR;
   
    stop();
    PORTC = 0x02;
    return temp;
}
用读函数读取数据的时候 都是返回 1

一周热门 更多>