ATtiny88初体验(四):看门狗
ATtiny88初体验(四):看门狗
ATtiny88单片机的看门狗使用内部独立的128KHz时钟源,拥有3种工作模式:
- Interrupt模式:超时产生中断;
- System Reset模式:超时产生系统复位;
- Interrupt & System Reset模式:超时产生中断,中断处理完成后产生系统复位。
当熔丝位 WDTON
被编程时(值为0),将强制将看门狗设为System Reset模式,此时 WDE
和 WDIE
位将被锁定为 1
和 0
。
清除 WDE
位和修改 WDP
需要按照下面的顺序进行操作:
- 向
WDCE
和WDE
位写1,不管WDE
位先前是什么值,都必须写1。 - 在接下来的4个时钟里,修改
WDE
和WDP
位,清除WDCE
位,这些必须在一次操作内完成。
注意:
- 为了防止程序陷入复位循环,不管有没有用到看门狗,在初始化时,都建议清除
WDRF
标志位和WDE
位。 - 在任何对
WDP
位的修改之前,建议都复位看门狗,否则可能会导致意外的复位。
寄存器
WDRF
:看门狗系统复位标志位。BORF
:欠压复位标志位。EXTRF
:外部复位标志位。PORF
:上电复位标志位。
WDIF
:看门狗中断标志位。WDIE
:看门狗中断使能。WDCE
:看门狗修改使能,只有设置此位,才能修改WDE
和WDP
位。WDE
:看门狗系统复位使能。
WDP[3:0]
:看门狗定时器分频。
代码
代码的文件结构如下:
.
├── Makefile
├── inc
│ ├── serial.h
│ └── serial_stdio.h
└── src
├── main.c
├── serial.c
└── serial_stdio.c
其中, src/main.c
的内容如下:
#include <stdint.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <serial_stdio.h>
static void watchdog_setup(void);
int main(void)
{
cli();
DDRD = _BV(DDD0); // set PD0 as output
stdio_setup(); // initialize stdio
sei();
if (MCUSR & _BV(WDRF)) { // check if watchdog reset
printf("Watchdog Reset.\r\n");
}
if (MCUSR & _BV(BORF)) { // check if brown-out reset
printf("Brown-out Reset.\r\n");
}
if (MCUSR & _BV(EXTRF)) { // check if external reset
printf("External Reset.\r\n");
}
if (MCUSR & _BV(PORF)) { // check if power-on reset
printf("Power-on Reset.\r\n");
}
MCUSR = 0; // clear reset flags
watchdog_setup(); // initialize watchdog as timer
for (;;);
}
static void watchdog_setup(void)
{
cli();
wdt_reset(); // reset watchdog counter
MCUSR &= ~_BV(WDRF); // clear watchdog reset flag
WDTCSR = _BV(WDCE) | _BV(WDE); // enable watchdog change
WDTCSR = _BV(WDIE) | _BV(WDP2) | _BV(WDP0); // interrupt mode, 0.5s
sei();
}
ISR(WDT_vect)
{
uint8_t sreg = SREG;
PIND = _BV(PIND0); // toggle PD0
SREG = sreg;
}
上述代码将看门狗设置为定时器中断模式,定时周期为0.5s,在中断程序里,翻转PD0的输出状态。
参考资料
ATtiny88初体验(四):看门狗的更多相关文章
- Spring Cloud Alibaba 初体验(四) Sentinel
一.Sentinel 下载与运行 本文使用 Sentinel 1.7.1:https://github.com/alibaba/Sentinel/releases 使用自定义端口 8089 运行 Se ...
- Xamarin+Prism开发详解四:简单Mac OS 虚拟机安装方法与Visual Studio for Mac 初体验
Mac OS 虚拟机安装方法 最近把自己的电脑升级了一下SSD固态硬盘,总算是有容量安装Mac 虚拟机了!经过心碎的安装探索,尝试了国内外的各种安装方法,最后在youtube上找到了一个好方法. 简单 ...
- 香蕉派(or 皮?)上手初体验 -- 外观鉴赏,安装,配置&总结
一.前言及简单介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG9uZ2Vyem9uZQ==/font/5a6L5L2T/fontsize/400/f ...
- Node.js 网页瘸腿爬虫初体验
延续上一篇,想把自己博客的文档标题利用Node.js的request全提取出来,于是有了下面的初哥爬虫,水平有限,这只爬虫目前还有点瘸腿,请看官你指正了. // 内置http模块,提供了http服务器 ...
- 【Knockout.js 学习体验之旅】(1)ko初体验
前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...
- 在同一个硬盘上安装多个 Linux 发行版及 Fedora 21 、Fedora 22 初体验
在同一个硬盘上安装多个 Linux 发行版 以前对多个 Linux 发行版的折腾主要是在虚拟机上完成.我的桌面电脑性能比较强大,玩玩虚拟机没啥问题,但是笔记本电脑就不行了.要在我的笔记本电脑上折腾多个 ...
- Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验
Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出E ...
- win7升win10,初体验
跟宿舍哥们聊着聊着,聊到最近发布正式版的win10,听网上各种评论,吐槽,撒花的,想想,倒不如自己升级一下看看,反正不喜欢还可以还原.于是就开始了win10的初体验了,像之前装黑苹果双系统一样的兴奋, ...
- 【尝新】微信小程序初体验
文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1474644089434 根据文档地址中下载微信开发工具后,按照文档指引可以创建一个快速体验的小d ...
- [ZigBee] 12、ZigBee之看门狗定时器——饿了就咬人的GOOD DOG
引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~ 1.看门狗概述 看门狗定时器(WDT,Watch Dog Timer)是单片机的一 ...
随机推荐
- TypeError: Cannot read property 'upgrade' of undefined
解决方案: 在你的.env.dev配置文件中配置VUE_APP_BASE_API并对target赋值
- Python这样读写Excel数据,这样简直不要太粗暴!
什么是xlrd&xlwt? xlrd和xlwt是Python语言中,读取和写入Excel数据的扩展工具.xlrd为xls文件read库,xlwt为xls文件write库.具体请看xlrd百度百 ...
- 【Java】水果超市管理系统
前言 说是个系统,看着像实训的产物,但实际上这是Java课程最后一个关于jdbc的大实验,yes,挺大的. 过程 看着视频里的一堆一堆的文件,逻辑混乱的讲解,我决定 我自己写这个系统 说干就干: 分析 ...
- Redis内存兜底策略——内存淘汰及回收机制
Redis内存兜底策略--内存淘汰及回收机制 Redis内存淘汰及回收策略都是Redis内存优化兜底的策略,那它们是如何进行兜底的呢?先来说明一下什么是内存淘汰和内存回收策略: Redis内存淘汰:当 ...
- CSS文本过长时设置省略号
写页面时很多时候会遇到一个容器中文本内容超出,使用overflow : hidden;,但是跟用户体验不太友好,设置overflow : scroll; 会出现滚动看着也不爽,所以我就想使用css 设 ...
- WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用 WPF资料源码
WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处. 在开发速度方面,这取决于具体情况.如果您熟悉 WinForms 开发并且正 ...
- JQuery的认识和安装
jQuery 是一个 JavaScript 函数库. jQuery 是一个轻量级的"写的少,做的多"的 JavaScript 库. jQuery 库包含以下功能: HTML 元素选 ...
- MYSQL数据库的创建和删除
打开Windows命令行,输入登录用户和密码 mysql -h localhost -u root -p 创建新数据 CREATE DATABASE zoo; 查看系统中的数据库 SHOW DATAB ...
- PowerShell脚本的基础知识
参考文档https://learn.microsoft.com/zh-cn/powershell/scripting/samples/viewing-object-structure--get-mem ...
- 【Python入门教程】获取图片可视化精准定位(逆地理编码)
使用exifread库读取图片的经纬度信息(WGS84坐标) 使用高德开放API将经纬度转为高德底图经纬度,并输出具体位置 使用folium库,以高德底图为基准,在网页上可视化显示地图和兴趣点 一 ...