Код: Выделить всё
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>
//--------------------------------------------
unsigned char i=0;
//--------------------------------------------
void timer_ini(void)
{
TCCR1B |= (1<<WGM12); // устанавливаем режим СТС (сброс по совпадению)
TIMSK |= (1<<OCIE1A); //устанавливаем бит разрешения прерывания 1ого счетчика по совпадению с OCR1A(H и L)
OCR1AH = 0b01111010; //записываем в регистр число для сравнения
OCR1AL = 0b00010010;
}
//--------------------------------------------
ISR (TIMER1_COMPA_vect)
{
if (PINC & (1<<PINC0))
{
PORTC &= ~_BV(PC0);// переключаем светодиод на линии PC1
}else{
PORTC |= _BV(PC0);
}
}
//--------------------------------------------
int main(void)
{
DDRC = 0xFF;
PORTC=0x00;
DDRB = 0x00;
PORTB=0XFF;
timer_ini();
sei(); //разрешаем приревания
while(1)
{
//Переключение делителя
switch(i){
case 1: TCCR1B |= (1<<CS10);break; //установим делитель.
case 2: TCCR1B |= (1<<CS11);break; //установим делитель.
case 3: TCCR1B |= (0<<CS11)|(0<<CS10);break; //установим делитель.
case 4: TCCR1B |= (1<<CS12);break; //установим делитель.
case 5: TCCR1B |= (0<<CS12)|(0<<CS10);break; //установим делитель.
default : TCCR1B |= (0<<CS12)|(0<<CS10); //установим делитель. по умолчанию
}
if (bit_is_clear(PINB, 0)){ //Если нажата кнопка РВ0 то увеличиваем значение i на едениу
if(i<5){
_delay_ms(550);
i=i+1;
_delay_ms(550);
}else { i=5;}
if (bit_is_clear(PINB, 1)){ //Если нажата кнопка РВ1 то уменщаем значение i на едениу
if(i>0){
_delay_ms(150);
i=i-1;
_delay_ms(150);
}
}
}
}
}подправил код. оператор переключения забыл вставить


