在使用 STC32G12K128 单片机进行编程设计时,延时函数的确是非常重要的工具。它可以用来:
- 串口通讯:确保数据的发送和接收有足够的时间间隔,避免数据丢失。
- LED 走马灯:控制 LED 的闪烁频率,需要精确的时间控制。
- 数字钟:实现时间的显示和更新,需要定时的延时。
- 控制 PWM 电动机:调整 PWM 信号的周期和占空比,通常需要精确的时间控制。
- 产生方波:生成稳定的方波信号,必须控制高低电平的持续时间。
因此,延时函数在这些应用中是不可或缺的,帮助确保系统的正确运行。
本文就是探讨延时函数的各种写法。
C 语言
最简单的方法就是运用 for 循环来达到延时的目的。
#include <STC32G.H> //STC32G的通用头文件,头文件不分大小写
#define MAIN_Fosc 24000000L //定义主时钟
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
/******************** 主函数 **************************/
void main(void)
{
volatile u16 i;
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P4M1 = 0x00; P4M0 = 0xff; //设置为推挽输出
while(1)
{
P40 = 1;
for (i=0;i<30239; i++); // 正脉冲
P40 = 0;
for (i=0;i<30239; i++); // 负脉冲
}
}
volatile u16 i; 的关键字 volatile 是必须的,否则因为编译器进行优化,周期不会是要求的 20 ms, 可能变成 228.06 µs。

图1:利用示波器检测 P4.0 输出端口的波形。

图2:示波器。

最低0.47元/天 解锁文章
1034

被折叠的 条评论
为什么被折叠?



