Time EQU 40000 // 40000*64=2560000 тактов
// 8МГц*0,32=2560000
Int_t1_ovf: // Прерывание по переполнению таймера 1
push r0
in r0,SREG
push r16 // Сохр. флаги и регистры на всякий случай
// ... Делать чего то там, прошло время 0,32 с
ldi r16,0FFh-High(Time)
out TCNT1H,r16
ldi r16,0FFh-Low(Time)
out TCNT1L // Снова загрузить время 0,32 с
pop r16
out SREG,r0
pop r0
reti
//-------------------------------
Int_reset:
ldi r16,(1‹‹WDE)+(1‹‹WDTOE)
out WDTCR,r16
ldi r16,(1‹‹WDE)+(1‹‹WDP0)+(1‹‹WDP2) // 0.5с
out WDTCR,r16 // Сторожевой таймер
ldi r16,00Fh
out SPH,r16
ldi r16,0FFh
out SPL,r16 // Настройка стека
// Инициализация таймера
ldi r16,0FFh-High(Time)
out TCNT1H,r16
ldi r16,0FFh-Low(Time)
out TCNT1L
ldi r16,0
out TCCR1A,r16
ldi r16,(1‹‹CS10)+(1‹‹CS11)
out TCCR1B // Запуск таймера с предделителем =64
ldi r16,(1‹‹TOIE1)
out TIMSK,r16 // Разрешение прерывания
sei
Begin:
// Основная программа
wdr
rjmp Begin
//----------------------------------------------
что-то подобное для меги 128, в принципе и для любой другой тоже). для другово времени исправь значение Time. может поможет или на мысль натолкнет.
|