Sunteți pe pagina 1din 6

Univeristatea Tehnica a Moldovei

Facultatea Calculatoare Informatica si Microelectronica


Catedra Microelectronica si ingineria Sistemelor Biomedicale

Raport
Lucrarea de laborator nr: 1

Disciplina: Microprocesoare

Tema : Inițierea în programarea Assembler. Modulul periferic


GPIO

A efectuat: st. gr. MN-141

A verificat: lector asistent


Lazari Eugeniu

©Chisinău 2016
Obiectivele lucrarii:
1)initiarea in programare ASM.
2)stodierea modului periferic GPIO.

Problema:
Sa se dezvolte o aplicatie care ar permite trecerea starii unui led din starea curenta in opusa la
detectarea apasarii unui buton.

Notiuni teoretice:
Programarea in limbajul ASM reprezinta accesul la memorie si modificarea volorilor la aceste
adrese utilizand setul de comenzi. Limbajul permite gruparea secventelor de comenzi in
subrutine, executia conditionata a secventelor de program realizata in baza salturilor conditionate
si neconditionate.
Un microcontroller, privit în ansamblu, reprezintă o structură formată dintr-un microprocesor şi
un set de module periferice. Un microcontroller poate avea o combinaţie variată de module
periferice în dependenţă de serie. Un modul periferic ca regulă este un circuit specializat care
poate îndeplini o anumită funcţie. De exemplu:

 GPIO permite setarea sau colectarea nivelului logic de pe un pin al Microcontrollerului


 EEPROM permite stocare pe timp îndelungat a datelor
 ADC permite conversia semnalelor analogice
 UART permite comunicarea serială
 TIMER ne dă posibilitatea sa generm intervale de timp, să masurăm timpul între două
evenimente, să generăm semnale digitale de o anumită formă.

Fig.1Modulul Periferic

Un microcontroller in orice moment de timp trebuie sa execute o instructiune definita de


programator. Atunci cand microcontrollerul executa o comanda definita de programator vom
spune ca controllerul se afla sub controlul programului.Si invers, in cazul in care se executa o
comanda care nu a fost definita de catre programator vom spune ca microcontrollerul a iesit de
sub control.
Un program ce ruleaza pe microcontroller trebuie sa mentina microcontrollerul intotdeauna
sub control ceia ce presupune existenta unei bucle infinite in program.
Vom defini doua parti componente principale a unui program:
Partea de initializare - o secventa de cod la inceputul programului ce serveste pentru initializarea
microcontrollerului pentru lucru.
Partea de procesare - rezolvarea problemei si mentinerea sub control a Microcontrollerului cu o
bucla infinita.
Pentru evidentierea zonelor de initializare si procesare a programului se recomanda utilizarea
etichetelor (label).
Directive de preprocesare a compilatorului sunt comenzi catre compilator care sunt executate
de catre compilator inaintea generarii codului binar. Rolul lor este de a configura compilatorul si
a indica compilatorului modul in care trebuie sa fie tratate liniile de program care le urmeaza.
Orice Microcontroller are un set de pini, majoritatea dintre care care pot fi configuraţi ca pini
generici de intrare sau ieşire (GPIO), astfel încât să i se poată atribui o valoare logică către
terminalul pinului sau sa fie citită aceasta valoare logică de pe el, în cazul când pinul este
configurat către intrare.
Fiecare modul GPIO a microcontrollerului cu arhitectura AVR va avea la dispoziţie trei registri
periferici PINx, DDRx si PORTx.

Fig.2Modulul GPIO

 PINx - serveşte pentru citirea valorii logice de pe terminalul fizic, acest registru este
accesibil doar pentru citire. Operaţia de scriere către acest registru nu va afecta valoarea fizică a
terminalului fizic.

 PORTx - registru de setare a valorii portului pentru cazul când este setat catre ieşire şi
activarea rezistentei de pull-up în cazul când este setat către intrare.

 DDRx - Registrul de setare a direcţiei portului, intrare sau ieşire.


Schema-bloc:
START

Init:

DDRA<-0b00000000

PORTA<-0b11111111

DDRD<-0b01000000

PORTD<-0b10111111

main_loop:

PINA.4==0

PORTD.6==0

PORTD.6<-0 PORTD.6<-1

L3:

PORTD.6==0

R16<-0b11111111

R16--

R16==0
Listingul programului:
.include "m32def.inc" ;includem fisierul de descrierea a controlerului
.cseg ;alegem segmentul codului din program
.org 0 ;stabilim adresa curenta la pozitia 0

;initializarea porturilor
init:
ldi R16,0b01000000 ;intializam portul D ca port de iesire.
out DDRD,R16
ldi R16,0b10111111
out PORTD,R16
ldi R16,0b00000000 ;initializam portul A ca port de intrare si activam rezistenta de pull-up
out DDRA,R16
ldi R16,0b11111111
out PORTA,R16
ldi R16,0b00000000 ;initializam portul B ca port de intrare si acrivam rezistenta de pull-up
out DDRB,R16
ldi R16,0b11111111
out PORTB,R16
ldi R16,0b00000000 ;initializam portul C ca port de intrare si acrivam rezistenta de pull-up
out DDRC,R16
ldi R16,0b11111111
out PORTC,R16

main_loop:
L1:
sbic PINA,4 ;verificam daca butonul a fost apasat
rjmp L1 ;daca butonul nu e apasat are loc intoarcerea verificarea reperata
sbic PORTD,6 ;daca butonul e apasat verificam daca ledul e aprins
rjmp L2 ;daca ledul e aprins sarim la eticheta L2
rjmp L3 ;daca ledul e stins sare la eticheta L3
L2:
cbi PORTD,6 ;stingem ledul
rjmp L4
L3:
sbi PORTD,6 ;aprindem ledul
rjmp L4
L4:
sbis PINA,4 ;verificam daca butonul e apasat
rjmp L4 ;daca nu e apasat mai verifica o data
ldi R16,0b11111111 ;daca e apasat introducem un ciclu de intirziere
delay:
dec R16 ;operatia aleasa e decrementarea unui reg.in care e incarcata val.0xFF
cpi R16,0 ;verificam daca am ajuns la 0
brne delay ;daca nu e 0 continuam decrimentarea
rjmp main_loop ;daca e 0 ne intoarcem la inceput(bucla)
Schema electrica:

Concluzie:

Elaborind lucrarea de laborator am studiat procesul de programare a microcontroler


(ATmega32).Am scris programul care efectueaza schimbarea starii ledului la apasarea unui
buton.
Am folosit registrii de uz general pentru ca sa putem lucra direct cu modulele periferice , in
proteus la apasarea butonului se produc o serie de zgomote ele se produc din cauza ca
simulatorul de analiza examineaza amploarea zgomotului termic, ce pot fi interpretate de
controller ca o serie de actionari si eliberari succesive, de aceea am introds cicluri de intirzieri
dupa fiecare actiune asupra butonului.

S-ar putea să vă placă și