打印
[AVR单片机]

T0定时器溢出标志问题?

[复制链接]
3447|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
新好男孩|  楼主 | 2010-1-6 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚学AVR,关于T0定时器做延时用,注意红色标记的地方。
//ICC-AVR application builder : 2010-1-4 10:37:07
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0x00;
DDRA  = 0x01;
PORTB = 0x00;
DDRB  = 0x00;
PORTC = 0x00; //m103 output only
DDRC  = 0x00;
PORTD = 0x00;
DDRD  = 0x00;
}
//TIMER0 initialize - prescale:64
// WGM: Normal
// desired value: 1mSec
// actual value:  1.000mSec (0.0%)
void Delay_ms(void)
{
   TCCR0 = 0x00; //stop
   TCNT0 = 0x83; //set count
   OCR0  = 0x7D;  //set compare
   TCCR0 = 0x03; //start timer
   while ((TIFR & 0x01) == 0);    // 为什么TIFR的D0位不会溢出????
  TIFR &= ~ (1<<TOV0);
  TCCR0 = 0x00; //stop   
}
void Delay_Xms(unsigned int i)
{
   unsigned int x;
  for (x=0; x<i; x++)
  {
     Delay_ms();
  }
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
GICR  = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
//
void main(void)
{
   init_devices();
  while (1)
  {
       PORTA &= ~(1<<0);
     Delay_Xms(1000);
     PORTA |= (1<<0);
  }
}

相关帖子

沙发
宇容创行| | 2010-1-6 15:16 | 只看该作者
TIFR &= ~ (1<<TOV0); 这句不对

使用特权

评论回复
板凳
新好男孩|  楼主 | 2010-1-6 15:33 | 只看该作者
谢谢!
明白了,T0的定时溢出后TOV0置位后要写1来清0
这样写就OK了

使用特权

评论回复
地板
huamunv| | 2010-1-6 22:26 | 只看该作者
“T0的定时溢出后TOV0置位后要写1来清0”
:)

使用特权

评论回复
5
wangwo| | 2010-1-9 00:05 | 只看该作者
学习

使用特权

评论回复
6
Karlshen| | 2010-1-11 23:13 | 只看该作者
路过,修改后上面程序能通过不?

使用特权

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

本版积分规则

25

主题

136

帖子

0

粉丝