|
各位进来的朋友麻烦各位帮小弟看看下面的小程序:
下面的程序利用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周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|