1、观察喂狗与不喂狗(禁止看门狗)的区别,使用PB口的LED指示灯做状态指示。
2、养看门狗的用意,在于用它监控系统:在程序本该运行的地方喂狗,如果程序卡死或跑
飞,将不会运行到那,那样狗没有被喂到,饿死了,控制器复位,得以重启从而进行控制。
3、本实验演示功能:养一只AVR内部看门狗,及时喂狗,狗不饿死,单片机不复位;不及时
喂狗,狗饿死了,单片机就复位。
4、本实验的程序设计较为简单,旨在给出养狗、喂狗,不让狗饿死的简单示例。
实际应用时考虑情况较多,要注意什么时候喂狗,放狗。
/*****************************************************************/
#include
#include "delay.h"
#include "link.h"
/****************************************************************
*函数功能:wdt初始化
*入口参数:无
*出口参数:无
****************************************************************/
void WDT_init(void)
{
#asm("wdr"); //复位看门狗,即喂狗
WDTCR=0x0F; //开启看门狗,2048K,2.1S
}
/****************************************************************
*函数功能:关闭看门狗
*入口参数:无
*出口参数:无
*备注:关闭看门狗的步骤(手册):
1. 在同一个指令内对 WDTOE 和 WDE 写 "1“ ,即使WDE 已经为 "1“
2. 在紧接的 4 个时钟周期之内对 WDE 写 "0”
****************************************************************/
void WDT_off(void)
{
#asm("wdr"); /* 调用汇编程序,WDT复位 */
WDTCR |= (1<<4) | (1<<3); // 置位 WDTOE 和 WDE
WDTCR = 0x00; // 关闭 WDT
}
/****************************************************************
*函数功能:端口初始化
*入口参数:无
*出口参数:无
****************************************************************/
void Initial_Port(void)
{
DDRB = 0XFF;
PORTB= 0XFF;//PB口输出高电平,LED全亮
}
/****************************************************************
*函数功能:程序入口
*入口参数:无
*出口参数:无
****************************************************************/
void main(void)
{
uint8 i;
Initial_Port();
delay1ms(200);
WDT_init(); //看门狗初始化
while(1)
{
for(i=0;i<8;i++) //流水灯
{
PORTB = (1<
delay1ms(100);
}
#asm("wdr");//喂狗,注释此句将导致狗饿死,AVR复位
//WDT_off();
}
}
关键字:AVR 看门狗实验
引用地址:
[AVR应用]看门狗实验
推荐阅读最新更新时间:2024-03-16 15:17
AVR单片机熔丝位设置技巧
对AVR熔丝位的配置是比较细致的工作,用户往往忽视其重要性,或感到不易掌握。下面给出对AVR熔丝位的配置操作时的一些要点和需要注意的相关事项。有关ATmega128熔丝位的具体定义和功能请查看本书相关章节,在附录中将给出一个完整的汇总表。 (1)在AVR的器件手册中,对熔丝位使用已编程(Programmed)和未编程(Unprogrammed)定义熔丝位的状态,“Unprogrammed”表示熔丝状态为“1”(禁止);“Programmed”表示熔丝状态为“0”(允许)。因此,配置熔丝位的过程实际上是“配置熔丝位成为未编程状态“1”或成为已编程状态“0””。 (2)在使用通过选择打钩“√”方式确定熔丝位状态值的编程工具软件时
[单片机]
基于WINAVR + avr studio 4 使用外部晶振时及延时可能遇到的问题
第一步,使用外部晶振 1. 连接isp下载线 2. 打开avr fighter a 如下界面,在熔丝位那框架,点击 读取 (注:上图是默认的熔丝位) b.单击鼠标,把熔丝位改为下图(仅是JTAGEN 和CKOPT 为0),单击写入: 这样就能使用外部晶振啦~ 修改过一次下次就不用修改了,但注意这是外部晶振,而不是RC振荡器,还有不要乱改熔丝位,乱改会锁芯片的。 第二步,使用gcc自带延时函数及设置avrstudio 例: #include util/delay.h //声明 //us级别的延时函数 voidDelayus(unsigned int lus) { w
[单片机]
基于AVR与DDS技术的超声波电源研制
1引言 近年来, 随着压电材料、电力电子技术的飞速发展,超声在工业、农业、生物、医药卫生、环境保护等国民经济的各个部门以及国防工业中已得到广泛的应用 。超声技术的两大核心要素包括换能器和超声电源 。目前,超声技术向高频率、高稳定性发展,因此对超声电源的性能提出了更高的要求。在超声系统工作过程中,由于变幅杆系统刚度、载荷、工作面积等因素的变化,导致换能器系统固有频率发生漂移 ,要求超声电源具有精确的频率自动跟踪功能 ,以满足换能器稳定的超声输出。此外,目前对换能器多种工作频率的需求日愈增加,急需具有多种频率选择的超声电源与之配对 。本文采用DDS与AVR,研制了一种新型超声波电源,能够提供500kHz、功率为3.2瓦范围内的电信号输出
[单片机]
基于ATMEL AVR单片机的居家安全卫士系统实现,附软硬件架构
1.设计方案目标: 智能居家安全卫士系统是利用先进的计算机技术、综合布线技术、依照人体工程学原理,融合个性需求,将与家居生活有关的各个子系统有机地结合在一起,实现“以人为本”的全新家居生活体验。高性能ATMEL最新MCU及Xmega和UC3系列产品是基于设计出一款高处理性能和低功耗功能的内核而开发的产品。此系列继承ATMEL家族优良基础。基于ATMEL最新MCU及Xmega和UC3系列产品为控制芯片的居家安全卫士(MI—home),以“方便、舒适、享受、超前、舒心”为主题,我们设计了以下几个模块:“非接触式IC刷卡门禁模块”、“防盗防火报警模块”、“安全控电模块”、“空气质量检测模块”、“温湿度检测模块”、“GSM无线通信模块”、
[电源管理]
AVR 看门狗WDT程序
系统功能 很多人喜欢养宠物狗,很多单片鸭大侠则喜欢养看门狗,如果您也希望搞条AVR的看门狗养养,那么本节很适合您。 养看门狗的用意,在于用它监控系统:在程序本该运行的地方喂狗,如果程序卡死或跑飞,将不会运行到那,那样狗没有被喂到,饿死了,控制器复位,得以重启从而进行控制。 本节演示功能:养一只AVR内部看门狗,及时喂狗,狗不饿死,AVR单片鸭不复位;不及时喂狗,狗饿死了,AVR单片鸭就复位。 本节的程序设计较为简单,旨在给出养狗、喂狗,不让狗饿死的简单示例。实际应用时考虑情况较多的要注意什么时候喂狗,放狗。 硬件设计 AVR主控电路原理图 LED控制电路原理图 软件设计 //
[单片机]
基于AVR单片机的ISP设计
0 引言 随着PDA、移动电话、数码相机、打印机等消费类产品的普及,用于这些设备与电脑、或设备与设备之间的高速数据传输技术越来越受到人们的关注。以往以计算机为核心的数据传输结构,非常不利于USB,总线在嵌入式行业的应用,也不适用于野外作业,而OTG技术的推出则可实现在没有PC的情况下,设备与设备之间的数据传输,它拓展了USB技术的应用范围。本文采用的设计方案是基于Philips公司的ISP1362 OTG控制芯片,参照最新的USB OTG技术规范,设计了一种遵循USB协议的主/从机系统。 1 ISP1362芯片的内部结构 Philips公司的ISP1362是一款符合USB 2.0总线协议的接口芯片,内部有3个USB控制
[单片机]
如何设定的AVR Mega16 片内RC振荡器工作频率
AVR片内RC 振荡器提供了固定的1.0、2.0、4.0 或8.0 MHz 的时钟。这些频率都是5V、25 C 下的标称数值。这个时钟也可以作为系统时钟,只要按照Table 9 对熔丝位CKSEL进行编程即可。 片内标定的RC 振荡器工作模式 CKSEL3 CKSEL2 CKSEL1 CKSEL0 标称频率(MHz) 0 0 0 1 1.0 0 0 1 0 2.0 0 0 1 1 4.0 0 1 0 0
[单片机]
AVR AD转换的C语言编程
#include io8535v.h #define uchar unsigned char #define uint unsigned int uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar Da ta ={0,0,0,0}; void DelayMs(uint i) //0.25ms {uchar j; for(;i!=0;i--) {for(j=250;j!=0;j--) {;}} } void Display(uchar *p) //间隔5ms显示 {uchar i,sel=0x01; for(i=0;i 4;i++)
[单片机]