stc12c5a60s2封装用啥软件烧写程序时mcu型号选啥

常用程序模块备份(一):STC12C5A60S2自带EEPROM
其实早就应该养成一个良好的程序备份习惯,现在放在这里即方便自己随时在其他地方调用、备份,也可以帮到需要的人。
对于stc自带EEPROM来说,用起来唯一不太方便的地方就是每次修改任何一个字节需要将整个扇区都擦除才能修改,所以每次修改都要讲整个扇区内容用数组全部读出缓存起来,进行擦除操作,讲需要修改的内容在相应的数组位置修改好,再讲整个数组内容重新写入到EEPROM里,头文件中我已经将接口函数都写好啦。直接调用就行,不用考虑任何问题,而且地址也直接从0开始到
USING_CHAR_NUM-1(USING_CHAR_NUM最大可到512)
EEPROM.h-----------------------------------------------------------------------------------------------------
#ifndef __EEPROM_H__
#define __EEPROM_H__
unsigned char EepromReadByte(unsigned char addr);
void EepromWriteByte(unsigned char addr, unsigned char dat);
EEPROM.c-----------------------------------------------------------------------------------------------------
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
IAP_DATA&&&&&
& //Flash data register
IAP_ADDRH&&&&
0xC3;&&&&&&&&&&&&&
//Flash address HIGH
IAP_ADDRL&&&&
0xC4;&&&&&&&&&&&&&
//Flash address LOW
IAP_CMD&&&&&&
0xC5;&&&&&&&&&&&&&
//Flash command register
IAP_TRIG&&&&&
0xC6;&&&&&&&&&&&&&
//Flash command trigger
IAP_CONTR&&&&
0xC7;&&&&&&&&&&&&&
//Flash control register
CMD_IDLE&&&&&
0&&&&&&&&&&&&&&&&
//Stand-By
CMD_READ&&&&&
1&&&&&&&&&&&&&&&&
//Byte-Read
CMD_PROGRAM&&
2&&&&&&&&&&&&&&&&
//Byte-Program
CMD_ERASE&&&&
3&&&&&&&&&&&&&&&&
//Sector-Erase
ENABLE_IAP&&&
0x82&&&&&&&&&&&&&
//if SYSCLK&20MHz
//Start address for STC12C5A60S2 series EEPROM
IAP_ADDRESS&& 0x0000
#define&&&
USING_CHAR_NUM&& 11
void IapIdle();
BYTE IapReadByte(WORD addr);
void IapProgramByte(WORD addr, BYTE dat);
void IapEraseSector(WORD addr);
unsigned char EepromReadByte(unsigned char addr)
return(IapReadByte(addr));
void EepromWriteByte(unsigned char addr, unsigned char dat)
&&& unsigned
char eepromBUF[USING_CHAR_NUM];
&&& unsigned
&&& for(i=0;
i& USING_CHAR_NUM; i++)
eepromBUF[IAP_ADDRESS+i] =
IapReadByte(IAP_ADDRESS+i);&&&
&&& if(addr &
USING_CHAR_NUM)
eepromBUF[IAP_ADDRESS+addr] =
IapEraseSector(IAP_ADDRESS);
&&& for(i=0;
i& USING_CHAR_NUM; i++)
IapProgramByte(IAP_ADDRESS+i,
eepromBUF[IAP_ADDRESS+i]);&&&
//void EepromInit(void)
//&&& unsigned
int tmp = 0;
//&&& tmp =
IapReadByte(IAP_ADDRESS+1);
//&&& tmp = (tmp
&& 8) + IapReadByte(IAP_ADDRESS);
//&&& if(0xffff
IapProgramByte(IAP_ADDRESS,(BYTE)0);
IapProgramByte(IAP_ADDRESS+1,(BYTE)0);
IapEraseSector(IAP_ADDRESS);
IapProgramByte(IAP_ADDRESS,(BYTE)tmp );
IapProgramByte(IAP_ADDRESS+1,(BYTE)(tmp&&8) );
void IapIdle()
IAP_CONTR =
//Close IAP function
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
BYTE IapReadByte(WORD addr)
&&&&&&&&&&&&&&&&&&&&&&&&&
//Data buffer
IAP_CONTR = ENABLE_IAP;&& //Open
IAP function, and set wait time
CMD_READ;&&&&&&&
//Set ISP/IAP/EEPROM READ command
IAP_ADDRL =
&&&&&&&&&&&&&&&&
//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr &&
//Set ISP/IAP/EEPROM address high
IAP_TRIG =
0x5a;&&&&&&&&&&&&&&&
//Send trigger command1 (0x5a)
IAP_TRIG =
0xa5;&&&&&&&&&&&&&&&&&
//Send trigger command2 (0xa5)
_nop_();&&&&&&&&&&&&&&&&&&&&&&&&&
//MCU will hold here until ISP/IAP/EEPROM
//operation complete
IAP_DATA;&&&&&&&&&&&
//Read ISP/IAP/EEPROM data
IapIdle();&&&&&&&&&&&&&&&&&&&&&&&&
//Close ISP/IAP/EEPROM function
&&&&&&&&&&&&&&&&&&&&&&&
//Return Flash data
void IapProgramByte(WORD addr, BYTE dat)
& IAP_CONTR =
ENABLE_IAP;&&&&&&&&
//Open IAP function, and set wait time
CMD_PROGRAM;&&&&
//Set ISP/IAP/EEPROM PROGRAM command
IAP_ADDRL =
&&&&&&&&&&&&&&&&
//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr &&
8;&&&&&&&&&&&
//Set ISP/IAP/EEPROM address high
IAP_DATA =
&&&&&&&&&&&&&&&&&
//Write ISP/IAP/EEPROM data
IAP_TRIG =
0x5a;&&&&&&&&&&&&&&&&&&
//Send trigger command1 (0x5a)
IAP_TRIG =
0xa5;&&&&&&&&&&&&&&&&&&
//Send trigger command2 (0xa5)
_nop_();&&
_nop_();&&&&&&&&&&&&&&&&&&&&&&&
//MCU will hold here until ISP/IAP/EEPROM
//operation complete
IapIdle();
void IapEraseSector(WORD addr)
IAP_CONTR = ENABLE_IAP;& //Open IAP function, and
set wait time
CMD_ERASE;&&&&&
//Set ISP/IAP/EEPROM ERASE command
IAP_ADDRL =
&&&&&&&&&&&&&&&
//Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr &&
8;&&&&&&&&
//Set ISP/IAP/EEPROM address high
IAP_TRIG =
0x5a;&&&&&&&&&&&&&&&&&&
//Send trigger command1 (0x5a)
IAP_TRIG =
0xa5;&&&&&&&&&&&&&&&&&&
//Send trigger command2 (0xa5)
_nop_();&&&&&&&&&&&&&&&&&&&&&&&&
//MCU will hold here until ISP/IAP/EEPROM
//operation complete
IapIdle();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。STC12C5A60S2怎样下载程序?|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
本人菜鸟一只。刚拍了一个“全能”的STC12C5A60S2,问题来了:用keil编程时应选哪种型号的单片机呢?另外下载程序时必须使用外部晶振吗?谢谢大家啦!
赞助商链接
第一次下载时必须要用外部晶振,然后在下载软件里选上启用内部晶振,下次下载时就可以不用外部晶振了,不过每次都要选上内部晶振,有一次没选的话,下次就要加上外部晶振才能下载。KEIL中选型号的我也有点不明白,宏晶网站上有替换的文件,但我替换了也没有STC的。我用时就选Atmel的At89c51,然后自己整个60S2的头文件放到C盘KEIL头文件的文件夹里。一样用。
赞助商链接
转STC官方的说明:13.1 编译器/汇编器的说明及头文件 STC单片机应使用何种编译器/汇编器: 1.任何老的编译器/汇编器都可以支持,流行用Keil&&C51 2.把STC单片机当成Intel的/87C54/87C58或Philips的P87C52/P87C54/P87C58编译, 头文件包含&reg51.h&即可。新增特殊功能寄存器用sfr声明,新增特殊功能寄存器位用sbit声 明。例如,对要用到的新增P4口特殊功能寄存器及特殊功能寄存器位的地址声明。。。新手看看这个:《STC开发/烧录/ISP工具超详细使用说明,12/4/17 》下载地址:
没用过STC,是不是这个?[attachment=2031313]
这个,加到keil里。压缩包里有使用说明。[attachment=2031314]
用你的方法,我发现我的3个STC11F02(E)根本没坏:原来我不用外部晶振的。为了把P3.6用作IO口,我引进了外部晶振(可能是电子表上用的),结果折腾几下以后,发现无法下载了。我以为单片机挂了,后来发现用新买的12M晶振做外部晶振就可以下载。我就以为是内部晶振挂了。看了你的方法,我先用12M外部晶振下载成功以后,再改成内部晶振下载就成功了,之后即便去掉外部晶振也能下载啦。其中的道理我不太明白。但是真的谢谢你的方法!
你看看我这个帖子吧KEIL里完美增加STC器件列表 其他MCU不覆盖
谢谢楼主,楼主好人&& 我在下面找方法
查看完整版本: [--
Powered by
Gzip enabled403 Forbidden
403 ForbiddenSTC12C5A60S2系列单片机EEPROM的应用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC12C5A60S2系列单片机EEPROM的应用
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩15页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 stc12c5a60s2封装 的文章

 

随机推荐