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