|
各位进来的朋友麻烦各位帮小弟看看下面的小程序:
下面的程序利用TWI口向一片AT24C256写一个字节的数据;256的地址为0;
这个程序总也调不对,不知道是哪方面的问题,请各位指点一下.
int main(void)
{
TWBR = 0x10;
TWSR = 0x01; //设定波特率76.8K
while(1)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //TWI功能使能,发送START信号
while (!(TWCR & (1<<TWINT))); //等待TWINT置位,等待START信号发出
//检验TWI状态寄存器,屏蔽预分频位,如果状态字不是START转出错处理
if ((TWSR & 0xF8) != 0x08)
while(1);
TWDR = 0xa0; //将SLA_W 载入TWDR寄存器
TWCR = (1<<TWINT)|(1<<TWEN); //TWINT位清零,启动发送地址
//等待TWINT 置位,TWINT置位表示总线命令SLA+W已发出,及收到应答信号
while (!(TWCR & (1<<TWINT)));
//检验TWI状态寄存器,屏蔽预分频位,如果状态字不是MT_SLA_ACK转出错处理
if ((TWSR & 0xF8) !=0x18)
while(1);
TWDR = 0x00; //装入存储器地址的高位字节到TWDR寄存器
TWCR = (1<<TWINT)|(1<<TWEN);//TWINT清零,启动发送数据
//等待TWINT 置位,TWINT置位表示存储器地址的高位字节已发送,及收到应答信号
while (!(TWCR & (1<<TWINT)));
//检验TWI状态寄存器,屏蔽预分频器,如果状态字不是MT_DATA_ACK转出错处理
if ((TWSR & 0xF8) !=0x28)
while(1);
TWDR = 0x01; //装入存储器地址的低位字节到TWDR寄存器
TWCR = (1<<TWINT)|(1<<TWEN);//TWINT清零,启动发送数据
//等待TWINT 置位,TWINT置位表示存储器地址的低位字节已发送,及收到应答信号
while (!(TWCR & (1<<TWINT)));
//检验TWI状态寄存器,屏蔽预分频器,如果状态字不是MT_DATA_ACK转出错处理
if ((TWSR & 0xF8) !=0x28)
while(1);
TWDR = 0x45; //装入DATA到TWDR寄存器
TWCR = (1<<TWINT)|(1<<TWEN);//TWINT清零,启动发送数据
//等待TWINT 置位,TWINT置位表示DATA已发送,及收到应答信号
while (!(TWCR & (1<<TWINT)));
//检验TWI状态寄存器,屏蔽预分频器,如果状态字不是MT_DATA_ACK转出错处理
if ((TWSR & 0xF8) !=0x28)
while(1);
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO); //发送STOP 信号
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|