辜渝傧

13037102709

027-87870986

教学实训

您当前的位置:首页 > 教学资源 > 实训方案 >

无线传感网络实训|实验2.7 看门狗实验

发布者:唯众    布时间:2020-11-27 15:29:06    点击量:

1.实验目的

看门狗是在软件跑飞的情况下CPU自恢复的一个方式,当软件在选定的时间间隔内不能置位 看门狗定时器(WDT),WDT就复位系统。看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境。如果系统不需要应用到看门狗,则WDT可配置成间隔定时器,在选定时间间隔内产生中断。WDT的特性如下:4个可选择的时间间隔看门狗定时器模式下产生中 断请求时钟独立于系统时钟,WDT 包括一个15位定时/计数器,它的频率由 32.768KHz的晶振。

2.实验设备

硬件:PC机1台、ZIGBEE节点板1套(底板、核心板、仿真器、USB 线)
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境

3.实验相关电路图

实验2.7 看门狗实验

4.实验相关寄存器

实验2.7 看门狗实验

5.源码分析

# include <ioCC2530.h>
#define uint unsigned int
#define BUZZER         P1_3             //定义BUZZER为P13口控制
 
void Initial(void)
{
       P1DIR |= 0x08;                        //P13定义为输出
       BUZZER = 0;
       BUZZER = 1;
       BUZZER = 1;
}
void Init_Watchdog(void)
{
WDCTL = 0x00;
//时间间隔一秒,看门狗模式
WDCTL |= 0x08;
//启动看门狗
}
void SET_MAIN_CLOCK(source)
{
if(source) {
CLKCONCMD |= 0x40; /*RC*/
while(!(CLKCONSTA &0X40)); /*待稳*/
}
else {
CLKCONCMD &= ~0x47; /*晶振*/
while((CLKCONSTA &0X40)); /*待稳*/
}
}
void FeetDog(void)
{
WDCTL = 0xa0;
WDCTL = 0x50;
}
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
void main(void)
{
SET_MAIN_CLOCK(0) ;
Initial();
Init_Watchdog();
Delay(1000);
BUZZER=0;
Delay(1000);
while(1)
{
//FeetDog();
} //喂狗指令(加入后系统不复位,蜂鸣器不再蜂鸣)
}

6.实验现象

       主循环中使用喂狗语句,则系统不复位,蜂鸣器响一声之后就不响了;否则一直响。


上一篇:无线传感网络实训|实验2.6 外部中断控制蜂鸣器

下一篇:无线传感网络实训|实验2.8 中断唤醒睡眠实验