本文作者:豆面

如何实现STC15单片机的复位操作?

豆面 2024-11-24 00:10:17 19
如何实现STC15单片机的复位操作?摘要: STC15系列单片机提供了多种复位方式,包括外部RST引脚复位、软件复位、掉电复位/上电复位、内部低压检测复位、MAX810专用复位电路复位、看门狗复位和程序地址非法复位,下面将详...

STC15系列单片机提供了多种复位方式,包括外部RST引脚复位、软件复位、掉电复位/上电复位、内部低压检测复位、MAX810专用复位电路复位、看门狗复位和程序地址非法复位,下面将详细介绍这些复位方式及其实现方法。

一、软件复位

如何实现STC15单片机的复位操作?

IAP_CONTR寄存器

SWBS位(第6位):软件选择启动区,当该位为1时,选择从系统ISP监控程序区启动;当该位为0时,选择从用户应用程序区启动。

SWRST位(第5位):软件复位控制位,当该位为0时,表示没有复位操作;当该位为1时,软件控制产生复位,单片机自动复位。

PCON寄存器

POF位(第4位):上电复位标志位,当单片机断电后,上电复位标志设置为1,该位由软件清除。

示例代码

#include <STC15F2K60S2.H>
#include <stdio.h>
#include <intrins.h>
void Delay2000ms(void);
void UartInit(void);
void GpioInit(void);
void main(void) {
    GpioInit();
    UartInit();
    Delay2000ms();
    Delay2000ms();
    Delay2000ms();
    Delay2000ms();
    Delay2000ms();
    printf("This is a test of soft reset...\r
");
    if (PCON & 0x10) { // 检测是否为上电复位
        printf("Poweron reset is detected!\r
");
        PCON &= ~0x10;
    } else { // 否则本次为软件复位
        printf("Soft reset is detected!\r
");
    }
    P55 = 0;
    Delay2000ms();
    P55 = 1;
    Delay2000ms();
    P55 = 0;
    Delay2000ms();
    printf("Soft reset is executed...\r
");
    IAP_CONTR &= ~0x40; // 软件复位后直接执行用户代码
    IAP_CONTR |= 0x20; // 软件复位
    for (;;) {
        ;
    }
}
void UartInit(void) { // 9600bps@11.0592MHz
    SCON = 0x50; // 8位数据, 可变波特率
    AUXR |= 0x01; // 串口1选择定时器2为波特率发生器
    AUXR |= 0x04; // 定时器2时钟为Fosc, 即1T
    T2L = 0xE0; // 设定定时初值
    T2H = 0xFE; // 设定定时初值
    AUXR |= 0x10; // 启动定时器2
}
char putchar(char c) {
    SBUF = c;
    while (TI == 0);
    TI = 0;
    return c;
}
void GpioInit(void) {
    // 初始化GPIO端口
    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
}
void Delay2000ms(void) { // @11.0592MHz
    unsigned char i, j, k;
    _nop_();
    _nop_();
    i = 85;
    j = 12;
    k = 155;
    do {
        do {
            while (k);
        } while (j);
    } while (i);
}

二、外部RST引脚复位

通过外部RST引脚输入高电平信号,可以实现对单片机的复位,这种方式常用于手动复位或外部设备触发的复位。

三、掉电复位/上电复位

当单片机断电后再上电时,系统会自动进行上电复位,上电复位标志位POF会被置1,需要通过软件清除该标志位。

四、内部低压检测复位

如何实现STC15单片机的复位操作?

当单片机内部电压VCC低于设定的低压检测门限电压时,PCON寄存器中的LVDF位会自动置1,可以在烧录时选择LVDF置1时单片机复位或是申请中断停止程序。

五、MAX810专用复位电路复位

使用MAX810专用复位电路,可以在电源电压异常时自动复位单片机,确保系统稳定运行。

六、看门狗复位

看门狗定时器在设定时间内未被清零,会导致系统复位,这通常用于防止系统进入死循环或长时间无响应的情况。

七、程序地址非法复位

当程序计数器指向非法地址时,系统会自动复位,以防止程序跑飞或执行错误指令。

STC15系列单片机提供了多种复位方式,以满足不同应用场景的需求,通过合理配置和使用这些复位方式,可以有效提高系统的可靠性和稳定性,特别是在软件开发过程中,利用软件复位功能可以方便地进行调试和测试,而不必频繁重启硬件设备。

文章版权及转载声明

作者:豆面本文地址:https://www.jerry.net.cn/articals/273.html发布于 2024-11-24 00:10:17
文章转载或复制请以超链接形式并注明出处杰瑞科技发展有限公司

阅读
分享