Есть МК ATtiny2313, настроил таймеры в режим СТС, чтобы тактированние шло либо на ножку PB3, либо PB4, в зависимости от того, какой из входов PD0 или PA1 замкнут на "землю", так же в зависимости от того какая из кнопок на ножках PA0, PD2 нажата, то частота либо понижается, либо повышается.
Но это нифига не работает, прошу помощи.
Код:
#include <ioavr.h>
#include <intrinsics.h>
int freq[] = {1132, 132, 66, 43, 32, 26, 21, 18, 16, 14, 12};
int i = 0;
void init_timer1_r(void)
{
TCCR1A = 0x00;
TCCR1B = 0x00;
TCCR1A |= (1<<COM1A0); //Режим CTC
TCCR1B = (1<<WGM12)|(1<<CS10);
OCR1A=freq[i];
}
void init_timer1_l(void)
{
TCCR1A = 0x00;
TCCR1B = 0x00;
TCCR1A |= (1<<COM1B0); //Режим CTC
TCCR1B = (1<<WGM12)|(1<<CS10);
OCR1B=freq[i];
}
void timer1_stop(void)
{
OCR1A=0;
OCR1B=0;
__delay_cycles(8000000);
}
//#pragma vector=TIMER1_COMPA_vect
int main( void )
{
DDRD = 0x00;
DDRA = 0x00;
PORTA = 0xFF;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0xFF;
//init_timer1_r();
__enable_interrupt();
while(1)
{
PORTB &= ~(1<<PB2);
if ((PINA & (1<<PA1)) == 0) init_timer1_r();
if ((PIND & (1<<PD1)) == 0) timer1_stop();
if ((PIND & (1<<PD0)) == 0) init_timer1_l();
if ((PINA & (1<<PA0)) == 0)
{
if (i != 10)
{
i++;
OCR1A = freq[i];
OCR1B = freq[i];
}
}
if ((PIND & (1<<PD2)) == 0)
{
if (i != 0)
{
i--;
OCR1A = freq[i];
OCR1B = freq[i];
}
}
}
}
Пишу на IAR, частота - 8 Мгц