/********************************************************************************************************** 看门狗复位演示,若sw2长按LED1长亮,喂狗,看门狗不超时复位 若sw2没有被按下,LED1闪烁。看门狗一直超时复位。 **********************************************************************************************************/ #include #include "TM52F1386_bsp.h" #include sbit LED1 = P1^5; /* 系统频率设置为二分频 */ /****************************************************************************************** ** 函数名称: gpio_light_init ** 函数描述: IO模式配置 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void gpio_init() { PORTIDX = PORT1; PINMOD54 = PINMOD54 & ~0xf0 | PIN_H_MODE_PP; //p15为LED1控制引脚,推挽输出 P1_5 = 1; PORTIDX = PORT5; PINMOD76 = PINMOD76 &~0xf0 | PIN_H_MODE_OD_IPU; //P57为SW2按键的检测口,开漏上拉输入 P5_7 = 1; } /****************************************************************************************** ** 函数名称: wdg_init ** 函数描述: 看门狗初始化函数 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void wdg_init() { OPTION = (OPTION &~ OPTION_WDTPSC_MASK) | (0 < OPTION_WDTPSC_POS); //240MS AUX2 = (AUX2 &~ AUX2_WDTE_MASK) | (2 << AUX2_WDTE_POS); //看门狗在快钟和慢钟模式下使能,空闲/停止/暂停模式下禁止 AUX1 = (AUX1 &~ AUX1_CLRWDT_MASK) | (0); CLR_WDT; //设置以清除看门狗定时器 } int a = 1; /****************************************************************************************** ** 函数名称: main ** 函数描述: main函数 ** 输入参数: 无 ** 输出参数: 无 ** 说 明: 上电后,喂狗,LED长亮;不喂狗亮240ms,灭200ms *******************************************************************************************/ void main (void) { bsp_clock_init(); // 系统快钟18.432 div 2 = 9.216Mhz gpio_init(); wdg_init(); LED1 = 0; //点亮LED while (1) { bsp_delay_ms (80); if(P5_7 == 0) //SW2按下为低 { CLRWDT = 1; //喂狗 } } }