谢谢邀请:
1.题主你提出的问题好像本身就有问题,首先通过按压一个按键使单片机复位的方法,这个跟中断没有关系,每一个单片机系统都可以设计一个复位电路,这个电路若是手动的就是通过一个按键使电路获得需要的高电平或者低电平来实现硬件复位,复位后单片机程序从0X00地址开始从新执行程序。例如我们常见的的51单片机复位电路如下图:
复位电路工作过程:
复位电路工作原理如右图所示,VCC上电时,使电容C充电,在10K电阻上出现高电位电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S22,C放电,在10K电阻上出现电压,使得单片机复位。S22松手,C又充电,几个毫秒后,单片机进入工作状态。
题主问到的应该就是这种复位电路的复位方法。
2.单片机看门狗复位:
顾名思义看门狗的意思是放置出错,有看门狗电路的单片机,再进行程序设计时可以初始化看门狗参数,设定在规定的时间或者计数脉冲内实现复位看门狗俗称“喂狗”,程序正常运行时看门狗不会溢出,若程序跑飞满足不了喂狗的条件看门狗会溢出从而输出相应电平促使单片机复位。
上图是一个自带看门口的复位电路,这个在单片机程序中规定时间输出信号给复位电路,电路保持正常,若程序跑飞WDI接收不到信号就会输出信号到nRST给单片机复位脚使单片机复位。
单片机复位电路就是为了防止程序在复杂条件下跑飞造成不可预知的后果。
你用中断进行复位是出于什么要求?要达到什么目的?要知道程序一旦复位,不只是程序从头走这么简单,单片机复位后,它的各个功能寄存器的值都有可能恢复为默认值,端口状态也会恢复成默认状态。。。。。。
如果想要实现利用中断复位,我所知道的有两种方式:看门狗中断和无中断服务程序的中断。
一、利用看门狗中断实现复位单片机中看门狗的作用在这里就不详细说了,看门狗中断的功能之一是,防止单片机程序陷入预料之外的死循环或者单片机程序跑飞。
如何实现看门狗中断复位呢?首先我们要预估一段程序的最长运行时间,估算出来后,再加上一些时间余量,把这个时间作为看门狗的“喂狗”时间,在这个时间即将达到时,要及时“喂狗”(也就是把看门狗时间配置寄存器的值重新设置),这样看门狗会重新计时,程序继续正常运行。一旦程序跑飞或者进入一个预料之外的死循环,那么因为程序一直在这里运行,不会再运行到“喂狗”程序中,所以当看门狗寄存器的值达到预定值后,就产生了中断,这个中断让单片机复位。
二、利用没有中断服务程序的中断复位这个功能我在MSP430单片机上试验过,没有再别的单片机上实验,所以不确定别的单片机是否也会这样。
具体实现过程是,在程序中使能某个中断,例如端口中断,串口中断等,但是不写这个中断的服务程序,这样,当满足这个中断的条件出现时,由于找不到中断服务程序,单片机就会复位。
单片机是如何控制实现复位功能的?
比如51单片机,为什么说复位脚接持续2us高电平就能实现?为什么系统上电的时候复位一次,按下复位按键复位一次?
在常见的复位电路中,电容大小为10uf,电阻为10k,根据公式,可以算出电源给电容充电到0.7倍(电源供电5v,即充电到3.5v),需要10k*10uf=0.1s,也就是说在单片机上电启动的0.1秒内,电容从0-3.5v升压,二对应电阻两端电压从5-1.5v降压,即在0.1s内RST引脚从高电平(>1.5v)降到了低电平(1.5v),从而高电平复位时间为0.1s,然后复位结束。这就回答了为什么系统上电的时候为什么会复位。
那么为什么按下按键的时候也会复位呢?在单片机上电>0.1s后由于电源给电容充电达到电源电压,这时候10k电阻上电压趋于0v,RST为低电平,系统没有处于复位状态;当按下按键,电容短路,电容开始放电,在0.1s内电容电压由5-1.5v,而10k电阻上电压由0-3.5v,RST引脚变成高电平,单片机复位。
我是金贝艺专注科技领域!