微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 裸奔程序之看门狗定时器

裸奔程序之看门狗定时器

时间:11-19 来源:互联网 点击:

输出、使能上拉、关闭全部LED。(前面四句)

接着三句是设置蜂鸣器控制管脚GPB0为输出、使能上拉、关闭蜂鸣器。

我们先来看这句 rWTCON=(249<8)|(1<5)|(0<3)|(1<2);//预分频值为249,使能看门狗,分频系数为16,中断使能

通过WATCHDOG 定时器工作频率 = PCLK / {prescaler +1 } / {divider value }

{prescaler value } = 0~255, {divider value} = 16,32,64,128。

计算求得WATCHDOG工作频率为12500Hz,即每秒钟计数12500次。

再回头来看看上面那二句就很清楚的知道是定时器4秒的意思啦。

rWTDAT=50000; //设置看门狗定时器超时时间为4秒(50÷12.5)
rWTCNT=50000;

接下来是清除中断标志,注意WATCHDOG是有次级中断源的,所以需要清除二个中断挂起寄存器。

rSRCPND |=BIT_WDT_AC97;
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志

接下来是打开中断,也是打开二个中断允许寄存器。

rINTMSK &= ~(BIT_WDT_AC97);
rINTSUBMSK &= ~(BIT_SUB_WDT);//开中断

接下来是设置中断的起始地址,将中断服务程序的起始地址映射到内存。

pISR_WDT_AC97=(unsigned)Wdt_Int;//设置中断程序入口

我们进入中断服务程序看看:

——————————————————————————————————————————————

void __irq Wdt_Int(void)
{
rSRCPND |=BIT_WDT_AC97;
rINTPND |=BIT_WDT_AC97;
rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志
rGPBDAT =1; //蜂鸣器响
Delay();
rGPBDAT =0; //蜂鸣器响一段时间
}

——————————————————————————————————————————————

进入中断服务程序后,首先清楚中断标志,接着让蜂鸣器响一下,接着关闭。

最后进入死循环,前面四句是循环点亮LED灯,接着重新赋值给WTCNT,实现喂狗功能。

rWTCNT=50000; //喂狗 没喂狗蜂鸣器很响

——————————————————————————————————————————————

到这里,我们WATCHDOG 定时器的讲解结束啦。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top