📄 main_block0.c
字号:
//#pragma
/***********************************************************************************************************
* IAP_SSTmcu.c - SST89X564/554 SST89X516/58/54/52RD2的FLASH作为单字节的EEPROM数据存储器的用法
* 弘微科技(SPAC) 田伯运
* WEB: www.spacltd.com.cn TEL:0755-26010579 E-MAIL:andy.tian@spacltd.com.cn
*
* 功能介绍:
* 1.主要是演示如何使用SST的MCU(SST89X564/554 SST89X516/58/54/52RD2)的内部FLASH的在线擦除编程作为EEPROM存储数据
*
* 功能:可以对单片机内部的FLASH存储器的内容进行单字节或多个单元的改写更新,从而很简单的实现数据存储等功能.
* 用法:只需调用modify_single_byte_flash(ADDR,DATA)函数便可对指定的FLASH单元的内容进行改写;
* 只需调用modify_multi_byte_flash(begin_ADDR,counter,DATA_array)函数便可对指定起始地址的多个FLASH单元的内容进行改写;
* 不用考虑具体FLASH的操作命令.注意要将IAP_SSMCU.C文件加入到你的项目中即可.
***********************************************************************************************************/
#include <SST89x5xxRD2.H> //加入SST MCU单片机的头文件,这样就剩去了许多的特殊寄存器的声明,
#include <stdio.h>
/***********************************************************************************************************
* 用到的外部函数声明
***********************************************************************************************************/
extern bit modify_single_byte_flash(unsigned short int Address, unsigned char dataByte);//字节编程函数
extern bit modify_multi_byte_flash(unsigned int Begin_Addr, unsigned char counter, unsigned int array[]);//修改多个FLASH地址单元的内容
extern unsigned char Flash_byte_read(unsigned short int Address); //读FLASH地址单元内容的函数
/***********************************************************************************************************
* Global Variable Definition
***********************************************************************************************************/
sbit LED_ERR = P1^2;/* 测试常量数组 */
sbit LED_OK = P1^3;
/***********************************************************************************************************
* Function Prototype,用到的函数声明
***********************************************************************************************************/
/* 测试常量数组 */
unsigned code Test_array[8] = {0x60, 0x61,0x62,0x63,0x64,0x65,0x66,0x67};
/***********************************************************************************************************
* 本文件中的几个函数
***********************************************************************************************************/
void DelayUs(unsigned char n); //一个外部在BLOCK1块内的C51函数
void DelayMs(unsigned char n); //一个外部在BLOCK1块内的C51函数
void delay_100ms(unsigned char n); //延时100MS函数,一个外部在BLOCK1块内的C51函数
/***********************************************************************************************************
* IAP演示主程序
***********************************************************************************************************/
void main()
{
unsigned short int Flash_addr = 0x1000; //定义一个EEPROM的数据地址,DATAFLASH_ADDR_START;//擦除与编程的首地址
unsigned char xdata Test_data_xram; //定义两个内部扩展RAM区域的全局变量,测试XRAM是否会被局部128个的XRAM缓冲区冲掉
LED_ERR=~LED_ERR; //点亮一个指示灯
//----------------------修改一个FLASH单元的函数测试--------------------------
modify_single_byte_flash(Flash_addr, 0xe7); //将内部的FLASH存储器的Flash_addr单元的内容修改为0XE7
modify_single_byte_flash(Flash_addr, 0x23); //将内部的FLASH存储器的Flash_addr单元的内容修改为0X23
modify_single_byte_flash(Flash_addr+1, 0x45); //将内部的FLASH存储器的Flash_addr单元的内容修改为0X45
//----------------------连续修改多个FLASH单元的函数测试--------------------------
modify_multi_byte_flash(Flash_addr+0x0100,0x04,Test_array); //将内部的FLASH存储器的Flash_addr+0x100的连续8个地址单元的内容
//修改为Test_array数组的前4个字节的内容---0x60, 0x61,0x62,0x63
modify_multi_byte_flash(Flash_addr+0x0100,0x04,Test_array+4); //将内部的FLASH存储器的Flash_addr+0x100的连续8个地址单元的内容修改为Test_array数组的后4个字节的内容
//修改为Test_array数组的后4个字节的内容---0x64,0x65,0x66,0x67
//----------------------读一个FLASH单元的函数测试----------------------------------
Test_data_xram=Flash_byte_read(Flash_addr); //将内部的FLASH存储器的Flash_addr单元的内容读出来放到内部的扩展XRAM存储器的data_xram_2单元.
while(1)
{
LED_OK=~LED_OK; //闪烁成功和错误指示灯(P1.3和P1.2),表示编程成功
LED_ERR=~LED_ERR;
delay_100ms(10);//调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序1
DelayMs(3); //调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序2
DelayUs(3); //调用C_BLOCK1.C C语言在BLOCK1中的0XF800地址的子程序3
}
}
//-------------------几个延时函数-------------------------------------------------------
//******************************************************
// delay_100ms:延时100毫秒的函数;按照晶振为12MHZ计算
//******************************************************
void DelayUs(unsigned char n)
{
while(n--);
}
//Using 12M
void DelayMs(unsigned char n)
{
unsigned char i;
for(;n>0;n--)
{
for(i=0;i<160;i++);
for(i=0;i<165;i++);
}
}
void delay_100ms(unsigned char n)
{
unsigned int i;
for(;n>0;n--)
{
for(i=0;i<2000;i++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -