历史上的今天
返回首页

历史上的今天

今天是:2025年03月03日(星期一)

正在发生

2020年03月03日 | AVR看门狗详解

2020-03-03 来源:eefocus

简介:AVR看门狗 一个硬件单元,当程序由于某种原因跑“飞”了,它就Reset程序。就像小狗看门一样。


AVR看门狗 一个硬件单元,当程序由于某种原因跑“飞”了,它就Reset程序。就像小狗看门一样。


//Watchdog initialize


// prescale: 2048K


void watchdog_init(void)


{


WDR(); //this prevents a timout on enabling


WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs


}


上面是用ICC的App Builder生成的看门狗初始化程序,这些语句达不到初始化看门狗的目的,需要在中间加一句WDTCR = 0x1F; 。最后一行代码提醒狗主人,别忘了及时清零看门狗定时器(喂狗),否则,小狗就咬人了。


一个相对独立的计数自动重启单片机的硬件部件,如果启用它后,不在一定的时间内清除它的计数值,就会达到计数的最高值而溢出,然后它就指挥单片机重启。 所以要在你的程序里适当的加入清看门狗的指令,一旦你的单片机程序出了问题,当然就不能按照你的程序原先设定那样自动清看门狗了,也就是常说的程序跑飞了,这个时候看门狗就会重启单片机试图解决问题。一般只对瞬间干扰造成的问题有效,要是长时间的干扰或是软硬件问题,看门狗的意义不是很大。


我的理解 就象是监视程序执行的保安一样, 程序正常执行时会在他的益处时间之内给他一 个复位信号,当程序跑飞的时候他在溢出时间之内是收不到复 位信号的,这时看门狗就会在设定的时间内产生系统复位的信号!


AVR的看门狗是软狗,也是硬狗! 如果熔丝位不设定,就是软狗,因为程序可以关闭,也可以打开 如果熔丝位设定了,就是硬狗,因为程序只可以清除,而无法打开或关闭!


是不是在程序中加入 WDR(); 就算“喂狗”了?喂狗好象要计算好时间吧?我每执行一个函数就喂狗一次如何?


如果你的循环体内每循环一次的时间不超过看门狗的复位时间,主要喂狗一次就可以了。


AVR看门狗程序范例,程序演示了看门狗的复位过程,使用了本站新手入门的第一个范例,普通情况下,程序最后陷入死循环,但是这个程序里,看门狗让单片机复位,你会看见LED一直闪动,效果和第一个范例程序相同。


就两点,初始化,然后喂狗,喂狗要在看门狗咬人之前,(复位之前喂狗)。



1.jpg?imageView2/2/w/550



//ICC-AVR application builder : 2012-1-31 17:27:04


// Target : M16


// Crystal: 7.3728Mhz


// Auther: 古欣


// 看门狗复位演示程序。


#include


#include


void port_init(void)


{


PORTA = 0x03; //设置为输出


DDRA = 0x03; //高电平,两个LED都灭


PORTB = 0x00;


DDRB = 0x00;


PORTC = 0x00; //m103 output only


DDRC = 0x00;


PORTD = 0x00;


DDRD = 0x00;


}


//Watchdog initialize


// prescale: 2048K //预分频越大,定时时间越长,也就是可以更长时间不喂


// 约为2.1s复位 (根据数据手册,2048K,5V典型值)


void watchdog_init(void)


{


WDR(); //this prevents a timout on enabling


WDTCR = 0x1F; //特别注意这一条不是ICC生成的,是后来加上的。


WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs


}


//加入了喂狗的延时程序


void Delay(void)


{


unsigned char i,j;


for(i=200;i>0;i--)


{


for(j=200;j>0;j--)


;


}


WDR(); //这里喂狗


}


//call this routine to initialize all peripherals


void init_devices(void)


{


//stop errant interrupts until set up


CLI(); //disable all interrupts


port_init();


watchdog_init();


MCUCR = 0x00;


GICR = 0x00;


TIMSK = 0x00; //timer interrupt sources


SEI(); //re-enable interrupts


//all peripherals are now initialized


}


void main(void)


{


unsigned int i;


init_devices(); //初始化


for(i=10;i>0;i--) //看到程序的闪动


{


PORTA = 0x02; //1脚为高,0脚为低,0脚灯亮


Delay(); //延时


PORTA = 0x01; //0脚为高,1脚为低,1脚灯亮


Delay(); //延时


}


while(1) //普通情况下,程序会陷入这里一直循环。


; //看门狗能够让单片机复位,程序重新运行,我们看到LED闪烁。


//如果在这里加入WDR(); 喂狗,单片机就不会复位了。


}


补充,特别说明


使能看门狗不能用 |=,必须要直接赋值=。


还有数据手册上说:


改变定时器溢出时间及禁止(已经使能的)看门狗定时器需要执行一个特定的时间序列:


1. 在同一个指令内对WDCE 和WDE 写"1“,即使WDE 已经为"1“。


2. 在紧接的4 个时钟周期之内将WDE 和WDP 设置为合适的值,而WDCE 写"0”。


所以在WDTCR=0x0E;之前加上一句WDTCR=0x1F;


void watchdog(void)


{


WDR(); //看门狗计数清零


WDTCR=0x1F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S


WDTCR=0x0F; //使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S


}


initial_WDT:


WDR ;2011-09-22增加看门狗


LDI R16, $1F


OUT WDTCR,R16 ;使能watchdog,并且,采用2048K分频,典型溢出时间5V时2.1S


LDI R16, $0F


OUT WDTCR,R16

推荐阅读

史海拾趣

AirBorn公司的发展小趣事

AirBorn公司成立于1958年,总部位于得克萨斯州奥斯汀。在创立之初,AirBorn就致力于设计、制造和销售高性能连接器和电缆组件。随着电子技术的飞速发展,AirBorn敏锐地捕捉到航空航天领域对高性能连接器的需求,并开始了针对这一领域的定制化产品研发。凭借卓越的技术实力和创新能力,AirBorn很快在航空航天连接器市场占据了一席之地。

ANSHAN [Anshan Suly Electronics]公司的发展小趣事

进入新世纪,随着科技的快速发展,电子产品更新换代速度日益加快。ANSHAN公司深知技术创新的重要性,不断加大研发投入,积极引进先进技术和设备。在一次重要的技术攻关中,公司研发团队成功突破了一项关键技术难题,推出了一款性能卓越、价格实惠的新型电子产品,受到了市场的热烈欢迎。这一技术突破不仅提升了公司的核心竞争力,也为公司的后续发展奠定了坚实基础。

ELINA INDEK公司的发展小趣事

随着技术的成熟和市场的扩大,因美纳开始积极拓展全球市场。公司通过与全球各地的经销商建立合作关系,将产品销往世界各地。同时,因美纳还在多个国家和地区设立了研发中心和生产基地,以便更好地满足当地市场的需求。这种全球化战略不仅为公司带来了更多的市场机会,也提高了公司的国际影响力。

(注意:由于篇幅限制,此处仅提供三个故事的梗概,每个故事的实际字数可能稍少于500字。同时,由于"ELINA INDEK"并非真实存在的公司,因此以下故事均基于因美纳公司的发展情况进行编写。)

DPA Components International公司的发展小趣事

作为一家具有社会责任感的企业,DPA Components International公司始终关注社会公益事业。公司积极参与各种公益活动,如扶贫助学、环保行动等,为社会做出了积极贡献。此外,DPA还关注行业发展和社会进步,积极参与行业交流和合作,推动整个电子行业的健康发展。通过担当社会责任,DPA不仅提升了企业的社会形象,也为社会的进步和发展做出了积极贡献。

Digital Voice Systems Inc公司的发展小趣事

Digital Voice Systems, Inc.(DVSI)于1988年成立,当时正值数字通信技术的兴起阶段。公司创始人凭借对语音编解码技术的深刻理解和前瞻性的市场洞察力,决定投身于这一领域。他们开发出了具有专利保护的基于鲁棒性多带激励模型(MBE Model)的低码率语音压缩算法,如IMBE和AMBE编解码系统。这些算法在当时的市场上独树一帜,为DVSI赢得了第一桶金。

在创立初期,DVSI面临着资金、技术、市场等多方面的挑战。然而,他们凭借着坚定的信念和不懈的努力,逐步克服了这些困难。他们不断投入研发,优化算法,提高产品的性能和稳定性;同时,他们积极开拓市场,与各大通信设备制造商建立合作关系,将产品推向市场。

随着时间的推移,DVSI的产品逐渐在市场上获得了认可。他们的编解码系统被广泛应用于移动通信、卫星通信、军事通信等领域,为客户提供了高效、稳定的语音通信解决方案。DVSI也因此逐渐崭露头角,成为了电子行业中一颗耀眼的明星。

故事二至五框架概述

  1. 技术创新与突破:DVSI在语音编解码技术方面的持续创新,如推出新一代的高效压缩算法,进一步提升了产品的竞争力。
  2. 市场拓展与国际化:随着公司实力的增强,DVSI开始拓展国际市场,与全球多家知名企业建立合作关系,实现了国际化发展。
  3. 合作与竞争:在电子行业中,DVSI与其他企业的合作与竞争并存。他们通过合作共赢的方式,共同推动行业的发展;同时,也面临着来自竞争对手的挑战和竞争压力。
  4. 企业文化与团队建设:DVSI注重企业文化建设,倡导创新、协作、共赢的价值观。他们注重团队建设,吸引了一批优秀人才加入公司,为公司的发展提供了有力的人才保障。

以上故事和框架概述仅供参考,您可以根据这些线索进一步挖掘和编写关于DVSI公司的故事。

Abbotec Incorporated公司的发展小趣事

Abbotec Incorporated公司自成立以来,一直致力于电子技术的研发与创新。在某一年,公司研发团队成功开发出一款具有划时代意义的芯片,这款芯片在性能上大幅提升,同时降低了能耗。这一技术突破迅速引起了业界的关注,Abbotec因此获得了大量的订单,公司规模迅速扩大。

问答坊 | AI 解惑

山寨版:教你如何做时光机器!(转)

1、准备一张厚厚的,防水的,质量好的纸,至少要100克的,但表面不能太光滑,防止墨迹脱落。      2、在纸上用郑重的语气写上,给我的第N代子孙,我是你的祖先XXX,出生在XXXX年,我留下这张纸的时间是XXX年……      3、按照以上的 ...…

查看全部问答>

扫频仪和频谱仪有什么不同?

新手问:扫频仪和频谱仪有什么不同?…

查看全部问答>

wince程序开发 问题

各位大虾,导师让我开发一个wince程序,我照着书开始配环境 安装了visualstudio.net 2005       visual studio.net 2005 service pack package 1       windows embedded ce 6.0.msi    &nb ...…

查看全部问答>

嵌入式Linux与WinCE的优缺点比较

1.支持多种硬件平台  由于嵌入式设备硬件平台的多样性,CPU芯片的快速更新,嵌入式操作系统要求支持常用的嵌入式CPU,如X86, ARM, MIPS, POWERPC等,并具有良好的可移植性。另外还需要支持种类繁多的外部设备。Linux支持以上几乎所有的主流芯片, ...…

查看全部问答>

小螃蟹成功诞生,发帖庆祝

魔方机器人,取名小螃蟹,这只小螃蟹可以用两个钳子解开魔方,特发上来和大家分享下 视频地址:http://v.youku.com/v_show/id_XMjU0MTE3Mzgw.html, 详情关注:http://hi.baidu.com/jialaolian629/blog(打个广告 ) 大家有兴趣可以跟帖交流,嘿 ...…

查看全部问答>

求高手解释下图中的引导方式~~~~~~~~~~

到底什么是引导? 图中的引导方式过程中DSP芯片内部做了什么事情???吾乃初学者求解。。。。。…

查看全部问答>

2A太阳能,温差的能量收集, 凌特的芯片:LT3652和LTC3108.

2A太阳能,温差的能量收集, 凌特的芯片:LT3652和LTC3108. 社区各位好:目前在做的主要涉及凌特的两个芯片LT3652和LTC3108.1、LT3652用于太阳能, 2A ,最大功率跟踪,Energy Harvesting用途:大功率的太阳能能量收集,用在太阳能充 ...…

查看全部问答>

430求助

51的c语言和430的编程方法差别好大~~~   FG4618的板子,只有电路图,怎么入门??? datasheet也是英文~~~~      感觉点灯都很难~~~主要还是编程方法不能适应,求大神指点一二…

查看全部问答>