AVR单片机 看门狗范例 GCCAVR WDR 复位检测和控制看门狗
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AVR单片机看门狗范例GCCAVR WDR 复位检测和控制看门狗
内容来源:OURAVR发布时间:[2010-10-28]查看次数:805
/***********************************************
**** AVR 复位检测和控制看门狗的范例***
**** ***
**** 作者:HJJourAVR ***
**** 编译器:WINAVR20050214 ***
**** ***
**** 2005.9.28 ***
***********************************************/
/*
本程序简单的示范了AVRATMEGA16的复位检测和控制看门狗
系统控制和复位
复位来源的检测
JTAG复位指示
看门狗复位指示
BOD复位指示
RESET引脚复位指示
上电复位指示
看门狗的控制
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器。
熔丝位设置
1 使能BOD功能BODEN=0
2 选择BOD电平BODLEVEL=1 2.7V(VCC=3V) (可选)
BODLEVEL=0 4.0V(VCC=5V) (可选)
*/
#include
#include
//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其
他时钟
#include
/*
wdt.h里面
看门狗溢出时间常量定义
#define WDTO_15MS 0
#define WDTO_30MS 1
#define WDTO_60MS 2
#define WDTO_120MS 3
#define WDTO_250MS 4
#define WDTO_500MS 5
#define WDTO_1S 6
#define WDTO_2S 7
下面的4S/8S定义只能用于 ATtiny2313, ATmega48, ATmega88 and the ATmega168.
#define WDTO_4S 8
#define WDTO_8S 9
看门狗操作函数
wdt_disable()
关闭看门狗
wdt_enable(timeout)
使能看门狗及溢出时间设定
wdt_reset()
复位看门狗(喂狗)
*/
//管脚定义
#define WDT_EN 7 //PA7 看门狗的喂狗控制引脚
// 高电平,不喂狗
// 低电平,喂狗
#define LED_JT 4 //PA4 JTAG复位指示
#define LED_WD 3 //PA3 看门狗复位指示
#define LED_BO 2 //PA2 BOD复位指示
#define LED_EXT 1 //PA1 RESET引脚复位指示
#define LED_PO 0 //PA0 上电复位指示//以上信号皆为低电平有效
int main(void)
{
unsigned char CPU_STATUS;
unsigned char i;
//上电默认DDRx=0x00,PORTx=0x00 输入,无上拉电阻
PORTB
=0xFF;//不用的管脚使能内部上拉电阻。
PORTC =0xFF;
PORTD =0xFF;
PORTA =0xFF;
DDRA =(1< CPU_STATUS =MCUCSR;//读取MCU控制和状态寄存器 //可以在JTAG调试时直接观察 MCUCSR的状态。 CPU_STATUS&=0x1F; switch(CPU_STATUS) { case(1< PORTA&=~(1< break; case(1< PORTA&=~(1< break; case(1< PORTA&=~(1< break; case(1< PORTA&=~(1< break; case(1< PORTA&=~(1< break; default://多种复位同时发生? PORTA=~CPU_STATUS; break; } MCUCSR=0x00;//清除标志位 for(i=0;i<200;i++) _delay_ms(10);//延时2秒 wdt_enable(WDTO_2S);//使能看门狗,溢出时 间为2秒左右 while(1) { if(!(PINA&(1< wdt_reset();//如果PA7为低 电平时,复位看门狗(喂狗) } } /* 程序运行效果 如果PA7是高电平,不喂狗,则每2秒钟看门狗复位一次,LED_WD亮 如果PA7是低电平,喂狗,则方便作如下实验 第一次上电时,发生上电复位事件,LED_PO亮 按下复位按键,发上外部复位事件,LED_EXT亮 调节电源电压调到4.0V(或2.7V)以下,然后调回5.0V(3.0V),发生BOD复位事件,LED_BO亮在JTAG调试时,使用[reset]功能,发生JTAG复位事件,LED_JT亮 注意:有时候会出现多种复位事件同时发生,例如: 上电的同时按住复位按键,将会同时发生上电复位事件和外部复位事件 */ /* 系统控制和复位 复位AVR 复位时所有的I/O 寄存器都被设置为初始值,程序从复位向量处开始执行。 复位向量处的指令必须是绝对跳转JMP 指令,以使程序跳转到复位处理例程。 如果程序永远不利用中断功能,中断向量可以由一般的程序代码所覆盖。 这个处理方法同样适用于当复位向量位于应用程序区,中断向量位于Boot 区—或者反过来—的时候。 复位源有效时I/O 端口立即复位为初始值。此时不要求任何时钟处于正常运行状态。 所有的复位信号消失之后,芯片内部的一个延迟计数器被激活,将内部复位的时间延长。 这种处理方式使得在MCU 正常工作之前有一定的时间让电源达到稳定的电平。