这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 学习AI8051开发板例程:04AI8051定时器的功能调试(三)

共1条 1/1 1 跳转至

学习AI8051开发板例程:04AI8051定时器的功能调试(三)

高工
2025-11-08 16:18:54     打赏

一:STC系统复位的几种方式:

Ai8051U 系列单片机的复位分为硬件复位和软件复位两种。

硬件复位时,所有的寄存器的值会复位到初始值,系统会重新读取所有的硬件选项。同时根据硬件选项所设置的上电等待时间进行上电等待。硬件复位主要包括:

上电复位

低压复位

复位脚复位(低电平复位)

看门狗复位

软件复位时,除与时钟相关的寄存器保持不变外,其余的所有寄存器的值会复位到初始值,软件复位不会重新读取所有的硬件选项。软件复位主要包括:

写 IAP CONTR 的 SWRST 所触发的复位

二:使用看门狗复位功能:

1108-1.png

WDT FLAG:看门狗溢出标志

看门狗发生溢出时,硬件自动将此位置1,需要软件清零。EN WDT:看门狗使能位

0:对单片机无影响

1:启动看门狗定时器

CLR WDT:看门狗定时器清零

0:对单片机无影响

1:清零看门狗定时器,硬件自动将此位复位IDL WDT:IDLE 模式时的看门狗控制位

0:IDLE 模式时看门狗停止计数

1:IDLE 模式时看门狗继续计数

WDT PS[2:0]:看门狗定时器时钟分频系数

1108-2.png

三:软件代码如下所示:

3.1 定义如下寄存器

#define D_WDT_FLAG          (1<<7)
#define D_EN_WDT            (1<<5)
#define D_CLR_WDT           (1<<4)  //auto clear
#define D_IDLE_WDT          (1<<3)  //WDT counter when Idle
#define D_WDT_SCALE_2       0
#define D_WDT_SCALE_4       1
#define D_WDT_SCALE_8       2       //T=393216*N/fo
#define D_WDT_SCALE_16      3
#define D_WDT_SCALE_32      4
#define D_WDT_SCALE_64      5
#define D_WDT_SCALE_128     6
#define D_WDT_SCALE_256     7

3.2实际代码如下所示:

    while(1)
    {
        delay_ms(1);    //延时1ms
        DisplayScan();
        if(tes_cnt <= 5)    //5秒后不喂狗, 将复位,
            WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_256);    // 喂狗

        if(++ms_cnt >= 1000)
        {
            ms_cnt = 0;
            tes_cnt++;
            LED8[7] = tes_cnt;
        }
    }

四:测试图片如下所示:

数码管显示当前的秒计数,工作5s之后,不再喂狗,实现复位功能。






关键词: AI8051     定时器    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]