?? main.c
字號:
/****************************************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
********************************************************************************************************/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -