📄 iic._c
字号:
/*****************************************************************
* 文件名: IIC.c
* 版本号:
* 创作日期: 2005.7.7
* 作者: fengzm
* 功能说明: IIC数据传输
* 其它说明: 使用AVR单片机Atmega48, 晶振:8Mhz
注意:发送START信号之后软件不要清零TWCR的"TWSTA"位。
*****************************************************************/
/*****************************************************************
* 修改日期: 2005.7.8
* 修改人: wangzq
* 修改原因: 格式调整
说明:
FirstData = 0; IicData = 待发数据;START_IIC();开始发送数据。
FirstData == 0xff 表示发送结束。
*******************************************************************/
//包含文件
#include "IIC.h"
// TWI initialize
// bit rate:32,prescal:1,rate:100Khz;
void twi_init(void)
{
TWCR = 0x00; //disable twi
TWBR = 0x20; //set bit rate equal 32
TWSR = 0x00; //set prescale clock/1
TWAR = 0x00; //set slave address
TWCR = 0x85; //enable twi
}
#pragma interrupt_handler twi_isr:25
void twi_isr(void)
{
byte IicTwsr;
IicTwsr = TWSR & 0xF8;
switch (IicTwsr)
{
case 0x08:
TWDR = 0x58; //发送命令;
START_IIC(); //开始发送
g_FirstData = 0;
break;
case 0x18:
case 0x20:
if (g_FirstData==0)
{
TWDR=0x00; //发送命令;
START_IIC(); //开始发送
g_FirstData=1;
}
break;
case 0x28:
case 0x30:
if (g_FirstData==2)
{
TWCR |= 0x10; //发出停止位,停止发送;
g_FirstData = 0xff; //发送完成;
}
if (g_FirstData==1)
{
TWDR = g_IicData; //发送数据;
START_IIC(); //开始发送
g_FirstData=2;
}
break;
default:
TWCR |= 0x10; //发出停止位,停止发送;
g_FirstData = 0xff; //发送完成;
break;
}//End switch
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -