STC8 简单延时指南

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值