快速导航
STC12已封装好的函数库
单片机延时函数的原理:
延时函数里执行的是空语句,单片机程序指针经过执行的空语句来达到延时的目的。
单片机使用延时函数的优点就是很容易就能写出软件延时程序。
但是,缺点也很非常明显。单片机在执行延时函数时,在做没有用的空运算,不能执行其他程序,而且延时时间不容易计算。因此,精密的延时最后是用定时器。
以下是STC12系统常用延时函数,已封装。
时钟宏定义
#define MAIN_Fosc 11059200L //宏定义主时钟HZ
//#define MAIN_Fosc 12000000L
delay.c
#include "config.h"
#include "delay.h"
//基于STC12单片机1ms延时函数
//函数说明:内部调用
static void Delay1ms()
{
# if MAIN_Fosc == 11059200L
//晶振11.0592MHz
unsigned char i, j;
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
#elif MAIN_Fosc == 12000000L
//晶振12.000000MHZ
unsigned char i, j;
_nop_();
_nop_();
i = 12;
j = 168;
do
{
while (--j);
} while (--i);
#endif
}
//基于STC12单片机1us延时函数
//函数说明:内部调用
static void Delaym1us()
{
# if MAIN_Fosc == 11059200L
//晶振11.0592MHz
_nop_();
#elif MAIN_Fosc == 12000000L
//晶振12.000000MHZ
_nop_();
_nop_();
#endif
}
//基于STC12单片机ms延时函数
//函数说明:外部调用
void Delay_ms(uint16 time)
{
int i;
for(i=0; i<time; i++)
{
Delay1ms();
}
}
//基于STC12单片机us延时函数
//函数说明:外部调用
void Delay_us(uint16 time)
{
int i;
for(i=0; i<time; i++)
{
Delaym1us();
}
}
delay.h
#ifndef _DELAY_H
#define _DELAY_H
//基于STC12单片机ms延时函数
//函数说明:外部调用
void Delay_ms(uint16 time);
//基于STC12单片机us延时函数
//函数说明:外部调用
void Delay_us(uint16 time);
#endif
延时函数程序来源STC-ISP