历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2018年08月12日 | 单片机模拟IIC时序读写24C02

2018-08-12 来源:eefocus

一、什么是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就分高低地址,要根据实际应用的芯片参考相关的芯片数据手册,查看访问流程。


推荐阅读

史海拾趣

广州基安彼(GMB)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐中不可或缺的重要设备。从广义上讲,机顶盒是指任何能与电视机连接的网络终端设备,它不仅是传统电视信号的接收与转换装置,更是连接电视与互联网的桥梁。

机顶盒的核心功能在于接收并处理来自各种传输介质的数字信号,包括有线电视、卫星广播、地面广播以及宽带网络等,然后将这些信号转换成电视机能够识别的视频和音频格式。这一过程涉及信号的接收、解码和显示三大环节,确保了用户能够享受到高清乃至超高清的电视节目。

随着技术的不断进步,机顶盒的功能日益丰富。除了基本的电视播放功能外,现代机顶盒还具备了网络交互能力,支持在线购物、浏览网页、观看网络视频、玩游戏等多种应用。此外,一些先进的机顶盒还集成了人工智能技术,实现了语音助手、智能推荐等便捷功能,极大地提升了用户体验。

总的来说,机顶盒作为家庭娱乐的重要组成部分,不仅丰富了人们的观看选择,还通过其强大的网络交互能力,为用户提供了更为广泛的内容和娱乐体验。随着技术的不断升级和市场需求的不断变化,机顶盒的未来发展将更加值得期待。

极海半导体(Geehy)公司的发展小趣事

机顶盒,这一在现代家庭娱乐中占据重要地位的设备,全称为数字视频变换盒,它不仅是连接电视机与外部信号源的桥梁,更是数字电视技术与互联网融合创新的结晶。从广义上讲,机顶盒泛指所有与电视机连接的网络终端设备,它们能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字信号,并将其转换为适合电视播放的格式。

从功能划分上,机顶盒可分为数字机顶盒和网络机顶盒两大类。数字机顶盒主要负责数模转换,使模拟电视机也能收看数字电视节目;而网络机顶盒则进一步融入了互联网功能,提供更为丰富的互动娱乐体验,如在线视频、网络购物、社交媒体浏览等。近年来,随着技术的发展,网络机顶盒不断升级,支持高清、超高清视频播放,并集成人工智能技术,实现语音控制、智能推荐等功能,为用户带来更为便捷、智能的观影体验。

在技术层面,机顶盒的发展深受高清、超高清、云计算、边缘计算以及5G等新兴技术的推动。这些技术的应用不仅提升了机顶盒的性能,还为其内容的创新提供了强有力的支持。同时,随着市场竞争的加剧,机顶盒厂商不断优化产品设计,提升用户体验,以满足用户对高质量娱乐内容日益增长的需求。

综上所述,机顶盒作为家庭娱乐的重要组成部分,正通过技术的不断创新和市场的持续发展,为用户提供更加丰富、便捷、智能的观影体验。

ABL Heatsink公司的发展小趣事

随着公司规模的不断扩大,ABL Heatsink开始重视品牌建设和市场推广。公司加大了在广告、展会等方面的投入,提升了品牌知名度。同时,ABL Heatsink还积极参与行业交流活动,与同行分享经验和技术,进一步巩固了公司的行业地位。

Bivar公司的发展小趣事

在电子行业的竞争中,Bivar公司意识到单打独斗难以取得长久的成功。因此,公司积极寻求与其他企业的合作机会,共同开发新产品、拓展市场。通过与上下游企业的紧密合作,Bivar不仅降低了成本、提高了效率,还获得了更多的资源和支持,进一步巩固了市场地位。

力芯微(ETEK)公司的发展小趣事

力芯微公司在数字信号处理器领域拥有丰富的经验和深厚的技术积累,是行业内领先的企业之一。公司拥有一支高素质的研发团队,不断推进技术创新和产品升级。通过持续的研发投入和技术创新,力芯微在数字信号处理器领域保持了领先地位,并赢得了客户的广泛认可。

Holy Stone公司的发展小趣事

近年来,Holy Stone不断加大在技术研发和产品创新方面的投入。公司致力于研发适用于节能产品应用所需的被动元件,帮助客户提升产品能源转换效率。在全球汽车电子化发展的背景下,Holy Stone正式跨入车用电子供应链,以提供优质元件的能力协助汽车电子达到最佳数位化。这些技术创新不仅推动了公司产品的升级换代,还为公司开拓了新的市场领域和增长点。

以上五个故事展示了Holy Stone公司在电子行业中的发展历程和成就,每个故事都体现了公司在不同方面的努力和成果。

问答坊 | AI 解惑

基于状态机/流水线技术的3DES算法及FPGA设计

介绍了3DES加密算法的原理并详尽描述了该算法的FPGA设计实现。采用了状态机和流水线技术,使得在面积和速度上达到最佳优化;添加了输入和输出接口的设计以增强该算法应用的灵活性。各模块均用硬件描述语言实现,最终下载到FPGA芯片Stratix EP1S25F7 ...…

查看全部问答>

刚学visual studio 2005 下VC++编串口通信老是弄不通

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {                         if(COM1->Checked == true)   &nbs ...…

查看全部问答>

求助DHCPS_DEBUG的使用

想要使DHCP Server输出调试信息需要定义DHCPS_DEBUG,但是在dhcp.h、dhcps.h、dhcpsLib.h、ioLib.h中\"#define DHCPS_DEBUG\"后重新编译镜像,系统启动后仍无调试信息输出,DHCP Server已经在运行。 另外Server对Client发出的DHCP DISCOVER请求也 ...…

查看全部问答>

请教,关于如何让mosfet 工作在放大区

我使用一p-channel mosfet(最大电流16A). Vs=Vcc, d极经负载10欧姆到地,无其他元件。Vg 从Vcc 到0变化,整个过程中,mosfet似乎只有off(0v),on(Vcc) 两种状态,没有看到有线性放大区。 请问,是不是我的电路本身设计有问题,或是参数不对。 ...…

查看全部问答>

用线程解决网络断开重连的问题

网络断开重连-------线程   网络断开后重连的问题,可以使用线程去重连,即创建一个线程专门负责去建立连接,如果连接断开,则由这个线程去重新连接,连接完成后,这个线程则会阻塞(休眠)。        ...…

查看全部问答>

机房监控系统

深圳市佳创达科技有限公司长沙分公司是国内同行业中的“机房维护大师”,致力于机房动力设备及 环境 ,图像集中监控管理系统,和各类空调机监控产品的开发,生产,销售为一体的科技型企业.主营机房动 力环境集中监控系统. 公司拥有了一支高素质 ...…

查看全部问答>

C语言二维字符数组使用的误区

误区:在C语言的教学中,发现很多学员老出现这个问题,在定义字符二维数组上,这样定义char buf[][50]={0};后面使用buf[0],buf[1]....总觉得有无穷无尽可以使用。 调试无果:一开始,学员用的没有问题,等项目代码多了,系统变大了,就出现些莫名 ...…

查看全部问答>

FIR滤波问题

void fir_filter(void) {         int i,j;         float sum;         float x1[932];         float h[31]={ 0.01492972,0.01096342,0.01458647,0.0186, ...…

查看全部问答>

换一块树莓派B+,交换阵容超乎你想象!

还是我 强大阵容请看下表: 1.STM32F429探索套件。 2.志峰STM32F107。 3.新塘NUC472。 4.NUC240带can总线的板子。 5.瑞萨R7F080C212套件。 6.ZN_X STM32F103板子。 7.安富莱STM32 V2版。8.AMS NFC套件。 9.友善之臂Tiny2451 10.PPTv盒子 ...…

查看全部问答>