看门狗问题请教,谢谢。第一次提问,不懂请教我

/*******************************************************************************

  • 文件名称:WDTAsWD_Ex.c
  • 功 能:CC253x系列片上系统基础实验--- 看门狗定时器作为看门狗
  • 描 述:让看门狗定时器工作在看门狗模式,超时时间为0.25s(即到达0.25s之前还
  • 没喂狗就产生复位)。程序首先闪烁LED6(蓝色)、LED5(绿色)和LED4(黄色)
  • ,没有喂狗,当用户按下SW5的时候就进入喂狗循环,LED停止闪烁

  • 实验硬件:SK-SmartRF05EB
  • 作 者:POWER
  • 日 期:2010-04-18 ******************************************************************************/

/* 包含头文件 /
/
*******************************************************************/
#include "ioCC2530.h" // CC2530的头文件,包含对CC2530的寄存器、中断向量等的定义
/********************************************************************/

/*********************************************************************

  • 函数名称:delay
  • 功 能:软件延时
  • 入口参数:无
  • 出口参数:无
  • 返 回 值:无
    ********************************************************************/
    void delay(void)
    {
    unsigned short i; // 定义无符号16位(bit)整型变量i,取值范围0~65535
    unsigned char j; // 定义无符号8位(bit)整型变量j,取值范围0~255

    for(i=0;i<10000;i++)
    {
    for(j=0;j<200;j++)
    {
    /* 插入三条汇编指令NOP */
    asm("NOP");
    asm("NOP");
    asm("NOP");
    asm("NOP");
    }

    }

    }

/*********************************************************************

  • 函数名称:BlinkLeds
  • 功 能:闪烁LED
  • 入口参数:无
  • 出口参数:无
  • 返 回 值:无
    ********************************************************************/
    void BlinkLeds(void)
    {
    /* 熄灭LED6(蓝色)、LED5(绿色)和LED4(黄色) */
    P1_0 = 0; // P1.0输出低电平熄灭其所控制的LED6(蓝色)
    P1_1 = 0; // P1.1输出低电平熄灭其所控制的LED5(绿色)
    P1_4 = 0; // P1.4输出低电平熄灭其所控制的LED4(黄色)

    delay(); // 延时

    /* 点亮LED1(绿色)、LED2(红色)和LED3(黄色) */
    P1_0 = 1; // P1.0输出高电平点亮其所控制的LED6(蓝色)
    P1_1 = 1; // P1.1输出高电平点亮其所控制的LED5(绿色)
    P1_4 = 1; // P1.4输出高电平点亮其所控制的LED4(黄色)

    delay(); // 延时

    }

/*********************************************************************

  • 函数名称:FeedWD
  • 功 能:喂狗
  • 入口参数:无
  • 出口参数:无
  • 返 回 值:无 ********************************************************************/ void FeedWD(void) { WDCTL |= 0xA0; WDCTL |= 0x50; }

/*********************************************************************

  • 函数名称:main
  • 功 能:main函数入口
  • 入口参数:无
  • 出口参数:无
  • 返 回 值:无
    ********************************************************************/
    void main(void)
    {
    unsigned char i;

    /*
    由於CC253x系列片上系统上电复位后,所有21个数字I/O均默认为具有
    上拉的通用输入I/O,因此本实验只需要改变作为LED控制信号的P1.0和P1.1
    和P1.4方向为输出即可。另外还需要将P0.4设置为输入上拉模式。
    在用户的实际应用开发中,我们建议用户采用如下步骤来配置数字I/O:
    1. 设置数字I/O为通用I/O
    2. 设置通用I/O的方向
    3. 若通用I/O的方向被配置为输入,可配置上拉/下拉/三态模式
    4. 若通用I/O的方向被配置为输出,可设置其输出高/低电平
    /
    /
    配置P1.0、P1.1和P1.4的方向为输出 /
    P1DIR |= 0x13; // 0x13 = 0B00010011
    /
    设置P0.4为三态 /
    P0INP |= 0x10;
    /
    设置P0口为上拉*/

    P2INP |= (0x01 << (0+5));

    P1_0 = 0; // P1.0输出低电平熄灭其所控制的LED6(蓝色)
    P1_1 = 0; // P1.1输出低电平熄灭其所控制的LED5(绿色)
    P1_4 = 0; // P1.4输出低电平熄灭其所控制的LED4(黄色)

    /* LED1(绿色)、LED2(红色)和LED3(黄色)闪烁8次 */
    for(i=0;i<8;i++)

    BlinkLeds();

    /* 选择32.768KHz晶体振荡器作为32KHz时钟源 */
    CLKCONCMD &= ~0x80; // 选择32.768KHz晶体振荡器作为32KHz时钟源
    while((CLKCONSTA & 0x80) == 0x80); // 等待32.768KHz晶体振荡器稳定

    /* 配置并启动看门狗定时器*/
    WDCTL |= ((0x02 << 2) | // 看门狗模式
    (0x01 << 0)); // 最终计数值8192,即超时时间为0.25s(32.768KHz晶体振荡器作为32KHz时钟源)

    FeedWD(); // 喂狗

    /* 循环喂狗 */
    while(1)
    {

    FeedWD(); // 喂狗

    while(P0_4 & 0x01);

    }

    }

这个程序和解释有错吗?谢谢回答

查看全部
qq_21395719
qq_21395719
2015/08/19 04:14
  • 汇编
  • 绿色
  • 点赞
  • 收藏
  • 回答
    私信

1个回复