当前位置:首页 > 单片机 > 单片机
[导读]/****************************************************************************//****************************************************************************//* MCS-51单片机模拟I2C软件包(V1.0)*//* 文件名

/****************************************************************************/
/****************************************************************************/
/* MCS-51单片机模拟I2C软件包(V1.0)*/
/* 文件名:VI2C_C51.C */
/* 版 本:Version 1.0 */
/* 描 述:iic标准代码 */
/* 作 者:马志明 */
/* 函 数: */
/* iic_wait */
/* iic_start */
/* iic_stop */
/* iic_ack */
/* iic_no_ack */
/* iic_wait_ack */
/* iic_send_byte */
/* iic_receive_byte */
/* 功能说明:本模拟I2C软件包包含了I2C操作的底层函数,如发送数据及接收*/
/*数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的与用户程*/
/*序连接并扩展..... */
/* 注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作 一定的*/
/*修改....(本软件包是1us机器周期,即晶振频率要小于12MHZ)*/
/* 总线时序符合I2C标准模式,100Kbit/S。 */ */
/* 历史记录: */
/* 马志明 2008-01-18 Creat Inital version. (Version 1.0) */
/****************************************************************************/
/****************************************************************************/
#include
#include
#include

typedef unsigned char u_char;
typedef unsigned int u_int;

sbit SDA = P0^5; /* iic数据传送位 定义数据串行线所在口 使用时根据自己的需要来定义*/
sbit SCL = P0^4; /* iic时钟控制位 定义串行时钟线所在口 使用时根据自己的需要来定义*/

/* 函数声明 */
void iic_wait(void); /* iic延时 */
void iic_start(void); /* 开启iic总线 */
void iic_stop(void); /* 关闭iic总线 */
void iic_ack(void); /* 发送ACK信号 */
void iic_no_ack(void); /* 发送NOACK信号 */
bit iic_wait_ack(void); /* 等待ACK信号 */
void iic_send_byte(u_char demand); /* MCU向iic设备发送一个字节 */
u_char iic_receive_byte(void); /* MCU从iic设备接收一个字节 */
/* 声明结束 */

/* iic延时 */
void iic_wait(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
}

/*******************************************************************
起动总线函数
函数原型: void iic_start(void);
功能: 启动I2C总线,即发送I2C起始条件.
********************************************************************/
/* 开启iic总线 */
void iic_start(void)
{
SDA = 1; //发送起始条件的数据信号
SCL = 1;
iic_wait(); //起始条件建立时间大于4.7us,延时,数据线保持高,时钟线从高到低一次跳变,IIC开始通信
SDA = 0; //发送起始信号
iic_wait(); //起始条件锁定时间大于4μs
SCL = 0; //钳住I2C总线,准备发送或接收数据
}
/*******************************************************************
结束总线函数
函数原型: void iic_stop(void);
功能: 结束I2C总线,即发送I2C结束条件.
********************************************************************/
/* 关闭iic总线 */
void iic_stop(void)
{
SDA=0; //发送结束条件的数据信号
SCL=0;
iic_wait();
SCL=1; //数据线保持低,时钟线从低到高一次跳变,IIC通信停止
iic_wait(); //结束条件建立时间大于4μs
SDA=1; //发送I2C总线结束信号
}
/********************************************************************
应答子函数
函数原型: void iic_ack(void);
功能: 主控器进行应答信号
********************************************************************/
/* 发送ACK信号 */
void iic_ack(void)
{
SDA=0;//在此发出应答信号
iic_wait(); //数据线保持低,时钟线发生一次从高到低的跳变,发送一个应答信号
SCL=1;
iic_wait();//时钟低电平周期大于4μs
SCL=0;//清时钟线,钳住I2C总线以便继续接收
}
/********************************************************************
非应答子函数
函数原型: void iic_ack(void);
功能: 主控器进行非应答信号
********************************************************************/

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

下面小编为大家整理了电机驱动电路原理,你值得收藏!

关键字: 电机驱动电路原理 电源电路 iic

派瑞特旗下品牌,数字电视与广播接收器件的领先提供商迪康,将于2月23-25日出席在深圳举行的2012年国际集成电路研讨会暨展览会(IIC-China),展出用于数字电视与广播的可编程接收芯片Octop

关键字: 迪康 iic octop

明星涉及区块链早已不是什么新鲜事:韩国顶级女团T-ara在韩国发布了T-ara币;韩流明星权志龙也在自己的演唱会售票通道上开启了区块链token兑换区。而国内明星中,汪峰也在节目后台大谈区块链技

关键字: iic 区块链

IIC-BUS(Inter-IntegratedCircuit Bus)最早是由PHilip半导体(现在被NXP收购)于1982年开发。主要是用来方便微控制器与外围器件的数据传输。它是一种半双工,由SDA(数据)和SCL...

关键字: iic 梦源科技 iic-bus

IICvs SPI         现今,在低端数字通信应用领域,我们随处可见IIC (Inter-Integrated Circuit) 和 SPI (Serial Peripheral Inter

关键字: iic 总线协议

IIC(Inter-Integrated Circuit,I2C)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微处理器及其外围设备,它的最主要优点是简单和有效。它只需要数据线SDA和时钟线SCL,就能够实...

关键字: iic 寄存器 数据

LPC2124有一个标准的I2C总线接口,可配置为主机或从机,总线时钟速率可调整,最高可支持400KHZ总线速率。使用I2C总线时,要将相应得引脚设置连接SCL和SDA,并且总线上要上拉电阻,阻值为1~10K&Omega...

关键字: iic 总线应用

/************************************** PCF8563时钟程序 * * 文 件 名:1602_8563.c * * 版 本:V22.02 * * 主控芯片:Mega16L...

关键字: iccavr iic pcf8563 时钟程序

前面讲过两个常用的串口,UART和SPI,这次这次讲解一下另一个常用的串口:IIC(I2C)通信科普IIC:一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到...

关键字: iic stm8s 主机通信

IIC器件是一种介于高速和低速之间的嵌入式外围设备,其实总体来说,它的速度算是比较慢的。通常情况下,速度慢的器件意味着更多的等待,这对于精益求精的嵌入式工程师来说,简直就是一个恶梦,低速器件的存取数据实

关键字: iic STM32 单片机 硬件编程- 查询等待方式
关闭