STC12C5A60S2自主适应时钟延时函数

快速导航
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
请添加图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值