原创 关于ATmega16的延时程序

2009-11-21 18:57 5664 5 5 分类: 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条评论)

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