📄 twi.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 + -