STC原版EEPROM修改方法

发布者:Ziran520最新更新时间:2015-07-13 来源: 51hei关键字:STC  EEPROM  修改方法 手机看文章 扫描二维码
随时随地手机看文章
12.4 .EEPROM测试程序(C程序及汇编程序)

1.  C程序:
;STC 12C5A60S2系列单片机EEPROM/IAP 功能测试程序演示
/*------------------------------------------------------------------------------------*/
/* --- STC MCU Limited ---------------- ---------------------------------------*/
/* --- 演示STC 1T  系列单片机 EEPROM/IAP 功能--------------------------*/
/* --- Mobile: (86) 13922809991 -----------------------------------------------*/
/* --- Fax: 86-755-82905966 ---------------------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, --------------------  ---*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -----------*/
/*-------------------------------------------------------------------------------------*/
#include "reg5 1.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
/*Declare SFR associated with the IAP */
sfr  IAP_DATA      =   0xC2;       //Flash data register
sfr  IAP_ADDRH     =   0xC3;             //Flash address HIGH
sfr  IAP_ADDRL     =   0xC4;               //Flash address LOW
sfr  IAP_CMD       =   0xC5;                //Flash command register
sfr  IAP_TRIG       =   0xC6;                 //Flash command trigger
sfr  IAP_CONTR     =   0xC7;             //Flash control register
/*Define ISP/IAP/EEPROM command*/
#define   CMD_IDLE      0                         //Stand-By
#define   CMD_READ      1                      //Byte-Read
#define   CMD_PROGRAM   2                 //Byte-Program
#define   CMD_ERASE      3                      //Sector-Erase
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
//#define   ENABLE_IAP   0x80              //if SYSCLK<30MHz
//#define   ENABLE_IAP   0x81              //if SYSCLK<24MHz
#define   ENABLE_IAP    0x82              //if SYSCLK<20MHz
//#define   ENABLE_IAP   0x83              //if SYSCLK< 12MHz
//#define   ENABLE_IAP   0x84              //if SYSCLK<6MHz
//#define   ENABLE_IAP   0x85              //if SYSCLK<3MHz
//#define   ENABLE_IAP   0x86              //if SYSCLK<2MHz
//#define   ENABLE_IAP   0x87              //if SYSCLK< 1MHz
//Start address for STC12C5A60S2 series EEPROM
#define    IAP_ADDRESS   0x0000
void Delay(BYTE n);
void IapIdle();
BYTE IapReadByte(WORD addr);

void IapProgramByte(WORD addr, BYTE dat);
void IapEraseSector(WORD addr);
void main()
{
      WORD i;
      P1 = 0xfe;                                                  // 1111 ,1110 System Reset OK
      Delay(10);                //Delay
      IapEraseSector(IAP_ADDRESS);          //Erase current sector
      for (i=0; i<5 12; i++)                                //Check whether all sector data is FF
      {
            if (IapReadByte(IAP_ADDRESS+i) != 0xff)
                goto Error;                                    //If error, break
      }
      P1 = 0xfc;                                               // 1111 ,11 00 Erase successful
      Delay(10);                                             //Delay
      for (i=0; i<5 12; i++)                             //Program 5 12 bytes data into data flash
      {
            IapProgramByte(IAP_ADDRESS+i, (BYTE)i);
      }
      P1 = 0xf8;                                           // 1111 ,1000 Program successful
      Delay(10);                                       //Delay
      for (i=0; i<5 12; i++)                          //Verify 5 12 bytes data
      {
            if (IapReadByte(IAP_ADDRESS+i) != (BYTE)i)
                goto Error;                             //If error, break
      }
      P1 = 0xf0;                                        // 1111 ,0000 Verify successful
      while ( 1);
Error:
      P1 &= 0x7f;                                  //0xxx,xxxx IAP operation fail
      while ( 1);
}
/*----------------------------Software delay function
----------------------------*/
void Delay(BYTE n)
{
      WORD x;
      while (n--)
      {
            x = 0;
            while (++x);
      }
}

/*----------------------------Disable ISP/IAP/EEPROM function
Make MCU in a safe state
----------------------------*/
void IapIdle()
{
      IAP_CONTR = 0;       //Close IAP function
      IAP_CMD = 0;              //Clear command to standby
      IAP_TRIG = 0;                       //Clear trigger register
      IAP_ADDRH = 0x80;                  //Data ptr point to non-EEPROM area
      IAP_ADDRL = 0;                      //Clear IAP address to prevent misuse
}
/*----------------------------Read one byte from ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
Output:Flash data
----------------------------*/
BYTE IapReadByte(WORD addr)
{
      BYTE dat;                           //Data buffer
      IAP_CONTR = ENABLE_IAP;   //Open IAP function, and set wait time
      IAP_CMD = CMD_READ;         //Set ISP/IAP/EEPROM READ command
      IAP_ADDRL = addr;                  //Set ISP/IAP/EEPROM address low
      IAP_ADDRH = addr >> 8;        //Set ISP/IAP/EEPROM address high
      IAP_TRIG = 0x5a;                  //Send trigger command 1 (0x5a)
      IAP_TRIG = 0xa5;                    //Send trigger command2 (0xa5)
      _nop_();                            //MCU will hold here until ISP/IAP/EEPROM
          //operation complete
      dat = IAP_DATA;              //Read ISP/IAP/EEPROM data
      IapIdle();                          //Close ISP/IAP/EEPROM function
      return dat;                          //Return Flash data
}
/*----------------------------Program one byte to ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
       dat (ISP/IAP/EEPROM data)
Output:-----------------------------*/

void IapProgramByte(WORD addr, BYTE dat)
{
  IAP_CONTR = ENABLE_IAP;          //Open IAP function, and set wait time
      IAP_CMD = CMD_PROGRAM;     //Set ISP/IAP/EEPROM PROGRAM command
      IAP_ADDRL = addr;                  //Set ISP/IAP/EEPROM address low
      IAP_ADDRH = addr >> 8;             //Set ISP/IAP/EEPROM address high
      IAP_DATA = dat;                    //Write ISP/IAP/EEPROM data
      IAP_TRIG = 0x5a;                    //Send trigger command 1 (0x5a)
      IAP_TRIG = 0xa5;                    //Send trigger command2 (0xa5)
      _nop_();                            //MCU will hold here until ISP/IAP/EEPROM 
          //operation complete
      IapIdle();
}
/*----------------------------Erase one sector area
Input: addr (ISP/IAP/EEPROM address)
Output:-----------------------------*/
void IapEraseSector(WORD addr)
{
      IAP_CONTR = ENABLE_IAP;   //Open IAP function, and set wait time
      IAP_CMD = CMD_ERASE;       //Set ISP/IAP/EEPROM ERASE command
      IAP_ADDRL = addr;                //Set ISP/IAP/EEPROM address low
      IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
      IAP_TRIG = 0x5a;                    //Send trigger command 1 (0x5a)
      IAP_TRIG = 0xa5;                    //Send trigger command2 (0xa5)
      _nop_();                            //MCU will hold here until ISP/IAP/EEPROM 
          //operation complete
      IapIdle();
}

关键字:STC  EEPROM  修改方法 引用地址:STC原版EEPROM修改方法

上一篇:关于 while(1)和for(;;)效率问题的一点想法
下一篇:STC单片机PCA捕获中断函数

推荐阅读最新更新时间:2024-03-16 14:24

STC单片机学习】第八课:单片机的LED点阵
1.8.1.LED点阵简介 1.8.1.1、什么是LED点阵 点阵显示是后面显示显示器的基础,这节课对显示的理解很有帮助! (1)外观 在板子上什么样呢?每一个圆点是一个LED灯!显示方法和数码管很像,需要提前做好断码表! (2)作用 显示文字、数字、显示图标 (3)内部构造原理图。2.单片机完全学习系列课程课程配套ARM3.0开发板光盘资料步骤3 51例程9 、LED点阵datasheet-相关芯片手册 16*16的LED单色灯! 点阵的优势就是16(J34+J28)个IO口独立控制8*8个LED亮灭 (4)LED点阵如何工作 点亮:纵向和横向结合 8*8的LED点阵可以并联/串联拼成更大的LED点阵! 1.8.1.
[单片机]
【<font color='red'>STC</font>单片机学习】第八课:单片机的LED点阵
STC15F2KA60S2芯片粉尘传感器的应用
1.粉尘有什么危害? 什么是粉尘? 总悬浮颗粒物(TSP)—环境空气中空气动力学当量直径小于等于100μm的颗粒物。 • PM10—环境空气中空气动力学当量直径小于等于10μm的颗粒物。 • PM2.5—环境空气中空气动力学当量直径小于等于2.5μm的颗粒物。 粉尘对人体的危害,根据其理化性质、进入人体的量的不同,可引起不同的病变。如呼吸性系统疾病、局部作用、中毒作用等。 职业性呼吸系统疾病有如下4种表现 1.尘肺 2.粉尘沉着症 3.有机粉尘引起的肺部病变 4.呼吸系统肿瘤 2. 目的: 随着经济的发展,大气中的污染物也随之增加了许多。现如今的雾霾天气也越来越严重,这些恶劣的天气与空气中的粉尘
[单片机]
<font color='red'>STC</font>15F2KA60S2芯片粉尘传感器的应用
STM32F429库函数之I2C读取EEPROM
首先,I2C总线由两条线——串行数据(SDA)和串行时钟(SCL),这是同步通信,也是半双工通信,不能同时读写。每个器件都有一个唯一的地址识别,当总线空闲时I2C两条线都是高电平,只有当连接到总线的器件的输出级是漏级开路或者集电极开路,唯一的地址能够被正确的器件应答。因为应答信号为0,即低电平,能够拉低总线,而同时其它器件(除主机外)引脚仍表现出高阻态,即可以开始进行通信。 I2C读写EEPROM的通讯过程—— 起始信号:在SCL为高电平,SDA由高变低,总线被认为处于忙的状态。调用I2C_GenerateSTART(...)产生起始信号,若起始信号成功发送则产生事件5:SB=1(I2C_SR1的0位置1,表示起始位已发送) 发
[单片机]
STM32F429库函数之I2C读取<font color='red'>EEPROM</font>
二极管(STC89C52): 编写程序控制二极管从上到下来回滚动
一. 硬件设计 二. 软件设计 1. 程序功能 编写程序控制二极管从上到下来回滚动. 2. 程序源码 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int void delayms(uint xms); void main() { uchar i; P1 = 0xfe; while (1) { for (i = 0; i 7; i++) { P1 = _crol_
[单片机]
二极管(<font color='red'>STC</font>89C52): 编写程序控制二极管从上到下来回滚动
使用AT24Cxx扩展C8051F EEPROM
系统功能 使用AT24Cxx扩展C8051F EEPROM。 硬件设计 使用AT24Cxx扩展C8051F EEPROM电路原理图 软件设计 下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解! I2C(SMBus)详细程序请查看C8051F I2C(SMBus)程序。 //目标系统: 基于C8051F单片机 //应用软件: Silicon IDE / Keil /*01010101010101010101010101010101010101010101010101010101010101010101 ------------------------------------------
[单片机]
使用AT24Cxx扩展C8051F <font color='red'>EEPROM</font>
STC51单片机SPI接口单主单从模式通信-汇编语言
;============================================ ;STC12C5410 spi 通信 ;单主单从模式 ;============================================ ;MASTER EQU 1 ;主单片机 MASTER EQU 0 ;从机 ;------------------------------------- ;定义COM波特率自动重装常数 ; RELOAD_8BIT_DATA EQU 0F6H; Fosc=18.432 ,4800 ;-------------------------------------
[单片机]
ST推出2x3mm封装512-Kbit串口EEPROM
意法半导体(ST)运用先进的非易失性存储技术,推出两款在当前市场上最高密度的采工业标准2 x 3 x 0.6mm 8-引脚微型引线框架封装(MLP)的512-Kbit器件,再度写下业界第一。新产品引脚兼容低密度的存储器,让设计人员无需重新设计电路板即可直接更换芯片,产品升级更快速、高效。 串口EEPROM器件具有非易失性存储功能,采用引脚数量很少的封装,适合众多的消费电子、工业控制、医疗和通信产品。意法半导体的新产品内置的字节模式擦除功能使参数升级变得更加容易,128字节页写模式结合5ms的写入时间,可在生产线上对组装好的电路板进行快速编程。 这两款新产品分别是M95512和M24512,前者内置一个2
[半导体设计/制造]
基于STC15单片机的循迹避障遥控车
Altium Designer画的基于STC15的循迹避障遥控车原理图和PCB图如下: 单片机源程序如下: #include all.h extern unsigned char code INRECO ,TL ,TriLU ,TriLD ,TRU ,TRD ,FR ,TriRU ,TriRD ,ST ,TR ,BR ,Back ; extern bit deal_over; extern bit deal_over_flag; extern bit flag; extern ADC_BF_value,ADC_LR_value; bit Show_flag,Tracing_flag,U_flag,clean_flag,ligh
[单片机]
基于<font color='red'>STC</font>15单片机的循迹避障遥控车
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved