⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delay.h

📁 AVR单片精确定时.晶振8MHZ.
💻 H
字号:
/*********************************************************************
延时函数
编译器:ICC-AVR v6.31A 日期: 12/04/08
目标芯片: M64
晶振频率:7.3728MHZ
*********************************************************************/

#ifndef __delay_h
#define __delay_h

void delay(void);
void delay_1ms(void);
void delay_us(unsigned char i);
void delay_10us(unsigned char i);
void delay_nms(unsigned char n);
/************************************
*      模拟串口专用延时函数         *
************************************/
void delay(void)
{
	NOP();
	NOP();
	NOP();
	NOP();
}

/*********************************************
*              微秒级精确延时(ICC)           *
*********************************************/
/*======================================
 微秒级精确延时函数,晶振8M:
 Delay = 0.125 *((tt*4-1)+9)微秒
 其中9包括了调用方的 r16 赋值 1t
 rcall 3t    nop 1t   ret 4t
 brne指令在当判断条件不成立时是单周期
 最后一次判断只有1个周期,补一个nop
 简化计算 = 0.5tt + 1 (us)
======================================*/
/*void delay_nus(uchar tt)
{
	asm("_L2: subi R16,1");
	asm(" nop");
	asm(" brne _L2");
	asm(" nop");
	asm(" ret");
}*/
/****************************************
*  函数名称: void delay_us(uchar i)
*  函数功能:延时函数
*  晶振频率:7.3728MHZ
*  实际延时:
*  delay_us(1);	 	//2.71us
*  delay_us(2);	 	//3.53us
*  delay_us(4);	 	//5.15us
*  delay_us(8);	 	//8.41us
*  delay_us(16);	   //14.92us
*  delay_us(32);	   //27.94us
*  delay_us(64);	   //53.98us
*  delay_us(128);	   //106.07us
*  delay_us(255);	   //209.42us
*  delay_us(100);	   //83.28us
*  _NOP();			   //0.14us
****************************************/
void delay_us(unsigned char i)
{
	while(i--);
}
/**************************************
10微秒延时函数
延时时间:i X 10 + 16 t。
CPU频率为:7.3728MHz。
**************************************/
void delay_10us(unsigned char i)
{
	unsigned char j;
	if (i == 0){return;}
	while (i--)
	{
		for(j=0;j<10;j++)
		{
			NOP(); NOP(); NOP();
			NOP(); NOP();
		}
	}
}

/****************************************************
                毫秒级精确延时(ICC)
*********************** ****************************/
#define xtal 8 //以MHz为单位,不同的系统时钟要修改。

void delay_1ms(void)
{
	unsigned int i;
	for(i=0;i<(unsigned int)(xtal*143-2);i++);
}
////////////////////////////////////////////////////
/****************************************
*  函数名称: void delay_ms(uint i)		*
*  函数功能:延时函数			 		*
*  晶振频率:7.3728MHZ					*
*  实际延时:i mS						*
****************************************/
void delay_nms(unsigned char n)
{
	unsigned int a;
	for(;n;n--)
	{
		for(a=1220;a;a--){;}
	}
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -