打印
[AVR单片机]

新人,用Atmega16T0定时器做500ms延时循环点亮小灯,求解

[复制链接]
1207|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wh13651|  楼主 | 2015-3-25 10:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <iom16v.h>
#include <AVRdef.h>
#define unit  unsigned int

/*
void delay_ns(unit ns)
{   
     SREG|=0x80;         //开总中断
     TIMSK |= 0x01;           //T/C0溢出中断允许
     TCCR0 |= 0x01;  // T/C0工作于普通模式,不分频,
                                        //定时器频率 = 1M
     TCNT0 = 256-ns;          //定时初值设置,定时时间 = (256-12)/976.5625=249.856ms
         
     while(1)
     {
      if(0x01&TIFR)  //查询溢出中断标志位
        break;      
     }
     TIFR&=0XFE;     //清标志位
     SREG&=0X7F;
}

*/
void delay_1ms(void)    //一毫秒定时初始化
{   
     SREG|=0x80;
     TIMSK |= 0x01;
     TCCR0 |= 0X02;  //8分频
     TCNT0 = 131;    //初值131 计数125为1ms
     
}

void delay_ms(unit ms)   //毫秒定时
{
   for(;ms>0;ms--)
   {
     delay_1ms();
       while(!(0x01&TIFR))
     {  
            
        break;      
     }
      TIFR&=0XFE;
   }   
     SREG&=0X7F;
}

void main(void)
{
  unit i;
  DDRB=0XFF;
  PORTB=0XFF;
    for(i=8;i>0;i--)
  {
      PORTB=~PORTB;
   
         delay_ms(500);
          
  }  

}
没用进入中断函数的方式,用的查询标志位,不知道小灯为什么不亮,求帮忙找一下原因,谢谢啦

相关帖子

沙发
j6920| | 2015-3-28 16:48 | 只看该作者
子函数未放入main里面                    

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

34

帖子

1

粉丝