`

STC51单片机延时函数

阅读更多
#define STC_Y1  97560UL  // 89C/LEXX、90C/LEXX
#define STC_Y3  14050UL  // 10F/Lxx、11F/Lxx 、12C/LExx、15F104E/L104E(A版)、15F204E/L204EA(A版)
#define STC_Y5  13043UL  // 15F/L/Wxx(Y3内核个别型号除外)

#define Fosc 12000000UL  // 主频频率
#define Core STC_Y5      // 内核型号

/**
 *  功能:延时t毫秒
 *  入参:0~65535
 */
void delay_ms(unsigned int t)
{
    unsigned int i;
    do{
        i = (unsigned int)(Fosc / Core);
        while(--i);
    }while(--t);
}

 取个最大值看看延时误差就行了,t = 65000 ,误差才几十us,较一般的延时准确度已经很高了。

至于最开始的宏定义,看似magic number,其实就是debug得到汇编代码,得到调用函数到返回函数执行的所有指令,然后根据各个内核的指令速度稍作修改就可以了。这几个数可以在一定范围内修改,因为

Fosc/Core是个浮点数,最后做了一下取整,好在这一套操作是在编译时期就解决了,对性能没有影响。

发文的时候STC已经出Y6内核了。不过手上没有STC的新片,估计以后也不会有了,手头这些STC15系列的还没怎么玩。况且还有一堆mega8/16 另外有几片msp430,stm8/32,下一步打算玩玩这些。

分享到:
评论

相关推荐

    STC8_Delay.rar_stc8_stc8延时程序_延时函数_自动延时_自动识别时钟

    次代码是针对STC8系列的单片机的延时函数,使用 此代码可以直接添加调用,程序自动获取内部系统时 钟后初始化延时函数。只要是ISP软件默认的时钟频 率都可以应用(特殊频率除外) 该代码为初版,还存在很多缺陷,请...

    宏晶STC15系列单片机延时函数实现例程

    // 描述: 延时函数。 // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟. // 返回: none. // 版本: VER1.0 // 日期: 2013-4-1 // 备注: //==========================================================...

    STC15系列万能delay延时函数.zip

    为了方便51单片机在不同晶振频率下,延时函数能正常使用而打包的延时函数。改变频率后只需改变一下宏定义即可。 delay.h #ifndef _DELAY_H #define _DELAY_H //注意时钟频率设置正确 //-------------------...

    STC单片机延时测试程序--高精度延时

    STC单片机延时测试程序是针对STC系列单片机进行高精度延时功能验证的C语言程序。在嵌入式系统开发中,精确的延时控制是至关重要的,尤其是在实时性和周期性任务中。STC单片机由于其指令集与传统51单片机有所不同,...

    STC 51单片机经典实例程序100例(含仿真文件)

    1. **基础编程概念**:51单片机使用的是基于C语言的编程环境,学习者应掌握C语言的基础语法,如变量、数据类型、控制结构(if-else、switch-case、for、while)、函数等。这些是编写任何程序的基础。 2. **51单片机...

    STC51单片机实例之03单灯闪烁

    首先,STC51单片机的实例中,实现单灯闪烁需要了解几个基础概念:I/O端口操作、延时函数的编写和循环控制。 I/O端口操作: STC51单片机的I/O端口可以被配置为输入或输出,通常用来连接LED灯、按钮、传感器等外围...

    stc15单片机 函数 参考

    STC15单片机是STC公司推出的一系列基于51内核的微控制器,以其高性价比和丰富的内置功能受到许多嵌入式开发者的欢迎。对于初学者来说,掌握STC15单片机的函数使用是入门的关键。本文将深入探讨STC15系列单片机的函数...

    STCDEMO_STC51单片机_DEMO_

    STCDEMO_STC51单片机_DEMO_是一个基于STC15W系列单片机的示例项目,其主要目标是演示如何通过编程实现简单LED闪烁功能。STC15W系列是STC公司生产的一系列增强型8051内核的单片机,具有低功耗、高速度、高性价比的...

    STC12系列单片机的延时方法

    // 适用于STC12C5A60S2系列单片机的1ms延时函数 void DelayTimer_1ms(unsigned int DelayValue) { unsigned int a, b; for (a = 0; a ; a++) { for (b = 0; b ; b++); } } ``` 此示例中的`DelayTimer_1ms`...

    STC51单片机程序包

    2. **定时器和计数器**:STC51的定时器/计数器功能强大,可以用于产生周期性信号、延时、波特率设置等。理解其工作原理和配置方式是编写实时程序的关键。 3. **串行通信**:UART接口是单片机与其他设备通信的常见...

    C51软件延时(STC12,STC15通用,12MHz,24MHz通用)

    STC官方提供的延时函数考虑了时钟频率,使得延时函数在不同频率下都能保持准确性。例如,在12MHz时钟频率下,一个机器周期为1/12MHz=83.3ns,而在24MHz时钟频率下,一个机器周期为1/24MHz=41.67ns。因此,编写延时...

    STC51单片机 DS1302 18b20实现万年历.pdf

    STC51单片机 DS1302 18b20实现万年历.pdf 本资源是一个使用STC51单片机、DS1302和18b20实现的万年历电子钟的制作教程。该电子钟可以显示年、月、日、小时、分、秒、星期和温度,并可以调节时间。 知识点: 1. STC...

    STC单片机的 延时程序

    我在STC12C5410上写的一个很简单的延时程序,希望对刚学习STC的人工程帅有点帮助

    STC51单片机基础实验板

    6. **定时器/计数器**:51单片机内置两个16位定时器/计数器,可实现定时、计数、波特率发生等功能,是控制延时、频率测量等应用的基础。 7. **串行通信**:实验板上的串口通信接口用于与计算机或其他单片机进行数据...

    STC单片机C语言精确延时

    综上所述,STC单片机的精确延时涉及到对微秒级延时函数的设计、10微秒级延时函数的优化以及通过中断服务函数实现毫秒级的延时。通过对单片机指令周期的理解和适当的数学计算,可以构建出适应不同延时需求的函数,...

    STC51单片机示范程序

    4. 定时器:51单片机内建多个定时器/计数器,如Timer0、Timer1、Timer2等,它们可以用于生成周期性中断、延时、脉宽调制等。开发者需要理解定时器的工作模式(如方式0、方式1、方式2、方式3)、预分频器的设置,以及...

    STC12C系列单片机函数库

    7. **延时函数**:为了实现精确的时间间隔,函数库通常提供延时函数,如毫秒级、微秒级延时,用于程序中的等待或同步。 8. **波形生成**:对于某些应用,如音频播放、电机控制,可能需要生成特定波形。函数库可能会...

    STC51单片机学习笔记2-汇编流水灯

    延时函数在汇编中通常使用循环计数来实现。 7. **调试与测试**:在实际应用中,我们需要使用仿真器或者硬件平台来测试代码,确保流水灯按照预期工作。对于STC51单片机,可使用STC-ISP编程软件下载和调试程序。 ...

    STC51单片机28-跑马灯

    2. **延时函数**:为了实现LED灯逐个点亮的效果,需要在程序中加入延时函数。这通常通过循环计数来实现,根据计数次数的不同产生不同时间长度的延迟。 3. **定时器应用**:更高级的跑马灯实现会用到单片机的定时器...

    STC 51单片机62- Proteus仿真多位数码管稳定显示 不抖动

    为解决这一问题,我们可以在软件层面引入延时函数,确保每次更新数码管状态时有足够的间隔,避免因快速切换导致的视觉抖动。 具体实现步骤如下: 1. 定义数码管的段码:每个数码管由7段组成(a-g),加上一个...

Global site tag (gtag.js) - Google Analytics