您好,欢迎访问本站!
商品分类

STC89C51/52–eeprom读写实验软件

作者: 倪大德

89c51/52为使数据在掉电后不丢失,一般是在片外扩展存储器,单片机与存储器之间通
过IIC 或SPI 等接口来进行数据通信。这样不光会增加开发成本,同时也增加软件开发成本。


           STC89C51/52是利用IAP技术实现EEPROM,内部Flash擦写次数为100000次以上。使用起来
更加方便。


      本人充分利用STC串口编程线,在不增加硬件成本的前提下,开发了STC89C51/52-EEPROM
读写软件。界面如下:


      1. STC89C51/52的EEPROM共分8个扇区。可分别读,写,擦除!
      2. 玩LED点阵屏的朋友总感觉RAM不够!其实完全可利用STC89C51/52的EEPROM,一个扇区可
存储16个汉字,总的可存储16*8=128个汉字。利用本软件可直接将提取的字码分别写入到STC89C51/52
8个扇区中,方便直接调用!(已作实验)


      郑重说明:
      如转载请给于涟接,说明来自一乐社区!(以前发现过)


界面图.JPG (151.29 KB, 下载次数: 8)下载附件  保存到相册2010-6-1 17:43 上传

单片机LED

应用说明 —

    写示意图:

STC89C51/52--eeprom读写实验软件

   读,擦除示意图:

STC89C51/52--eeprom读写实验软件

  取码示意图:

STC89C51/52--eeprom读写实验软件

  说明:取码写入后。单片机应断电后重新上电,再可用读查看写入的内容。

主要源码:

     玩LED点阵屏,可参阅以下源码。

//====== 演示 STC89C51RC  EEPROM 操作
//====== 程序编写  倪大德  10-06-01修正
//====== 芯片STC89C52RC    晶振11.0592MHz(波特率9600)
//====== 参阅文档:见宏晶STC89C51RC应用说明
//====== ttp://www.yleee.net/

#include “STC89C51RC.H”
#include <intrins.h>
/*
//ISP相关的特殊功能寄存器
#define ISP_DATA   0XE2     
#define ISP_ADDRH  0XE3
#define ISP_ADDRL  0XE4
#define ISP_CMD    0XE5
#define ISP_TRIG   0XE6
#define ISP_CONTR  0XE7
*/
//定义常量
//#define ENABLE_ISP  0x80      // >20M=80H
#define ENABLE_ISP  0x81        // <20MHz
//#define ENABLE_ISP  0x82      // <10M=82H
//#define ENABLE_ISP  0x83      // <5M=83H
unsigned char temp=0;
unsigned int flash_addr;
code unsigned int DATA_FLASH_START_ADDRESS[8] =
{0x2000,0x2200,0x2400,0x2600,0x2800,0x2a00,0x2c00,0x2e00};

//===============================================================读出该扇区512个数据
void byte_read(unsigned char ss)
{  
   unsigned int i;
   flash_addr = DATA_FLASH_START_ADDRESS[ss];  
for(i = 0; i<512; i++)                     
{
  ISP_ADDRH = flash_addr >> 8;           
  ISP_ADDRL = flash_addr & 0x00ff;                                 
  ISP_CONTR = ENABLE_ISP;                 //打开IAP功能   
  ISP_CMD = 0x01;                        
        EA=0;
  ISP_TRIG = 0x46;                        
  ISP_TRIG = 0xb9;                        //送B9 IAP触发启动
  _nop_();
        SBUF=ISP_DATA;   
        while(TI==0);        
        TI=0;               
        flash_addr++;                          
        EA=1;
    IAP_disable();                      //关IAP
  }
}
//===============================================================写入该扇区512个数据
void byte_progrom(unsigned char ss)
{
  ISP_CONTR = ENABLE_ISP;                 //打开IAP功能
        ISP_CMD = 0x02;                        
        ISP_ADDRH = flash_addr >> 8;            
  ISP_ADDRL = flash_addr & 0x00ff;      
        ISP_DATA = ss;                        
  EA=0;
        ISP_TRIG = 0x46;                        
  ISP_TRIG = 0xb9;                        //送B9 IAP触发启动
  _nop_();
         EA = 1;
        IAP_disable();                      //关IAP
}
//=====================================================扇区擦除
void sector_ersae(unsigned char ss)
{
     flash_addr = DATA_FLASH_START_ADDRESS[ss];           
        ISP_CONTR = ENABLE_ISP;                 //打开IAP功能
        ISP_CMD = 0x03;   
     ISP_ADDRH = flash_addr >> 8;            
  ISP_ADDRL = flash_addr & 0x00ff;        
        EA=0;
        ISP_TRIG = 0x46;         
  ISP_TRIG = 0xb9;                        // IAP触发启动
  _nop_();
        EA = 1;
        IAP_disable();                      //关IAP
}
//===================================================延时
void delay_eeprom(unsigned int n)
{
     unsigned int i;
     for(i=1;i<n;i++){;}
}

//====================================================主函数                    
void main(void)
{

}

附件:(内有)

1.读写上位机软件
2.HEX文件 (源码见上)
3.STC89C51头文件
4.STC89C51应用手册

详见: https://www.yleee.com.cn/thread-3197-1-1.html

发表回复

登录后才能评论