|
本帖最后由 2408308628 于 2013-8-9 16:07 编辑
最近小弟在写一个程序,里边要用到看门狗,看门狗的功能相信大家都知道它的作用就是超过你设定的时间不喂狗,系统就会重启。而我现在碰到的问题就是看门狗设定不了,一使能看门狗,它就不断重启系统,我用的编译环境是atmelstudio 6.0,GCC,下面是我的程序:附件为对应程序proteus仿真电路
/*
* MEGA48_WDT_TEST.c
*
* Created: 2013-8-8 9:35:07
* Author: Administrator
*/
//-----------------------------------------------------------------
// 名称: 看门狗应用
//-----------------------------------------------------------------
// 说明: 本例系统启动时,LED1点亮,正常运行时,LED1熄灭,LED2开始闪烁
// 程序设置看门狗溢出时间为:1.9s,定时器必须在此时间内复位
// 看门狗(喂狗),否则会引起系统复位,LED1再次点亮后熄灭,LED2
// 重新开始持续闪烁.
//
//-----------------------------------------------------------------
#define F_CPU 4000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h> //看门狗相关头文件
#include <util/delay.h>
#define INT8U unsigned char
#define INT16U unsigned int
//分别定义LED1开/关,LED2闪烁
#define LED1_ON() (PORTC&=~_BV(PC0))
#define LED1_OFF() (PORTC|=_BV(PC0))
#define LED2_BLINK() (PORTC^=_BV(PC5))
//------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------
int main()
{
DDRC|=_BV(PC0);PORTC|=_BV(PC0);
DDRC|=_BV(PC5);PORTC|=_BV(PC5);
DDRD&=~_BV(PD3);PORTD|=_BV(PD3);
DDRC|=_BV(PC2);PORTC|=_BV(PC2);
DDRC|=_BV(PC3);PORTC|=_BV(PC3);
DDRD&=~_BV(PD2);PORTD|=_BV(PD2);
LED1_ON();
_delay_ms(1600);
MCUCR=0X00; //INT0中断低电平触发
EIMSK=_BV(INT0); //INT0使能
TCCR1B=0x03; //T1预设分频:64
TCNT1=65536-F_CPU/64.0*1.5; //晶振1MHZ,1.5S定时初值
TIMSK1=0x01; //允许T1定时器溢出中断
wdt_enable(WDTO_2S); //启动看门狗(溢出时间1.9S,约等于2.0S
LED1_OFF(); //LED1熄灭
sei(); //开中断
while(1)
{
LED2_BLINK();
_delay_ms(200);
}
}
//-----------------------------------------------------------------
// 定时器1中断程序负责喂狗(1.9s以内)
//-----------------------------------------------------------------
ISR (TIMER1_OVF_vect)
{
TCNT1=65536-F_CPU/64.0*1.5; //晶振1MHZ,1.5S定时初值
wdt_reset(); //看门狗复位,也就是喂狗
}
//-----------------------------------------------------------------
// INT0中断函数(按下K1时关闭定时器,停止喂狗)
//-----------------------------------------------------------------
ISR (INT0_vect)
{
TIMSK1=0X00;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|