专栏中心

EEPW首页 > 专栏 > 今天整理的以前用IIC代码

今天整理的以前用IIC代码

发布人:0750long 时间:2010-03-07 来源:工程师 发布文章
今天整理的以前用IIC代码

 

 

IIC.C文件如下:

/******************************************************************
*         同翔电子
*       51&AVR单片机学习板
*       EMAIL:ming_2100@163.com
*       QQ: 306136554
*       http://shop33987716.taobao.com
*******************************************************************/

#include "AT89X52.H"
#include "main.h"
#include "IIC.h"

/*******************************************************
*函数名称:Start
*函数功能:IIC总线开始
*入口参数:无
*作    者:同翔电子
*******************************************************/
void Start()
{
 SDA=1;
 SCL=1;
 SDA=0;
 SCL=0;
}
/*******************************************************
*函数名称:Stop
*函数功能:IIC总线停止
*入口参数:无
*作    者:同翔电子
*******************************************************/
void Stop()
{
 SCL=0;
 SDA=0;
 SCL=1;
 SDA=1;
}
/*******************************************************
*函数名称:NoAck
*函数功能:IIC总线发送ACK
*入口参数:无
*作    者:同翔电子
*******************************************************/
void NoAck()
{
 SDA=1;
 SCL=1;
 SCL=0;
}
/*******************************************************
*函数名称:TestAck
*函数功能:IIC总线检测ACK
*入口参数:无
*作    者:同翔电子
*******************************************************/
bit TestAck()
{
 bit ErrorBit;
 SDA=1;
 SCL=1;
 ErrorBit=SDA;
 SCL=0;
 return(ErrorBit);
}
/*******************************************************
*函数名称:Write8Bit
*函数功能:IIC总线开始
*入口参数:无
*作    者:同翔电子
*******************************************************/
void Write8Bit(unsigned char input)
{
 unsigned char temp;
 for(temp=8;temp!=0;temp--)
 {
  SDA=(bit)(input&0x80);
  SCL=1;
  SCL=0;
  input=input<<1;
 }
}
/*******************************************************
*函数名称:IIC_Write
*函数功能:指定地址写入一个字节的数据
*入口参数:无
*作    者:同翔电子
*******************************************************/
void IIC_Write(uchar d,uchar addressL,uchar addressH)
{
 Start();
 Write8Bit(WriteDeviceAddress);
 TestAck();
 Write8Bit(addressL);
 TestAck();
#ifdef AT24C256
 Write8Bit(addressH);
 TestAck();
#else
 addressH = addressH;
#endif
 Write8Bit(d);
 TestAck();
 Stop();
 DelayMs(10);
}
/*******************************************************
*函数名称:Read8Bit
*函数功能:IIC总线读出一个字节的数据
*入口参数:无
*作    者:同翔电子
*******************************************************/
uchar Read8Bit()
{
 unsigned char temp,rbyte=0;
 for(temp=8;temp!=0;temp--)
 {
  SCL=1;
  rbyte=rbyte<<1;
  rbyte=rbyte|((unsigned char)(SDA));
  SCL=0;
 }
 return(rbyte);
}
/*******************************************************
*函数名称:IIC_Read
*函数功能:IIC总线指定地址读出一个字节的数据
*入口参数:无
*作    者:同翔电子
*******************************************************/
uchar IIC_Read(uchar addressL,uchar addressH)
{
 uchar ch;
 Start();
 Write8Bit(WriteDeviceAddress);
 TestAck();
 Write8Bit(addressL);
 TestAck();
#ifdef AT24C256
 Write8Bit(addressH);
 TestAck();
#else
 addressH = addressH;
#endif
 Start();
 Write8Bit(ReadDviceAddress);
 TestAck();
 ch=Read8Bit();
 NoAck();
 Stop();
 return(ch);
}

 

IIC.h文件如下:

#ifndef __IIC_H__
#define __IIC_H__

sbit SCL="P0"^1;
sbit SDA="P0"^2;

#define WriteDeviceAddress 0x98 //定义器件在IIC总线中的地址

#define ReadDviceAddress 0xa1
//#define AT24C256

uchar IIC_Read(uchar address,uchar addressH);
uchar Read8Bit();
void IIC_Write(uchar ch,uchar address,uchar addressH);
void Write8Bit(unsigned char input);
bit TestAck();
void NoAck();
void Stop();
void Start();


#endif

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

数控车床自动加工视频

纳芯微成功登陆香港联交所—以香港为全球化支点,开启从中国标杆到全球优选的新征程

模拟技术 2025-12-08

【IEEE好文分享】AI智能体能为您做什么?

智能计算 2025-12-08

红外遥控器信号的接收和转发

ROHM首次推出用于精密目标检测的高速VCSEL光学传感器

基于8051的CF卡文件系统的实现

成本压力下的转型与机遇:2026年中国智能手机市场十大洞察

基于P89c51RD2 IAP功能的数据存取与软件升级

汇编子程序集

200-600W高功率密度电源——LOFxxx-20BxxR2

配套ACDC机壳开关电源的宽压金属滤波器——FC-LxxM系列

2026年PCIM Asia Shenzhen正式定档,连接全球电力电子产业与华南核心产业集群

汇编与C语言的精彩问答

TPU v7:谷歌对AI王座发起挑战

智能计算 2025-12-08

人工智能领域的投资已达数万亿,从当前技术中实现通用人工智能(AGI)的可能性“接近于零”

简单制胜—第四部分:高效主动均衡背后的算法

更多 培训课堂
更多 焦点
更多 视频

技术专区