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

📄 iic.c

📁 MEGA48单片机模拟/硬件两种方式实现TWI通讯
💻 C
字号:
/************************************************
*    文件名:iic.c                               *
*    文件功能:TWI,两线串行通信,发送及接收程序   *
*             32KHz频率,一次发送/接收4个字节    *
*             使能PWI接口要在主程序中,          *
*             空闲时为从机接收模式              *
*    使能:    TWAR = TWI_ADDR;                  *
*             TWCR = (BIT(TWEA)|BIT(TWEN));     *
*    比特率:  TWBR = 30;          //波特率      *
*             TWSR = BIT(TWPS0);  //4分频,32KHz *
*    作者:xxlxws                                *
*    日期:2007-05-29                            *
************************************************/

#include <ioavr.h>
#include <intrinsics.h>
#include "mylib.h"
#include "common.h"
#include "main.h"
#include "init.h"
#include "iic.h"
#include "func.h"
#include "inter.h"

extern struct _Data  Data;

/************************************************
*    函数名:I2C_Write                           *
*    入口参数:无                                *
*    出口参数:无                                *
*    作者:xxlxws                                *
*    日期:2007-05-29                            *
*    函数功能:I2C写4个字节到从机地址(TWI_ADDR)  *
************************************************/
void I2C_Write(void)
{
  uint8 i;
  TWBR = 30;                                      /*波特率*/
  TWSR = BIT(TWPS0);                              /*4分频,32KHz*/

  I2C_Start();                                    /*发送启始信号*/
  I2C_Wait();                                     /*等待应答*/
  I2C_SendByte(TWI_ADDR);                         /*发送从机地址*/
  I2C_Wait();
  for(i=0; i<4; i++)
  {
    I2C_SendByte(Data.Write[i]);                  /*发送4个字节数据*/
    I2C_Wait();
  }
  I2C_Stop();                                     /*发送停止位*/

  TWBR = 0;                                       /*清波特率,转为从机接收模式*/
  TWSR = 0;
  return;
}

/************************************************
*    函数名:I2C_Read                            *
*    入口参数:无                                *
*    出口参数:无                                *
*    作者:xxlxws                                *
*    日期:2007-05-29                            *
*    函数功能:I2C读4个字节                      *
************************************************/
void I2C_Read(void)
{
  uint8 i;
  I2C_RcvAckByte();                               /*从机被寻址应答*/
  for(i=0; i<4; i++)
  {
    I2C_Wait();
    Data.Read[i] = TWDR;                          /*接收信号并给应答位*/
    I2C_RcvAckByte();
  }
  I2C_Wait();                                     /*等待停止位*/
  I2C_RcvAckByte();
  return;
}

⌨️ 快捷键说明

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