单片机为何外挂EEPROM
时间: 2024-03-22 09:33:54 浏览: 23
单片机外挂EEPROM的原因有以下几点:
1. EEPROM擦写次数和保存时长远大于FLASH。EEPROM可以进行多次擦写和写入操作,而且数据可以长期保存,这使得它非常适合存储需要频繁修改的参数或配置信息。
2. EEPROM更贵。相比于FLASH存储器,EEPROM的成本更高。因此,为了降低成本,一些单片机在内部集成了一小段EEPROM,而将主要的存储器容量用于FLASH。
3. 单片机提供了片上EEPROM。现在的许多单片机都提供了片上EEPROM,这使得外挂EEPROM变得不再必要。片上EEPROM具有更快的访问速度和更低的功耗,同时也减少了外部电路的复杂性。
因此,单片机外挂EEPROM的目的是为了满足对于频繁修改的参数或配置信息的存储需求,并且在成本和性能方面做出了平衡。
相关问题
pic单片机c语言写入eeprom程序
以下是一个简单的PIC单片机C语言写入内部EEPROM的代码:
```
#include <xc.h>
#define _XTAL_FREQ 4000000 // 设置CPU频率
// 定义EEPROM写入函数
void eeprom_write(unsigned char address, unsigned char data)
{
EEADR = address; // 设置EEPROM地址
EEDATA = data; // 设置要写入的数据
EECON1bits.EEPGD = 0; // 选择EEPROM数据存储器
EECON1bits.WREN = 1; // 允许EEPROM写入
INTCONbits.GIE = 0; // 禁止全局中断
EECON2 = 0x55; // 写入特定序列
EECON2 = 0xAA;
EECON1bits.WR = 1; // 执行写入操作
while(EECON1bits.WR); // 等待写入完成
EECON1bits.WREN = 0; // 禁止EEPROM写入
INTCONbits.GIE = 1; // 允许全局中断
}
void main(void)
{
eeprom_write(0x00, 0x55); // 将0x55写入EEPROM地址0x00
while(1)
{
// 你的程序
}
}
```
这个代码中,我们首先定义了CPU的频率,然后定义了一个EEPROM写入函数`eeprom_write`,该函数接收两个参数,即要写入的EEPROM地址和要写入的数据。
在`eeprom_write`函数中,我们首先设置EEPROM地址和要写入的数据,然后允许EEPROM写入,并禁止全局中断。接着,我们写入特定的序列,执行写入操作,并等待写入完成。最后,我们禁止EEPROM写入,并允许全局中断。
在`main`函数中,我们调用了`eeprom_write`函数,将0x55写入EEPROM地址为0x00的位置。
需要注意的是,上述代码仅适用于PIC单片机内置EEPROM,如果需要写入外部EEPROM,则需要根据具体的芯片手册进行修改。
pic单片机c语言清除eeprom程序
以下是PIC单片机使用C语言清除EEPROM的程序示例:
```c
#include <xc.h>
#pragma config FOSC = INTOSCIO // 内部振荡器选项
#pragma config WDTE = OFF // 禁用看门狗定时器
#pragma config PWRTE = OFF // 电源开启延迟选项
#pragma config MCLRE = OFF // MCLR 引脚功能选项
#pragma config CP = OFF // 代码保护选项
#pragma config LVP = OFF // 低电压编程选项
void main() {
unsigned char i;
OSCCON = 0x60; // 内部振荡器频率 4 MHz
TRISB = 0x00; // 将 B 端口设为输出
// 清除 EEPROM
for (i=0; i<64; i++) {
EEADR = i; // 设置 EEPROM 地址
EEDATA = 0x00; // 设置要写入的数据
EECON1bits.EEPGD = 0; // 选择 EEPROM 数据存储器
EECON1bits.CFGS = 0; // 选择 EEPROM 数据存储器
EECON1bits.WREN = 1; // 允许写入 EEPROM
INTCONbits.GIE = 0; // 关闭全局中断
EECON2 = 0x55; // EEPROM 写入序列
EECON2 = 0xAA;
EECON1bits.WR = 1; // 开始写入 EEPROM
INTCONbits.GIE = 1; // 开启全局中断
while (EECON1bits.WR); // 等待 EEPROM 写入结束
EECON1bits.WREN = 0; // 禁止写入 EEPROM
}
// 程序结束
while(1);
}
```
这个程序使用了 PIC16F628A 的内部振荡器,将 B 端口设为输出,然后通过循环将 EEPROM 的每个地址写入数值 0x00。在写入数据之前,需要先设置 EEPROM 地址、数据和写入控制寄存器。写入时需要禁止全局中断,然后按照 EEPROM 写入序列写入数据。最后等待 EEPROM 写入结束,禁止写入 EEPROM。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)