STC单片机内部EEPROM的应用_第1页
STC单片机内部EEPROM的应用_第2页
STC单片机内部EEPROM的应用_第3页
STC单片机内部EEPROM的应用_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、TX-1C开发板学习单片机内部EEPROMJ应用STC89C51 52内部都自带有 2K字节的EEPRO M54、55和58都自带有16K字节的EEPROM STC单 片机是利用IAP技术实现的EEPRO"部Flash擦写次数可达100, 000次以上,先来介绍下ISP与IAP 的区别和特点。知识点:ISP与IAP介绍ISP: In System Programable是指在系统编程,通俗的讲,就是片子已经焊板子上,不用取下,就可以简单而方便地对其进行编程。比如我们通过电脑给STC单片机下载程序,或给 AT89S51单片机下载程序,这就是利用了ISP技术。IAP: In Applic

2、ation Programable是指在应用编程,就是片子提供一系列的机制(硬件/软件上的)当片子在运行程序的时候可以提供一种改变flash数据的方法。通俗点讲,也就是说程序自己可以往程序存储器里写数据或修改程序。这种方式的典型应用就是用一小段代码来实现程序的下载,实际上单片 机的ISP功能就是通过IAP技术来实现的,即片子在出厂前就已经有一段小的boot程序在里面,片子上电后,开始运行这段程序,当检测到上位机有下载要求时,便和上位机通信,然后下载数据到存储区。大家要注意千万不要尝试去擦除这段ISP引导程序,否则恐怕以后再也下载不了程序了。STC单片机内部有几个专门的特殊功能寄存器负责管理IS

3、P/IAP功能的,见表1。表1 ISP/IAP 相关寄存器列表名称地址功能描述D7D6D5D4D3D2D1D0复位值ISP_DATAE2hFlash数据奇存器1111 1111ISP_ADDRHE3hFlash局字节地址寄存器0000 0000ISP_ADDRLE4hFlash低字节地址寄存器0000 0000ISP_CMDE5hFlash命令模式寄存器-MS2MS1MS0xxxx x000ISP_TRIGE6hFlash命令触发寄存器xxxx xxxxISP_CONTRE7hISP/IAP控制寄存器ISPENSWBS:SWRS-WT2WT1WT0000x x000ISP_DATA ISP/I

4、AP操作时的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向 Flash写入的数据也需放在此处。ISP_ADDRH ISP/IAP操作时的地址寄存器高八位。ISP_ADDRL ISP/IAP操作时的地址寄存器低八位。ISP_CMD ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。命令模式如表2所示。表2 ISP_CMD寄存器模式设置D7D6D5D4D3D2D1D0模式选择保留命令选择-000待机模式,无ISP操作-001对用户的应用程序flash区及数据flash区字节读-010对用户的应用程序flash区及数据flash区字节编程:-011对用户的应用程序fl

5、ash区及数据flash区扇区擦除程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM吠行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash区(EEPROM进行字节读/字节编程/扇区擦除。STC89C51RC/RD列单片机出厂时已经固化有ISP引导码,并设置为上电复位进入ISP程序区,并且出厂时就已完全加密。ISP_TRIG: ISP/IAP 操作时的命令触发寄存器。在ISPEN(ISP_CONTR.7) =1时,对ISP_TRIG先写入46h,再写入 B9h, ISP/IAP 命令才会生效。STC89C52RC STC89LE52RO片机内部可

6、用 Data Flash(EEPROM)的地址如表3所示,其它型号单片 机请查阅相关资料。表 3 STC89C52RC STC89LE52RO片机内部 EEPROI%址表第一扇区第二扇区第三扇区第四扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇区第六扇区第七扇区第八扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH每个扇区为512字节,建议大家在写程序时,将同一次修改的数据放在同一个扇区,方

7、便修改,因 为在执行擦除命令时,一次最少要擦除一个扇区的数据,每次在更新数据前都必须要擦除原数据方可重 新写入新数据,不能直接在原来数据基础上更新内容。下面来讲解STC系列单片机EEPROMJ具体用法。在TX-1C实验板上实现如下描述,操作STC单片机自带的EEPROM存储一组按秒递增的二位数据,并且将数据实时显示在数码管上,数据每变化一次就往EEPROM写入一次,当关闭实验板电源,再次开启电源时,从EEPRO忡读取先前存储的数据,接着递增显示。新建文件part3.4.4.c,程序代码如下:sfr ISP_DATA=0xe2; /寄存器申明sfr ISP_ADDRH=0xe3;sfr ISP_

8、ADDRL=0xe4;sfr ISP_CMD=0xe5;sfr ISP_TRIG=0xe6;sfr ISP_CONTR=0xe7;sbit dula=P2A6; /申明U1锁存器的锁存端sbit wela=P2A7; / 申明U2锁存器的锁存端#include <intrins.h> #include <reg52.h>/52系列单片机头文件#define uchar unsigned char #define uint unsigned int #define RdCommand 0x01 / 定义 ISP 的操作命令 #define PrgCommand 0x02

9、#define EraseCommand 0x03 #define Error 1 #define Ok 0 #define WaitTime 0x01 / 定义 CPU的等待时间 -4uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; uchar num;void delayms(uint xms)uint i,j;for(i=xms;i>0;i-) /i=xms即延时约 xms 毫秒for(j=110;j>0;j-);void dis

10、play(uchar shi,uchar ge) /显示子函数dula=1;P0=tableshi; / 送十位段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; / 原来段选数据通过位选锁存器造成混乱P0=0xfe; /送位选数据wela=0;delayms(5); / 延时dula=1;P0=tablege; /送个位段选数据dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delayms(5);void ISP_IAP_enable(void) /* = 打开 ISP,IAP 功能=*/(EA = 0;/* 关中断

11、 */ISP_CONTR = ISP_CONTR & 0x18;/* 0001,1000 */ISP_CONTR = ISP_CONTR | WaitTime; /*写入硬件延时 */ISP_CONTR = ISP_CONTR | 0x80;/* ISPEN=1 */void ISP_IAP_disable(void) /* = 关闭 ISP,IAP 功能=*/(ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */ISP_TRIG = 0x00;EA = 1; /* 开中断*/void ISPgoon(void) /* =公用的触发代码 =

12、*/(打开ISP,IAP 功能*/触发ISP_IAP命令字节1 */触发ISP_IAP命令字节2 */ISP_IAP_enable(); /*ISP_TRIG = 0x46; /*ISP_TRIG = 0xb9; /*_nop_();unsigned char byte_read(unsigned int byte_addr) /* =字节读 =*/(ISP_ADDRH = (unsigned char)(byte_addr >> 8);/*地址赋值 */ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);ISP_CMD = IS

13、P_CMD & 0xf8; /* 清除低 3 位 */ISP_CMD = ISP_CMD | RdCommand; /*写入读命令 */ISPgoon(); /*触发执行 */ISP_IAP_disable(); /* 关闭 ISP,IAP 功能 */return (ISP_DATA); /*返回读到的数据*/void SectorErase(unsigned int sector_addr) /* =扇区擦除 =*/(unsigned int iSectorAddr;iSectorAddr = (sector_addr & 0xfe00); /*取扇区地址 */ISP_ADD

14、RH = (unsigned char)(iSectorAddr >> 8);ISP_ADDRL = 0x00;ISP_CMD = ISP_CMD & 0xf8; /* 清空低 3 位 */ISP_CMD = ISP_CMD | EraseCommand; /*擦除命令 3 */ISPgoon(); /*触发执行 */ISP_IAP_disable(); /* 关闭 ISP,IAP 功能 */字节写=*/void byte_write(unsigned int byte_addr, unsigned char original_data) /* = (ISP_ADDRH =

15、 (unsigned char)(byte_addr >> 8); /*取地址 */ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);ISP_CMD = ISP_CMD & 0xf8; /* 清低 3 位 */ISP_CMD = ISP_CMD | PrgCommand; /* 写命令 2 */ISP_DATA = original_data; /*写入数据准备 */ISPgoon(); /* 触发执行 */ISP_IAP_disable(); /*关闭 IAP 功能 */void main()(uchar a,b,num1;TMOD=0x01; /设置定时器 0为工作方式1(0000 0001) TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;num1=byte_read(0x2000);/程序开始时读取 EEPROM3 数据if(num1>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论