单片机自学(5) ——1位数码管计数掉电不丢失

思路:

1、通过IAP 方式操作EEPROM, 操作变量++,写到EEPROM,达到掉电不丢失

2、STM8 208MB 2KB 数据 EEPROM存取区 地址:从4000H开始-47FFH

3、IAP:单片机程序自己改写EEPROM、存取器里面的东西、选项字节

4、ICP:基于电路更新 ,通过SWIM+STLink

5、MASS密钥访问方法

6、Flash 功能相关寄存器:状态寄存器、控制寄存器、保护寄存器(解密时)——

7、解锁EEPROM函数 unlock_EEPROM()

8、1数码管计数掉电不丢失

u8 disnum_EEPROM @0x4000;
//指定disnum_EEPROM指向0x4000地址,即EEPROM起始地址

通过FLASH_IAPSR状态寄存器

1、是否解密成功?2、是否写完?

EEPROM关注以下两个位

位6 HVOFF (高压编程),0为正在写,1写完 。  高4位 0100(已编写完)

位3 DUL 解锁标志 ,0位没解锁,1已解锁。

FLASH关注以下两个位

位1 PUL    解锁标志 ,0位没解锁,1已解锁。

u8 unlock_EEPROM(void)
{
  //1.首先写入MASS密匙以解锁EEPROM
  FLASH_DUKR=0xAE;
  FLASH_DUKR=0x56;
  //2.判断DUL位是否解锁成功
  if(FLASH_IAPSR & 0x08)     &00001000   为真返回0,解锁成功。 为假,返回1,解锁失败
    return 0;//解锁成功
  else
    return 1;//解锁失败
}
  while(unlock_EEPROM());//等待数据EEPROM区域解锁成功     0解锁成功,跳到下一行,1继续死循环等待

  if(disnum_EEPROM!=0)//如果EEPROM首地址装载数值不为0
  {
    LED=tableA[disnum_EEPROM];//显示EEPROM数值
    i=disnum_EEPROM;//将EEPROM数值赋值给i
    delay(200);//延时停留
  }
  else
    LED=tableA[i];//若EEPROM数值为0则数码管显示‘0’
while(1)
  {
      i=(i+1)%10;//限定i取值范围在0至9
      LED=tableA[i];//将0至9段码送到数码管显示
      disnum_EEPROM=i;//将0至9数值存入EEPROM首地址
      while((FLASH_IAPSR & 0x40)==0);//等待写入成功       0x0100   & 位6 HVOFF (高压编程) 1 
                                                          写完,0继续等待
      delay(500);//延时停留
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值