STC8 简单延时指南
- 更新时间:20250214
在 STC8 单片机中,要实现阻塞 CPU 进程的简单延时,可以直接使用官方的烧录工具 stc-isp 生成延时代码。
👉 下载地址:STC 官方软件下载
使用 stc-isp 生成延时代码的方法
-
打开 stc-isp,选择“软件延时计算器”
-
选择指令集
- 右侧会显示适用的芯片型号,需要找到所用芯片的指令集。
-
选择系统频率
- 由于延时是通过简单的循环操作阻塞 CPU,而循环操作的速度与 CPU 频率相关,因此系统频率的选择必须与实际系统频率一致。
- 在 STC8H 单片机中,内置 IRC(内部振荡时钟),烧录时应正确选择 “输入用户程序运行时的 IRC 频率”,确保与延时计算器中选择的频率一致。
-
生成的代码中使用了
_nop_();
指令时需要引入<intrins.h>
头文件- 否则会导致编译错误。
-
点击“生成”后,复制代码到程序中使用
封装延时函数
软件生成的延时代码考虑了入栈、出栈的消耗,但它无法直接指定任意时间的延时。因此,我们可以先生成 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语言优化等级应选择默认,否则像这种简单的空循环延时函数可能被编译器优化掉,达不到延时的效果。