Синтаксис и прерывания
- Войдите на сайт для отправки комментариев
Всем доброго времени суток!
Подскажите пожалуйста одну вещь!! Никак не могу понять каким образом происходит чтение состояния счетчика:
т.е. есть счетчик, допустим 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".