求助关于ATMEGA16的TWI的读写问题,请救各位AVR高手

2019-03-24 20:58发布

只测试TWI的写的功能,分别写器件地址,寄存器地址,数据三个数,但是从示波器看只看到器件地址和数据的2个数据,看不到寄存器地址这是为什么呢?????求各位高手解答



#include <iom16v.h>
#include <macros.h>

void I2C_init()
{
  TWSR = 0xF8;
  TWBR = 0x20;
  TWCR = TWCR | (0x01 << 2);   //bit2置1   TWEN: TWI 使能
}

void delay(unsigned int s)
{
  unsigned int i;
  for(i=0; i<s; i++);
}


void I2C_Start()   //开始信号
{
  TWCR = TWCR | (0x01 <<TWINT) | (0x01<<TWSTA) | (0x01 <<TWEN);
  while (!(TWCR & (0x01<<TWINT)));   //wait start send
}

void I2C_Stop()     //停止信号
{
  TWCR = TWCR | (0x01 << TWINT) | (0x01 << TWEN) | (0x01 << TWSTO);
}


void Tls2561_Write(unsigned char addr, unsigned char w_data)
{
  I2C_Start();
 
  TWDR = 0x52;         //写入从设备的地址 write 0x52    
  TWCR = TWCR | (0x01 << TWINT) | (0x01 << TWEN) ;
  while (!(TWCR & (1 << TWINT)));   //等待从地址发送完成
 
  TWDR = (addr | 0x80);
  TWCR = TWCR | (0x01 << TWINT) | (0x01 << TWEN) ;
  while (!(TWCR & (1 << TWINT)));   //等待所需要写的寄存器地址发送完成
 
  TWDR = w_data;
  TWCR = TWCR | (1 << TWINT) | (1 << TWEN) ;
  while (!(TWCR & (1 << TWINT)));   //等待所需要些的数据发送完成
 
  I2C_Stop();
 
}




void main()
{
  I2C_init();
    while(1)
    {
    delay(1000);
    Tls2561_Write(0x00,0x08);
      }
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
六弦蓝大宝
2019-03-25 11:19
谢谢~~你的程序有测试成功么?

一周热门 更多>