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

2007-4-14 13:11 6970 11 13 分类: MCU/ 嵌入式

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


                             微秒级精确延时(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;
}
}


 

文章评论2条评论)

登录后参与讨论

用户1623314 2010-5-19 21:56

用汇编的是不是会比较准啊

用户1079511 2007-5-31 08:36

用WinAVR GCC  delay.h库里自带的 _delay_loop_1()和_delay_loop_2()多好!另外你考虑函数调用时占用的时间了吗,我也才开始学AVR以后多交流

相关推荐阅读
用户53511 2008-05-08 16:05
2008年华南理工大学广东北电杯电子设计大赛题目
2008年华南理工大学广东北电杯电子设计大赛题目A题    数控电压源<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:off...
用户53511 2008-01-19 17:22
全国电子设计大赛一等奖的论文下载
            这是我和队友参加2007年全国电子设计大赛一等奖的比赛论文,题目是音频信 号分  析仪(A题),需要的就下吧:                             ...
用户53511 2007-10-02 09:06
全国电子设计大赛FFT的实现
    第八届全国大学生电子设计大赛终于落下帷幕了.经过半年的努力,总算有了回报,拿了个全国一等奖.经过这段时间的历练,懂得了很多事和某些人,我觉得这是远远超过技术本身的收获.     我们做的是A题...
用户53511 2007-08-19 09:14
FIFO(转)
1.什么是FIFO?FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,...
用户53511 2007-07-27 17:37
数字钟VerilogHDL代码
// *********************************************************************// 数字钟VerilogHDL代码//2007.7.2...
用户53511 2007-07-26 21:24
LED动态扫描verilog代码
//************************************************************//LED动态扫描verilog 代码,D1~8为数码管输入//2007.0...
我要评论
2
11
关闭 站长推荐上一条 /2 下一条