单片机STC89C52RC 内部EEPROM
STC89C52与有什么区别?

ISP一般需要专用下载器。
STC有内部EEPROM,AT没有。
STC解密相对S52来说要难一点。
批量的话STC价格比S52低。
STC的Datasheet含糊其辞,就像一本广告,很多关键参数都找不到;Atmel
的Datashቤተ መጻሕፍቲ ባይዱet编写详尽且规范。
STC89C52与有什么区别?
STC89C52与AT89C52有什幺区别?
STC89C52RC单片机:
8K字节程序存储空间;
512字节数据存储空间;
内带2K字节EEPROM存储空间;
AT89S52单片机:
8K字节程序存储空间;
256字节数据存储空间;
没有内带EEPROM存储空间;
另外sTC系列的直接用串口下载就可以AT系列的貌似要多装一个驱动
一般认为S52比STC抗干扰差。
初学者如果有串口的话,STC在一定程度上可以降低开发的成本;
如果只有USB的话,用USBASP下载S52更方便一点。
STC89C52RC单片机介绍 (2)

STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)3. 工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8. 具有EEPROM功能9. 具有看门狗功能10. 共3个16位定时器/计数器。
即定时器T0、T1、T211. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12. 通用异步串行口(UART),还可用定时器软件实现多个UART13. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)14. PDIP封装STC89C52RC单片机的工作模式掉电模式:典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序● 空闲模式:典型功耗2mA● 正常工作模式:典型功耗4Ma~7mA● 掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地P0端口(P0.0~P0.7,39~32引脚):P0口是一个漏极开路的8位双向I/O 口。
stc8952EEprom

ISPgoon()?/* 触发执行*/
ISP_IAP_disable()?/* 关闭IAP 功能*/
}
/*
字节写并校验
*/
unsigned char byte_write_verify(unsigned int byte_addr, unsigned char
SWRST:0:不操作,1:产生软件系统复位,硬件自动清零。
ISP_CONTR 中的SWBS 与SWRST 这两个功能位,可以实现单片机的软件启动,并
启动到ISP 区或用户程序区,这在“STC 单片机自动下载”一节,亦有所应用。
如:
ISP_CONTR=0x60? 则可以实现从用户应用程序区软件复位到ISP 程序区开始运行
ISP_CMD 0xE5 ISP/IAP闪存命令寄存器MS2
MS1 MS0 xxxxx000
ISP_TRIG 0xE6 ISP/IAP 闪存命令触发xxxxxxxx
ISP_CONTR 0xE7 ISP/IAP 控制寄存器ISPEN SWBS SWRST WT2
WT1 WT0 00xx000
ISP_CMD: ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效。
ISP_TRIG:ISP/IAP 操作时的命令触发寄存器。
当ISPEN(ISP_CONTR.7)=1 时,对ISP_TRIG 先写入0x46,再写入0xb9,ISP/IAP
命令才会生效。
单片机芯片型号起始地址内置EEPROM 容量(每扇区512 字节)
程序。
ISP_CONTR=0x20? 则可以实现从ISP 程序区软件复位到用户应用程序区开始运行
熟悉stc89c5152rc的EEPROM操

这个代码脱离按键部分时,EEPROM的操作是对的,就是在主程序中对EEPROM操作有效,按键部分好像不能控制EEPROM的读擦写。
表现为:按键确认部分是正确的,但是按键按下以后好像一直处于按下状态,不能走后面的程序了。
代码是用T0一秒定时代替按键的防抖。
自己想不出问题出在什么地方了,请大家帮忙给看一下啊。
复制内容到剪贴板代码:
//====================================================================
//目的:熟悉stc89c51/52rc的EEPROM操作
//
//版本日期:09-03-04
sfr ISP_ADDRL = 0xE4; //定义EEPROM地址寄存器的低8位
sfr ISP_CMD = 0xE5; //定义ISP的命令寄存器地址
sfr ISP_TRIG = 0xE6; //定义ISP命令触发寄存器地址
sfr ISP_CONTR = 0xE7; //定义ISP控制寄存器地址
{
uchar Addrh,Addrl;
ISP_CONTR = ENABLE_ISP;
ISP_CMD = ISP_BYTE_PROGRAM;
Addrh = Address >> 8;
Addrl = Address & 0x00ff;
ISP_ADDRH = Addrh;
void IspErase(uint Address)
{
uchar Addrh,Addrl;
ISP_CONTR = ENABLE_ISP;
STC89C52单片机内部EEPROM驱动

}
void main()
{
Sector_erase(0x2000); //扇区擦除
Byte_program(0x2000,0x88); //写EEPROM
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P0=Byte_read(0x2000); //读EEPROM
ISP_TRIG = 0x46; //送触发命令字0x46
ISP_TRIG = 0xB9; //送触发命令字0xB9
_nop_();
ISP_IAP_disable(); //关闭ISP&IAP功能
EA = 1; Biblioteka /开中断}/*********************扇区擦除*********************/
ISP_CMD = Prog_COM; //送字节编程命令字
ISP_ADDRH = (uchar)(byte_addr >> 8);//送地址高字节
ISP_ADDRL = (uchar)(byte_addr & 0x00ff); //送地址低字节
ISP_DATA = isp_iap_data; //送数据进ISP_DATA
#define Prog_COM 0x02 //字节编程数据命令
#define Erase_COM 0x03 //扇区擦除数据命令
#define En_Wait_TIME 0x81 //设置等待时间,并使能ISP/IAP
#define Start_ADDRH 0x20 //扇区地址高位
#define Start_ADDRL 0x00 //扇区地址低位
stc89c52中EEPROM使用方法

单片机STC89C52RC 内部EEPROM单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。
在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC 或SPI 等接口来进行数据通信。
这样不光会增加开发成本,同时在程序开发上也要花更多的心思。
在STC 单片机中内置了EEPROM(其实是采用ISP/IAP 技术读写内部FLASH 来实现EEPROM),这样就节省了片外资源,使用起来也更加方便。
下面就详细介绍STC 单片机内置EEPROM 及其使用方法STC 各型号单片机内置的EEPROM 的容量最小有2K,最大有16K,基本上很好地满足项目的需要,更方便之处就是节省了周边的EEPROM 器件,达到节省成本的目的,而且内部EEPROM 的速度比外部的EEPROM 的速度快很多。
STC 各型号单片机内置的EEPROM 是以512 字节为一个扇区,EEPROM 的起始地址=FALSH 容量值+1,那么STC89C52RC 的起始地址为0x2000,第一扇区的起始地址和结束地址0x2000~0x21FF,第二扇区的起始地址和结束地址0x2200~0x23FF,其他扇区如此类推。
深入重点:�传统的EEPROM 是电可擦可编程只读存储一种掉电后数据不丢失的存储芯片。
�STC89C52RC 的EEPROM 是通过ISP/IAP 技术读写内部FLASH 来实现EEPROM。
�STC89C52RC 的EEPROM 起始地址为0x2000,以512 字节为一个扇区,EERPOM 的大小为2K 字节。
STC89C52RC 与EEPORM 实现的寄存器有6 个,分别是ISP_DATA、ISP_ADDRH、ISP_ADDRLISP_TRIG、ISP_CMD、ISP_CONTR。
STC89C52RC内部EEPROM应用

┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
voidclose_isp_iap()
{
ISP_CONTR = 0;//关闭IAP功能
ISP_CMD = 0;//待机模式,无ISP操作
ISP_TRIG = 0;//关闭IAP功能,清与ISP有关的特殊功能寄存器
STC89C52RC内部EEPROM应用
【源码】
/************************************
功能:STC89C52RC EEPROM保存关电前LED的亮灭状况
单片机:STC89C52RC
晶振:11.0592MHz
编译环境:Keil uVision4 V9.00
************************************/
LED1 = 1;
LED2 = 0;//亮第二个灯
}
while(1)
{
if(!K1)
{
while(!K1);
eraser(0x2000);//擦除第1个扇区(2000h~21FFh)
write(0x2002, 1);//对EEPROM区2002h写入1
LED1 = 0;
LED2 = 1;
}
if(!K2)
ISP_ADDRL =addr;
ISP_ADDRH =addr>> 8;
EA = 0;
ISP_TRIG = 0x46;
ISP_TRIG = 0xB9;
_nop_();
dat = ISP_DATA;//取出数据
close_isp_iap();//关闭ISP/IAP
returndat;
stc89c52内部EEPROM连续写入并识别成功

}
void init() //初始化,每次操作EEPROM都要做
{
delay(200); //开始不知道为什么不能读取和写入,后来查书说初始化的时候加200ms延时就好。果然
EA=0;
ISP_CONTR=0X81;
}
void shengxiao()//程序生效。每次程序执行前都要运行
{
ISP_CMD=0X03;
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
}
void write(uint addr,uchar dat)//把一个字节数据写入某地址
{
ISP_CMD=0X02;
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
shengxiao();
quit();
}
void read(uint addr)//读取某地址的一个字节数据
{
ISP_CMD=0X01;
ISP_ADDRL=addr;
ISP_ADDRH=addr>>8;
shengxiao();
_nop_();
dat=ISP_DATA;
write(table1[t],table2[t]);
shengxiao();
quit();
}
while(1); */
init();
read(0x2003);
shengxiao();
quit();
}
ISP_DATA=dat; //没想到一直没办法写入会是这里的原因我原来为什么非得要ISP_DATA&dat呢?没道理呀!成功!原来第二次写入的时候里面的数变成第一次写入的数了,然后第二次写入的数与第一次写入的数相与,全为0.如第一次写入00000001第二次写入00000010,那么相与就成了00000000.这就是为什么会是全0的原因。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机STC89C52RC 内部EEPROM
2011-09-06 12:15
单片机运行时的数据都存在于R A M(随机存储器)中,在掉电后R A M 中的数据是
无法保留的,那么怎
样使数据在掉电后不丢失呢?这就需要使用EEP R O M 或FL A S HR O M 等存储器来实现。
在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过I I C或S P I等接口来进行数据通信
这样不光会增加开发成本,同时在程序开发上也要花更多的心思。
在S T C单片机中内置了E E P R O M(其实是采用I S P/I A P技术读写内部F L A S H来实现E E P R O M),这样就节省了片外资源,使用起来也更加方便。
下面
就详细介绍S T C单片机内置E E P R O M及其使用方法
S T C各型号单片机内置的E E P R O M的容量最小有2K,最大有16K,基本上很好地满足项目的需要,更
方便之处就是节省了周边的E E P R O M器件,达到节省成本的目的,而且内部E E P R O M的速度比外部的
E E P R O M的速度快很多。
S T C各型号单片机内置的E E P R O M是以512字节为一个扇区,E E P R O M的起始地址=F A L S H容量值+1,
那么S T C89C52R C的起始地址为0x2000,第一扇区的起始地址和结束地址0x2000~0x21F F,第二扇区
的起始地址和结束地址0x2200~0x23F F,其他扇区如此类推。
深入重点:
�传统的E E P R O M是电可擦可编程只读存储一种掉电后数据不丢失的存储芯片。
�S T C89C52R C的E E P R O M是通过I S P/I A P技术读写内部F L A S H来实现E E P R O M。
�S T C89C52R C的E E P R O M起始地址为0x2000,以512字节为一个扇区,E E R P O M的大小为2K字节STC89C52RC 与EEPORM 实现的寄存器有6 个,分别是ISP_D AT A、
ISP_ADDRH、ISP_ADDRL
ISP_TRIG、ISP_CMD、ISP_CONTR。
1. ISP_DATA 寄存器
I S P_D A T A寄存器:I S P/I A P操作时的数据寄存器。
I S P/I A P从F l a s h的数据在此处,向F l a s h写的数据也须放在此处。
示例1:读单个字节
U I N T8E E P R O M R e a d(U I N T16a d d r)
{
……
r e t u r n I S P_D A T A;
}
示例2:写单个字节
v o i d E E P R O M W r i t e(U I N T8b y t e)
{
……
I S P_D A T A=b y t e;
}
2.ISP_ADDRH、ISP_ADDRL 寄存器
I S P_A D D R H:I S P/I A P操作时的地址寄存器高八位
I S P_A D D R L:I S P/I A P操作时的地址寄存器低八位
示例1:设置地址
v o i d E E P R O M S e t A d d r e s s(U I N T16A d d r)
{
……
I S P_A D D R H=(U I N T8)(A d d r>>8);
I S P_A D D R L=(U I N T8)A d d r;
}
3.ISP_CMD 寄存器
I S P_C M D:I S P/I A P操作时的命令模式寄存器,需要通过I S P_T R I G命令触发寄存器才能生效。
4.ISP_TRIG 寄存器
I S P/I A P命令要生效即I S P_C M D设置的命令要生效,必须通过I S P_T R I G命令触发寄存器进行触发。
触发过程很特别,只需要连续二次对I S P_T R I G寄存器赋值就可以的了,对I S P_T R I G寄存器先写入
0x46,再写入0x B9就完成命令触发的过程。
示例1:命令触发
v o i d E E P R O M C m d T r i g(v o i d)
{
……
I S P_T R I G=0x46;
I S P_T R I G=0x B9;
}
5.ISP_CONTR 寄存器
I S P_C O N T R:I S P/I A P控制寄存器
I S P E N:I S P/I A P功能允许位。
0:禁止I S P/I A P编程改变F l a s h。
S W B S:0:软件选择从用户主程序区启动1:I S P程序区启动
S W R S T:0:不操作1:产生软件系统复位,硬件自动清零
W T2、W T1、W T0:设置等待时间
假如S T C89C52R C的工作频率为12M H z,那么机器周期为1u s,参照表12-,E E P R O M的读单个字
节、写单个字节、扇区擦除的所需要的时间大致如下:
读单字节:11*1u s=11u s
写单字节:60*1u s=60u s
扇区擦除:10942*1u s=10.942m s
无论单片机运行在什么工作频率下,E E P R O M的读、写、擦除操作的所需要的时间分别约为10u s、60u s、10m s。
深入重点:
�S T C89C52R C与E E P O R M实现的寄存器有6个,分别是I S P_D A T A、I S P_A D D R H、
I S P_A D D R L I S P_T R I G、I S P_C M D、I S P_C O N T R。
�E E P R O M的命令触发必须对I S P_T R I G寄存器先写入0x46,再写入0x B9。
�无论单片机运行在什么工作频率下,E E P R O M的读、写、擦除操作的所需要的时间分别约为10u s、60u s、10m s,因而要对I S P_C O N T R设置好等待时间,否则数据容易出现问题。