资源简介
使用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驱动程序
相关资源
- pic io口模拟iic的mcp7940代码
- Atmega16 串口程序
- 基于STM32的 ADXL345三轴测量角度 软件
- 基于AVR的ucos-ii的移植
- AVR ATMEGA16 SPI双机通信的PROTEUS仿真 双
- linux下使用IIC总线读写EEPROM
- arduino_LiquidCrystal_I2C库及proteus仿真LC
- 用stm32以软件IIC方式驱动1602 解压密码
- FlashWavRecorder(eguid修改版).zip
- AVR_PQ1A.H
- 基于Atmega16湿度传感器源代码
- STM32 IIC软件模拟读写24C02
- ucos-ii实时嵌入式操作系统在AVR+mega系
- RTC 8025T IIC驱动代码
- stm32 完整IIC通讯代码,三轴加速度计
- STM32F4读写SD2405实时时钟程序
- 软件模拟USB AVRUSB
- arduino avrdude 5.11.1 for Windows with JesseJ
- PIC单片机 IIC通信 proteus仿真文件图
- 力天电子AVR源代码
- CC2530-ADXL345 IIC通信
- CC2530-HMC5883L通过I2C通信
- i2c的verilog实现
- 智能频率计的设计与制作(AVR)prot
- STM32+SHT30(DS18B20)+0.96寸OLED(IIC)的
- Avrdudess单片机工具官方
- STM32F103通过模拟IIC读取LIS3DH 解析数据
- 软件模拟IIC主从机
- IIC总线读写AT24C02BEEPROM源程序 有详细
- 关于avr单片机红外遥控解码的程序
评论
共有 条评论