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 <avr/io.h>
#include
//时钟定为内部RC 1MHz,F_CPU=1000000 也能够选用其他时钟
#include
//管脚界说
#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< //JTAG引起的复位?
PORTA&=~(1< break;
case (1< //看门狗引起的复位?
PORTA&=~(1< break;
case (1< //BOD引起的复位?
PORTA&=~(1< break;
case (1< //RESET引脚引起的复位?
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为低电平时,复位看门狗(喂狗)
}
}
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/259598.html