joi, 22 noiembrie 2012

Întreruperi. Programe cu întreruperi. Întreruperea RESET

    
    Intreruperi.

    Întreruperea reprezintă suspendarea procesului normal de execuţie a programului pentru rezolvarea unei probleme prioritare. 
    Întreruperea de regulă este generată ca răspuns la un efect fizic intern sau extern al unui modul periferic. Efectul fizic în sine va reprezenta situaţia de întrerupere sau excepţie care necesită o tratare neintârziată. Asemenea situaţii de întreruperi pot fi ca de exemplu: schimbarea nivelului logic la un pin, sfârşitul unei perioade de timp  sfârşitul unei operaţii de transmisie sau recepţie, sfârşitul unei conversii  etc.
    Majoritatea modulelor periferice pot genera una sau mai multe întreruperi.
    Tratarea situaţiei de întrerupere presupune existenţa unei subrutine definite în acest scop. Odată cu apariţia situaţiei de întrerupere, microcontrollerul va seta într-un registru de stare a perifericului un flag de întrerupere IF, care va fi pastrat pâna la prelucrarea intreruperii date. Pentru ca întreruperea de la situaţia de întrerupere să fie generată va fi nevoie ca în registrul de control al perifericului întreruperea în cauză să fie activată prin setarea unui bit de activare IE. Mecanismul de chemare a subrutinei de prelucrare a întreruperii va fi iniţiat doar în cazul în care:
    1. S-a detectat situaţia de întrerupere reprezentată de flagul acesteia IF==1
    2. Întreruperea de la sursa dată este permisa IE ==1
    3. Bitul de permisiune globală a întreruperilor este setat I==1 (in SREG)
mai simplu, subrutina va fi chemată când relaţia IF & IE & I va fi adevărată.
    Sistemul de întreruperi, de exemplu, va permite un apel de subrutină automat la apăsarea unui buton, luat ca sursă de întrerupere externă EXT_INT.

sâmbătă, 17 noiembrie 2012

Acces indirect la memoria SRAM. Tablouri. Prelucrarea tablourilor

Tablouri

    Un tablou este o succesiune de variabile accesibile printr-un nume unic. În limbajul ASM nu putem vorbi despre un tip sepecial de date. Oricare structură de date simplă sau complexă este reprezentată de o zona de memorie alocată acestei structuri. Acest lucru este valid şi pentru tablouri, adică se va rezerva o zonă de memorie accesibilă prin numele de referinţă a lui.

 Exemplu:
    .EQU TAB_SIZE = 10     ; declaratie constanta
    .DSEG                  ; tablourile vor fi declarate in
                           ; segmentul de date
    tab: .byte TAB_SIZE    ; utilizare constanta in 
                           ; declaratie tablou

    Din acest exemplu nu putem spune câte locaţii are tabloul, însă presupunând că elementele tabloului sunt de tip byte adică ocupă un singur byte în memorie, vom afirma ca tab este un tablou de 10 elemente de tip byte.