软硬复位与看门狗控制教程"/>
STC8H系列—2.软硬复位与看门狗控制教程
一、前言:
STC8H系列属于增强型C51单片机,相信实力其青出蓝而胜于蓝,传统的51单片机有专门RST脚,对于STC8系列RST脚与P5.4脚功能复用,通过操作内部寄存器可以实现通用IO口与专用复位脚的转换,同时RST脚的复位实现原理是通过检测比对输入的电压值,当输入的电压值小于设定值时可以产生复位,也可以产生中断。软复位的实现通过操作复位寄存器中的SWRST位来实现系统的复位。看门狗其本质也是一类硬复位,当计时时间到达后,未清零相应的标志位硬件立即实现复位。
二、知识简介:
1、硬复位:
硬复位通过配置RSTCFG寄存器来实现功能,其中当P54RST置1时开启硬复位引脚RST,同时设置LVDS的4类门槛电压值,当ENLVR置0时即实再硬复位,置0时作低电压检测,并产生中断6。
2、软复位:
软件复位系统通过IAP_CONTR寄存器的SWRST位来实现,当置位SWRST时,系统当即复位,这里有必要提一下SWBS这个控制位,当SWBS置1时,重起后系统从ISP区引导(进入下载区),当SWBS置0时,重起后系统从用户程序区开始引导开始引导。
3、看门狗:
看门狗实质上一类异常处理机制,由于某类未知原因导致系统运行异常,异常产生后在未得人为干涉的前,硬件自我救赎一套机制。
看门狗的起动分为软起动和硬起动,硬起动即下载时勾选中看门狗,软起动即操作WDT_CONTR.EN_WDT位,使能看门狗,同时设置定时计数WDT_PS的值。无论是硬软起动看门狗都需要“喂狗”【在设置的时间内清除标志位CLR_WDT及重赋初值】。
三、实验平台搭建:
1、MCU:STC-打狗棒系列核心实验板 V2.3
2、实验板平台:德飞莱LY-51s
3、硬件连接表:
K1----->P20 开启硬件复位
K2----->P21 软件复位
K3----->P22 看门狗
K4----->P23 开启LVD 3.3V中断
LED----->P00 指示灯
四、测试源代码:
#include <STC8H.h>
#include "intrins.h"
sbit Led=P0^0;
sbit Led1=P0^1;
#define RSTFLAG (*(unsigned char volatile xdata *)0xfe99) //声明复位标志寄存器
void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准
void init_IO();//初始化IO
void Lvd_Isr() interrupt 6 //掉电前中断
{
PCON&=~0x20;//清除LVDF标志
Led1=1;
}
void main()
{
P_SW2 |= 0x80; //扩展寄存器XFR访问使能
init_IO();
Delay1ms(20);//加延时让复位后灯明显
Led=0;
PCON&=~0x20;//清除LVDF标志
WDT_CONTR=0x2D;//开启软看门狗,2s复位1次
RSTFLAG|=0x04;//清除复位标志,否则直接进入ISP模式
while(1)
{
if(P20==0)//开启硬件复位键RST(P5_4)脚
{
RSTCFG=0x50; //开启硬复位
RSTFLAG|=0x04;//清除复位标志,否则直接进入ISP模式
}
if(P21==0)//自定义脚P21具有软件复位功能
{
IAP_CONTR|=0x20;//开启软复位
//IAP_CONTR|=0x60;//软复位后直接进入ISP模式
}
if(P22==1)
{
WDT_CONTR=0x3D;//喂狗,置位CLR_WDT,和清除标志位WDT_FLAG
}
if(P23==0)//LVD
{
RSTCFG=0x03; //开启低压3.3V
PCON&=~0x20;//清除LVDF标志
ELVD=1;//开低压中断
EA=1;//开总中断
}
}
}
void init_IO()
{
//RSTCFG=0x50 开启RST键进入ISP模式
P0M1 = 0x00; P0M0 = 0x00; //设置P0口为准双向口
P1M1 = 0x00; P1M0 = 0x00; //设置P1口为准双向口
P5M1 = 0x00; P5M0 = 0x00; //设置P5口为准双向口
}
void Delay1ms(unsigned char x) //@12.000MHz
{
unsigned char i, j;
i = 16;
j = 147;
while(x--)
{
do
{
while (--j);
} while (--i);
}
}
更多推荐
STC8H系列—2.软硬复位与看门狗控制教程
发布评论