avr单片机的TWI两线串行接口
IIC_Stop();
return 1;
}
//##############################################################################
unsigned char twi_read(unsigned char addr)
{
unsigned char Receive_Byte ;
TWBR = 2;
IIC_Start();
IIC_Wait();
if ((TWSR & 0xF8) != 0x08) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量,如果正确则向下进行数据传输,错误返回 0
TWDR = EEPROM_BUS_ADDRESS;
TWCR = (1 < TWINT) | (1 < TWEN);
IIC_Wait();
if ((TWSR & 0xF8) != 0x18) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量 , 如果正确则向下进行数据传输,错误返回 0
TWDR = addr;
TWCR = (1 < TWINT) | (1 < TWEN);
IIC_Wait();
if ((TWSR & 0xF8) != 0x28) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量 , 如果正确则向下进行数据传输,错误返回 0
IIC_Start();
if ((TWSR & 0xF8) != 0x10) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量 , 如果正确则向下进行数据传输,错误返回 0
TWDR = 0xA1;
TWCR = (1 < TWINT) | (1 < TWEN);
IIC_Wait();
if ((TWSR & 0xF8) != 0x40) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量 , 如果正确则向下进行数据传输,错误返回 0
TWCR = (1 < TWINT) | (1 < TWEN);
IIC_Wait();
if ((TWSR & 0xF8) != 0x58) return 0;//检测到TWINT位置位,比对TWSR寄存器内的状态量 , 如果正确则向下进行数据传输,错误返回 0
Receive_Byte = TWDR;
IIC_Stop();
}
//##############################################################################
void main(void)
{
uchar c,d;
Uart_Init();
delay_us(20);
Uart_Transmit(0x55);
c = twi_write(0x51,0xf8);
Uart_Transmit(c);
delay_ms(2);
d = twi_read(0x51);
Uart_Transmit(d);
while(1);
}
avr单片机TWI两线串行接 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)