"); //-->
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
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
PC厂商纷纷涉足电子产品市场
数控车床自动加工视频
三菱FX系列PLC教程 1 —— 可编程控制器的历史
纳芯微成功登陆香港联交所—以香港为全球化支点,开启从中国标杆到全球优选的新征程
三菱FX系列PLC教程 2 —— 可编程控制器的发展趋势
光电测距电路
三菱FX系列PLC教程 4 —— 可编程控制器的特点
调制光接收电路
三菱FX系列PLC教程 3 —— 可编程控制器的基本功能
【IEEE好文分享】AI智能体能为您做什么?
红外遥控器信号的接收和转发
ROHM首次推出用于精密目标检测的高速VCSEL光学传感器
基于8051的CF卡文件系统的实现
手机库存增加危及产业链
成本压力下的转型与机遇:2026年中国智能手机市场十大洞察
基于P89c51RD2 IAP功能的数据存取与软件升级
50kHz调频光接收电路
汇编子程序集
光信号接收电路
200-600W高功率密度电源——LOFxxx-20BxxR2
电力灾难十万火急 信息中国如何面对?
已经去掉了投票贴子查看
推荐一本开发fpga得好书
光通信接收电路
配套ACDC机壳开关电源的宽压金属滤波器——FC-LxxM系列
2026年PCIM Asia Shenzhen正式定档,连接全球电力电子产业与华南核心产业集群
汇编与C语言的精彩问答
TPU v7:谷歌对AI王座发起挑战
人工智能领域的投资已达数万亿,从当前技术中实现通用人工智能(AGI)的可能性“接近于零”
简单制胜—第四部分:高效主动均衡背后的算法