资源简介

stc8a8k64s4a12自带的IAP功能,相当于EEPROM的功能,实现掉电保存、读取

资源截图

代码片段和文件信息




#include “intrins.h“
#include “urt1.h“

#define size   5

char pt[size] = {1};
char a[5] = {02468};

//
#define WT_30M          0x80
#define WT_24M          0x81
#define WT_20M          0x82
#define WT_12M          0x83
#define WT_6M           0x84
#define WT_3M           0x85
#define WT_2M           0x86
#define WT_1M           0x87

sbit Instruction = P0^0;

void IapIdle()
{
    IAP_CONTR = 0;                              //关闭IAP功能
    IAP_CMD = 0;                                //清除命令寄存器
    IAP_TRIG = 0;                               //清除触发寄存器
    IAP_ADDRH = 0x80;                           //将地址设置到非IAP区域
    IAP_ADDRL = 0;
}

char IapRead(int addr)
{
    char dat;

    IAP_CONTR = WT_12M;                         //使能IAP
    IAP_CMD = 1;                                //设置IAP读命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
    dat = IAP_DATA;                             //读IAP数据
    IapIdle();                                  //关闭IAP功能

    return dat;
}

void IapProgram(int addr char dat)
{
    IAP_CONTR = WT_12M;                         //使能IAP
    IAP_CMD = 2;                                //设置IAP写命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_DATA = dat;                             //写IAP数据
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();
    IapIdle();                                  //关闭IAP功能
}

void IapErase(int addr)
{
    IAP_CONTR = WT_12M;                         //使能IAP
    IAP_CMD = 3;                                //设置IAP擦除命令
    IAP_ADDRL = addr;                           //设置IAP低地址
    IAP_ADDRH = addr >> 8;                      //设置IAP高地址
    IAP_TRIG = 0x5a;                            //写触发命令(0x5a)
    IAP_TRIG = 0xa5;                            //写触发命令(0xa5)
    _nop_();                                    //
    IapIdle();                                  //关闭IAP功能
}

void delay(int xx)
{
int xy;
for(x=xx;x>0;x--)
for(y=110;y>0;y--);
}

void main()
{
char i = 0;

Uart1_Init();

for(i=0;i {
  pt[i] = IapRead(0x0040+i);
}
//写入数据
IapErase(0x0040);//从首地址擦除
for(i=0;i {   
  IapProgram(0x0040+ia[i]);//填充数据
  delay(300);
  Instruction = 0xfe;//程序进程指示
  }
//串口打印数据
i=0;
while(i {
  Send_num(pt[i]);
  i++;

}
Instruction = 1;

while (1);  
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-23 23:33  掉电保存\
     文件       55733  2019-01-23 23:32  掉电保存\IAP.uvopt
     文件       13626  2018-12-31 20:32  掉电保存\IAP.uvproj
     文件       43879  2018-12-29 22:19  掉电保存\STC8.H
     文件       42512  2019-01-23 23:33  掉电保存\URT1
     文件       12101  2019-01-23 23:33  掉电保存\URT1.M51
     文件        1816  2019-01-23 23:33  掉电保存\URT1.hex
     文件          53  2019-01-23 23:33  掉电保存\URT1.lnp
     文件        3045  2019-01-23 23:33  掉电保存\URT1.lst
     文件       20198  2019-01-23 23:33  掉电保存\URT1.obj
     文件         461  2019-01-23 23:33  掉电保存\URT1.plg
     目录           0  2018-12-31 13:21  掉电保存\USER\
     目录           0  2018-12-31 13:20  掉电保存\USER\oled\
     文件        9154  2017-08-04 16:51  掉电保存\USER\oled\oled.c
     文件        1668  2018-12-29 22:32  掉电保存\USER\oled\oled.h
     文件       16837  2017-08-04 16:39  掉电保存\USER\oled\oledfont.h
     目录           0  2018-12-31 13:20  掉电保存\USER\uart1\
     文件        1130  2019-01-01 01:09  掉电保存\USER\uart1\URT1.c
     文件         223  2019-01-01 01:10  掉电保存\USER\uart1\URT1.h
     文件        5724  2019-01-23 23:33  掉电保存\main.LST
     文件       23161  2019-01-23 23:33  掉电保存\main.OBJ
     文件        2905  2019-01-03 23:35  掉电保存\main.c
     文件       17951  2018-12-29 23:05  掉电保存\oled.lst
     文件       36916  2018-12-29 23:05  掉电保存\oled.obj

评论

共有 条评论