?? main._c
字號:
/*
實驗十二:
AVR內部看門口實驗。
1、看門口實驗。在主程序中周期喂狗,通過按下按鍵讓程序無限循環,從而啟動看門狗。
程序在啟動時會檢查啟動方式,上電復位、掉電復位、外部復位、看門狗復位,顯示出來。
上電復位: PB0 正常的通電復位。
外部復位: PB1 外部按鍵復位。
掉電復位: PB2 工作過程中電壓瞬間跌落,硬件保護,這個對系統可靠性非常重要。
需要打開熔絲位里面的BOD功能才有效。
看門狗復位: PB3 看門狗定時器復位,用于程序死機保護,軟件保護。
JTAG復位: PB4 這個是仿真器復位,沒什么大用外。
2、內部1 M晶振,程序采用單任務方式,軟件延時。
3、進行此實驗請插上LED短路塊。
4、通過此實驗可了解看門狗的設置及看門狗的喂狗等,通過這個實驗可以讓你認識到復位功能和重要性。
5、看門狗復位的輸入信號是按鍵7,當它長時間按下時,就會產生看門狗復位。
AVR mega128學習板
www.iccavr.com 阿發
16:20 2007-10-19
*/
#include "iom128v.h"
#include <macros.h>
/*延時函數*/
void delay_ms(unsigned char i) {
unsigned char a, b;
for (a = 0; a < i; a++) {
for (b = 1; b; b++);
}
}
/*IO口初始化函數*/
void io_init(void) {
DDRA = 0x00; /*方向輸入*/
PORTA = 0xFF; /*打開上拉*/
DDRB = 0xFF; /*方向輸出*/
PORTB = 0xFF; /*輸出高電平*/
DDRC = 0x00; /*不用的IO口建議設置為輸入帶上拉*/
PORTC = 0xFF;
DDRD = 0x00;
PORTD = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
DDRF = 0x00;
PORTF = 0xFF;
DDRG = 0x00;
PORTG = 0xFF;
}
void main(void) {
io_init();
while (PORTB) { /*啟動指示*/
/*喂狗,看門狗復位時不會清除看門狗時間,所以這里要喂狗*/
WDR();
PORTB <<= 1;
delay_ms(250);
}
PORTB = ~(MCUCSR & 0x1F); /*指示復位類型*/
MCUCSR = 0x00; /*清除復位標志*/
WDTCR |= ((1 << WDCE) | (1 << WDE)); /*啟動時序*/
WDTCR = ((1<< WDE) | (1 << WDP2) | (1 <<WDP1)); /*設定周期為1S*/
while (1) {
delay_ms(250);
WDR(); /*喂狗*/
PORTB ^= (1 << PB7); /*PB7電平取反*/
while(!(PINE & (1 << PE7))); /*檢測按鍵*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -