只测试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);
}
}
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
return(0);
我觉得这个判断状态的语句好像没什么用就把它省去了··
一周热门 更多>