Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
Raport
Lucrare de laborator Nr.4
La disciplina Microprocesoare
Tema : Programe cu intreruperi .Intreruperea
externa.Prelucrarea tablourilor
Chisinau 2015
Obiective:
O1 Definirea Vectorului de Intrerupere;
O2 Definirea subrutinei de prelucrare a intreruperii(ISR);
O3 Configurarea intreruperii externe;
O4 Prelucrarea iterative a tablourilor;
Definiia problemei:
Sa se realizeze o aplicatie pe MCU care va calcula si va afisa suma elementelor unui tablou de
10 elemente a cite 8biti.Calculul sumei si afisarea rezultatului se va realiza la fiecare a 11-a apasare
a butonului, iar primele zece apasari vor introduce pe rind in tablou numarul citit pe un PORTx al
microprocesorului completind astfel tot tabloul cu elemente noi de fiecare data.
In aces scop se va realiza o subrutina care va realiza doar suma elementelor tabloului si va fi
apelata din cadrul subrutinei de prelucrare a intreruperii externe care, la rindul sau,va realiza
completarea tabloului cu un element nou la fiecare apasare noua a butonului, dar si apelul
subrutinei de sumare atunci cind tabloul este completat.
Notiuni teoretice:
Intrerupere reprezinta suspendarea procesului normal de executie a programului pentru
rezolvarea unei probleme prioritare.
ntreruperea de regula este generata ca raspuns la un efect fizic intern sau extern al unui modul
periferic. Efectul fizic in sine va reprezenta sitatia de intrerupere sau exceptie care necesita o
tratare neintarziata. Asemenea situatii de intreruperi pot fi ca de exemplu: schimbarea nivelului
logic la un pin, sfarsitul unei perioade de timp sfarsitul unei operatii de transmisie sau receptie,
sfarsitul unei conversii etc.
Majoritatea modulelor periferice pot genera una sau mai multe intreruperi.
Mecanismul de chemare a subrutinei de prelucrare a intreruperii va fi initiat doar in cazul in care:
S-a detectat situatia de intrerupere reprezentata de flagul acesteia IF==1
Intreruperea de la sursa data este permisa IE ==1
Bitul de permisiune globala a intreruperilor este setat I==1 (in SREG)
mai simplu, subrutina va fi chemata cand relatia IF & IE & I va fi adevarata.
Deci vom spune ca vectorul de intreruperi reprezinta o zona de memorie de program
rezervata adreselor de referinta a subrutinelor de prelucrare a intreruperilor.
Vectorul de intreruperi, pentru arhitectura AVR, este localizat la inceputul memoriei de
program, incepand cu adresa $0000. Pentru fiecare subrutina de prelucrare a intreruperilor de la
o anumita sursa de intrerupere ii este rezervat un spatiu de 2
comenzi. In cazul in care doua sau mai multe intreruperi intervin
concomitent, va fi prelucrata intreruperea cu prioritatea cea mai
inalta. Prioritate mai inalta vor avea intreruperile adresele de
referinta a carora in Vectorul de Intreruperi sunt mai mici.
Presupune c regitrul de acces indirect de acces X,Y,Z este decrementat nainte de a accesa o
locaie
ld R, -X st -X, R
ld R, -Y st -Y, R
ld R, -Z st -Z, R
Un asemenea acces este utilizat la prelucrri iterative a unei zone de memorie in directie inversa.
Prioritatea Intreruperilor
n cazul n care dou sau mai multe ntreruperi intervin concomitent, va fi prelucrat
ntreruperea cu prioritatea cea mai nalt. Prioritate mai nalt vor avea ntreruperile adresele de
referin a crora n Vectorul de ntreruperi sunt mai mici. Respectiv ntreruperea Reset, avnd
adresa de referin $0000, va avea cea mai mare prioritate. Lund n consideraie c frecvena de
lucru a microcotrollerelor de regul este mare, probabilitatea ca n acelai moment dou sau mai
multe ntreruperi s ceara prelucrare este destul de mic. ns asemenea cazuri se pot ntampla
atunci cnd pe o perioada ndelungat au fost interzise ntreruperile prin bitul global de
permisiune a ntreruperilor - I, posibil prin resetara lui din program cu comanda CLI pentru a
trata o zona critic, sau procesorul s-a reinut cu prelucrarea unei ntreruperi anterioare
Vector de ntreruperi
Odat ce o ntrerupere a fost generat sistemul va executa un apel hardware a subrutinei de
prelucrare a ntreruperii (ISR), care presupune un salt la o adres unde este realizat aceast
subrutin. Deoarece o asemenea chemare nu este una explicit, ca i n cazul unui apel clasic cu o
instruciune de tip CALL unde adresa de salt este parametru al comenzii, apelul hardware
presupune existena n memoria de programe a unei zone de memorie alocate pentru subrutinele
de prelucrare a ntreruperilor. Aceast zon de memorie de program este numit vector de
ntreruperi.
Deci vom spune c vectorul de ntreruperi reprezint o zon de memorie de program rezervat
adreselor de referin a subrutinelor de prelucrare a ntreruperilor.
Vectorul de ntreruperi, pentru arhitectura AVR, este localizat la nceputul memoriei de
program, ncepnd cu adresa $0000. Pentru fiecare subrutin de prelucrare a ntreruperilor de la o
anumit surs de ntrerupere i este rezervat un spaiu de 2 comenzi
Mersul lucrarii:
1) Formarea schema bloc de functionare a programului.
Start
.EQU TAB_size = 10
TAB: .byte TAB_size
counter: .byte 1
res: .byte 2
init:
r16=TAB_size
counter=r16
DDRA=0b00000000
PORTA=0b11111111
DDRB=0b11111111
PORTB=0b00000000
DDRC=0b11111111
PORTC=0b00000000
DDRD=0b00000000
PORTD=0b11111111
INT_INTR:
R16=(1<<ISC01), MCUCR=R16
R16=(1<<INT0), GICR=R16,
R16(1<<INTF0), GIFR=R16
SET_I:
SEI
Main_loop
r16=0xFF
r16--
F R16!=0 T
PORTD,0 = 1
r16=0xFF
r16--
F R16!=0 T
PORTD,1 = 1
INT0_ISR
R16 = counter
F T
R16!=TAB_siz
e
YL=LOW(TAB)
YH=HIGH(TAB)
F R16!=0 T
r1=TAB_size,counter=r16
R17=PINA
Push r17, r18,r19,r20,
Y+=R17
r21, YL=LOW(TAB)
r16
YH=HIGH(TAB)
counter=r16
call SUM_ELEM
pop r21,r20,r19,r18,r17
lds r19,res out
PORTB,r19
lds r20,res+1
out PORTC,r20
r19,r20,r21=0
r18=TAB_size
L3:
r17=Y+
r19=r19+r17
r20=r20+r21+carry
r18--
F T
R18!=0
res=r19
Res+1=r20
INT0_ISR:
lds r16,counter ;atribuim lui r16 valoarea lui Tab_Size
CPI r16,TAB_size
brne L0
ldi YL, LOW(TAB) ;Inscriem in Y adresa primei valori al tabloului
ldi YH, HIGH(TAB)
L0:
CPI r16,0
brne L1 ;daca counterul diferit de 0 atunci sare la L1
ldi r16,TAB_size ;Initializam registrului r16 cu numarul de elemente
in tablou
sts counter,r16 ;inscrim in variabila counter valoarea counterului
;Securizare registrilor
push r17
push r18
push r19
push r20
push r21
ldi YL, LOW(TAB) ; inceputului tabloului
ldi YH, HIGH(TAB) ; sfirsitului de tablou
call SUM_ELEM ; call subrutina de Sumare
pop r21
pop r20
pop r19
pop r18
pop r17
lds r19,res ;luam din res valoarea Low a rezultatului
out PORTB,r19 ;in portul B afisam valoarea Low
lds r20,res+1 ;valoarea high incarcam in r20
out PORTC,r20 ;afisam in port C valoarea high
reti
L1:
in R17,PINA ;incarcam datele din Port A in R17
st Y+, R17 ;datele din R17 le introducem in tablou
dec r16
sts counter,r16 ;inscrim in variabila counter valoarea decrementata
reti
SUM_ELEM: ;subrutina de sumare elementelor
clr r19 ;curatam registrii de lucru
clr r20
clr r21
ldi r18,TAB_size ;lui R18 atribuim valoarea tabloului
L3:
ld r17,Y+ ;Selectarea datelor din tablou
add r19,r17 ;Adunarea elementului la suma totala (baitul low)
adc r20,r21 ;Adunarea elementului la suma totala (baitul high)
dec r18 ;Decrementarea counterului(r18)
brne L3 ;Daca counterul este 0, atunci salt la L1
sts res,r19 ;incarcarea in r19 valoarea low a rezultatului
sts res+1,r20 ;incarcarea in r20 valoarea high a rezultatului
ret
INT1_ISR:
reti
INT2_ISR:
reti
OC2_ISR:
reti
OVF2_ISR:
reti
ICP1_ISR:
reti
OC1A_ISR:
reti
OC1B_ISR:
reti
OVF1_ISR:
reti
OC0_ISR:
reti
OVF_ISR:
reti
SPI_ISR:
reti
URXC_ISR:
reti
UDRE_ISR:
reti
UTXC_ISR:
reti
ADCC_ISR:
reti
ERDY_ISR:
reti
ACI_ISR:
reti
TWI_ISR:
reti
SPMR_ISR:
5.Rezultatele obtinute
Concluzie:
Dupa realizarea lucrarii de laborator am insusit folosirea si utilizarea intreruperilor.Astfel incit
am ajuns la concluzia ca intreruperea are acelasi principiu de lucru ca subrutina, doar ca este
mai prioritara si in timpul efectuarii intreruperii programul se intrerupe si se indeplineste
intreruperea (inscrierea elementelor in tablou , si suma lor) In cazul cind avem o intrerupere experna
alte intreruperi sunt interzise deoareace are loc resetarea bitului global de permesiune a inreruperilor I=0.
In timpul laboratorului mai mari dificultati au aparut in declararea si lucrul cu elementele tabloului decit
cu intreruperile.
Bibliografie:
http://www.microlab.club/