[AVR单片机] ATMEGA168 CTC模式 配置问题 用的WINAVR

[复制链接]
 楼主| fqn0312 发表于 2013-11-8 18:07 | 显示全部楼层 |阅读模式
问题是老是进不去定时器
程序如下
void timer0_init(void)
{
TIMSK0 |= 0X02;//不屏蔽T0匹配中断
OCR0A = 0X4e;//匹配值 78  10ms
TCCR0A |=0X02;
TCCR0B |=0X05;//CTC模式,1024分频
}
ISR(TIMER0_OVF_vect)
{
  led_tim++;
  if(led_tim>=100)
  {
   led_tim=0;
   led_标志寄存器=1;
  }
}
 楼主| fqn0312 发表于 2013-11-8 18:09 | 显示全部楼层
led_标志寄存器=1;
误写应是   led_标志寄存器=1;
请各位高手帮帮忙
qin552011373 发表于 2013-11-10 09:08 | 显示全部楼层
1,开开启溢出中断,2开启总中断。再试试吧
huangxz 发表于 2013-11-10 19:32 | 显示全部楼层
贴工程吧,跟初始化很有关系
 楼主| fqn0312 发表于 2013-11-11 09:12 | 显示全部楼层
工程如下:目前只是测试定时器,程序刚开始写,后续还要加其他的功能  8M外部晶振  直接点亮LED是可以实现的
#include "SGJ_HEADER.h"
void timer0_init(void)
{
//TIMSK |= 1<<OCIE0;//不屏蔽T0匹配中断
//TIFR0 |=0X02;
TIMSK0 |= 0X02;//不屏蔽T0匹配中断
OCR0A = 0X4e;//匹配值 78  10ms
TCCR0A |=0X02;
TCCR0B |=0X05;//CTC模式,1024分频
//TCCR0A |= (1 << WGM01) | (0 << WGM00) | (1 << CS02) | (0 << CS01) | (1 << CS00);

}
ISR(TIMER0_OVF_vect)
{
  LED;
  led_tim++;
  if(led_tim>=100)
  {
   led_tim=0;
   led_标志寄存器=1;
  }
}
int main(void)
{

  cli();
  DDRB=_BV(1);//
  DDRB=_BV(2);
  DDRB=_BV(3);

  DDRB=0xff;
  LCD_Init();
  timer0_init();
  led_tim=0;
  led_标志寄存器=0;
  sei();
  for(;;)
  {       
   
    LCD_SET();
        LCD_DISP();
        if(led_标志寄存器)
        {
         LED;//点亮LED
         _delay_ms(200);
         _delay_ms(200);
         _delay_ms(200);
         _delay_ms(200);
         LCD_DISP();
         led_标志寄存器=0;
        }else
        {
         LED0;//关闭LED
        }

  }  
}
 楼主| fqn0312 发表于 2013-11-11 11:20 | 显示全部楼层
问题解决了 原来是中断向量号搞错了,
应该是ISR(TIMER0_COMPA_vect)
原来是ISR(TIMER0_OVF_vect)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部