MC9S12DP512单片机写入一个字节到EEPROM中
时间: 2024-05-24 13:12:07 浏览: 12
在MC9S12DP512单片机中,要写入一个字节到EEPROM中,需要按照以下步骤进行:
1. 设置EEPROM的地址寄存器(EADR)和数据寄存器(EDR)。
例如,如果要将数据0x55写入EEPROM的地址0x1000,可以使用以下代码:
EADR = 0x1000; //设置EEPROM地址为0x1000
EDR = 0x55; //设置EEPROM数据为0x55
2. 打开EEPROM写保护位(EPROT)。
为了保护EEPROM中的数据不被意外修改,需要先打开EEPROM的写保护位。可以使用以下代码:
EPROT |= 0x80; //打开EEPROM写保护位
3. 开始写入数据。
使用EEPROM写入指令(EWT)将数据写入EEPROM中。可以使用以下代码:
EWT = 0x01; //开始写入数据
4. 等待写入完成。
在写入完成前,需要等待EEPROM内部的数据写入完成。可以使用以下代码:
while (EWT != 0) ; //等待写入完成
5. 关闭EEPROM写保护位。
在写入完成后,需要关闭EEPROM的写保护位。可以使用以下代码:
EPROT &= ~0x80; //关闭EEPROM写保护位
这样,一个字节就成功地写入了EEPROM中。
相关问题
MC9S12DP512单片机EEPROM初始化
EEPROM初始化过程:
1. 首先需要定义一个EEPROM扇区缓存数组,用于存储读取的数据。
unsigned char eeprom_sector[64];
2. 然后需要初始化EEPROM模块,设置EEPROM地址寄存器EAAR,使其指向需要读取的EEPROM地址。
void init_eeprom(void)
{
EEE = 1; // 使能EEPROM模块
EAAR = 0x8000; // 设置EEPROM地址寄存器EAAR为0x8000
}
3. 读取EEPROM数据,将读取的数据存储到缓存数组中。
void read_eeprom(void)
{
int i;
for (i = 0; i < 64; i++)
{
eeprom_sector[i] = EEDAT; // 读取EEPROM数据到缓存数组
EAAR++; // 将EEPROM地址寄存器EAAR指向下一个地址
}
}
4. 对EEPROM进行擦除操作,将擦除后的数据存储到缓存数组中。
void erase_eeprom(void)
{
int i;
EEPROT = 0x10; // 设置EEPROM保护寄存器EEPROM为0x10,使EEPROM可擦除
EEPAGE = 0x80; // 设置EEPROM页寄存器EEPAGE为0x80,选择EEPROM存储区1
EECMD = 0x04; // 发送EEPROM擦除命令
for (i = 0; i < 64; i++)
{
eeprom_sector[i] = EEDAT; // 读取EEPROM数据到缓存数组
EAAR++; // 将EEPROM地址寄存器EAAR指向下一个地址
}
}
5. 对EEPROM进行编程操作,将编程后的数据存储到缓存数组中。
void program_eeprom(void)
{
int i;
EEPROT = 0x10; // 设置EEPROM保护寄存器EEPROM为0x10,使EEPROM可编程
EEPAGE = 0x80; // 设置EEPROM页寄存器EEPAGE为0x80,选择EEPROM存储区1
for (i = 0; i < 64; i++)
{
EEDAT = eeprom_sector[i]; // 将缓存数组中的数据写入EEPROM数据寄存器EEDAT
EECMD = 0x05; // 发送EEPROM编程命令
EAAR++; // 将EEPROM地址寄存器EAAR指向下一个地址
}
}
6. 在主函数中调用EEPROM初始化、读取、擦除、编程等函数。
int main(void)
{
init_eeprom(); // 初始化EEPROM
read_eeprom(); // 读取EEPROM数据
erase_eeprom(); // 擦除EEPROM数据
program_eeprom(); // 编程EEPROM数据
return 0;
}
MC9S12DP512单片机使用EEPROM模块记录开机次数代码
#include <hidef.h> /* necessary for EnableInterrupts macro */
#include "derivative.h" /* contains declarations of the peripheral registers */
#include <stdio.h>
#define EEPROM_START_ADDRESS 0x4000
#define EEPROM_END_ADDRESS 0x4FFF
void write_eeprom(unsigned int address, unsigned char data);
unsigned char read_eeprom(unsigned int address);
void delay(unsigned int time);
void main(void) {
unsigned int count;
unsigned char data;
EnableInterrupts;
/* include your code here */
count = read_eeprom(EEPROM_START_ADDRESS);
count++; // Increase count by 1
write_eeprom(EEPROM_START_ADDRESS, count);
data = read_eeprom(EEPROM_START_ADDRESS);
printf("The number of times the system has been powered on is %d\n", data);
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
}
void write_eeprom(unsigned int address, unsigned char data) {
if (address >= EEPROM_START_ADDRESS && address <= EEPROM_END_ADDRESS) {
/* Enable EEPROM programming */
ECLKDIV = 0x08; // EEPROM clock divider, 8 MHz
ESTAT = 0x30; // EEPROM enable programming, erase, and write
/* Write to EEPROM */
EADDR = address;
EDATA = data;
ECTL |= 0x08; // EEPROM write
while (ESTAT_CBEIF == 0); // Wait for EEPROM write completion
/* Disable EEPROM programming */
ESTAT = 0x00; // EEPROM disable programming, erase, and write
}
}
unsigned char read_eeprom(unsigned int address) {
unsigned char data = 0;
if (address >= EEPROM_START_ADDRESS && address <= EEPROM_END_ADDRESS) {
/* Read from EEPROM */
EADDR = address;
ECTL |= 0x04; // EEPROM read
while (ESTAT_CCIF == 0); // Wait for EEPROM read completion
data = EDATA;
}
return data;
}
void delay(unsigned int time) {
unsigned int i;
for (i = 0; i < time; i++);
}
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)