AVR单片机 看门狗范例 GCCAVR WDR 复位检测和控制看门狗
单片机-系统复位与看门狗
真实案例:
• 一湖南女孩(大专生)到广东东莞找工作; • 联系好了一家企业,确定面试时间; • 面试时,被这假企业的人员绑架,并逼迫她 向家人要钱,此女孩死活不从; • 四小时后,警察突然出现,人获救。为什么 警察会在这时出现? • 因为女孩出门前与朋友约好了,若四小时内 没有电话,就报警。 • 看门狗电路在实际中的应用 12
15
三、看门狗技术
• 监控实现:看门狗需要通过两根信号线与 CPU联系,一根由CPU发出的喂狗信号,另 一根是由看门狗发出的复位信号。 • 看门狗是一个相对独立的特殊的定时器,启 用它后,喂狗就是让定时器清零、重新计数 ,使其无法加到最大值而溢出产生复位信号 • 所以要在程序里适当位置加入清看门狗指令 (喂狗) • 此技术只对瞬间干扰造成的问题有效
8
二、复位系统
• 为什么要复位?
– 上电时电压不稳定(有波动),单片机不能正 常工作,需要延时一小段时间; – 开始工作后,要初始化各寄存器的初值,从特 定的地方开始执行程序,也需要一点时间;
• 复位源有哪几个?
– 上电复位,外部复位,掉电检测复位,看门狗 复位
9
10
二、复位系统
PORF—上电复位标志,写0可清除 EXTRF—RESET复位标志,上电或写0可清除 BORF—掉电检测复位标志,上电或写0可清除 WDRF—看门狗复位标志,上电或写0可清除
低功耗晶振
满振幅晶振 低频晶振
1111 – 1000
011熔丝
位已经被编程,故系
内部128KHz RC振荡器 校准的内部 RC振荡器
外部时钟
0011 0010
0000
7
统默认主频:1MHz
(见手册P27)
一、AVR时钟系统—主频调整
看门狗
看门狗百科名片单片机"看门狗"在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)目录应用基本原理看门狗使用注意看门狗运用设计思路编辑本段应用看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
编辑本段基本原理看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
51单片机的看门狗
“看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。
单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。
其各位的定义如表4.2.1所示。
表1看门狗定时器寄存器(WDT_CONTR)EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。
看门狗的使用
看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。
在很多单片机中都内置了看门狗,看门狗本身是一个定时器,当定时器溢出时即进行系统复位,因此需要在程序中对看门狗定时器进行清零,即常说的喂狗。
由于我用过AVR的单片机,和AVR的相比,MSP430的看门狗要灵活的多,首先默认看门狗是开着的,因此如果不使用看门狗的话要关闭,指令如下:WDTCTL = WDTPW + WDTHOLD如果打开看门狗则需要在程序中清零,指令如下:WDTCTL=WDTPW+WDTCNTCL从头文件的定义中可以看出主要有两种方式,一种就是当做普通的定时器使用,一种才是作为看门狗,另外就是时钟源可选,选择8M或者32K的晶振来获得不同的延时,通过上面可以看出看门狗定时器最大的时间可以到1S,在程序中可以灵活的利用看门狗定时器实现想要的功能。
下面介绍两个典型应用:1、在动态数码管显示中的应用,具体代码可以参考我之前的笔记,部分代码如下:WDTCTL = WDT_ADLY_1_9; // 设置内部看门狗工作在定时器模式,1.9ms中断一次//可以去看头文件中具体的配置,这里使用的手表晶振64分频计算可得是1.9msIE1 |= WDTIE; // 使能看门狗中断__interrupt void watchdog_timer(void){}这个程序主要是将看门狗定时器当做普通定时器使用,1.9ms刚好适合动态扫描间隔,在看门狗中断中对数码管进行动态扫描,这样使用相对于开一个定时器来说要有所方便。
因此在需要的定时与看门狗定时器的几个时间相同时可以考虑使用看门狗。
2、普通延时WDTCTL = WDT_ADLY_1000; //间隔定时器,定时1000ms//延时2sfor(i = 0; i< 3; i++){IFG1 &= ~WDTIFG;while(!(IFG1 & WDTIFG));IFG1 &= ~WDTIFG;}这个程序同样是将看门狗当普通定时器使用,在主程序中读取中断标志位,实现延时效果,上面的程序为什么是延时2S自己分析。
AVR单片机看门狗的使用
开
验评 资 ¥ 150
开
USB转RS232开 4 数码 静态显 8 数码 态扫 4x4 键 ¥ 65 ¥ 40 显 ¥ 15 ¥ 40
/study/J0022.html
1
3
[2009/2/15 2:50:07]
单
开
验
创
单
MSP430单 AVR单 C8051F单 PIC单
开
TI
图讲 请 阅 骤 AVRmega16 册 “ 时 ” 节 P40 关内
导 HOLTEK单 STC单 ANALOG DEVICES IAR SYSTEM ICC Keil Protel IAR AVR 将 贴 项 JTAG main.c 讲 称为 AVRmega16 WatchDog 项
/************************************************** * * WatchDog 试验——AVRmega单 * * : __watchdog_reset();语 释 CPU * *时 2007 12 * * * * 编译环 IAR AVR V4.20A * 验 **************************************************/
单
开
验
创
[
绍] [
] [MSP430] [AVR] [51] [
][
][
载] [
购] [
论
][
][
][ 单
]
MSP430开
MSP430FET JTAG-I ¥ 120 MSP430FET JTAG-II ¥ 150 MSP430F135 验 -I ¥ 120 MSP430 验 -I ¥ 180 MSP430开 -II ¥ 200 MSP430 USB JTAG 资 EZ430 资 习 执 验 为 CPU 图 AVRmega16单 带
关于AVR单片机的看门狗
关于AVR单片机的看门狗看门狗这个东西以前没接触过理解它费了一点周折。
使用它的复位MCU 的功能实现LED 的闪烁。
准备工作是设定WDT 的超时时间(如1s)首先使能看门狗(wdt_enable),然后喂狗(wdt_reset),再延时灯的闪烁时间(delay=0.5s),使灯亮(SET_LED);再用一个恰当的比较长的延时(delay>0.5s)饿死狗。
之后MCU 重启,如此往复。
(1)延时可以调用库函数,还可以使用定时器;(2)SET_LED; while(1) wdt_reset(); 表示不断喂狗,从而不让MCU 重启,使灯一直亮着。
程序中使用这些代码的用途待考证,可以给作者发email 嘿嘿~(3)软件看门狗和硬件看门狗。
软件看门狗可以用wdt_disable 来禁掉。
而硬件看门狗不能。
AVR 可以通过修改熔丝位来分别实现软硬看门狗。
(4)wdt_enable(timeout)的参数timeout 表示看门狗的超时时间,即timeout时间内不喂狗,狗就会叫,mcu 就会复位。
=================================================================================================#include#include#include#define uchar unsigned char#define uint unsigned int#define SET_LED PORTA&=0XFE //PA0 输出低电平,黄灯亮#define CLR_LED PORTA|=0X01//PA0 输出高电平,黄灯灭。
AVR单片机看门狗实验报告2013v1(有不同)
void watchdog_off(void)
{ /* Write logical one to WDTOE and WDE
这里严格要求这样的顺序*/
WDTCR = (1<<WDTOE) | (1<<WDE); /* Turn off WDT 这里严格要求这样的顺序*/
WDTCR = 0x00;
}
void Delay(void) { unsigned char i,j; for(i=200;i>0;i--)
{ for(j=100;j>0;j--); WDR(); //这里喂狗不然超过时间了
BIT 2、1、0 这三位设置看门狗溢出的间隔,在设置好的时间内不喂狗,就重启。
二、 具体例子(基于 ICCAVR7.22)
A、 打开和配置看门狗为最大时间间隔 2.2s void watchdog_on(void) { WDTCR |=(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); }
{ } }
4.2 加入看门狗后
//ICC-AVR application builder : 2013-9-23 9:24:33 // Target : M16 // Crystal: 4.0000Mhz
#include <iom16v.h> #include <macros.h>
void port_init(void) { PORTD = 0x00; DDRD = 0xff; }
AVR 看门狗WDT程序
AVR 看门狗WDT程序点击: 215, 文章入库日期: 2008-06-19 01:02:43, 来源: 很多人喜欢养宠物狗,很多单片鸭大侠则喜欢养看门狗,如果您也希望搞条AVR的看门狗养养,很适合您。
养看门狗的用意,在于用它监控系统:在程序本该运行的地方喂狗,如果程序卡死或跑飞,行到那,那样狗没有被喂到,饿死了,控制器复位,得以重启从而进行控制。
本节演示功能:养一只AVR内部看门狗,及时喂狗,狗不饿死,AVR单片鸭不复位;不及时喂饿死了,AVR单片鸭就复位。
本节的程序设计较为简单,旨在给出养狗、喂狗,不让狗饿死的简单示例。
实际应用时考虑的要注意什么时候喂狗,放狗。
硬件设计AVR主控电路原理图(点击图片放大,不需要放大镜!)LED控制电路原理图(点击图片放大,不需要放大镜!)下面部分从TXT拷出,拷到网页,代码部分缺省了很多空格,比较凌乱,请谅解!//目标系统: 基于AVR单片机//应用软件: ICC AVR/*01010101010101010101010101010101010101010101010101010101010101010101----------------------------------------------------------------------实验内容:观察喂狗与不喂狗的区别,使用PB口的LED指示灯做状态指示。
----------------------------------------------------------------------硬件连接:将PB口的LED指示灯使能开关切换到"ON"状态。
----------------------------------------------------------------------注意事项:(1)若有加载库程序,请将光盘根目录下的“库程序”下的“ICC_H”文件夹拷到D盘(2)请详细阅读:光盘根目录下的“产品资料开发板实验板SMK系列SMK1632说明资料”---------------------------------------------------------------------- 10101010101010101010101010101010101010101010101010101010101010101010*/#include <iom16v.h>#include "D:ICC_HCmmICC.H"#define DISP_DDR DDRB#define DISP_PORT PORTB/*--------------------------------------------------------------------程序名称:看门狗WDT初始化程序程序功能:注意事项:提示说明:输入:返回:--------------------------------------------------------------------*/void wdt_init(void){asm("wdr"); //clr wdtWDTCR=0x0F; //enable wdt,clk = 2048,2.1S}/*--------------------------------------------------------------------程序名称:程序功能:注意事项:提示说明:输入:返回:--------------------------------------------------------------------*/void main(void){uint8 i;DISP_DDR = 0XFF;wdt_init();while(1){DISP_PORT++; //数据显示向上加,作AVR正常运行的指示asm("wdr"); //喂狗,去除此句将导致狗饿死,AVR复位delay50ms(20);}}在AVR的运行程序中设置让PB显示端口自加。
复位上电(外部)复位低电压检测和复位看门狗定时器复
复位/上电(外部)复位/低电压检测和复位/看门狗定时器复位复位电路产生一个一定宽度的复位脉冲信号去复位整个电路,使其工作在预设的状态,保证电路从一个预先已知的状态开始工作。
SH66/67/69xxx系列单片机复位功能包括上电(外部)复位、低电压复位、看门狗定时器复位等。
1.上电复位 ( Power On Reset,POR )及外部复位内建的上电复位电路配合外接的上电复位辅助电路,在上电时产生复位脉冲信号复位整个电路,保证电路从一个预先已知的预设状态开始工作。
SH66/67/69xxx系列单片机内建了稳定的上电复位电路,在复位输入端外接的复位辅助电路配合下,单片机具有稳定可靠上电复位性能。
同时,复位输入端也作为外部复位的输入端,输入外部复位信号复位整个电路。
中颖的SH66/67/69xxx 系列单片机普遍采用低电平有效的复位方式。
按应用场合和对上电复位可靠性要求不同,复位外部电路可采用不同的方式。
简易型RC复位电路最简单的上电复位电路即是用RC充放电电路所构成(如图1-1),应用于干扰较小的环境。
复位时间长短由电阻R和电容C的值决定。
复位时间的长短,一般考虑为当系统电源稳定进入单片机工作范围时,才可结束复位。
当单片机断电时,C上的电荷应尽快完全放电,以保证下次复位的成功。
R和C建议数值为47k.和0.1μF。
复位电路的布线很重要,一般要求复位电容C与单片机的Reset 和VSS引脚的布线最短。
RC图1-1 简易型RC复位电路改良型RC复位电路为了让上电复位更加稳定,在简易型RC复位电路的基础上,可以在电阻位置并联一个二极管构成改良型RC复位电路(如图1-2)。
复位时间长短仍由R 和C的值决定。
当单片机断电时,附加的二极管D可使电容C上的电荷快速完全放电,以保证下次复位的成功。
C图1-2 改良型RC复位电路高抗干扰型RC复位电路高抗干扰型RC复位电路如图1-3,高抗干扰型RC复位电路应用于干扰较强的环境。
AVR单片机 看门狗范例 GCCAVR WDR 复位检测和控制看门狗
AVR单片机看门狗范例GCCAVR WDR 复位检测和控制看门狗内容来源:OURAVR发布时间:[2010-10-28]查看次数:805/*************************************************** AVR 复位检测和控制看门狗的范例******* ******* 作者:HJJourAVR ******* 编译器:WINAVR20050214 ******* ******* 2005.9.28 **************************************************//*本程序简单的示范了AVRATMEGA16的复位检测和控制看门狗系统控制和复位复位来源的检测JTAG复位指示看门狗复位指示BOD复位指示RESET引脚复位指示上电复位指示看门狗的控制出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器。
熔丝位设置1 使能BOD功能BODEN=02 选择BOD电平BODLEVEL=1 2.7V(VCC=3V) (可选)BODLEVEL=0 4.0V(VCC=5V) (可选)*/#include <avr/io.h>#include <avr/delay.h>//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟#include <avr/wdt.h>/*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;//不用的管脚使能内部上拉电阻。
AVR复位
当然,在AVR的RST脚也接一个0.1uF的电容到GND,这电容的作用是很重要的。因为一般情况单片机受到干扰而复位基本是由于 RST受到干扰而 复位的。加上这个电容后有一定的作用,但也不是百分百的可以解决问题。所以前向的电源的处理很重要,前面的没处理好,5V端这边怎么折腾也是没什么好的效果。
当然,如果在交流侧有条件的话, 建议也加上EMI滤波电路。
我基本上按ATMEL提供的EMC注意手册里的说明来处理电源。现在把一个12V的直流电机直接接在正常工作的 ATTINY24 的系统里,然后不断的通断工作,相信这个干扰是很大的,但系统一直稳定工作,没有任何的死机复位现象。
PCB方面也是需要下工夫的,当然这个需要积累,建议多看看抗干扰方面的书籍和 PCB布线的书,收获是很大的。
随便说了一堆,可能还有很多片面的地方 ,希望对大家有所帮助。
使用AVR 芯片时, 很多人在实际使用的时候很容易出现工作过程中的复位,基本上是由于传导干扰造成的,而辐射干扰倒是可以通过PCB设计和铁壳屏蔽来解决。
而传导辐射就得需要在电源上下工夫了。
在5V直流电源端要做好滤波和去耦,在靠近AVR的VCC和GND的地方要加上0.1uF的独石电容或高频电容,可以很好的滤除从电源串入的高频脉冲干扰(这类的高频脉冲干扰基本上由同线路的电磁器件产生的,如电机、继电器,这类的器件多数情况下是和单片机同一路直流电源的,如12V、24V直流,而单片机的5V电源基本上是12V、24V电源端取的,然后进行稳压处理)。
掉电复位:就是在单片机运行过程中电压突然跌落,这个时候单片机会出现很多不确定的现象,所以在这个时候需要将单片机复位,让它处于一个确定的状态。这就是BOD功能,一个非常实用的功能,AVR单片机带有这个功能。
单片机任务型软件_看门狗_原理及应用
借助单片机中的定时器中断机制, 每个任务分配计时单元 和运行标志位,由定时中断依据运行标志位状态独立计时, 任 务正常完成时, 运行标志位和计时单元均恢复到非运行状态描 述。在主程序循环中, 任务的限时判断模块独立于原任务处理 它只是对任务运行的时间进行判断, 如 模块之外, 如图 2 所示, 果服务时间超过了正常的运行时间, 则复位这个任务, 即将其 使用的有关资源, 恢复到任务开始前的初始状态, 供下一次任 务使用, 从而实现了任务型软件“ 看门狗” 的功能, 避免了相同 任务之间的干扰。
器的控制命令, 如重起操作系统等。 以下是统计管理程序和中央监控程序通信数据报的结构:
9:; 应 用 程 序 到 目 录 7 <=> 7 ?@AB? 7 C:;+ 后 , 在 文 件 7 :DA 7 :EF@>D=
中添加 一 行 7 <=> 7 ?@AB 7 C:;= ( , 这表明这个目录可以在装载 >C ) 并有读写权限。在每个真实服务 56+ 的任何远程系统上使用, 器上, 在其文件 7 :DA 7 G=DB; 中添加下面一行: &"$&&$3$’ : 7 <=> 7 ?@AB? 7 C:;= 7 <=> 7 ?@AB? 7 D@HABD 7 C:;BFF= 7 IJJK 7 CLMN=@GD, 将 C:;= 映射为本地目录 7 <=> 7 ?@AB? 7 D@HABD 7 C:;BFF= 7 IJJK 7
文章编号 &""!12%%&1( !""# ) %#1"&!!1"!
!"#$%#&’( )$* +&&’#%),#-$ -. /-.,01),%2*-3 4(%2$-’-35 .-" 6)%2 4)78 #$ 9:;
AVR单片机C语言编程
输入输出端口的电压范围通常为0-5V。
输入输出端口的编程实例
• 以下是一个简单的AVR单片机输入输出端口的C语言编程示例
输入输出端口的编程实例
```c
int main(void)
输入输出端口的编程实例
{
DDRB |= (1 << DDB0); // 设置PB0为输出端口
串口发送数据
使用AVR单片机的发送缓冲寄存器,可以将数据发送到串口。
串口接收数据
使用AVR单片机的接收缓冲寄存器,可以接收来自串口的数据。
串口通信的扩展方法
扩展串口通信协议
根据实际需要,可以扩展串口通信协议,增加数据 传输的效率和可靠性。
多设备串口通信
通过多设备串口通信技术,可以实现多个设备之间 的数据传输和共享。
网络化串口通信
将串口通信与网络技术结合,可以实现远程控制和 数据传输。
06
AVR单片机的中断处理控 制
中断处理的工作原理
中断源
01
02
03
中断优先级
中断向量
AVR单片机具有多种中断源,包 括定时器/计数器中断、外部中 断、串行通信中断等。
多个中断同时发生时,需要根据 中断优先级来决定哪个中断先被 处理。
看门狗定时器控制
总结词
通过AVR单片机的C语言编程,可以实现看门狗定时器的控制。
详细描述
AVR单片机的看门狗定时器是一种用于系统恢复的机制。在C语言编程中,可 以使用内置的定时器/计数器或外部中断,实现对看门狗定时器的控制。
系统时钟设置控制
总结词
通过AVR单片机的C语言编程,可以实现对系统时钟 的设定和控制。
任务四 看门狗报警_AVR单片机(C语言)项目开发实践教程_[共4页]
看门狗复位硬件电路图如图 7-8 所示。
95
任务四 看门狗报警
一、任务要求
利用 ATmega16 单片机内部的看门狗定时器,设计一个单片机抗干扰应用系统。当霓虹灯 显示系统启动时,8 个 LED 等短暂闪烁,正常运行后 8 个 LED 循环点亮,由外部按键触发模 拟干扰源(停止“喂狗”,LED 不正常点亮),系统自动重新启动进入正常运行状态。
项目七 中断控制应用
int main() {
uint8_t a,b,c,d; DDRB|=0x03; PORTB|=0x04; DDRD&=0xf7; PORTD|=0x08; cli(); GICR|=0xa0; MCUCR|=0x08; MCUCSR|=0x40; GIFR|=_BV(5); sei();
while(1) {
a=i%10; b=i%100/10; c=i/100%10; d=i/1000; play(a); play(b); play(c); play(d); delay_ms(300); } }
五、项目实施
1.根据元器件清单选择合适的元器件。 2.根据硬件设计原理图,在万能电路板进行元器件布局,并进行焊接工作。 3.焊接完成后,重复进行线路检查,防止短路、虚接现象。 4.在 AVR Studio 软件中创建项目,输入源代码并生成*.hex 文件。 5.在确认硬件电路正确的前提下,通过 JTAG 仿真器进行程序的下载与硬件在线调试。
AVR单片机的看门狗详解
AVR单片机的看门狗详解
AVR 看门狗一个硬件单元,当程序由于某种原因跑“飞”了,它就Reset 程序。
就像小狗看门一样。
//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
上面是用ICC 的App Builder 生成的看门狗初始化程序,这些语句达不到初始化看门狗的目的,需要在中间加一句WDTCR = 0x1F; 。
最后一行代码提醒狗主人,别忘了及时清零看门狗定时器(喂狗),否则,小狗就咬人了。
一个相对独立的计数自动重启单片机的硬件部件,如果启用它后,不在一定的时间内清除它的计数值,就会达到计数的最高值而溢出,然后它就指挥单片机重启。
所以要在你的程序里适当的加入清看门狗的指令,一旦你的单片机程序出了问题,当然就不能按照你的程序原先设定那样自动清看门狗了,也就是常说的程序跑飞了,这个时候看门狗就会重启单片机试图解决问题。
一般只对瞬间干扰造成的问题有效,要是长时间的干扰或是软硬件问题,看门狗的意义不是很大。
我的理解就象是监视程序执行的保安一样, 程序正常执行时会在他的益处时间之内给他一个复位信号,当程序跑飞的时候他在溢出时间之内是收不到复位信号的,这时看门狗就会在设定的时间内产生系统复位的信号!。
利用单片机内部定时器实现软件看门狗
利用单片机内部定时器实现软件看门狗利用单片机内部定时器实现软件看门狗勤镐工控(05/09/04)软件看门狗(WATCH DOG)也叫做程序运行监视系统。
当程序运行受到干扰,程序飞到一个临时构成的死循环中时,系统将完全瘫痪,软件陷阱也无能为力了,这时就需要人工复位或硬件复位;如果没有人工操作和硬件复位系统,我们采用软件看门狗技术同样也能使系统复位,恢复正常。
这种程序监视系统就好比主人家养了一条狗,主人总要定时喂狗,如果主人忘了喂狗(程序受到干扰,跑飞掉了),狗就会大叫起来,提醒主人(程序重新运行)。
软件看门狗的特性如下:1、本身独立工作,基本上不依赖CPU;2、CPU在一个固定的时间间隔内和系统打一次交道(喂一次狗),以表明系统目前工作正常。
3、当CPU陷入死循环后,能及时发觉并使系统复位。
当系统陷入死循环后,怎样才能从死循环中跳出来呢?只有比这个死循环更高级的中断程序才能夺走CPU的控制权。
为此,可以用一个定时器来做软件看门狗,因为定时器在运行时不占用CPU资源,它是独立工作的,所以,将它的溢出中断设定为最高优先级中断,系统的其它中断均设为比它低级的中断优先级。
然后根据看门狗的定时时间来设定定时器初值。
软件看门狗启动后,系统工作程序必须经常“喂它”,且每两次之间的间隔不得大于定时器的定时时间。
程序中只要设立一个设置定时器初值的子程序,喂它时只要调用这个子程序即可。
当程序陷入死循环后,定时器溢出,产生高优先级中断,从而跳出死循环。
我们还可以在定时器中断服务程序中放置一条LJMP ERR 指令,即可使程序转向出错处理程序;由出错程序来完成以后的工作,并用软件的方法使系统复位。
以下是一个用定时/计数器T0作软件看门狗的完整程序:ORG 0000HAJMP MAINORG 000BHLJMP ERR MAIN :MOV SP , #60HMOV PSW , #00HMOV SCON , #00HMOV TMOD , #01H ;设置T0为16位定时器SETB ET0 ;允许T0中断SETB PT0 ;设置T0中断为高级中断MOV TL0, #00H ;设定T0的定时初值,定时时间约为16ms(6M 晶振)MOV TH0, #0B0HSETB EA ;开中断SETB TR0 ;启动T0 LOOP:...... ;主程序开始LCALL WATCH DOG ;调用喂狗子程序......LJMP LOOP WATCHDOG:MOV TL0, #00H ;喂狗子程序MOV TH0, #0B0HSETB TR0RET ERR:POP ACC ;定时器中断POP ACC ;看门狗软件复位程序CLR APUSH ACCPUSH ACC RETI在程序中,由于执行了中断服务程序后,PC 的指针已经指向0000H ,从而实现了软件复位的目的。
AVR单片机应用常见问题集合
AVR 单片机应用常见问题集合问: 即使看门狗没有使用我也有时在AVR Studio 调试软件的状态栏中看到“WDT reset” WDT 复位的信息这是为什么?答当目标器件运行在较高的频率大于6 MHZ)时来自扁平电缆FPC 电缆的噪声信号可能错误地触发WDT 复位检测电路这对程序的仿真和执行没有影响它们不会由于噪声的原因而产生复位噪声仅仅影响AVR Studio 调试软件的信息处理在这种情况下不要理睬这个信息当目标器件运行在较低的频率小于或等于4 MHZ 时应该不会出现这个问题.问:程序在仿真器或单片机中不工作,而在模拟器中看来工作很正常这是什么原因?答这是堆栈指针设置中的常见问题。
对所有带SRAM 的AVR 单片机堆栈指针必须设置在SRAM 最后的地址在汇编程序中这样做是正确的ldi R16 low(RAMEND) 装载堆栈指针的低字节到R16out SPL R16 输出这个数值到堆栈指针寄存器ldi R16 high(RAMEND) 装载堆栈指针的高字节到R16out SPH R16 如果AVR 的SRAM 小于256 字节就将这行注释掉在C 程序中堆栈指针是在启动代码中自动设置的注意链接文件(XCL 文件)定义了堆栈指针的位置问:当开始做一个使用AVR 单片机的新项目时最常见最共同问题有哪些?答最常见最共同的错误是,忘记对不带硬件堆栈的芯片设置堆栈指针对AT90S8515 单片机上这样做是妥当的LDI R16 low(RAMEND)OUT SPL R16LDI R16 high(RAMEND)OUT SPH R16注在ATMEL 的汇编语言源程序中经常将R16 寄存器用temp 符号来代替。
另一个常见的错误是将端口作为输出使用时忘记设置端口在AVR 单片机中设置端口作为输出使用是通过写一个1 到数据方向寄存器(DDR)中完成的。
比如设置端口PORTB 输出高电平LDI R16 0xFF 装载十六进制数FF 到寄存器R16OUT DDRB R16 设置端口PORTB 作为输出使用OUT PORTB R16 设置端口PORTB 输出高电平使用AVR 汇编器时第三个常见的错误是在使用装载程序存储器(LPM)指令时指向了程序存贮器中错误的地址AVR 的程序存贮器是组织成字16 bit 的形式而LPM 指令是读取字节8 bit LPM 指令可以读16 位字的高位字节或低位字节中的任意一个因为这个原因必须将1 6 位的程序存贮器地址分解成两个指向你所希望装入的字节的地址。
一种简单可靠的单片机复位及看门狗保护的方法
一种简单可靠的单片机复位及看门狗保护的方法
叶念渝
【期刊名称】《电气自动化》
【年(卷),期】1997(019)006
【摘要】介绍了由MAX813L集成电路构成的单片机复位电路,它瘘可作具有抗干扰能力的保护看门狗,其硬软件结构简单可靠,已获得广泛的应用。
【总页数】1页(P44)
【作者】叶念渝
【作者单位】华中理工大学自控系
【正文语种】中文
【中图分类】TP368.103
【相关文献】
1.一种高可靠性看门狗及掉电保护电路 [J], 张维
2.一种单片机电源监测和看门狗保护电路及方法 [J], 叶念渝;何兆湘
3.一种新的单片机"看门狗"电路软件设计方法 [J], 李维国;俞晓红
4.一种简单可靠的单片机键盘显示接口方法 [J], 徐佩安;秦健
5.一种新颖可靠的单片机“看门狗”电路 [J], 乐金松
因版权原因,仅展示原文概要,查看原文内容请购买。
- 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=02 选择BOD电平BODLEVEL=1 2.7V(VCC=3V) (可选)BODLEVEL=0 4.0V(VCC=5V) (可选)*/#include <avr/io.h>#include <avr/delay.h>//时钟定为内部RC 1MHz,F_CPU=1000000 也可以采用其他时钟#include <avr/wdt.h>/*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<<LED_JT)|(1<<LED_WD)|(1<<LED_BO )|(1<<LED_EXT)|(1<<LED_PO);//输出驱动LEDCPU_STATUS =MCUCSR;//读取MCU控制和状态寄存器//可以在JTAG调试时直接观察 MCUCSR的状态。
CPU_STATUS&=0x1F;switch(CPU_STATUS){case(1<<JTRF)://JTAG引起的复位?PORTA&=~(1<<LED_JT);break;case(1<<WDRF)://看门狗引起的复位?PORTA&=~(1<<LED_WD);break;case(1<<BORF)://BOD引起的复位?PORTA&=~(1<<LED_BO);break;case(1<<EXTRF)://RESET引脚引起的复位?PORTA&=~(1<<LED_EXT);break;case(1<<PORF)://上电引起的复位?PORTA&=~(1<<LED_PO);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_EN)))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 正常工作之前有一定的时间让电源达到稳定的电平。
延迟计数器的溢出时间通过熔丝位SUT 与CKSEL 设定。
延迟时间的选择请参见P23― 时钟源‖ 。
复位源ATmega16 有5 个复位源:上电复位。
电源电压低于上电复位门限VPOT 时,MCU 复位。
外部复位。
引脚RESET 上的低电平持续时间大于最小脉冲宽度时MCU 复位。
看门狗复位。
看门狗使能并且看门狗定时器溢出时复位发生。
掉电检测复位。
掉电检测复位功能使能,且电源电压低于掉电检测复位门限VBOT 时MCU 即复位。
JTAG AVR复位。
复位寄存器为1时MCU复位。
详见P215―IEEE 1149.1 (JTAG) 边界扫描‖ 。
上电复位上电复位(POR) 脉冲由片内检测电路产生。
无论何时VCC 低于检测电平POR 即发生。
POR 电路可以用来触发启动复位,或者用来检测电源故障。
POR电路保证器件在上电时复位。
VCC 达到上电门限电压后触发延迟计数器。
在计数器溢出之前器件一直保持为复位状态。
当VCC 下降时,只要低于检测门限,RESET 信号立即生效。
外部复位外部复位由外加于RESET 引脚的低电平产生。
当复位低电平持续时间大于最小脉冲宽度时即触发复位过程,即使此时并没有时钟信号在运行。
当外加信号达到复位门限电压VRST( 上升沿) 时,tTOUT 延时周期开始。
延时结束后MCU 即启动。
掉电检测ATmega16 具有片内BOD(Brown-out Detection) 电路,通过与固定的触发电平的对比来检测工作过程中VCC 的变化。
此触发电平通过熔丝位BODLEVEL 来设定,2.7V(BODLEVEL 未编程),4.0V (BODLEVEL 已编程)。
BOD 的触发电平具有迟滞功能以消除电源尖峰的影响。
这个迟滞功能可以解释为VBOT+ = VBOT + VHYST/2 以及VBOT- = VBOT- VHYST/2。
BOD 电路的开关由熔丝位BODEN控制。
当BOD使能后(BODEN被编程),一旦VCC下降到触发电平以下(VBOT-),BOD 复位立即被激发。
当VCC 上升到触发电平以上时(VBOT+),延时计数器开始计数,一旦超过溢出时间tTOUT,MCU 即恢复工作。
如果VCC一直低于触发电平并保持tBOD时间,BOD电路将只检测电压跌落。
看门狗复位看门狗定时器溢出时将产生持续时间为1 个CK 周期的复位脉冲。
在脉冲的下降沿,延时定时器开始对tTOUT 记数MCU控制和状态寄存器-MCUCSRMCU 控制和状态寄存器提供了有关引起MCU 复位的复位源的信息Bit 4 – JTRF: JTAG 复位标志通过JTAG 指令AVR_RESET 可以使JTAG 复位寄存器置位,并引发MCU 复位,并使JTRF置位。
上电复位将使其清零,也可以通过写‖0‖ 来清除。
Bit 3 – WDRF: 看门狗复位标志看门狗复位发生时置位。
上电复位将使其清零,也可以通过写‖0‖ 来清除。
Bit 2 – BORF: 掉电检测复位标志掉电检测复位发生时置位。
上电复位将使其清零,也可以通过写‖0‖ 来清除。
Bit 1 – EXTRF: 外部复位标志外部复位发生时置位。
上电复位将使其清零,也可以通过写‖0‖ 来清除。
Bit 0 – PORF: 上电复位标志上电复位发生时置位。
只能通过写‖0‖ 来清除。
为了使用这些复位标志来识别复位条件,用户应该尽早读取此寄存器的数据,然后将其复位。
如果在其他复位发生之前将此寄存器复位,则后续复位源可以通过检查复位标志来了解看门狗定时器看门狗定时器由独立的1Mhz 片内振荡器驱动。
这是VCC = 5V 时的典型值。
通过设置看门狗定时器的预分频器可以调节看门狗复位的时间间隔。
看门狗复位指令WDR 用来复位看门狗定时器。
此外,禁止看门狗定时器或发生复位时定时器也被复位。
复位时间有8 个选项。
如果没有及时复位定时器,一旦时间超过复位周期,ATmega16 就复位,并执行复位向量指向的程序。
为了防止无意之间禁止看门狗定时器,在看门狗禁用后必须跟一个特定的修改序列。
1. 在同一个指令内对WDTOE 和WDE 写"1―,即使WDE 已经为"1―2. 在紧接的4 个时钟周期之内对WDE 写"0‖看门狗定时器控制寄存器-WDTCRBit 4 – WDTOE: 看门狗修改使能清零WDE 时必须置位WDTOE,否则不能禁止看门狗。