- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
此文档共包含三个程序。第一个程序最简单易懂,看懂了基本就会读写51单片机内部EEPROM了。第二个程序和第一个读写EEPROM原理差不多,包含有LCD1602操作方法,有写字符串的方法。第三个程序在原有基础上增加了外部中断功能,细心的人会发现,操作内部EEPROM过程会将总中断关闭,实际上程序要用到中断时只需在原有的EEPROM操作后加上开总中断即可。验证第二、第三个程序时需按程序内主程序中的操作说明进行烧录单片机,以验证是否成功操作单片机内部EEPROM。程序1:/*************************************************************** 作品:EEPROM实验,开机还原关电前LED的亮灭状况 单片机:STC89C52RC 晶振:12M编译环境:Keil uVision4 V9.00***************************************************************/ //#include STC89C52RC.H#include reg52.h#include intrins.h#define uchar unsigned char #define uint unsigned int /****************特殊功能寄存器声明****************/sfr ISP_DATA = 0xe2; sfr ISP_ADDRH = 0xe3; sfr ISP_ADDRL = 0xe4; sfr ISP_CMD = 0xe5; sfr ISP_TRIG = 0xe6; sfr ISP_CONTR = 0xe7;sbit LED1 = P2^0;sbit LED2 = P2^1;sbit K1 = P3^2; //按钮1sbit K2 = P3^3; //按钮2void cc(uint addr);void xcx(uint addr,uchar dat);uchar dcx(uint addr);void Q0();/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:主程序┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*//*void main(void){ uchar V; V = dcx(0x2002); // 开机读取EEPROM区2002h数据,还原关电前LED的亮灭状况 if(V == 2) {LED1=0;LED2=1;} else if(V == 6){LED1=0;LED2=0;} while(1) { if(!K1) { while(!K1); LED1=0;LED2=1; cc(0x2000); // 擦除第1个扇区(2000h~21FFh) xcx(0x2002,2); // 对EEPROM区2002h写入2 } if(!K2) { while(!K2); LED1=0;LED2=0; cc(0x2000); // 擦除第1个扇区(2000h~21FFh) xcx(0x2002,6); // 对EEPROM区2002h写入6 } }}*//*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:擦除某一扇区(每个扇区512字节)入口:addr = 某一扇区首地址┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/void cc(uint addr){// 打开 IAP 功能(ISP_CONTR.7)=1:允许编程改变Flash, 设置Flash操作等待时间// 0x83(晶振5M) 0x82(晶振10M) 0x81(晶振20M) 0x80(晶振40M) ISP_CONTR = 0x81; ISP_CMD = 0x03; // 用户可以对Data Flash/EEPROM区进行扇区擦除 ISP_ADDRL = addr; // ISP/IAP操作时的地址寄存器低八位, ISP_ADDRH = addr8; // ISP/IAP操作时的地址寄存器高八位。 EA =0; ISP_TRIG = 0x46; // 在ISPEN(ISP_CONTR.7)=1时,对ISP_TRIG先写入46h, ISP_TRIG = 0xB9; // 再写入B9h,ISP/IAP
原创力文档


文档评论(0)