📄 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 + -