www.pudn.com > lpc213X_C_application.rar > main.c, change:2005-04-20,size:3469b


/****************************************Copyright (c)************************************************** 
**                               Guangzou ZLG-MCU Development Co.,LTD. 
**                                      graduate school 
**                                 http://www.zlgmcu.com 
** 
**--------------File Info------------------------------------------------------------------------------- 
** File name:			main.c 
** Last modified Date:  2004-09-16 
** Last Version:		1.0 
** Descriptions:		The main() function example template 
** 
**------------------------------------------------------------------------------------------------------ 
** Created by:			Chenmingji 
** Created date:		2004-09-16 
** Version:				1.0 
** Descriptions:		The original version 
** 
**------------------------------------------------------------------------------------------------------ 
** Modified by:			Chenxibing 
** Modified date:		2005-01-19 
** Version: 
** Descriptions:		看门狗溢出复位演示实验,在Flash中进行。 
** 
********************************************************************************************************/ 
#include "config.h" 
 
#define 	LED1 	1 << 18		// P0.18控制LED1 
#define 	KEY1 	1 << 16		// P0.16 
#define 	KEY2 	1 << 17		// P0.17 
#define 	BEEP 	1 << 7		// P0.7控制蜂鸣器 
 
 
/* 
******************************************************************************************************** 
** 函数名称: main 
** 功能描述: 打开看门狗,KEY1停止喂狗,KEY2清除看门狗溢出标志 
******************************************************************************************************* 
*/ 
int main(void) 
{ 
    uint32 i,j; 
 
  	PINSEL0 = 0x00000000;			// 管脚连接GPIO 
	PINSEL2 = PINSEL2 & (~0x08);	// P1[25:16]连接GPIO 
    IO0DIR = BEEP;					// 蜂鸣器控制口输出 
    IO1DIR = LED1;					// LED1控制口输出 
    IO0SET = BEEP;					// 关闭蜂鸣器 
	 
	/* 如果曾经发生过看门狗复位,则等待清除看门狗超时标志,在未清除之前蜂鸣器一直鸣叫 */ 
    while(( WDMOD & 0x04 ) == 0x04)             // 判断看门狗超时标志 
    {  
      	/* 看门狗超时标志未清除 */  
        for(j = 0; j < 0xFFFFF; j++);			// 蜂鸣器鸣叫周期              
        if((IO0SET & BEEP) == 0) 
    	{ 
    		IO0SET = BEEP;						// 关闭蜂鸣器 
     		if((IO0PIN & KEY2) == 0)			// 等待按键KEY2 
     			WDMOD = 0x00;					// 如果KEY2按下,则软件清零看门狗超时标志位 
     	} 
   		else    IO0CLR = BEEP;					// 蜂鸣器鸣叫   	 
    } 
     
    /* 如果没有发生看门狗复位或者看门狗超时标志已经清除,则初始化看门狗 */     
	WDTC  = 0xff000;		        			// 设置看门狗定时器参数 
	WDMOD = 0x03;                   			// 设置看门狗模式:中断且复位 
    WDFEED = 0xAA;								// 第一次喂狗启动WDT 
	WDFEED = 0x55; 
	 
    /* 正常情况下,闪烁LED1 */ 
    while(1) 
    {	/* 用按键模拟导致无法周期性喂狗的意外情况 */ 
        while((IO0PIN & KEY1) == 0);            // 如果按键1按下,就停止喂狗 
         
        for(j = 0; j < 0xFF; j++)				// LED1闪烁周期 
        { 
            for(i = 0; i < 0x0FFF; i++); 		// 喂狗周期        
            WDFEED = 0xAA;						// 喂狗时序 
			WDFEED = 0x55; 
        } 
        /* 闪烁LED1 */ 
        if((IO1SET & LED1) == 0)  IO1SET = LED1; 
        else	IO1CLR = LED1; 
    } 
     
    return 0; 
} 
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/