原创 关于ATmega16的延时程序

2009-11-21 18:57 5815 7 7 分类: MCU/ 嵌入式

#include<iom16v.h>
#define uint unsigned int
#define uchar undigned char


void delay()
{
      asm("  push r16");
     asm("ldi r16,255")
     asm(" del1: push r16");
     asm(" del2: push r16");
     asm("  del3: dec r16");
    asm(" brne del3");
    asm(" pop r16");
    asm(" dec r16");
    asm(" brne del2");
    asm(" pop r16");
    asm(" dec r16");
    asm(" brne del1");
    asm(" pop r16");
   
}


void main()
{
     DDRB = 0xff;
     PORTB = 0x00;
    while(1)
    {
         PORTB = ~PORTB;
        delay();
   }


}
 


用软件延时实现起来是非常的不稳定,我试过了,用汇编编写的延时程几乎是很准确的,上面就是写好的程序,更改r16的值就可以该延时时间。


具体的参数为:


参数 延时时间


1,6.25us


2,13us


3,23.5us


4,38.5us


5,58.75us


6,85us


7,118us


8,158us


9,207us


10,265us


18,1ms


22,2ms


26,3ms


29,4ms


40,10ms


52,20ms


71,50ms


90,100ms


114,200ms


131,300ms


156,500ms


197,1000ms


255,2000ms


以上数据是时钟4M晶振,可以根据你的晶振频率更改。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /4 下一条