问题描述
- 看门狗问题请教,谢谢。第一次提问,不懂请教我
-
/*******************************************************************************- 文件名称: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~255for(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);
}
}
这个程序和解释有错吗?谢谢回答
解决方案
下载到开发班上 按下相应按键 没反应