MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动能力在各个领域得到广泛的应用。在需要储存较大数量数据的控
MICROCHIP公司的PIC16系列单片机以其精简的指令和较强的端口驱动才能在各个范畴得到广泛的运用。在需求贮存较大数量数据的操控范畴,24C02能够处理PIC16C8×系列单片机片内EEPROM缺乏的问题,用以保存比如用户设置参数、收集到的数据等。
因为部分PIC单片机不具备I2C总线接口,在运用时有必要用软件法加以处理。
在软件编制时应当严厉遵从I2C总线规矩,并留意24C02的片内读写周期时刻,调整好程序流程,以防止写不进、读不出的问题。
下面将笔者在实践工作中遇到的问题和处理的办法进行简略的介绍,期望能够给同行一些协助。
首要约好,数据由微处理器发送到24C02称“写”、“发”,反之称“读”、“收”。24C02支撑次序读写和随机读写,文中以随机读写办法为例进行介绍。
一、硬件电路(如图1所示)。
运用微处理的恣意两个通用I/O端口(图顶用RA2、RA3)作为与24C02的衔接,其间一个作为时钟SCL线,别的一个作为数据SAD线。两个端口均接22kΩ上拉电阻。
二、软件规划
首要扼要介绍一下用EEPROM的I2C总线的规矩。
初始状况时,SCL、SDA两线都为高。
当SCL为高电平时,假如SDA线下跌,认为是“开始位”。
当SCL为高电平时,假如SDA线上升,认为是“中止位”。
除此之外,在发送数据的进程中当SCL为高电平时,SDA应保持稳定。
ACK应对位指在此时钟周期内由从器材(EEPROM)把SDA拉低,表明回应。这时主器材(PIC16微处理器)的SDA口的特点应该变为输入以便检测。
1.在写数据周期应该顺次履行以下进程:
1)发“开始位”。2)发“写入代码”(8bit),1010(A1A2A3)0,其间的A1、A2、A3三位是片地址,由24C02的硬件决议,文中选用000。3)收“ACK”应对(1bit)。4)发EEPROM片内地址(即要写入EEPROM的什么方位)(8bit)。从00到FF中的恣意一个,对应EEPROM中的相应位。5)收“ACK”应对(1bit)。6)发要发送的数据(8bit),即要存储到EEPROM中的数据。7)发“中止位”。
接下来,如图2所示,进入轮询程序以便查验24C02片内写周期是否完结。假如现已完结则进入下一个字节的写操作进程。假如没有完结则持续等候,直到完结。
2.在读数据周期,顺次履行以下进程:
1)发“开始位”。2)发“写入代码”(8bit),1010(A1A2A3)0,其间A1、A2、A3三位是片地址,由24C02的硬件决议,文中选用000。3)收“ACK”应对(1bit)。4)发“EEPROM”片内地址(即要读出EEPROM的方位)(8bit)。从00到FF中的恣意一个,对应EEPROM中的相应位。5)收“ACK”应对(1bit)。6)发“开始位”(1bit)。7)发“读出代码”(8bit),1010(A1A2A3)1,其间A1、A2、A3三位是片地址,由24C02的硬件接线决议,文中选用000。8)接纳。9)发ACK应对。10)发“中止位”。
要特别留意的两个问题是:1)24C02有一个约10ms的片内写周期。在这个周期内,24C02是不对外界的操作作出反应的。2)在发送数据的进程中,要确保当SCL为高电平时,SDA保持稳定。
处理榜首个问题的常见办法有两个,其一为选用延时等候,确保在写进程中,在一个字节完结发送了中止位之后,微处理器等候满足的时刻,一般应该超越10ms,再送下一个字节,这段时刻用来等候EEPROM完结片内写周期。另一个是选用轮询的办法,判别EEPROM是否完结了片内写周期。这种办法的主导思维是,当向EEPROM发送写标志后,正常情况下,EEPROM应该有ACK应对。可是当EEPROM在进行片内写周期的时分,则不会发生这样的应对。程序据此判别,EEPROM是否完结了片内的写周期程序。假如完结,则能够持续写入下一个要写的内容,不然持续等候。
榜首种办法编程较为简略,可是会糟蹋很多的机器时刻,而且程序的延时时刻欠好确认。第二种办法的长处在于,尽管编程较为杂乱,可是较为快速,对其他的程序模块影响较少,便于完结程序的模块化规划。
关于在发送数据的进程中,要确保当SCK为高电平时,SDA有必要保持稳定,应该在程序中使用软件给予确保。
假如能够很好的处理以上两个问题,数据的写入和读出是方便快捷和牢靠的。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/261256.html