原创 AVR微秒级与毫秒级精确延时

2008-6-29 22:34 4469 10 10 分类: MCU/ 嵌入式



AVR微秒级与毫秒级精确延时



/*******************************************************************


                             微秒级精确延时(ICC)


*******************************************************************/


include <iom8v.h>
/*======================================
 微秒级精确延时函数,晶振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 shortdelay(unsigned char tt)
{
        asm("_L2: subi R16,1"); 
        asm(" nop")
        asm(" brne _L2");
        asm(" nop");
        asm(" ret");
}


void main()
{
        shortdelay( 18 );
        while(1)        {
                shortdelay( 48 );
        }
}


 


/************************************************************************


                                        毫秒级精确延时(ICC)


*************************************************************************/


#include<iom8v.h>


#define xtal 8 //以MHz为单位,不同的系统时钟要修改。


void delay_1ms(void)
{
uint i;
for(i=0;i<(unsigned int)(xtal*143-2);i++);
}



void delay_ms(uint num)
{
uint i;
for(i=0;i<num;i++) delay_1ms();
}


void main(void)
{
DDRB=0xff;
PORTB=0x00;


while(1)
{
delay_ms(100);
PORTB^=0xff;
}
}


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条