Kod: Zaznacz cały
#include <avr/io.h>
#define tau0 6; //stała czasowa dla 1kHZ @8MHz
int main( void )
{
unsigned char licznik=2;
DDRB=0x01; // wyjsciem generatora będzie PB0
TCNT0=tau0; //wpisz stała czasowa dla zadanego interwału
TCCR0A=2; //timer0 będzie pracował z preskalerem Fosc/8
while(1)
{
while(bit_is_set(TIFR,TOV0)); //czekaj na ustawienie flagi
//TOV0 (przekręcenie licznika)
TCNT0=tau0; //wpisz stała czasowa
if(--licznik==0) //zmiana polaryzacji wyjscia wymaga
//2-krotnego przekręcenia się licznika
{
PORTB^=0xff; //zmień stan wyjscia
licznik=2; //odswież stan licznika
}
TIFR=1<<TOV0; //kasuj flagę przepełnienia
}
}
Kod: Zaznacz cały
bit_is_set(TIFR,TOV0)Kod: Zaznacz cały
inp(TIFR)&0x02)!=0x02Efekt jest taki, że jedna dioda cały czas pozostaje zgaszona, i nie reaguje jakimi kolwiek zmianami.
Korzystam z avr-gcc 4.2.1-1 i avr-libc 1.4.5-2
Czy ktoś mógłby mi napisać co jest źle, ewentualnie podać jakiś przykładowy kod poprawnego wykorzystania licznika?? Może być kod w C jak i assembler.