📄 twi.c
字号:
/*********************************************************************************************/
/********************以下是对ATmega16的自带I2C定义和使用**************************************/
/*********************************************************************************************/
#include "config.h"
#include "TWI.h"
/*
extern void Init_TWI(void) ; //TWI初始化
extern uchar TWI_Send(uchar Slave,uchar Address,uchar Data); //向IIC地址为Slave的从机的Address地址发送(写)一字节数据Data
extern uchar TWI_SendStr(uchar Slave,uchar Address,uchar *Array,uchar CNT) ; //向IIC地址为Slave的从机的Address地址开始发送N字节数据Data
extern uchar TWI_Receive(uchar Slave,uchar Address) ; //从IIC地址为Slave的从机的Address地址读取一字节数据Data,返回值为读取的数据
*/
//************TWI初始化*************/
/****************************************************
*****************************************************
向IIC地址为Slave的从机的Address地址发送(写)一字节数据Data
返回0:写成功
返回非0:写失败
******************************************************
******************************************************/
uchar TWI_Send(uchar Slave,uchar Address,uchar Data)
{
TWCR=0x80|0x20|0x04; //或:TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);对TWINT写1清除,使能TWI,发出Start信号
while((TWCR&0x80)!=0x80) ; //或:while (!(TWCR & (1<<TWINT)));等待TWINT置位,表明Start信号已发出
if((TWSR&0xf8)!=0x08) //或:if ((TWSR & 0xF8) != START),检测状态寄存器,屏蔽预分频位,如果状态字不是START转出错处理
return(1); //返回值1,表明从机没有对Start信号作应答
//Slave即SLA+W,即是从机地址 ,可以是0x18或0x20,此处只用0x18
//所谓的应答是“从器件”在收到地址和“写”后,将SDA电压拉低,由“主器件”读取
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -