⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twi.h

📁 GY-29-MMA7455发送资料
💻 H
字号:
/********************************

*********************************/

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <util/twi.h>


extern uchar a;
extern uchar reg;


//TWI初始化函数
void twi_init(void)
{
	TWCR = 0x00; //禁止TWI
	TWBR = 0x00; //设置比特率
	TWAR = 0x3A; //设置从机地址
	TWSR|= 0x00; //设置分频因子
	TWCR = 0x44; //启动TWI
}

uchar twi_start(void)
{
	TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
	while (!(TWCR & (1<<TWINT)));
	if((TWSR & 0xf8)==TW_START)
	{
		return 1;
	}
	else if((TWSR & 0xf8)==TW_REP_START)
	{
		return 2;
	}
	else
	{
		return 0;
	}
}


//停止通信,发送STOP信号
void twi_stop(void)
{
	TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
}

//返回值:	1表示成功,0表示失败
uchar twi_to_write(void)
{
	TWDR=TWAR;
	TWCR = (1<<TWINT) | (1<<TWEN);
	while (!(TWCR & (1<<TWINT)));
	if((TWSR & 0xf8)==TW_MT_SLA_ACK)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//返回值:	1表示成功,0表示失败
uchar twi_to_read(void)
{
	TWDR=TWAR+1;
	TWCR = (1<<TWINT) | (1<<TWEN);
	while (!(TWCR & (1<<TWINT)));
	if((TWSR & 0xf8)==TW_MR_SLA_ACK )
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_send(uchar data)
{
	TWDR=data;
	TWCR = (1<<TWINT) | (1<<TWEN);
	while (!(TWCR & (1<<TWINT)));
	if ((TWSR & 0xF8) ==TW_MT_DATA_ACK)
	{
		return 1;
	}
	else if ((TWSR & 0xF8) ==TW_MT_DATA_NACK)
	{
		return 2;
	}
	else
	{
		return 0;
	}
}

//返回值: 0表示失败,1表示接到ACK,2表示接NOT ACK
uchar twi_receive(void)
{
	TWCR = (1<<TWINT) | (1<<TWEN);
	while (!(TWCR & (1<<TWINT)));
	a=TWDR;
	if ((TWSR & 0xF8) ==TW_MR_DATA_ACK)
	{
		return 1;
	}
	else if ((TWSR & 0xF8) ==TW_MR_DATA_NACK)
	{
		return 2;
	}
	else
	{
		return 0;
	}
}


void twi_write_8(uchar adress,uchar com)
{
	while(!twi_start());
	while(!twi_to_write());
	while(!twi_send(adress));
	while(!twi_send(com));
	twi_stop();
}


void twi_read_8(uchar adress)
{	
	while(!twi_start());
	while(!twi_to_write());
	while(!twi_send(adress));
	while(!twi_start());
	while(!twi_to_read());
	while(!twi_receive());
	twi_stop();
}


//初始化
void init_mma7455(void)
{	
	twi_write_8(0x16,0x45);//2G,测量
	twi_write_8(0x18,0x80);	
	twi_write_8(0x10,74);	//X校
	twi_write_8(0x12,110);//Y校
	twi_write_8(0x14,98);//Z校
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -