該資料夾下儲存了庫的通用延時函數,雖精準度沒辦法與定時器相比,但也是可以啦!
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