51单片机库函数详解(三-二)
程序员文章站
2022-03-11 15:05:43
Delay该文件夹下存储了库的通用延时函数,虽精准度没办法与定时器相比,但也是可以啦!delay.h延时函数头文件,通过顶层宏定义,传递进来选择编译哪些晶振下的函数,达到对应延时的目的。#ifndef __DELAY_H#define __DELAY_H#include "include_drives.h"#if XTAL_24MHz#define XTAL 24#elif XTAL_12MHz#define XTAL 12#elif XTAL_110592MHz#defi...
Delay
该文件夹下存储了库的通用延时函数,虽精准度没办法与定时器相比,但也是可以啦!
delay.h
延时函数头文件,通过顶层宏定义,传递进来选择编译哪些晶振下的函数,达到对应延时的目的。
#ifndef __DELAY_H
#define __DELAY_H
#include "include_drives.h"
#if XTAL_24MHz
#define XTAL 24
#elif XTAL_12MHz
#define XTAL 12
#elif XTAL_110592MHz
#define XTAL 11.0592
#endif
#if STC89C52RC
void Delay_Xms(unsigned int n); //延时 n*1ms
void Delay_Xs(unsigned int n); //延时 n*1s
void Delay_X10us(unsigned int n); //延时 n*10us
#endif
#endif
delay.c
实现函数,这个我就不解释了,大家自行看吧!
#include "delay.h"
/*******************************************************************************
以下延时函数,为粗略延时,精度相对较高,只有11.0592Mhz下10uS延时误差较大
使用时应注意
功能:延时 12M 24M 11.0592M
误差:MS S 5% 10uS 8%-80%
*******************************************************************************/
#if STC89C52RC
#if XTAL_24MHz
/*******************************************************************************
* 函 数 名 : Delay_Xms
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少ms,最大输入65535
*******************************************************************************/
void Delay_Xms(unsigned int n)
{
unsigned int i = 0,j = 0;
for(i = 0;i < n;i ++)
for(j = 0;j < 357;j ++);
}
/*******************************************************************************
* 函 数 名 : Delay_Xs
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少s,最大输入65535
*******************************************************************************/
void Delay_Xs(unsigned int n)
{
for(;n > 0;n --)
Delay_Xms(1000);
}
/*******************************************************************************
* 函 数 名 : Delay_X10us
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少个10us,最大输入65535
*******************************************************************************/
void Delay_X10us(unsigned int n)
{
unsigned char i;
for(;n > 0;n --)
for(i = 0;i < 2;i ++);
}
#elif XTAL_12MHz
/*******************************************************************************
* 函 数 名 : Delay_Xms
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少ms,最大输入65535
*******************************************************************************/
void Delay_Xms(unsigned int n)
{
unsigned int i;
for(;n > 0;n --)
for(i = 0;i < 123;i ++);
}
/*******************************************************************************
* 函 数 名 : Delay_Xs
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少s,最大输入65535
*******************************************************************************/
void Delay_Xs(unsigned int n)
{
for(;n > 0;n --)
Delay_Xms(1000);
}
/*******************************************************************************
* 函 数 名 : Delay_X10us
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少个10us,最大输入65535
*******************************************************************************/
void Delay_X10us(unsigned int n)
{
while(n --);
}
#elif XTAL_110592MHz
/*******************************************************************************
* 函 数 名 : Delay_Xms
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少ms,最大输入65535
*******************************************************************************/
void Delay_Xms(unsigned int n)
{
unsigned int i;
for(;n > 0;n --)
for(i = 0;i < 114;i ++);
}
/*******************************************************************************
* 函 数 名 : Delay_Xs
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少s,最大输入65535
*******************************************************************************/
void Delay_Xs(unsigned int n)
{
for(;n > 0;n --)
Delay_Xms(1000);
}
/*******************************************************************************
* 函 数 名 : Delay_X10us
* 输 入 : 无符号整形变量
* 输 出 : 空
* 函数功能 : 延时
* 详细描述 : 有输入参数的延时函数,且填入数值为延时多少个10us,最大输
入65535,且这个函数是误差最大的
*******************************************************************************/
void Delay_X10us(unsigned int n)
{
while(n --);
}
#endif
#endif
外部链接
码云下载:https://gitee.com/LWTDZ/Core8051.git
店铺地址:https://item.taobao.com/item.htm?spm=a1z10.3-c-s.w4002-22129052348.16.6b222269wKu2dH&id=615384296160
QQ群(STM32嵌入式Linux&单片机):950822175
本文地址:https://blog.csdn.net/qq_34390075/article/details/107938454
上一篇: NB-IoT窄带物联网技术的四大优势
下一篇: UWB技术简介&通讯载波及带宽基础