单片机模拟IIC时序读写24C02

发布者:水手谷水手最新更新时间:2018-08-12 来源: eefocus关键字:单片机  模拟IIC时序  读写24C02 手机看文章 扫描二维码
随时随地手机看文章

一、什么是IIC总线
IIC即集成电路总线,也是一种非常常用的总线是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。

注意:IIC芯片在工业上的应用也是非常重要的,与串口、SPI、CAN等总线齐名。


二、IIC总线协议简介

IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。同时为了保证数据可靠地传送,任一时刻总线只能由某一台主机控制。


在I2C总线传输过程中,将两种特定的情况定义为开始和停止条件:当SCL保持"高"时,SDA由"高"变为"低"为开始条件;当SCL保持"高"且SDA由"低"变为"高"时为停止条件。开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。且SDA线上的数据在时钟"高"期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的"高"或"低"状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。



IIC数据传输格式如下:




三、24C02芯片介绍
24C02串行E2PROM是基于IIC总线的存储器件,遵循二线制协议,由于其具有接口方便,体积小,数据掉电不丢失等特点,在仪器仪表及工业自动化控制中得到大量的应用。24C02在电路的作用主要是在掉电的情况下保存数据,具体参数不进行详细论述。详细资料请参考24C02的datasheet。

相关控制需要的时序参数如下:











四、协议时序详解


void start(void)
{
 sda=1;
 delay();
 scl=1;
 delay();
 sda=0;
 delay();
}


void stop(void)
{
 sda=0;
 delay();
 scl=1;
 delay();
 sda=1;
 delay(); 
}


void ack(void)
{
 uchar i;
 scl=1;
 delay();
 while((sda==1)&&(i<200))i++;
 scl=0;
 delay();
}


void noack(void)
{
 sda=1;
 delay();
 scl=1;
 delay();
 scl=0;
 delay();
}

void write_byte(uchar add,uchar dat)
{
 init();
 start();
 iicwr_byte(0xa0);
 ack();
 iicwr_byte(add);
 ack();
 iicwr_byte(dat);
 ack();
 stop(); 
}


uchar read_byte(uchar add)
{
 uchar a;
 init();
 start();
 iicwr_byte(0xa0);
 ack();
 iicwr_byte(add);
 ack();
 start();
 iicwr_byte(0xa1);
 ack();
 a=iicre_byte();
 noack();
 stop();
 return a; 
}
五、硬件电路设计


六、软件程序设计

设计程序,系统每开关机一次,记录一次并用数码管显示

#include

#include

#define uchar unsigned char 

#define uint unsigned int 

 

sbit sda=P1^1;

sbit scl=P1^0;

unsigned char code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

 

void iic_init(void);

void start(void);

void stop(void);

void ack(void);

void noack(void);

void iicwr_byte(uchar dat);

uchar iicre_byte(void);

void delay (void);

void init(void);

void delay1(void);

void write_byte(uchar add,uchar dat);

uchar read_byte(uchar add);

///////////////////////////////////

 

void delay1(void)

{

 uint a=30000;

 while(a--);

}

 

void delay (void)

{

 _nop_();_nop_();_nop_();_nop_();

 _nop_();_nop_();_nop_();_nop_();

}

 

void start(void)

{

 sda=1;

 delay();

 scl=1;

 delay();

 sda=0;

 delay();

}

 

void stop(void)

{

 sda=0;

 delay();

 scl=1;

 delay();

 sda=1;

 delay(); 

}

 

void ack(void)

{

 uchar i;

 scl=1;

 delay();

 while((sda==1)&&(i<200))i++;

 scl=0;

 delay();

}

 

void noack(void)

{

 sda=1;

 delay();

 scl=1;

 delay();

 scl=0;

 delay();

}

 

void iic_init(void)

{

 sda=1;

 scl=1;

}

 

void iicwr_byte(uchar dat)

{

 uchar i;

 scl=0;

 for(i=0;i<8;i++)

 {

  if(dat&0x80)

  {

   sda=1; 

  }

  else 

  {

   sda=0;

  }

  dat=dat<<1;

  delay();

  scl=1;

  delay();

  scl=0;

  delay();    

 }

 sda=1;

 delay();

}

 

uchar iicre_byte(void)

{

 uchar i;

 uchar dat;

 scl=0;

 delay();

 sda=1;

 delay();

 for(i=0;i<8;i++)

 {

  scl=1;

  delay();

  dat=dat<<1;

  if(sda)

  {

   dat++;// 

  }

  scl=0;

  delay();

 }

 return dat;  

}

 

 

void main()

{

 uchar k;

 

 iic_init();

 k=read_byte(0x11);

 k=k%10;

 P1=smg_du[k]; //测试用,静态显示几个算啦

 k++;

 write_byte(0x11,k);

 

 while(1);

}

 

void write_byte(uchar add,uchar dat)

{

 iic_init();

 start();

 iicwr_byte(0xa0);

 ack();

 iicwr_byte(add);

 ack();

 iicwr_byte(dat);

 ack();

 stop(); 

}

 

uchar read_byte(uchar add)

{

 uchar a;

 iic_init();

 start();

 iicwr_byte(0xa0);

 ack();

 iicwr_byte(add);

 ack();

 start();

 iicwr_byte(0xa1);

 ack();

 a=iicre_byte();

 noack();

 stop();

 return a; 

}


注意:并不是所有的24系列的存储芯片都适用本程序的读写流程,有些芯片有部分不同,如24C64就分高低地址,要根据实际应用的芯片参考相关的芯片数据手册,查看访问流程。


关键字:单片机  模拟IIC时序  读写24C02 引用地址:单片机模拟IIC时序读写24C02

上一篇:C51单片机定时器T0,T1的常用基本设置
下一篇:单片机控制串口通信

推荐阅读最新更新时间:2024-03-16 16:10

基于单片机设计的便携式语音环境参数测试仪
1 引言   人们健康意识和环保意识的逐渐增强使环境参数及其对身体的影响日益受到关注。然而现实生活中人们常常身处煤气、香烟、酒精等有害气体的包围之中,但因没有合适的测量仪器或因专业的测量仪器过于昂贵而不能方便地得知身边环境中的各种参数值,因而无法知晓环境参数是否会对身体或环境构成危害。这里介绍一种多功能环境测量仪的设计方法,该测量仪廉价、实用、便携,并有语音播报测量值及有害气体越限报警等多种功能。   2 总体结构与工作原理   该测量仪以凌阳16位单片机SPCE061A为控制核心,光线、温度、湿度、气体传感器将获得的环境信息量转换为模拟电信号,经A/D转换器转换为对应的数字信号后交由CPU处理;CPU实时计算测量值并将
[单片机]
基于MSP430单片机的智能数字电压表设计
  电压测量在目前电子技术中非常普遍,对仪表的精度要求和功能要求也越来越高,特别是待测信号强弱相差极大的情况下,既要保证弱信号的测量精度又要兼顾强信号的测量范围,全量程智能自动档数字电压表就成为一种必不可少的测量仪器。   1 量程自动转换电路设计   CD4051是8通道数字控制模拟电子开关,有3个二进控制输入端A、B、c和INH输入,具有低导通阻抗和很低的截止漏电流。幅值为4.5-20V的数字信号可控制峰值至20V的模拟信号。   当INH输入端="1"时,所有的通道截止。三位二进制信号选通8通道中的一通道,可连接该输入端至输出。控制关系见表1. 表1 CD4051真值表及档位关系。   量程自动转换
[单片机]
基于MSP430<font color='red'>单片机</font>的智能数字电压表设计
mcs51单片机中断请求源简介
(1)外部 中断 请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。 IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。 IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。 IT1、IE1的用途和IT0、IE0相同。 (2)内部中断请求源 TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。
[单片机]
富士通微电子推出48脚“MB95390H系列”,扩充8位MCU阵容
富士通 微电子 (上海)有限公司今日宣布在其内置闪存的高性能8位微控制器(以下简称为 单片机 ) “F2MC-8FX家族”基础上,又增加了6款内置无刷DC电机控制功能的48脚“MB95390H系列”的产品。此系列产品自2010年6月下旬开始提供样片,将于9月开始批量供货。 近年来,亚太市场上使用无刷DC电机控制的机器迅速增加,使得面向这些机器的少引脚电机控制单片机的需求也急剧上升。为应对这些需求,富士通微电子开发了“MB95390H系列”。市场上的空调、洗衣机,微波炉等家用电器、打印机以及复印机等办公设备、吹风机或电动剃须刀等个人护理产品中使用的DC 电机在系统全体的成本中占较大比例,所以一直有降低价格的期待。另一方
[工业控制]
PIC系列单片机应用的优势
1,PIC系列单片机最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。可以说PIC系列单片机从小到大阵容是非常的强大的。 2,精简指令使其执行效率大为提高。PIC系列8位CMOS单片机具有独特的RISC结构,数据总线和指令总线分离的哈佛总线(Harvard)结构,使指令具有单字长的特性,且允许指令码的位数可多于8位的数据位数,这与传统的采用CISC结构的8位单片机相比,可以达到2:1的代码压缩,速度提高4倍。 3,产品上市零等待(Zero time to market)。采用PIC的低价OTP型芯片,可使单片机在其
[单片机]
STM32单片机开发中的RTOS
很多STM32单片机初学者都是从裸机开始的,裸机确实也能开发出好的产品。但是,作为一个嵌入式软件工程师,况且用的并不是51那种低端单片机,如果只会用裸机开发产品,那肯定是不够的。 要从裸机的思维转变到RTOS(Real Time Operating System)的思维,其实需要一个过程,而且开始的一段时间会很痛苦。但过一段时间理解了一些内容,能写一些Demo之后,你会发现其实RTOS也不难。 现在FreeRTOS在CubeMX工具中可以直接配置并使用,相当方便。 为什么需要RTOS 为什么我们需要RTOS?就像最开始学C编程时,老师告诉我们,指针很重要,那时你肯定有一个大的疑问,指针到底有什么好? 心里一直犯嘀咕着:不用指针
[单片机]
全面解析STC89C52单片机的LED调光系统电路
摘要: 在场效应管关断后让LED的负极电压升高,使得LED关闭。当场效应管导通时,LED的负极电压被拉低,使得LED发光。PWM调节方式使得驱动电路更简单,降低了制造成本。 LED 的排列方式及LED 光源的规范决定着基本的驱动器要求。 LED驱动器的主要功能就是在一定的工作条件范围下限制流过LED的电流,而无论输入及输出电压如何变化。最常用的是采用变压器来进行电气隔离。下文论述了LED照明设计需要考虑的调光因素。 正是因为调光的要求所以驱动LED 面临着不少挑战,如正向电压会随着温度、电流的变化而变化,而不同个体、不同批次、不同供应商的LED 正向电压也会有差异;另外,LED 的“色点”也会随着电流及温度的变化而漂移。
[单片机]
全面解析STC89C52<font color='red'>单片机</font>的LED调光系统电路
MCS-51系列单片机在SDH系统中的应用
  摘 要: 介绍了一种采用MCS-51系列兼容的Dallas半导体公司的高速DS80C320作为核心器件实现对复杂SDH系统的管理监控方案,以及系统的软硬件设计和实现。     关键词: 单片机 同步数字序列(SDH) 准同步数字序列(SDH) 同步传递模块(STM) 分插复用器(ADM)     同步数字序列SDH(Synchronous Digital Hierarchy)是一种全新的传输网体制,自从90年代初出现以来,SDH以其各方面的优越性迅速成为通信网络的骨干网络。目前世界各国大多以SDH作为通信的骨干网络。在我国,干线网络也基本采用了SDH网络。     SDH系统与原有PDH(Plesinchr
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved