avr单片机的TWI两线串行接口
发送:
1,设定数据传输波特率
2,发送START信号,等待应答
3,发送芯片地址,等待应答
4,发送数据的绝对地址,等待应答 ==》
5,发送要写入的数据,等待应答
6,发送STOP信号,释放总线
接收:
1,设定数据传输波特率
2,发送START信号,等待应答
3,发送芯片地址,等待应答
4,发送数据的绝对地址,等待应答 ==》
5,发送RESTART信号,等待应答
6,发送芯片地址并注明读操作,等待应答 ==》
7,读取数据,等待应答
8,发送STOP信号,释放总线
应用芯片 :ATMega 16
代码文件:Project
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IAR_DELAY.H
#ifndef __IAR_DELAY_H
#define __IAR_DELAY_H
#include
#define XTAL 7.3728
#define delay_us(x) __delay_cycles ( (unsigned long)(x * XTAL) )
#define delay_ms(x) __delay_cycles ( (unsigned long)(x * XTAL*1000) )
#define delay_s(x) __delay_cycles ( (unsigned long)(x * XTAL*1000000) )
#endif
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
UART.C
#include
#define uchar unsigned char
#define uint unsigned int
//########################################################### UBRRH=0x00; DDRD_Bit1=1; @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ #include void Uart_Init(void); #define IIC_Start() #define IIC_Wait() //##############################################################################
voidUart_Init(void)
{
UCSRC = (1<
UBRRL=47;
}
//###########################################################
voidUart_Transmit(uchar data)
{
UDR = data;
}
#include "IAR_DELAY.H"
#define uchar unsigned char
#define uint unsigned int
void Uart_Transmit(uchar data);
//变量声明
#define EEPROM_BUS_ADDRESS 0xA0
//主机发送模式时各状态字的后续动作
#define TW_START
#define TW_REP_START
#define TW_MT_SLA_ACK
#define TW_MT_SLA_NACK
#define TW_MT_DATA_ACK
#define TW_MT_DATA_NACK
#define TW_MT_ARB_LOST
//主机接收模式时各状态字的后续动作
#define TW_MR_ARB_LOST
#define TW_MR_SLA_ACK
#define TW_MR_SLA_NACK
#define TW_MR_DATA_ACK
#define TW_MR_DATA_NACK
#define IIC_Stop()
评论