如题
点击此处下载
ourdev_614624ZCX5XV.pdf(文件大小:56K) (原文件名:WinAVR延时函数理解 .pdf)
我写的头文件 delay.h 最后面的需要自己扩展
#ifndef _DELAY_H_
#define _DELAY_H_
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//时钟频率,需要设置
#ifndef _F_CPU_
#define _F_CPU_
//#define F_CPU_1000000
//#define F_CPU_1843200
//#define F_CPU_2000000
//#define F_CPU_3686400
//#define F_CPU_4000000
//#define F_CPU_7372800
//#define F_CPU_8000000
#define F_CPU_11059200
//#define F_CPU_12000000
//#define F_CPU_14745600
//#define F_CPU_16000000
//#define F_CPU_18432000
//#define F_CPU_20000000
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//XT精确延时函数
#ifndef _DELAY_XT_H_
#define _DELAY_XT_H_
#include <intrins.h>
//延时专用全局变量
unsigned char _DELAY_I=0,_DELAY_J=0,_DELAY_K=0;
//精确延时1T秒
#define _delay_1T() {_nop_();}
//精确延时2xT秒,x范围1-255
#define _delay_2xT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--);}
//精确延时10xT秒,xx范围1-255
#define _delay_10xT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--)
{for(_DELAY_J=3;_DELAY_J>0;_DELAY_J--);};}
//精确延时100xT秒,xx范围1-255
#define _delay_100xT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--)
{for(_DELAY_J=48;_DELAY_J>0;_DELAY_J--);};}
//精确延时xKT秒,x范围1-255
#define _delay_xKT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--)
{for(_DELAY_J=2;_DELAY_J>0;_DELAY_J--)
{for(_DELAY_K=248;_DELAY_K>0;_DELAY_K--);};};}
//精确延时10xKT秒,xx范围1-255
#define _delay_10xKT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--)
{for(_DELAY_J=20;_DELAY_J>0;_DELAY_J--)
{for(_DELAY_K=248;_DELAY_K>0;_DELAY_K--);};};}
//精确延时100xKT秒,xx范围1-255
#define _delay_100xKT(x) {for(_DELAY_I=x;_DELAY_I>0;_DELAY_I--)
{for(_DELAY_J=200;_DELAY_J>0;_DELAY_J--)
{for(_DELAY_K=248;_DELAY_K>0;_DELAY_K--);};};}
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//uS,mS延时函数自动设置
#ifdef F_CPU_11059200 //F=11.0592MHz,T=1.08507uS
#define _delay_1us() _delay_1T()
#define _delay_10us() {_delay_2xT(4);_delay_1T();}
#define _delay_100us() _delay_2xT(46)
#define _delay_1ms() _delay_10xT(92)
#endif
#ifdef F_CPU_12000000 //F=12.0000MHz,T=1.00000uS
#define _delay_1us() _delay_1T()
#define _delay_10us() _delay_2xT(5)
#define _delay_100us() _delay_2xT(50)
#define _delay_1ms() _delay_xKT(1)
#endif
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#endif
一周热门 更多>