ATtiny2313+енкодер
Добавлено: Вс май 03, 2020 15:03:36
Доброго времени всем! Пока выходные, решил штудировать книги по МК на С. Захотелось с енкодером поиграться, схему собрал, программу по книгам написал, но не работает.
Подскажите, пожалуйста, где ошибка?
Подскажите, пожалуйста, где ошибка?
Спойлер
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
int NewState,OldState,Vol,upState,downState;
#include <avr/interrupt.h>
ISR(TIMER1_COMPA_vect)
{
NewState=PIND & 0b0000011;
if(NewState!=OldState)
{
switch(OldState)
{
case 2:
{
if(NewState == 3) upState++;
if(NewState == 0) downState++;
break;
}
case 0:
{
if(NewState == 2) upState++;
if(NewState == 1) downState++;
break;
}
case 1:
{
if(NewState == 0) upState++;
if(NewState == 3) downState++;
break;
}
case 3:
{
if(NewState == 1) upState++;
if(NewState == 2) downState++;
break;
}
}
OldState=NewState;
}
TCNT1H=0x00;
TCNT1L=0x00;
}
int main(void)
{
PORTD=0x03;
DDRD=0x00;
DDRB=0x01;
PORTB=0x00;
TCCR1A=0x00;
TCCR1B=0x0A;
OCR1AH=0x03;
OCR1AL=0xE8;
// Timer(s)/Counter(s) Interrupt(s) initialization
asm("sei");
// Global enable interrupts
while (1)
{
if (upState >= 4)
{
PORTB|=0x01;
}
if (downState >= 4)
{
PORTB&=~0x01;
}
};
}