Синтаксис и прерывания

vanika
Offline
Зарегистрирован: 23.05.2012

Всем доброго времени суток!

Подскажите пожалуйста одну вещь!! Никак не могу понять каким образом происходит чтение состояния счетчика:

т.е. есть счетчик, допустим TCNT0 который в определенный момент времени насчитал допустим 999, как прочитать его значение? Я ведь не могу сделать запись вида int = counter; counter = TCNT0; println(counter)...

Есть Код:

#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint8_t count;

void main()
{
// Prescaler = FCPU/1024
TCCR0|=(1<<CS02)|(1<<CS00);

//Enable Overflow Interrupt Enable
TIMSK|=(1<<TOIE0);

//Initialize Counter
TCNT0=0;

//Initialize our varriable
count=0;

//Port C[3,2,1,0] as out put
DDRC|=0x0F;

//Enable Global Interrupts
sei();

//Infinite loop
while(1);
}

ISR(TIMER0_OVF_vect)
{
//This is the interrupt service routine for TIMER0 OVERFLOW Interrupt.
//CPU automatically call this when TIMER0 overflows.

//Increment our variable
count++;
if(count==61)
{
PORTC=~PORTC; //Invert the Value of PORTC
count=0;
}
}

                    в которм видно что count начинает считать - но немогу догнать как он связан (присвоен) к счетчику???

Если я правильно понимаю, то когда на ногу PD4 приходят импульсы, и при предустановках вида

// TCCR0|=(1<<CS02)|(1<<CS01)| (1<<CS00);
TCNT0=0;

счетчик начинает считать - так вот как потом (в произвольный момент времени) прочитать его состояние...

За витееватось простите....

Sky
Offline
Зарегистрирован: 04.04.2012

 count в данном случае считает количество вызовов обработчика прерывания, т.е. количество прерываний. И на 61 первое прерывание выплевывает в порт С данные. А TCNT0 это системный таймер 0 при переполнении которого и вызывается прерывание. Гугли "таймеры микроконтроллеров AVR".