IAP15W4K61S4单片机破解EEPROM使用起始地址是0x0000h吗

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
STC单片机CPU子系统
下载积分:3000
内容提示:STC单片机CPU子系统
文档格式:PDF|
浏览次数:16|
上传日期: 18:24:44|
文档星级:
全文阅读已结束,如果下载本文需要使用
 3000 积分
下载此文档
该用户还上传了这些文档
STC单片机CPU子系统
关注微信公众号IAP15W4K61S4单片机部分特殊功能寄存器_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
IAP15W4K61S4单片机部分特殊功能寄存器
&&15单片机
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢stc系列单片机eeprom操作_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
stc系列单片机eeprom操作
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢求大神 !STC15W4K61S4单片机,启动看门狗后,要怎么关闭看门狗_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:142,126贴子:
求大神 !STC15W4K61S4单片机,启动看门狗后,要怎么关闭看门狗收藏
求大神 !STC15W4K61S4单片机,启动看门狗后,要怎么关闭看门狗,或者怎么让看门狗停止计数,不让他溢出,不让他复位。下面是我遇到的问题。下面是一个样例程序,在这个程序中开机经看门狗复位,程序重新开始跑了,进入set();操作界面后,如果进入操作界面时间超过看门狗溢出时间,看门狗就会重复复位。#include &STCIAP15W4K58S4.H& sfr IAP_CONTR
// EEPROM控制寄存器
sfr WDT_CONTR
// 看门狗控制寄存器void delay1(unsigned int t)//T=t*2+5 us{ unsigned int
for (i=t;i&0;i--)
for(j=497;j&0;j--);
}void main (){
delay1(1000);
delay1(1000);
//SET();为一个设置界面的子程序;不去按按键退不出来。
while(1) { WDT_CONTR=0x3D;
delay1(1000); }}
专业从事单片机开发的生产,具有高品质的研发团队和设备,产品高品质保证,10年生产开发经验,深受国内外合作伙伴信赖,你的明智选择!!
登录百度帐号推荐应用AVR单片机EEPROM的操作 - AVR单片机 - 电子工程世界网
AVR单片机EEPROM的操作
11:09:00来源: eefocus
本程序简单的示范了如何使用ATMEGA16的EERPOM
&&&& 的简介
&&&& EEPROM的写操作
&&&& EEPROM的读操作
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器
&在打开调试文件到JTAG后,
&打开Debug -> JTAG ICE Options菜单,
&然后在JTAG ICE Properties中点击Dbug页面,将preserve eeprom选项选中。
&在每次仿真调试时候,就保护EEPROM内容了。
&否则,会按照默认设置擦除EEPROM的内容。&
&由于定义了EEPROM变量,JTAG调试时会询问是否初始化EEPROM,请选择[否]
&EEPROM的数据也可以在view->memory,选Eeprom窗口下察看
#include </io.h>
////时钟定为内部1MHz,F_CPU=1000000&&时钟频率对程序的运行没什么影响
GCCAVR(avr-libc)里面自带了EEPROM的读写函数。
下面列举部分常用函数(原型)
#define eeprom_is_ready() bit_is_clear(EECR, EEWE)
检测EEPROM是否准备好。OK返回1(返回EEWE位)
#define eeprom_busy_wait() do {} while (!eeprom_is_ready())
等待EEPROM操作完成
extern uint8_t eeprom_read_byte (const uint8_t *addr);
读取指定地址的一个字节8bit的EEPROM数据
extern uint16_t eeprom_read_word (const uint16_t *addr);
读取指定地址的一个字16bit的EEPROM数据
extern void eeprom_read_block (void *buf, const void *addr, size_t n);
读取由指定地址开始的指定长度的EEPROM数据
extern void eeprom_write_byte (uint8_t *addr, uint8_t val);
向指定地址写入一个字节8bit的EEPROM数据
extern void eeprom_write_word (uint16_t *addr, uint16_t val);
向指定地址写入一个字16bit的EEPROM数据
extern void eeprom_write_block (const void *buf, void *addr, size_t n);
由指定地址开始写入指定长度的EEPROM数据
但不支持部分AVR,原文如下:
\note This library will \e not work with the following devices since these
&&& devices have the EEPROM IO ports at different locations:
&&& - AT90CAN128
&&& - ATmega48
&&& - ATmega88
&&& - ATmega165
&&& - ATmega168
&&& - ATmega169
&&& - ATmega325
&&& - ATmega3250
&&& - ATmega645
&&& - ATmega6450
在程序中对EEPROM&操作有两种方式
方式一:直接指定EERPOM&地址
&&&&即读写函数的地址有自己指定,用于需要特定数据排列格式的应用中
方式二:先定义EEPROM&区变量法
&在这种方式下变量在EEPROM&存储器内的具体地址由编译器自动分配。
&相对方式一,数据在EEPROM&中的具体位置是不透明的。
&为EEPROM&变量赋的初始值,编译时被分配到.eeprom&段中,
&可用avr-objcopy&工具从.elf文件中提取并产生ihex&或binary&等格式的文件,
&从而可以使用编程器或下载线将其写入到器件的EEPROM&中。
&实际上WINAVR&中MFILE&生成的MAKEFILE&已经为我们做了这一切。
&它会自动生成以 &.eep& 为后缀的文件,通常它是iHex&格式
&(这次测试发现 分配地址是从0x0000开始的,故增加了一个EEPROM变量Evalvoid[16])
如果同时使用方式1和2,请注意防止地址重叠,自己指定的地址应该选在后面。
unsigned char&TA;
unsigned char ORGDATA[16]={0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,
&&&&&&&& 0x01,0x03,0x05,0x07,0x09,0x0B,0x0D,0x0F};&//原始数据
unsigned char CMPDATA[16];&&&&&&&&&&&&//比较数据
//仿真时在watch窗口,监控这些全局变量。
unsigned char Evalvoid[16] __attribute__((section(".eeprom"))); //这个没用到
unsigned char Eval[16] __attribute__((section(".eeprom")));
int main(void)
&eeprom_write_byte (0x40,0xA5);&&//向EEPROM的0x40地址写入数据&0xA5
&TA=eeprom_read_byte (0x40);&&//读出,然后看看数据对不对?
&//上面两句编译是有如下警告,但不必理会
&//EEPROM_main.c:103: warning: passing arg 1 of `eeprom_write_byte&#39; makes pointer from integer without a cast
&//EEPROM_main.c:104: warning: passing arg 1 of `eeprom_read_byte&#39; makes pointer from integer without a cast
&eeprom_write_block (&ORGDATA[0], &Eval[0], 16);&&//块写入
&//看看EEPROM数据是否是能失电永久保存,可以注释上面这句程序(不写入,只是读出),然后编译,烧写,断电(一段时间),上电,调试。
&eeprom_read_block (&CMPDATA[0],&Eval[0], 16);&& &//块读出,然后看看数据对不对?
&&& while (1);&&&&
ATmega16&包含512&字节的EEPROM&数据存储器。
它是作为一个独立的数据空间而存在的,可以按字节读写。
EEPROM的寿命至少为100,000&次擦除周期。
EEPROM的访问由地址寄存器EEAR、数据寄存器EEDR和控制寄存器EECR决定。
也可以通过ISP和JTAG及并行电缆来固化EEPROM数据
EEPROM数据的读取:
&当EEPROM地址设置好之后,需置位EERE以便将数据读入EEDR。
&EEPROM数据的读取需要一条指令,且无需等待。
&读取EEPROM后CPU&要停止4&个时钟周期才可以执行下一条指令。
注意:用户在读取EEPROM&时应该检测EEWE。如果一个写操作正在进行,就无法读取EEPROM,也无法改变寄存器EEAR。
EEPROM数据的写入:
1 EEPROM的写访问时间(自定时时间,编程时间)
&&&&自定时功能可以让用户软件监测何时可以开始写下一字节。(可以采用中断方式)
&经过校准的1MHz片内振荡器用于EEPROM定时,不倚赖CKSEL熔丝位的设置。
&改变OSCCAL寄存器的值会影响内部RC振荡器的频率因而影响写EEPROM的时间。
&EEPROM自定时时间约为8.5 ms&即1MHz片内振荡器的8448个周期
注意:这个时间是硬件定时的,数值比较保险,其实真正的写入时间根本就用不了8.5mS那么长,而且跟电压有关,但芯片没有提供其他的检测编程完成的方法&
&&&&&这个问题表现在旧版的AT90S系列上面,由于没有自定时,数值定得太短,ATMEL给人投诉到头都爆,呵呵!
参考:&《用ATmega8535替换AT90S8535》文档里面的
&&&&&写EEPROM定时的改进
&&&&&在AT90S8535中写EEPROM的时间取决于供电电压,通常为,。
&&&& ATmega8535中写EEPROM的时间为8448个校准过的RC振荡器周期&(与系统时钟的时钟源和频率无关)。
&&&&&假定校准过的RC振荡器为1.0MHz,则写时间的典型值为8.4ms,与VCC&无关。
2&为了防止无意识的EEPROM&写操作,需要执行一个特定的写时序
&&&& (如果使用编译器的自带函数,无须自己操心)
&写时序如下(&第3&步和第4&步的次序并不重要):
&1.&等待EEWE&位变为零
&2.&等待SPMCSR&中的SPMEN&位变为零
&3.&将新的EEPROM&地址写入EEAR(&可选)
&4.&将新的EEPROM&数据写入EEDR(&可选)
&5.&对EECR&寄存器的EEMWE&写"1",同时清零EEWE
&6.&在置位EEMWE&的4&个周期内,置位EEWE
&经过写访问时间之后,EEWE&硬件清零。
&用户可以凭借这一位判断写时序是否已经完成。
&EEWE&置位后,CPU要停止两个时钟周期才会运行下一条指令。
&1:在CPU&写Flash&存储器的时候不能对EEPROM&进行编程。
&&&在启动EEPROM&写操作之前软件必须检查&Flash&写操作是否已经完成
&&&&&&步骤(2)&仅在软件包含引导程序并允许CPU对Flash&进行编程时才有用。
&&&&&&如果CPU&永远都不会写Flash,步骤(2)&可省略。
&2:如果在步骤5&和6&之间发生了中断,写操作将失败。
&&&&&&因为此时EEPROM&写使能操作将超时。
&&&&&&如果一个操作EEPROM的中断打断了另一个EEPROM操作,EEAR&或EEDR寄存器可能被修改,引起EEPROM&操作失败。
&&&&&&建议此时关闭全局中断标志I。
&&&&&&经过写访问时间之后,EEWE&硬件清零。用户可以凭借这一位判断写时序是否已经完成。
&&&&& EEWE&置位后,CPU要停止两个时钟周期才会运行下一条指令。
在掉电下的EEPROM写操作
&若程序执行掉电指令时EEPROM&的写操作正在进行,&EEPROM&的写操作将继续,并在指定的写访问时间之前完成。
&但写操作结束后,振荡器还将继续运行,并非处于完全的掉电模式。因此在执行掉电指令之前应结束EEPROM&的写操作。
防止EEPROM数据丢失
&若电压过低,CPU和EEPROM有可能工作不正常,造成EEPROM数据的毁坏(丢失)。
&& **这种情况在使用独立的EEPROM&器件时也会遇到。因而需要使用相同的保护方案。
&由于电压过低造成EEPROM&数据损坏有两种可能:
&&一是电压低于EEPROM&写操作所需要的最低电压;
&&二是CPU本身已经无法正常工作。
&EEPROM&数据损坏的问题可以通过以下方法解决:
&&当电压过低时保持AVR RESET信号为低。
&&这可以通过使能芯片的掉电检测电路BOD来实现。如果BOD电平无法满足要求则可以使用外部复位。
&&若写操作过程当中发生了复位,只要电压足够高,写操作仍将正常结束。
&& (EEPROM在2V低压下也能进行写操作---有可以工作到1.8V的AVR芯片)
掉电检测BOD的误解
&&AVR自带的BOD(Brown-out Detection),作用是在电压过低(低于设定值)时产生复位信号,防止CPU意外动作.
&&对EEPROM的保护作用是当电压过低时保持RESET信号为低,防止CPU意外动作,错误修改了EEPROM的内容
&&而我们所理解的掉电检测功能是指 具有预测功能的可以进行软件处理的功能。
&&例如,用户想在电源掉电时把SRAM数据转存到EEPROM,可行的方法是&
&&&&&外接一个在4.5V翻转的(VCC=5.0V,BOD=2.7V),输出接到外部中断引脚(或其他中断)
&&&&&一但电压低于4.5V,马上触发中断,在中断服务程序中把数据写到EEPROM中保护起来
&注意:&写一个字节的EEPROM时间长达8mS,所以不能写入太多数据,电源滤波电容也要选大一些
关键字:&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。}

我要回帖

更多关于 单片机原理及应用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信