Extras din laborator
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 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.1Modulul GPIO
Mersul lucrarii:
1.Creem in proiect nou in Avr Studio:
2.Elaboram solutia problemei formind shema-bloc. Conform algoritmului obtinut scriem listingul in assembler.
3.Controlam de erori sintaxice codul obtinut:
4.Cream schema electrica a circuitului in Proteus verificind daca avem erori logice.
5.Facem concluzii.
Schema-bloc:
Init:
main_loop:
L3:
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,0b00000100 ;itializan portul A ca port de iesire.
out DDRA,R16
ldi R16,0b11111011
out PORTA,R16
ldi R16,0b00000000 ;initializam portul D ca port de intrare si acrivam rezistenta de pull-up
out DDRD,R16
ldi R16,0b11111111
out PORTD,R16
main_loop:
L1:
sbic PIND,2 ;verificam daca butonul a fost apasat
rjmp L1 ;daca butonul nu e apasat are loc intoarcerea verificarea reperata
sbic PORTA,2 ;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 PORTA,2 ;stingem ledul
rjmp L4
L3:
sbi PORTA,2 ;aprindem ledul
rjmp L4
L4:
sbis PIND,2 ;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)
Preview document
Conținut arhivă zip
- mc7.1.docx
- mc6.docx
- mc2.docx
- mc5.docx
- mc1.docx
- mc4.docx
- mc3.docx