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

📄 twi._c

📁 avr 单片机twi源程序 功能:实现TWI主从机通讯.
💻 _C
字号:

#include "config.h"

//TWI master initialize
// bit rate:100
void twi_master_init(void)
{
 TWCR= 0x00; //disable twi
 TWBR= 0x64; //set bit rate
 TWSR= 0x00; //set prescale
 TWAR= 0x00; //set slave address
 TWCR= 0x04; //enable twi
}

//TWI slave initialize
// bit rate:100
void twi_slave_init(uint8 add)
{
 TWCR= 0x00; //disable twi
 TWBR= 0x64; //set bit rate
 TWSR= 0x00; //set prescale
 TWAR= (add<<1); //set slave address 从机地址为 0x01
 TWCR= (1<<TWEN)|(1<<TWEA)|(1<<TWIE); //enable twi
 //TWEN必须置位以使能TWI接口。TWEA也要置位以使主机寻址到自己(从机地址或广播) 时返回确认信息ACK
}

//总线上起动开始条件
void i2c_start(void)
{
	TWCR= (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
   	while (!(TWCR & (1<<TWINT))); //等待START 信号成功发送
}

//把一个字节数据输入器件, 返回TWI状态
//发送地址,r_w:1为读,0为写
uint8 i2c_write_addr(uint8 addr,uint8 r_w)
{
 	if(r_w)
	{
	 TWDR = addr|r_w;     //RW 为1:读操作
	}
	else
	{
	TWDR = addr & 0xFE;   // RW 为0: 写操作
	} 

   	TWCR = (1<<TWINT)|(1<<TWEN); 
   	while (!(TWCR & (1<<TWINT)));
   	_NOP();
   	return(TWSR&0b11111000); //TWSR高五位为I2C工作状态。
}

//把一个字节数据输入器件, 返回TWI状态
//发送数据
uint8 i2c_write_data(uint8 data)
{
	TWDR = data;
   	TWCR = (1<<TWINT)|(1<<TWEN); 
   	while (!(TWCR & (1<<TWINT)));
   	_NOP();
   	return(TWSR&0b11111000); //TWSR高五位为I2C工作状态。
}


//从器件读出一个字节
uint8 i2c_read(void)
{
   	TWCR = (1<<TWINT)|(1<<TWEA)|(1<<TWEN); 
	Twi_NoAcK();
	while (!(TWCR & (1<<TWINT)));
   	return(TWDR);
}

//总线上起动停止条件 
void i2c_stop(void) 
{ 
   TWCR = (1<<TWINT)|(1<<TWSTO)|(1<<TWEN); 
}

//操作步骤: 启动,发送地址,发送数据,关闭总线
void i2c_maste_transt(uint8 addr, uint8 data)
{
 i2c_start();
 
 if(i2c_write_addr(addr, 0)==TW_MT_SLA_ACK) //发送地址成功并收到ACK
 {
  i2c_write_data(data);
 }
 i2c_stop();
}
//操作步骤,启动,发送地址,读数据,关闭总线
uint8 i2c_maste_read(uint8 addr)
{
  uint8 tmp=0; 
  i2c_start();
  if(i2c_write_addr(addr, 1)==TW_MR_SLA_ACK) //发送地址成功并收到ACK
  {
   tmp=i2c_read();
  }
  i2c_stop();
  return tmp;
}


#if TWI_MOD==0 //从机模式
#pragma interrupt_handler twi_isr:18
void twi_isr(void)
{
 //twi event
}
#endif

⌨️ 快捷键说明

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