資源簡介
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
評論
共有 條評論