Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 3. ZADATAK :
- .def tmp = r16
- .def mask = r17
- .cseg
- rjmp reset
- .org $00C // razlika je u Adresi di se nalazi TIMER1 COMPA, razlicito je za ATMEGU 16 i 32 !!!
- rjmp trcece_svijetlo
- reset:
- ldi tmp, high(RAMEND)
- out SPH, tmp
- ldi tmp, low(RAMEND)
- out SPL, tmp
- ldi tmp, 0xff
- out DDRA, tmp
- out PORTA, tmp
- //ako koristimo prekide, ne postavljamo COM bitove u registru
- ldi tmp, 0 //dakle ovdje ne upisujemo nista
- out TCCR1A, tmp
- ldi tmp, (1 << WGM12) | (1 << CS11) | (1 << CS10) //odabiremo 4ti modalitet i postavljamo CS bitove za prescaler 64
- out TCCR1B, tmp
- ldi tmp, high(11519)
- out OCR1AH, tmp
- ldi tmp, low(11519)
- out OCR1AL, tmp
- // necemo koristit Overflow prekide ovdje, jer se postavlja Flag na MAX koj inam je 0xffff a pošto je nas TOP (11519) manji od MAX nikad se nece dogodit
- ldi tmp, (1 << OCIE1A) //selektivno ukljucili 1A prekid
- out TIMSK, tmp
- sei // globalno omogucavanje prekida
- main:
- rjmp main
- trcece_svijetlo: // timeri koriste prekide zato treba reti
- in tmp, PORTA
- rol tmp
- out PORTA, tmp
- reti
- ; FOC1A = 2 Hz
- ; fclk = 7372800 Hz
- ; FOC1A = fclk / (2 * N * (OCR1A + 1)) formula za izracun prescalera
- ; 2 * N * (OCR1A + 1) = fclk / FOC1A
- ; OCR1A + 1 = fclk / (2 * N * FOC1A)
- ; OCR1A = fclk / (2 * N * FOC1A) - 1
- ; N = 1
- ; OCR1A = 737279 TOP je prevelik, nestane u 16 bitni registar
- ;N = 8
- ; OCR1A = 92159 Opet prevelik
- ;N = 64
- ;OCR1A = 11519 --> Stane u registar --> Ovo je naš TOP
- ; Uvijek trazimo najmanji prescaler, radi preciznosti
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement