Решил за одно изучить использование прерываний PCINT, на практике. До этого с такой мелюзгой и этим прерыванием не работал.
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
int Counter=1;
ISR(PCINT0_vect) //Прерывание на PCINT
{
sei(); //Запретить прерывания...дабы неповадно было
if (Counter >=4) // если переменная 4 и более
{
Counter = 1; // приравниваем к 1.
} else // иначе
{
Counter++; // инкремент счетчика
}
cli(); //Разрешить прерывание
}
int main(void)
{
sei(); //Запретил прерывания, дабы не повадно было
DDRB = 0b00111; //установил пол порта на вход, половину на выход
PORTB = 0b00111; //включил порт
GIMSK = GIMSK|(1<<PCIE); //разрешил прерывание PCINT0
PCMSK = PCMSK|(1<<PCINT4); //Разрешил вызов прерывания при изменении наа порту 4
cli(); //Разрешил прерывания
while(1)
{
PORTB = Counter; //вывожу некую переменную в порт.
}
}Понятно что ошибка в ДНК, да и отравление еще не прошло. Подскажите...


