Синтаксис и прерывания
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!
Подскажите пожалуйста одну вещь!! Никак не могу понять каким образом происходит чтение состояния счетчика:
т.е. есть счетчик, допустим 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;
счетчик начинает считать - так вот как потом (в произвольный момент времени) прочитать его состояние...
За витееватось простите....
count в данном случае считает количество вызовов обработчика прерывания, т.е. количество прерываний. И на 61 первое прерывание выплевывает в порт С данные. А TCNT0 это системный таймер 0 при переполнении которого и вызывается прерывание. Гугли "таймеры микроконтроллеров AVR".