资源简介
使用AVR单片机的普通IO口模拟I2c总线时序。用实时时钟芯片演示例子。

代码片段和文件信息
#include
#include
#include “iic.h“
#define uchar unsigned char
#define uint unsigned int
/********************************************************************
此程序是I2C操作平台(主方式的软件平台)的底层的C子程序如发送数据
及接收数据应答位发送并提供了几个直接面对器件的操作函数,它很方便的
与用户程序连接并扩展.....
注意:函数是采用软件延时的方法产生SCL脉冲固对高晶振频率要作
一定的修改....(本例是1us机器周期即晶振频率要小于12MHZ)
********************************************************************/
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define _Nop() asm(“nop“) /*定义空指令*/
/* 常变量定义区 */
/*端口位定义*/
#define SDA PORTA_Bit1 /*模拟I2C数据传送位*/
#define SCL PORTA_Bit0 /*模拟I2C时钟控制位*/
#define SDA_pin DDRA_Bit1 /*SDA输入输出*/
#define SCL_pin DDRA_Bit0
#define SDA_in PINA_Bit1
#define iic_delay() delay_us(1) // 根据系统时钟进行调整
uchar TAB_T[]={ 0x310x060x10//秒分时
0x130x010x070x08};//日星期月年.
void delay_us( uchar us )
{
uchar dly;
while ( us -- )
{
for(dly=0;dly<8;dly++);
}
}
/*状态标志*/
uchar ack; /*应答标志位*/
/*******************************************************************
起动总线函数
函数原型: void Start_I2c();
功能: 启动I2C总线即发送I2C起始条件.
********************************************************************/
void Start()
{
SCL_pin=0;
SDA_pin=0;
SDA=1; /*发送起始条件的数据信号*/
_Nop();
SCL=1;
iic_delay();/*起始条件建立时间大于4.7us延时*/
SDA_pin=1;
SDA=0; /*发送起始信号*/
iic_delay();/* 起始条件锁定时间大于4μs*/
SCL=0; /*钳住I2C总线,准备发送或接收数据 */
SCL_pin=1;
iic_delay();
}
/*******************************************************************
结束总线函数
函数原型: void Stop_I2c();
功能: 结束I2C总线即发送I2C结束条件.
********************************************************************/
void Stop()
{
SDA=0; /*发送结束条件的数据信号*/
SDA_pin=1;
iic_delay(); /*发送结束条件的时钟信号*/
SCL_pin=0;
SCL=1;
iic_delay(); /*结束条件建立时间大于4μs*/
SDA_pin=0;
SDA=1; /*发送I2C总线结束信号*/
iic_delay();
}
/*******************************************************************
字节数据传送函数
函数原型: void SendByte(uchar c);
功能: 将数据c发送出去可以是地址也可以是数据发完后等待应答并对
此状态位进行操作.(不应答或非应答都使ack=0 假)
发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
********************************************************************/
void WriteByte(uchar c)
{
uchar BitCnt;
for(BitCnt=0;BitCnt<8;BitCnt++) /*要传送的数据长度为8位*/
{
if((c< {
SDA_pin=0;
SDA=1; /*判断发送位*/
}
else
{
SDA=0;
SDA_pin=1;
}
_Nop();
SCL_pin=0;
SCL=1; /*置时钟线为高,通知被控器开始接收数据位*/
iic_delay(); /*保证时钟高电平周期大于4μs*/
SCL=0;
SCL_pin=1;
}
iic_delay() ;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3742 2009-11-21 19:09 iic.h
文件 6647 2009-12-18 08:42 IIC.c
----------- --------- ---------- ----- ----
10389 2
- 上一篇:在线试题库系统的设计与实现
- 下一篇:stm32f103的AD7091驱动程序
相关资源
- DAS1302蜂鸣 独立按键 闹钟设定 IIC存储
- STM32 DS3231驱动.zip
- IIC proteus仿真实验
- 基于AVR的NRF24L01跳频通信程序
- STM32F030从机中断接收的iic代码,附带
- AVR_GCC程序设计基础
- 自制AVR ATmega16 JTAG2008
- STM32使用模拟IIC实现24C02读取
- AVR多功能实验箱DS1302时钟实验源码资
- GY-291 ADXL345模块资料 例程
- LED屏无线控制器的设计方案
- 0.96OLED_C51系列_IIC应答_例程
- (带有源代码)基于FPGA的模拟I2C接口
- 最全蓝牙协议规范-HFP/A2DP/AVRCP/PBAP/M
- AVR fighter win10 64位 好用版本 亲测好用
- zw_OLED-STM32F4-IIC.zip
- STM32硬件IIC主机例程以读写EEPROM为例
- stm32单片机IIC通讯采集sht20温湿度传感
- 基于IIC的OLED显示程序
- OLED程序例程(STM32_OLED(C8T6))
- stm32f103iic读取AT24XX全系eeprom
- ICCAVR v6.31a破解版+注册工具
- fpga与eeprom通信
- STM32用IIC通信实现OLED显示程序代码及
- ATTINY24A 接收IIC程序控制直流电机
- 蓝牙AVRCP1.6协议规范
- AVR单片机嵌入式系统原理与应用实践
- ATmega16(L) 中文数据手册.pdf
- 基于STM32F103控制16PWM路舵机驱动板PC
- STM8L 硬件IIC主机
评论
共有 条评论