avr單片機(jī)的TWI兩線串行接口
發(fā)送:
1,設(shè)定數(shù)據(jù)傳輸波特率
2,發(fā)送START信號,等待應(yīng)答
3,發(fā)送芯片地址,等待應(yīng)答
4,發(fā)送數(shù)據(jù)的絕對地址,等待應(yīng)答 ==》
5,發(fā)送要寫入的數(shù)據(jù),等待應(yīng)答
6,發(fā)送STOP信號,釋放總線
接收:
1,設(shè)定數(shù)據(jù)傳輸波特率
2,發(fā)送START信號,等待應(yīng)答
3,發(fā)送芯片地址,等待應(yīng)答
4,發(fā)送數(shù)據(jù)的絕對地址,等待應(yīng)答 ==》
5,發(fā)送RESTART信號,等待應(yīng)答
6,發(fā)送芯片地址并注明讀操作,等待應(yīng)答 ==》
7,讀取數(shù)據(jù),等待應(yīng)答
8,發(fā)送STOP信號,釋放總線
應(yīng)用芯片 :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
//主機(jī)發(fā)送模式時各狀態(tài)字的后續(xù)動作
#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
//主機(jī)接收模式時各狀態(tài)字的后續(xù)動作
#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()
評論