AVR编程_如何通过软件复位AVR?(转)

源:http://blog.sina.com.cn/s/blog_493520900100bpos.html

Question

  如何通过软件复位AVR?

Answer

如果你想通过软件复位AVR,你应该使用内部看门狗。简单的使能它和让它溢出。当看门狗触发后,程序计数器返回到0,清除所有的寄存器和其他正在执行的任务,这与将RESET脚拉低有同样的效果。

你不应该处理: --用另一个AVR的引脚连接外部RESET引脚。在短暂的复位时间,AVR的引脚会三态失效,这会导致RESET无效。 --跳到程序地址0,跳到程序地址0,这不会清除全部的寄存器,所以你不会得到一个完整的“复位”。

下列是每30mS复位一次AVR的例子代码(GCC):

#include <avr/io.h>

#include <avr/wdt.h>

int main(void)

{

  wdt_enable(WDTO_30MS);

  while(1) {};

}

或者你可以生成一个宏:

#include <avr/io.h>

#include <avr/wdt.h>

#define Reset_AVR()    wdt_enable(WDTO_30MS); while(1) {}

int main(void)

{

  Reset_AVR();

}

时间: 2024-08-04 22:47:47

AVR编程_如何通过软件复位AVR?(转)的相关文章

结对编程_附加题_博客2

1.界面模块,测试模块和核心模块的松耦合 2.改进程序 结对编程_附加题_博客2

基于树莓派的Linux串口编程_实现自发自收

串口是计算机上一种非常通用设备通信的协议,常用PC机上包含的是RS232规格的串口,具有连接线少,通讯简单,得到广泛的使用. Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备.在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面.如linux下的/ttyS0,/ttyS1分别表示的是串口1和串口2. 树莓派UART端口的位置:见下图的GPIO14(TXD).GPIO 15(RXD) 本文是基于

java_socket套接字网络编程_实现多线程聊天

java编程_socket_套接字_网络编程_简易的GUI多线程聊天程序 运行效果: =============================================================== 服务器端代码: 1 package com.b510.socket1706.gui.freeechatroom; 2 3 import java.io.*; 4 import java.net.*; 5 import java.awt.*; 6 import java.awt.even

STM32:获取复位源,软件复位

RCC CSR寄存器会存储复位标示,可通过它来知道复位原因,来源: 1 if(RCC_GetFlagStatus(RCC_FLAG_PINRST)) 2 printf("PINRST\r\n"); 3 if(RCC_GetFlagStatus(RCC_FLAG_PORRST)) 4 printf("PORRST\r\n"); 5 if(RCC_GetFlagStatus(RCC_FLAG_SFTRST)) 6 printf("SFTRST\r\n"

STM32 软件复位 3.5/早期库/自己实现

STM32软件复位(基于库文件V3.5) 基于V3.5 库实现 void SoftReset(void){__set_FAULTMASK(1);      // 关闭所有中端NVIC_SystemReset();// 复位} 在官方软件库的 core_cm3.h 文件里 直接提供了 系统复位的函数   static __INLINE void NVIC_SystemReset(void){  SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)

STM32 软件复位并模拟USB拔插

最近做了个USB跟上位机的通信,需要软件对MCU进行复位,复位后如果USB没有拔插,PC就不会重新枚举USB为了解决这个问题,我做了软件复位跟,软件模拟USB拔插. 这里我用的是HAL库的软件复位,复位前先把中断关掉,再复位,代码如下: __set_FAULTMASK(1); //关中断 NVIC_SystemReset(); //复位 至于怎么实现模拟USB拔插,则只需要在USB初始化前把PA12进行一个拉低--延时--拉高的操作即可,一般PC机可以通过检查USB的D+引脚来判断USB是否有变

LCD1602液晶显示模块深入详解之软件篇(AVR)

LCD1602液晶显示模块的驱动虽然比七段数码管之类的显示要复杂一些,但实际上也并不是很难,最主要的还是初始化,为什么这么说呢?我们在调试一块新液晶屏的时候,都会先初始化看看有没有光标在闪,没有光标前是一番努力(PROTEUS上也是这么做的),光标出来之后就相对很容易了. 那初始化的流程是怎么样的呢?我们还是看看HD44780的数据手册吧,如下图所示: 可以看到,初始化的主要步骤如下: (1)上电:这特么也算是一个步骤么?是的!如果你用的是其它液晶模块,比如LCD12864,会发现有一个复位引脚

看武侠学编程_以九宫格为例介绍强大的声明式语言Prolog

如果要给众多编程语言分个类,你可能会把它们分成低级语言和高级语言,或者分成面向对象语言和面向过程语言.然而,更多中国程序员所不太熟悉的另外一种划分方式将会把计算机语言分成命令式和声明式两大阵营.之所以说大家可能不太熟悉这种划分,那是因为我们平常所使用绝大部分语言都是命令式的.但事实上你确实也应该注意到另外一大阵营的存在. 命令式编程(ImperativeProgramming)是现今最为广泛使用的编程范型.读者所熟知的众多计算机语言,如C.C++.Java.Pascal.Basic.Python

【Python网络编程】多线程聊天软件程序

课程设计的时候制作的多线程聊天软件程序 基于python3.4.3 import socket import pickle import threading import tkinter import os import datetime import time try: import pymysql except: print("can't find pymysql") tcplocalport=8101 #TCP监听端口 tcpconnectport=8101 #TCP连接端口 u