欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

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