当前位置: 移动技术网 > 网络运营>服务器>Linux > 51单片机库函数详解(三-二)

51单片机库函数详解(三-二)

2020年08月12日  | 移动技术网网络运营  | 我要评论
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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网