laboratorul 1 microprocesoare
DESCRIPTION
Inițiere în programarea ASM,modulul periferic GPIOScopul lucrării:1. Inițiere în programare ASM.2. Studiul instrumentelor de proiectare a aplicațiilor cu MCU (AVR Studio, Proteus). 3. Lucrul cu modulul periferic GPIO.Sarcina: Să se proiecteze un sistem care ar permite schimbarea stării unui led, din aprins în stinns și invers, la apăsarea unui buton. Starea inițială se va considera led aprins.TRANSCRIPT
MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVAUNIVERSITATEA TEHNICĂ A MOLDOVEI
Facultatea Calculatoare, Informatică și Microelectronică
Catedra Microelectronică și Ingineria Biomedicală
RaportLucrare de laborator nr.1
La disciplinaMicroprocesoare
Tema:Inițiere în programarea ASM,modulul periferic GPIO.
A efectuat: st.gr. ISBM-111 Arpentii Nicolae
A verificat: lector asistent Eugeniu Lazari
Chişinǎu 2013
Scopul lucrării:
1. Inițiere în programare ASM.
2. Studiul instrumentelor de proiectare a aplicațiilor cu MCU (AVR Studio, Proteus).
3. Lucrul cu modulul periferic GPIO.
Sarcina:
Să se proiecteze un sistem care ar permite schimbarea stării unui led, din aprins în stinns și invers, la
apăsarea unui buton. Starea inițială se va considera led aprins.
Noțiuni teoretice:
Un microcontroller, privit în ansamblu, reprezintă o structură formată dintr-un microprocesor și un set
de module periferice.
- GPIO permite setarea sau colectarea nivelului logic de pe un pin al Microcontrollerului
Fig. 1 Modulele periferice
Fiecare modul GPIO are rezervat un set de 3 registri numiti PORT, PIN si DDR. Orice Microcontroller
are un set de pini, majoritatea dintre care care pot fi configuraţi ca pini generici de intrare sau ieşire
(GPIO).
Fig. 2 Regiștrii periferici
Fiecare modul GPIO a microcontrollerului cu arhitectura AVR va avea la dispozitie trei registri de
periferici PINx, DDRx si PORTx.
Fig. 3 Regiștrii periferici
PINx - serveste pentru citirea valorii logice de pe terminalul fizic, acest registru este accesibil doar
pentru citire. Operatia de scriere catre acest registru nu va afecta valoarea fizica a terminalului fizic.
PORTx - registru de setare a valorii portului pentru cazul cand este setat catre iesire si activarea
rezistentei de pull-up in cazul cand este setat catre intrare.
DDRx - Registrul de setare a directiei portului, intrare sau iesire
Mersul lucrării:
Am scris programul în ASM și l-am compilat în AVR, în programa Proteus am proiectat schema
electrica a dispozitivului și am realizat simularea, am folosit microcontrolerul ATmega 16, un led și un
buton. Am facut legaturile conform portului si pinilor activati si întrind in proprietatile
microcontrolerului am incarcat fișierul hex.
Comenzile folosite pentru realizarea sarcinei.
Tabelul 1.
Comenzile în ASM
Schema bloc
În Figura 4 este reprezentată schema bloc a programului realizat în ASM, descrisă logica rulării
programului, comutarea led-ului se realizează cu ajutorul unui buton, în dependență de starea butonului
se conectează ledul.
Fig. 4 Schema bloc.
Schema electrică în Proteus pentru simulare.
În Figura 5, reprezintă starea inițială a ledului este aprinsă pîna la apasarea butonului.
Fig. 5 Schema electrică.
În Figura 6, reprezintă starea ledului cînd este stins după apasarea butonului.
Fig. 6 Schema electrică.
Codul programului:
.include "m16def.inc" //Directiva pentru compilator
.cseg //Segment de cod
.org 0 //Adresa de inceput a coduluimain:init:
ldi R16, 0b01000000 //Incarca in registrul R16 valoarea 0b01000000out DDRA, R16 //Incarca in registrul DDRA din registrul R16ldi R16, 0b11111111 //Incarca in Registru valoarea 0b10111111out PORTA, R16 // Incarca in registrul PORTA din registrul R16
MainLoop: //Eticheta pentru inceputul programuluiL1: sbic PINA, 3 //Controleaza daca pinul 3 din portul A este 0
rjmp L1 //Salt la eticheta L1sbic PORTA, 6 //Controleaza daca pinul 6 din portul A este 0rjmp L2 //Salt la eticheta L2sbi PORTA, 6 //Seteaza bitul 6 din portul Arjmp L3 //Salt la eticheta L3
L2: cbi PORTA, 6 // Sterge bitul 6 din portul AL3: sbis PINA, 3 //Sare daca pinul 3 a portului A e setat
rjmp L3 //Salt la eticheta L3ldi R16, 0xff //Încarca in registrul R16 valoarea 0xff
L4: dec R16 //Decrementeaza registrul R16cpi R16, 0 //Compara registrul R16 cu 0brne L4 //Salt la L4 daca nu e egal
endMainLoop:rjmp MainLoop //Salt la inceputul programului
Concluzie:
In urma lucrarii de laborator am luat cunostință cu principiul de programare în ASM, etapele de
oformare a unui program si principiul de functionare a unui microprocessor, am realizat sarcina propusă
și am obținut relultatul dorit.
Bibliografie:
1. Conspectul de bază.
2. www.mcu-labs.com.