在本教程中,我们将学习使用PIC16F877A单片机中的EEPROM保存数据有多么容易。在大多数实时项目中,我们可能必须保存一些即使关闭电源也不应该擦除的数据。这听起来像一个复杂的过程,但是在XC8编译器的帮助下,只需使用一行代码即可完成此任务。如果数据以兆字节为单位,则可以连接SD卡等存储设备并将这些数据存储在其中。但是,如果数据很小,我们可以避免繁琐的工作,我们可以简单地使用PIC微控制器中的EEPROM保存我们的数据,并在需要时随时检索它们。
本PIC EEPROM教程是PIC微控制器教程序列的一部分,在该序列中,我们从一个非常基础的层次开始。如果您还没有学习过以前的教程,那么最好现在看看它们,因为本教程假定您熟悉LCD与PIC微控制器的接口以及将ADC与PIC微控制器配合使用。
PIC16F877A中的EEPROM:
EEPROM代表“电子可擦可编程只读存储器”。顾名思义,它是PIC微控制器内部的一个存储器,我们可以通过对其进行编程来写入/读取数据。仅当程序中提及这样做时,保存在其中的数据才会被删除。EEPROM中可用的存储空间量因每个微控制器而异。详情将照常在数据表中给出。在我们的PIC16F877A情况下,可用空间为256字节,如其规格数据表中所述。现在让我们看看如何通过简单的实验设置使用这256个字节读取/写入数据。
电路图和说明:
该项目的电路图如上所示。我们已经连接了一个LCD显示器,以可视化方式保存和检索数据。常规电位计连接到AN4 Analog通道,因此输入可变电压,该可变电压将用作要保存在EEPROM中的数据。我们还使用了RB0上的按钮,当按下该按钮时,来自模拟通道的数据将保存在EEPROM中。
该连接可以在面包板上进行。PIC单片机的引脚排列如下表所示。
序号 |
针号 |
引脚名称 |
连接到 |
1个 |
21 |
RD2 |
LCD的RS |
2 |
22 |
RD3 |
LCD的E |
3 |
27 |
RD4 |
LCD D4 |
4 |
28 |
RD5 |
LCD D5 |
5 |
29 |
RD6 |
LCD D6 |
6 |
30 |
RD7 |
LCD D7 |
7 |
33 |
RBO / INT |
按钮 |
8 |
7 |
AN4 |
电位器 |
使用PIC EEPROM的仿真:
该项目还涉及使用Proteus设计的模拟,通过它我们可以在没有任何硬件的情况下模拟项目的工作。本教程的末尾提供了用于此模拟的程序。您可以从这里简单地使用Hex文件并模拟整个过程。
在仿真过程中,您可以在LCD屏幕上显示当前ADC值和保存在EEPROM中的数据。要将ADC的当前值保存到EEPROM中,只需按下连接到RB0的开关,它将被保存。模拟快照如下所示。
为EEPROM编程PIC:
本教程的完整代码在本教程的结尾给出。在我们的程序中,我们必须从ADC模块读取值,并且当按下按钮时,我们必须将该值保存在EEPROM中。由于我们已经了解了ADC和LCD接口,因此我将进一步说明用于保存和检索EEPROM中数据的代码。
根据数据表,“这些器件具有4或8K字的程序闪存,PIC16F877A的地址范围为0000h至1FFFh”。这意味着每个EEPROM存储空间都有一个可访问的地址,在我们的MCU中,该地址从0000h到1FFFh开始。
要将数据保存在特定的EEPROM地址中,只需使用以下行。
eeprom_write(0,adc);
“ adc”是整数类型的变量,其中存在要保存的数据。而“ 0”是保存我们的数据的EEPROM的地址。XC8编译器提供了语法“ eeprom_write”,因此编译器将自动处理寄存器。
要检索已经存储在EEPROM中的数据并将其保存到变量中,可以使用以下代码行。
Sadc =(int)eeprom_read(0);
在此,“ Sadc”是将保存来自EEPROM的数据的变量。“ 0”是我们从中检索数据的EEPROM的地址。XC8编译器提供语法“ eeprom_read”,因此编译器将自动处理寄存器。EEPROM中保存的数据将为十六进制类型。因此,我们通过在语法之前加上(int)前缀将它们转换为整数类型。
加工:
一旦我们了解了代码的工作原理并准备好了硬件,就可以测试代码。将代码上载到PIC单片机并启动设置。如果一切正常,那么您应该会在LCD上看到当前的ADC值。现在,您可以按按钮将ADC值保存到EEPROM。现在,您可以通过关闭整个系统然后再次打开来检查是否保存了该值。开机后,您应该在LCD屏幕上看到以前保存的值。
下面的视频显示了该项目使用PIC单片机EEPROM的全部工作。希望您理解本教程并喜欢它。如果您有任何疑问,可以将其写在下面的评论部分或发布在我们的论坛上。