STC8 简单延时指南

  • 更新时间:20250214

在 STC8 单片机中,要实现阻塞 CPU 进程的简单延时,可以直接使用官方的烧录工具 stc-isp 生成延时代码。

👉 下载地址STC 官方软件下载


使用 stc-isp 生成延时代码的方法

在这里插入图片描述

  1. 打开 stc-isp,选择“软件延时计算器”

  2. 选择指令集

    • 右侧会显示适用的芯片型号,需要找到所用芯片的指令集。
  3. 选择系统频率

    • 由于延时是通过简单的循环操作阻塞 CPU,而循环操作的速度与 CPU 频率相关,因此系统频率的选择必须与实际系统频率一致
    • STC8H 单片机中,内置 IRC(内部振荡时钟),烧录时应正确选择 “输入用户程序运行时的 IRC 频率”,确保与延时计算器中选择的频率一致。
  4. 生成的代码中使用了 _nop_(); 指令时需要引入 <intrins.h> 头文件

    • 否则会导致编译错误。
  5. 点击“生成”后,复制代码到程序中使用


封装延时函数

软件生成的延时代码考虑了入栈、出栈的消耗,但它无法直接指定任意时间的延时。因此,我们可以先生成 1ms 的延时代码,然后封装一个循环调用的函数,以实现任意毫秒的延时。

示例代码(STC8H,系统频率 20MHz)
#include "STC8H.h"
#include <intrins.h>

// 1ms 延时函数(由 stc-isp 生成)
void Delay1ms(void) //@20.000MHz
{
    unsigned char data i, j;
    i = 26;
    j = 247;
    do
    {
        while (--j);
    } while (--i);
}

// 封装的毫秒级延时函数
void Delay_ms(unsigned int ms)
{
    unsigned int cnt;
    for (cnt = 0; cnt < ms; cnt++)
    {
        Delay1ms();
    }
}

注意C语言优化等级

keil中的C语言优化等级应选择默认,否则像这种简单的空循环延时函数可能被编译器优化掉,达不到延时的效果。
言优化等级
keil中的C语言优化等级应选择默认,否则像这种简单的空循环延时函数可能被编译器优化掉,达不到延时的效果。
在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐