原创 AVR单片机专辑——TWI

2008-12-28 17:01 2777 9 9 分类: MCU/ 嵌入式

TWII<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2C)总线接口


 


a)       只需两根双向传输线,时钟SCL和数据SDA,需加两个上拉电阻(也可以使能I/O口内部的上拉电阻)。线与


b)       所有连接到总线的设备有自己的地址。


c)       面向字节和基于中断的,总线仲裁


d)       TWI总线协议中,SCL线是高电平时,SDA线的“下降沿”表示一个数据帧的开始,称为START信号,SDA线的“上升沿”表示一个数据帧的结束,称为STOP信号。


使用TWI协议分别实现AT24C02以及双机通信。


其中实现了对AT24C02的读写,双机通信有点问题,主要是从主机串口接收数


据,通过TWI接口和从机通信,再将从机接收到的数据通过SPI口用74HC595在数


码管上显示。现在存在如下问题:由于使用proteus仿真,主机串口接收不行,


所以就直接把数据保存在数组里,数据传输到从机后在数码管上显示,可以显


示,但是还是有点问题。下面继续解决。https://static.assets-stash.eet-china.com/album/old-resources/2008/12/28/c0808c45-c864-47d7-871b-bed7bc0df3cb.rar


 


 


TWI接口操作代码如下:


#define Start()       (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))


#define Stop()        (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))


#define Wait()        {while(!(TWCR&(1<<TWINT)));}


#define TestAck()     (TWSR&0xF8)


#define Twi()         (TWCR=(1<<TWINT)|(1<<TWEN))


#define Write8Bit(x)  {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);}


主从的状态码如下:


       #define START           0x08
#define RE_START        0x10
#define MT_SLA_ACK      0x18
#define MT_SLA_NACK     0x20
#define MT_DATA_ACK     0x28
#define MT_DATA_NACK    0x30
#define MT_ARB_LOST     0x38


 


       #define MR_ARB_LOST     0x38
#define MR_SLA_ACK      0x40
#define MR_SLA_NACK     0x48
#define MR_DATA_ACK     0x50
#define MR_DATA_NACK    0x58


 


       #define ST_SLA_ACK      0xA8
#define ST_ARB_LOST_SLA_ACK 0xB0
#define ST_DATA_ACK      0xB8
#define ST_DATA_NACK  0xC0
#define ST_LAST_DATA  0xC8


 


       #define SR_SLA_ACK      0x60
#define SR_ARB_LOST_SLA_ACK 0x68
#define SR_GCALL_ACK  0x70
#define SR_ARB_LOST_GCALL_ACK  0x78
#define SR_DATA_ACK      0x80
#define SR_DATA_NACK  0x88
#define SR_GCALL_DATA_ACK 0x90
#define SR_GCALL_DATA_NACK 0x98
#define SR_STOP          0xA0

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /3 下一条