- 打卡等级:以坛为家II
- 打卡总天数:443
- 最近打卡:2025-05-09 10:10:53
已绑定手机
金牌会员
- 积分
- 1619
|
发表于 2024-6-6 21:43:49
|
显示全部楼层
自学开天斧第11课:
学习内容:1、EEPROM
学习简介:EEPROM,掉电不丢失存储器,可存储重要数据,STC8H8K64U可将内部多余Flash空间设置通过isp/iap设为EEPROM,本次将介绍isp设置。
学习重点:1、EEPROM擦除操作按扇区为单位,一个扇区为512字节。
2、写入操作只能将1写为0,不能将0写为1.
3、EEPROM起始地址为0x0000.
实验项目:创建四个变量,分别对应不同数据,将它们依次存入EEPROM的四个字节中并读取,从P2口LED显示出来。
实验重点:1、本次使用了STC8H8K64U的EEPROM库函数。
2、烧录两次代码,第一次为以下代码,第二次将擦除和写入环节注释或删除再次烧录。
3、STC-ISP需要配置,取消“下次下载程序时擦除用户EEPROM区”勾选选项,取消“清除EEPROM缓冲区”勾选选项
程序代码:
#include <STC8H.H>
#include <intrins.h>
#include "EEPROM.h"
#define MAIN_Fosc 24000000L
unsigned char num1 = 0x03; // 0000 0011
unsigned char num2 = 0x0c; // 0000 1100
unsigned char num3 = 0x30; // 0011 0011
unsigned char num4 = 0xc0; // 1100 0000
unsigned char num;
void main()
{
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P2 = 0xff;
P3 |= 0x3c;
P_SW2 |= 0x80;
EEPROM_SectorErase(0x0000);
EEPROM_write_n(0x0000+0,&num1,1);
EEPROM_write_n(0x0000+1,&num2,1);
EEPROM_write_n(0x0000+2,&num3,1);
EEPROM_write_n(0x0000+3,&num4,1);
while(1)
{
if(P35 == 0){EEPROM_read_n(0x0000+0,&num,1);}
if(P34 == 0){EEPROM_read_n(0x0000+1,&num,1);}
if(P33 == 0){EEPROM_read_n(0x0000+2,&num,1);}
if(P32 == 0){EEPROM_read_n(0x0000+3,&num,1);}
P2 = ~num;
}
}
程序效果:四个按键控制每2个两位亮,注释掉擦除和写入函数烧录后,效果仍存在。
备注:库函数在附加文件中,也可以在论坛上方的“本地下载”中找寻相关单片机库函数。
|
|