почему я должен всякий раз переписывать их?
в даташите что-то не нашел ответа - может не то читаю?
Я использую Таймер1 для содания 0.5сек обработки своих событий внутри прерывания по таймеру (см.код)
Таймер не трогаю, просто при включении инициация и далее молотит 0.5сек задержки, ничего в счетчиках не меняю, не читаю их и не использую ШИМ на Таймере1.
Вот мой пример:
----- start -----
...
#include <io.h>
#include <stdlib.h>
#include <delay.h>
...
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
#asm("cli") // Global Interrupt Disable !!!
TCNT1H=0xF0;
TCNT1L=0xBE;
#asm("sei") // Global Interrupt Enable !!!
// Я вынужден эту хрень сюда писать в первые строчки !!!!!!!!!!!!!!!!!! ПОЧЕМУ ?????????????
...
}
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
...
// -------------- Timer 1 -------------------------
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal
// OC1x output: Discon.
// Noise Canceler: Off
// Timer 1 Overflow Interrupt: ON
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0b00000000;
TCCR1B=0x05;
TCCR1C=0x00;
TCNT1H=0xF0; // for 8MHz
TCNT1L=0xBE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
...
my code here...
...
}
--------end-----------
Вопрос:
почему я не могу ОДИН РАЗ в "майн" проинициализировать Таймер1 и потом тупо он сам молотит ?
Почему я должен какждый раз в прерывании(!) запрещать прерывание, вдувать в счетчики таймера ТО ЖЕ САМОЕ и только потом делать полезное?
Что за бред ?
....
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
#asm("cli") // Global Interrupt Disable !!!
TCNT1H=0xF0;
TCNT1L=0xBE;
#asm("sei") // Global Interrupt Enable !!!
...
}
....
вот программа ниже - НЕ работает - нет прерывания каждые 0.5сек.
В чем я не прав? Это таки глюк Атмела ?
----- start -----
...
#include <io.h>
#include <stdlib.h>
#include <delay.h>
...
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
...
my code here
...
}
void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
...
// -------------- Timer 1 -------------------------
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: Normal
// OC1x output: Discon.
// Noise Canceler: Off
// Timer 1 Overflow Interrupt: ON
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0b00000000;
TCCR1B=0x05;
TCCR1C=0x00;
TCNT1H=0xF0; // for 8MHz
TCNT1L=0xBE;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 1 Interrupt(s) initialization
TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (1<<TOIE1);
...
my code here...
...
}
--------end-----------


