loorje 0 1 июля, 2016 Опубликовано 1 июля, 2016 · Жалоба пытаюсь программировать attiny2313 в Atmel 6.1. При входе в дебаггер не запускается таймер, если присваивать csel00=1 TCNT0 начинает тикать, в моем же варианте таймер не хочет переключаться :smile3046: вот код, который пытаюсь скомпилировать, что не так? #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 0 1 июля, 2016 Опубликовано 1 июля, 2016 · Жалоба На тиньках не прогал, но разве не надо разрешить прерывание TIMER0_COMPA_vect ? Что-нить вроде TIMSK0 = ( 1 << OCIE0A ) ... И общее замечение: не надо запихивать в прерывание всю обработку события. Прерывание должно обрабатываться максимально быстро и возвращать управление в основную программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aiwa 0 1 июля, 2016 Опубликовано 1 июля, 2016 · Жалоба TCCR0B=((1<<CS02)|(0<<CS01)|(1<<CS00)); В Вашем примере чтобы таймер затикал нужно на ногу PD4(T0) подать меандр требуемой частоты. Отладчик такой процесс позволяет эмулировать посредством входного файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться