Malo sam uplovio u te vode te imam nekoliko pitanja pa ako netko ima vremena i volje mi malo to pojasnit.
1.) Malo me bune opči registri R0-R31, oni su locirani u SRAM-u, jel tako ? R26 do R31 mogu imati istu namjenu kao i ovi prije, ali imaju još jednu, a to je omogučuju indirektno adresiranje (mogu biti u paru i činiti 16 bitni registar za lociranje neke adrese u SRAM-u) ? Jel onda sve jedno u kojeg zapisujem sadržaj nekog registra ? Npr. želim zapisati sadržaj I/O registra PORTC u jedan od njih.
2.)Stog ? Koliko sam shvatio, njega se ograničava tako da mu se na početku zada početna adresa, npr. 0x77, a on si poslje rezervira od 0x60 do npr. 0x77 u SRAM-u ?
3.) Probao sam napisati jedan program, trenutno ga nemam mogučnosti isprobati u praksi. Zanjima me, bi li to radilo ?
Program bi trebao raditi sljedeće: kad se dogodi interrupt INT0 (rastuči brid) da led na portd.2 = 1 zasvijetli, a interrupt INT1 (isto rastuči brid) da ugasi led portd.2 = 0. U glavnoj petlji mcu trenutno samo zuji
Code: Select all
.org $001 rjmp Vanjski_INT0
.org $002 rjmp Vanjski_INT1
Inicijalizacija:
in r16, MCUCR //Ucitam MCUCR u registar r16
ori r16, 15 //postavim zadnja 4 bita u 0, time sam postaio INT0 i INT1 da okida na rastući brid
out MCUCR, r16 //to natrag upisem u MCUCR
in r16, GICR // Učitam registar GICR
ori r16, 192 //Između učitane vrijednosti i broja 192 (binearno 11000000) odradim ILI
out GICR, r16 //Tu vrijednost upišem natrag u registar GICR time sam omogučio INT0 i INT1
in r16, DDRD //Ucitam vrijednost registra DDRD
ori r16, 6 // 2. i 3. bit postavim u 1
out DDRD,r16 //Pinovi portd.2 i portd.3 su izlazni
sei //Postavljen 7 bit u SREG-u, omogučeni interrupte
Glavna:
nop //Trenutno nista pametnog ne radi u glavnoj petlji, osim sto malo trati vrijeme...
nop
nop
rjmp glavna
Vanjski_INT0:
sbi PORTD, 2
reti
Vanjski_INT1:
cbi PORTD, 2
reti