?? main.c
字號:
//-----------------------------------------------------------------
// 名稱: 睡眠模式及看門狗應用測試
//-----------------------------------------------------------------
// 說明: 系統啟動時即進入睡眠,LED1點亮,按下S1時喚醒,LED1熄滅,
// LED2開始閃爍,看門狗溢出時間為2304ms,定時器TMR1每隔1500ms喂狗
// 如果按下S1則停止喂狗,引起系統復位.
// 由于TIMER1中斷用于喂狗,且在睡眠之前啟用了TIMER1中斷,即使
// 不按下S1,當前TIMER1的溢出中斷發生時同樣會喚醒.
//
//-----------------------------------------------------------------
#include <pic.h>
__CONFIG(WDTEN & XT & UNPROTECT); //啟用看門狗
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 4000000UL //4MHz
//按鍵定義
#define KEY_DN() !RD0 //停止喂狗
//分別定義LED1開/關,LED閃爍
#define LED1_ON() RB3 = 1
#define LED1_OFF() RB3 = 0
#define LED2_OFF() RB6 = 0
#define LED2_BLINK() RB6 = ~RB6
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
void main()
{
TRISB0 = 1; RBPU = 0; //RB0按鍵輸入,RB端口內部上拉
TRISB3 = TRISB6 = 0; //LED1,LED2輸出引腳
TRISD0 = 1; //停止喂狗按鍵輸入引腳
LED1_ON(); LED2_OFF(); //初始時LED1點亮,LED2關閉
}
//-----------------------------------------------------------------
// RB0/INT中斷服務程序喚醒主程序繼續運行,定時器1中斷程序負責喂狗
//-----------------------------------------------------------------
void interrupt TMR1_AND_RB0_INT_ISR()
{
static INT8U T0_Count = 0, T1_Count = 0; //用于延時累加的變量
if (INTF) INTF = 0; //按鍵觸發RB0/INT中斷(手動喚醒)
if (TMR1IF) //TIMER1每隔1500ms喂狗
{
}
if (T0IF) //TIMER0溢出中斷控制LED2正常閃爍
{
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -