/********************************************************************************************************
*Delay.c file
*延时函数
*作者:勇气之翼
*建立日期:2016年1月18日
*版本:V2.0
*适用于STC12/15系列芯片的12/24Mhz晶振
*使用说明:
- 最初级的软件延时,会让你CPU白白等待(俗称阻塞延时),适合初学者,简单省事,延时函数由stc官方提供, 非常准确。
- 1.使用前把delay.c和delay.h文件放入工程目录下,然后双击Source Group 1,把delay.c文件添加进来,再在主函数前#include"delay.h"。
- 2.然后请在Keil程序的Options for Target设置里的C51选项卡里的PreprocessorSymbols的Define里写上两个宏定义。
- 3.宏定义:STC_12代表STC12系列单片机,STC_15代表STC15系列单片机,Fosc_12代表使用12MHz晶振,如果不写代表24MHz晶振。
- 宏定义举例:在C51选项卡里的PreprocessorSymbols的Define里写 STC_12,Fosc_12
- 4.需要使用延时时直接调用delay_ms(x)或delay_us(x)即可,x为具体要延时的长度。
************************************************************************************************************************************
* 函数名 | 行数 | 注释 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1ms_12_STC_12(); | 70 | stc12系列芯片在12MHz晶振下1ms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1us_12_STC_12(); | 85 | stc12系列芯片在12MHz晶振下1us函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_ms_12_STC_12(uint16 ms); | 91 | stc12系列芯片在12MHz晶振下xms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_us_12_STC_12(uint16 us); | 98 | stc12系列芯片在12MHz晶振下xus函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
*
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1ms_24_STC_12(); | 107 | stc12系列芯片在24MHz晶振下1ms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1us_24_STC_12(); | 121 | stc12系列芯片在24MHz晶振下1us函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_ms_24_STC_12(uint16 ms); | 129 | stc12系列芯片在24MHz晶振下xms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_us_24_STC_12(uint16 us); | 136 | stc12系列芯片在24MHz晶振下xus函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
*
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1ms_12_STC_15(); | 146 | stc15系列芯片在12MHz晶振下1ms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1us_12_STC_15(); | 159 | stc15系列芯片在12MHz晶振下1us函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_ms_12_STC_15(uint16 ms); | 167 | stc15系列芯片在12MHz晶振下xms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_us_12_STC_15(uint16 us); | 174 | stc15系列芯片在12MHz晶振下xus函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
*
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1ms_24_STC_15(); | 182 | stc15系列芯片在24MHz晶振下1ms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void Delay1us_24_STC_15(); | 194 | stc15系列芯片在24MHz晶振下1us函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_ms_24_STC_15(uint16 ms); | 204 | stc15系列芯片在24MHz晶振下xms函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_us_24_STC_15(uint16 us); | 211 | stc15系列芯片在24MHz晶振下xus函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
*
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_ms(uint16 ms); | 222 | 延时x毫秒函数 *
*-----------------------------------------------------------------------------------------------------------------------------------
* void delay_us(uint16 us); | 243 | 延时x微秒函数 *
*---------------------------------------------------------------------------------------------------------------------------------*/
#include "sys.h"
#include "intrins.h"
#ifdef STC_12 //适用于STC12系列延时
#ifdef Fosc_12
void Delay1ms_12_STC_12() //@12.000MHz STC12
{
unsigned char i, j;
_nop_();
_nop_();
i = 12;
j = 168;
do
{
while (--j);
} while (--i);
}
void Delay1us_12_STC_12() //@12.000MHz STC12
{
_nop_();
_nop_();
}
void delay_ms_12_STC_12(uint16 ms)
{
unsigned int i;
for (i = 0; i<ms; i++)
Delay1ms_12_STC_12();
}
void delay_us_12_STC_12(uint16 us)
{
unsigned int i;
for (i = 0; i<us; i++)
Delay1us_12_STC_12();
}
#else
void Delay1ms_24_STC_12() //@24.000MHz STC12
{
unsigned char i, j;
_nop_();
_nop_();
i = 24;
j = 84;
do
{
while (--j);
} while (--i);
}
void Delay1us_24_STC_12() //@24.000MHz STC12
{
unsigned char i;
i = 3;
while (--i);
}
void delay_ms_24_STC_12(uint16 ms)
{
unsigned int i;
for (i = 0; i<ms; i++)
Delay1ms_24_STC_12();
}
void delay_us_24_STC_12(uint16 us)
{
unsigned int i;
for (i = 0; i<us; i++)
Delay1us_24_STC_12();
}
#endif
#else //适用于STC15系列延时
#ifdef Fosc_12
void Delay1ms_12_STC_15() //@12.000MHz STC15
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void Delay1us_12_STC_15() //@12.000MHz STC15
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay_ms_12_STC_15(uint16 ms)
{
unsigned int i;
for (i = 0; i<ms; i++)
Delay1ms_12_STC_15();
}
void delay_us_12_STC_15(uint16 us)
{
unsigned int i;
for (i = 0; i<us; i++)
Delay1us_12_STC_15();
}
#else
void Delay1ms_24_STC_15() //@24.000MHz STC15
{
unsigned char i, j;
i = 24;
j = 85;
do
{
while (--j);
} while (--i);
}
void Delay1us_24_STC_15() //@24.000MHz STC15
{
unsigned char i;
_nop_();
_nop_();
i = 3;
while (--i);
}
void delay_ms_24_STC_15(uint16 ms)
{
unsigned int i;
for (i = 0; i<ms; i++)
Delay1ms_24_STC_15();
}
void delay_us_24_STC_15(uint16 us)
{
unsigned int i;
for (i = 0; i<us; i++)
Delay1us_24_STC_15();
}
#endif
#endif
void delay_ms(uint16 ms)
{
#ifdef STC_12
#ifdef Fosc_12
delay_ms_12_STC_12(ms);
#else
delay_ms_24_STC_12(ms);
#endif
#else
#ifdef Fosc_12
delay_ms_12_STC_15(ms);
#else
delay_ms_24_STC_15(ms);
#endif
#endif
评论0
最新资源