Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не запускается таймер 0
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Leon
пытаюсь программировать attiny2313 в Atmel 6.1. При входе в дебаггер не запускается таймер, если присваивать csel00=1 TCNT0 начинает тикать, в моем же варианте таймер не хочет переключаться smile3046.gif
вот код, который пытаюсь скомпилировать, что не так?

#include <avr/interrupt.h>
#include <avr/io.h>
#define F_CPU 8000000UL

int NoC=1;
ISR (TIMER0_COMPA_vect)
{
if(NoC > 4) NoC == 1;
int mask = 0;

switch(NoC)
{
case (1): {PORTB=0x03; mask=0b00000011; break;}
case (2): {PORTB=0x05; mask=0b00000101; break;}
case (3): {PORTB=0x09; mask=0b00001001; break;}
case (4): {PORTB=0x011; mask=0b00010001; break;}
} NoC++;
PORTD=0b11001111;
PORTD=0b10010010;
PORTD=0b10000110;
PORTD=0b11001100;
PORTD=0b10100100;
PORTD=0b10100000;
PORTD=0b10001111;
PORTD=0b10000000;
PORTD=0b10000100;
PORTD=0b10000001;
PORTB&=mask;
TCNT0=0x0;

}

int main(void)
{ TCNT0=0;
OCR0A=79;
TCCR0A = (1<<WGM01);
TCCR0B=((1<<CS02)|(0<<CS01)|(1<<CS00));

sei();
DDRB = 0x1F;
DDRD = 0x7F;
int a=0;

while(1)
{
}

return 0;
}
Lerk
На тиньках не прогал, но разве не надо разрешить прерывание TIMER0_COMPA_vect ? Что-нить вроде TIMSK0 = ( 1 << OCIE0A ) ...

И общее замечение: не надо запихивать в прерывание всю обработку события. Прерывание должно обрабатываться максимально быстро и возвращать управление в основную программу.
aiwa
Цитата(Leon @ Jul 1 2016, 15:45) *
TCCR0B=((1<<CS02)|(0<<CS01)|(1<<CS00));

В Вашем примере чтобы таймер затикал нужно на ногу PD4(T0) подать меандр требуемой частоты.
Отладчик такой процесс позволяет эмулировать посредством входного файла.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.