Documente Academic
Documente Profesional
Documente Cultură
Raport
Lucrarea de laborator nr: 1
Disciplina: Microprocesoare
©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:
Fig.1Modulul Periferic
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.
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: