proiectare cu microprocesor lab

29
UNIVERSITATEA DIN BACĂU FACULTATEA DE INGINERIE PROIECTARE CU MICROPROCESOR Îndrumar de laborator

Upload: dragos-neculai-terlita-rautchi

Post on 25-Oct-2015

38 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Proiectare Cu Microprocesor Lab

UNIVERSITATEA DIN BACĂU FACULTATEA DE INGINERIE

PROIECTARE CU MICROPROCESOR Îndrumar de laborator

Page 2: Proiectare Cu Microprocesor Lab

2

CUPRINS

1. Studiul modului de programare in mediul EMU8086 …………………………… 3 2. Realizarea unui program simplu pentru microprocesorul 8086 ………………….. 7 3. Realizarea unui program de sortare pentru microprocesorul 8086 ……………….. 9 4. Studiul mediului de programare MPLAB ……………………………………........11 5. Realizarea unui program de aprinderea dinamică a 8 leduri cu microcontroler PIC 15 6. Studiul sistemului de întrerupere la un microcontroler PIC ……………………….. 21 7. Studiul întreruperilor. Ceas de timp real cu microcontroler PIC …………………... 26

Page 3: Proiectare Cu Microprocesor Lab

3

Laboratorul nr. 1

Studiul modului de programare in mediul EMU8086 Scopul acestui laborator este de prezentare şi de iniţiere a studenţilor în utilizarea programului EMU8086. EMU8086 este un emulator pentru microprocesoarele 8086 (compatibil Intel şi AMD) având integrat programul de conversie în cod maşină, asamblorul. Acest emulatorul rulează programele scrise de către utilizator exact ca un microprocesor real, în modul pas cu pas pentru observarea efectului fiecărei instrucţiuni. Acest lucru se este posibil deoarece acest program prezintă conţinutul regiştrilor microprocesorului, a memorie, a stivei, valoarea variabilelor precum şi starea fanioanelor. Instrucţiunile programului pot fi executate pas cu pas în mod normal dar există posibilitatea de execuţie şi în sens invers. Pentru a rula în mod real programul realizat, emulatorul poate realiza o dischetă bootabilă creând un mini sistem de operare necesar rulării aplicaţiei de pe dischetă. Acest program include şi mai multe dispozitive virtuale externe : robot, motor pas cu pas, afişaj cu leduri etc., ce pot fi utilizate în experimente dar permite şi realizarea şi utilizarea propriilor dispozitive virtuale. La deschidere programul va întreba utilizatorul ce format va avea fişierul final executabil realizat în urma emulării programului: .com, .exe, sau .bin pentru includerea de la început a instrucţiunilor specifice necesare.

Interfaţa programului este prezentată în imaginea următoare:

1

2 3

Page 4: Proiectare Cu Microprocesor Lab

4

În fereastra principală (1) se va edita programul utilizând instrucţiunile specifice programării în cod maşină. După terminarea editării codului sursă a programului se va da comanda de compilare (2) pentru verificarea corectitudinii programului.

Dacă sunt probleme softul va specifica în fereastra de compilare erorile găsite şi tipul acestora pentru depanarea lor. În caz de succes se va cere salvarea programului şi apoi se poate da în execuţie aplicaţia de emulare cu ajutorul butonului (3) din fereastra programului sau butonul dreapta jos din fereastra de compilare. La emulare se vor deschide automat două ferestre: fereastra codului programului şi fereastra de emulare a codului, astfel încât să se poată urmării pas cu pas efectul fiecărei instrucţiuni.

1 2

3

4

5

6 7

8

Page 5: Proiectare Cu Microprocesor Lab

5

În fereastra de emulare cu ajutorul butoanelor 1, există posibilitatea de rulare a programului pas cu pas, se execută numai câte o instrucţiune, sau rularea tuturor instrucţiunilor cu un timp de întârziere între ele ce poate fi controlat cu ajutorul cursorului 2. În panoul 3 este prezentat codul maşină dezasamblat pentru a putea fi urmărit în paralel cu cel asamblat din fereastra de cod. În panoul 6 este prezentat conţinutul memorie începând cu adresa fizică şi valoarea memorată la aceea locaţie exprimată în bază 16, 10 şi cos ASCII. În partea stângă a ferestrei de emulare 4, 5, se prezintă conţinutul regiştrilor microprocesorului .

Dacă se dă dublu click pe căsuţa fiecărui registru, există posibilitatea de acces la valorile conţinute de acesta, implicit de modificare a lor. Cu ajutorul butoanelor 7 din partea dreaptă jos a ferestrei de emulare, se pot afişa ferestrele ce afişează conţinutul stivei, a fanioanelor precum şi a unităţi de calcul aritmetico logic (ALU).

Page 6: Proiectare Cu Microprocesor Lab

6

Cu ajutorul butonului Load (8), există posibilitatea de a deschide în fereastra de emulare a unui program executabil fără a avea codul sursă a acestuia. În realizarea diferitelor programe ce pot fi experimentate utilizând emulatorul EMU8086, pot fi utilizate şi diferite dispozitive virtuale externe, robot, motor pas cu pas, afişaj cu leduri ce pot fi lansate din meniul programului. Pentru uşurarea realizării diferitelor operaţii de calcul necesare editării codului sursă a unui program nou, programul include un calculator şi un convertor de numere între cele 4 baze de numeraţie 10, 2, 8 şi 16.

În plus acest soft include şi câteva programe simple ce pot fi utilizate pentru studiul acestuia.

Page 7: Proiectare Cu Microprocesor Lab

7

Laboratorul nr. 2

Realizarea unui program simplu pentru microprocesorul 8086

În cadrul acestui laborator, pe baza cunoştinţelor căpătate în cadrul laboratorului precedent, se va realiza un program simplu utilizând programul EMU8086, ce va avea ca rezultat adunarea a doua valori numerice cerute de către program şi introduse de către utilizator de la tastatură. Se deschide programul EMU8086 şi se scrie următorul program prezentat mai jos: #make com# Org 100h Jmp start ;salt necondiţionat la eticheta start a DB ? ;declaratii de variabile: a si b in care se vor salva valorile celor b DB ? ; doi operanzi M1 DB ‚a=’, ‚$’ ; declaratii de variabile sir de caractare ce vor fi trimise la ecran M2 DB 13,10,‚b=’, ‚$’ ;necesare realizarii inerfetei grafice M3 DB 13,10, ‚$’ M2 DB ‚+’, ‚$’ M5 DB ‚=’, ‚$’ start: lea dx,M1 ; generarea intreruperii dos pentru afisarea sirului de caracactere mov ah,09h ; pastrate in variabila M1 int 21h mov ah,01h ; generarea intreruperii dos pentru citirea unui caracter cu ecou de int 21h ; la tastatura sub al,48 ; efectuarea operatiei de scadere dintre valoarea citita si val 48 mov a,al ;conversie cod caracter ASCCI – valoare numerica si salvare in

;variabila a lea dx,M2 ; generarea intreruperii dos pentru afisarea sirului de caracactere mov ah,09h ; pastrate in variabila M2 int 21h mov ah,01h ; generarea intreruperii dos pentru citirea unui caracter cu ecou de int 21h ; la tastatura sub al,48 ; efectuarea operatiei de scadere dintre valoarea citita si val 48 mov b,al ;conversie cod caracter ASCCI – valoare numerica si salvare in

;variabila b

Page 8: Proiectare Cu Microprocesor Lab

8

lea dx,M3 ; generarea intreruperii dos pentru trimiterea prompterului pe un mov ah,09h ; rand nou int 21h ;scrierea valorii primei variabile mov dl,a add dl,48 mov ah,02h int 21h lea dx,M4 ; afisarea semnului + mov ah,09h int 21h ;scrierea valorii celei de-a doua variabile mov dl,b add dl,48 mov ah,02h int 21h lea dx,M4 ; afisarea semnului = mov ah,09h int 21h ;adunarea celor doua valori si afisarea rezultatului mov dl,a add dl,b add dl,48 mov ah,02h int 21h mov ah,4Ch ; generarea intreruperii dos pentru terminarea programului si int 21h ; returnarea controlului sistemului de operare

După editarea codului sursă a programului, se va compila şi in caz de erori se vor depana. Se va simula pas cu pas, programul realizat urmărind în fereastra de emulare, valorile regiştrilor.

În urma execuţie programului se va observa că acesta va da un răspuns corect cât timp suma celor două valori introduse de la tastatură este mai mică sau egală cu valoarea 9. Peste această valoare programul va afişa un răspuns eronat. Se va discuta această problemă şi se cere să se modifice programul astfel încât acesta să funcţioneze corect pentru orice valori date celor doi operanzi. Referatul de laborator trebuie să conţină programul studiat ,explicaţiile privind modul de funcţionare, precum şi programul modificat care rezolvă problema apărută. Ca temă pentru acasă se propune realizarea unui program in limbaj de asamblare care să efectueze produsul a două valori numerice.

Page 9: Proiectare Cu Microprocesor Lab

9

Laboratorul nr. 3

Realizarea unui program de sortare pentru microprocesorul 8086

În cadrul acestui laborator, pe baza cunoştinţelor căpătate în cadrul laboratorului precedent, se va realiza un program simplu utilizând programul EMU8086, ce va avea ca rezultat sortarea în ordine descrescătoare a 10 numere. Se deschide programul EMU8086 şi se scrie următorul program prezentat mai jos: ;Program pentru sortarea in ordine descrescatoare a unui sir cu 10 ;numere ;dimensiunea maxima a numerelor de ordonat este un octet. Numarul ;maxim de numere al sirului este de 255. ; ;AH - pastreaza valoararea maxima a numerelor din sir + 1 ;AL - prima valoare din sir de comparat ;BX - contor in sir - BH este nefolosit si este initializat cu zero, ;iar BL arata pozitia in sir cu care se compara AL ;DH - contine numarul maxim de termeni ai sirului de comparat ;DL - contine cea de-a doua valoare din sir cu care se compara AL ;CH - stocheaza temporar valoarea DL ;CL - stocheaza temporar valoarea BL ; dosseg ;directiva de segmentare .model small ;model mic lungime program < 64 Ko si lungime date

;si lungime stiva (impreuna) < 64 Ko. Compilatorul va da ; un mesaj de eroare daca sunt depasite aceste dimensiuni .stack 200 ;pentru stiva sunt rezervati 200 de octeti .data ;zona de date sir_numere db 5,1,7,2,8,0,3,6,4,9 ;sirul de numere ce urmeaza a fi ;ordonat index_sir db 0 ;zona de memorie unde se pastreaza indexul curent nr_max_valori db 10 ;numarul de valori pentru sir_numere .code start: ;inceput program ;Sortarea sirului se face astfel: se citeste primul numar si se ;compara cu urmatoarele. Daca se gaseste un numar mai mic acestea se ;inverseaza. La sfirsit numarul este memorat in sir si se trece la ;urmatorul, si asa mai departe. mov ax,@data ;se initializeaza segmentul de date mov ds,ax mov ah,[nr_max_valori] ;AH va pastra numarul maxim de termeni ai

;sirului mov dh,ah ;La fel si registrul DH inc ah ; Din motive de comparare in AH vom avea numarul ;de termeni +1 mov si,offset sir_numere ;in SI se pune offsetul sirului de numere

Page 10: Proiectare Cu Microprocesor Lab

10

valoare_noua: mov bh,0 ;BH este initializat la zero pt. ca este folosit ad

;la resarea sirului mov b,[index_sir] ;BL contine pozitia primului numar din sir mov al,[bx][si] ;AL prima valoare din sir inc bx ;se trece la urmatoarea valoare din sir cmp dh,bl ;se verifica daca nu s-au comparat toate valorile je sfirsit ;s-au comparat toate valorile si s-a terminat

;programul mov [index_sir],bl ;memorez pozitia primei valori de comparat.

;Aceasta va fi comparata succesiv cu valorile ;urmatoare din sir

dec bx ;pentru ca urmeaza o bucla se decrementeaza valoarea comparare: ;se trece la urmatoarea valoare din sir inc bx cmp ah,bl ;se verifica daca nu s-au comparat toate valorile

;din sir je valoare_noua ;daca da, se trece la o alta valoare de comparat

;din registrul AL mov dl,[bx][si] ;DL contine valoarea cu care se compara AL, ;valoarea urmatoare din sir cmp al,dl ;se compara cele doua valori din sir jb comparare

;daca in AL este o valoare mai mica decit in DL ;atunci se trece la urmatoarea valoare de comparat mov cl,bl ;daca nu atunci de inverseaza cele doua valori

;in memorie si in registrele AL si DL. Aici se ;stocheaza temporar indexul in sir

mov ch,dl ;se stocheaza temporar valoarea din DL mov [bx][si],al ;se memoreaza valoarea mai mare in locul celei

;mai mici mov bl,[index_sir] dec bl mov [bx][si],dl mov, bl,cl mov dl,al mov al,ch jmp comparare sfarsit: mov ax,4Ch int 21h end start

După editarea codului sursă a programului, se va compila şi in caz de erori se

vor depana. Se va simula pas cu pas, programul realizat urmărind în fereastra de emulare, valorile regiştrilor. Se va discuta modul de funcţionare al programului şi posibilităţi de realizare altfel al programului.

Referatul de laborator trebuie să conţină programul studiat ,explicaţiile privind

modul de funcţionare, precum şi altă variantă de program care să efectueze sortarea a unui număr de valori numerice.

Page 11: Proiectare Cu Microprocesor Lab

11

Laboratorul nr. 4

Studiul mediului de programare MPLAB Scopul acestui laborator este de prezentare şi de iniţiere a studenţilor în utilizarea programului MPLAB.

MPLAB IDE este un mediu integrat de dezvoltare (IDE – Integrated Development Environment) oferit de firma Microchip pentru familiile de microcontroloare PIC12, PIC 16, PIC18, etc. Include:

- manager de proiecte - editor de program sursa - asamblor - editor de legaturi - depanator (debuger) - motor de executie

Aplicatia permite integrarea si a altor componente (ex: compilator C, depanator, programator, ICD, ICE) realizate fie de firma Microchip fie de alte firme (ex. CCS). Figura de mai jos indica schema de administrare a unui proiect prin MPLAB:

Pasii necesari pentru dezvoltarea unei aplicatii: a. Lansarea mediului MPLAB IDE - Start>Programs>Microchip>MPLAB IDE vx.xx>MPLAB IDE

Fişiere sursă

Asamblor Compilator

Bibliotecă de funcţii

predefinite (fişiere obiect)

Editor de legături

Fişier executabil Fişier de depanare

Figura 1. Administrarea unui proiect in MPLAB

Page 12: Proiectare Cu Microprocesor Lab

12

b. Selectarea dispozitivului - trebuie să preceadă crearea unui nou proiect - din meniu se alege: Configure->Select device - se alege tipul circuitului folosit (ex: PIC16F877); mediul va indica tipurile de dispozitive suportate pentru programarea circuitului (ex: MPLAB ICD 2), limbajele acceptate şi instrumentele de depanare utilizabile

c. Crearea unui proiect - cu ajutorul “project wizard”

- din meniu se alege: Project>Project Wizard - în pasii următori se aleg: tipul de dispozitiv şi setul de instrumente de compilare şi link-editare; se observă că pe lângă instrumentele Microchip pot fi folosite instrumente oferite de alţi producători (ex: compilator C al firmei HI-TECH)

Page 13: Proiectare Cu Microprocesor Lab

13

- se alege un nume pentru noul proiect (ex: Test_x) - se adaugă fişiere sursă; pentru început se poate adăuga un fişier “model” (template) care conţine elementele iniţiale de configurare pentru fiecare circuit în parte (ex: C:\Program Files\Microchip\MPASM Suite\Template\Object\16F877tmpo.asm); se apasă litera de la începutul fişierului până apare “C” care va copia fişierul în proiect

Page 14: Proiectare Cu Microprocesor Lab

14

- se adaugă un fişier necesar pentru link-editare (ex: C:\Program Files\Microchip\MPASM Suite\LKR\18F8722.lkr sau .... \18F8722i.lkr dacă se foloseşte ICD 2) - proiectul creeat se poate vizualiza cu: View>Project.; fişierele pot fi selectate pentru editare (dublu-clock pe fişier sau click-dreapta şi Edit) - se construieste proiectul (asamblare, link-editare şi conversie în format HEX) cu: Project>Build Allsau prin apăsarea icoanei corespunzătoare la “Build All” - pentru scriere de program se deschide fişierul model (dublu-click pe

16F877tmpo.asm) şi se adaugă instrucţiuni în “Main” după comentariul: remaining code goes here ;

Page 15: Proiectare Cu Microprocesor Lab

15

Laboratorul nr. 5

Realizarea unui program de aprinderea dinamică a 8 leduri cu microcontroler PIC

În cadrul acestui laborator, pe baza cunoştinţelor căpătate în cadrul laboratorului precedent şi a cunoştinţelor acumulate la curs , se va realiza, simula un program în limbaj de asamblare utilizând MPLAB şi prin programarea unui microcontroler PIC16F877A se va testa acest program. Scopul acestui program este de a comanda aprinderea a 8 leduri conectate la portul PORTB al microcontrolerului în 4 moduri diferite, trecerea de la un “efect” la altul realizându-se prin apăsarea a 4 butoane conectate la pinii 0 – 3 ai portului PORTA. Se va lansa în execuţie programul MPLAB, se va crea un proiect nou editându-se următorul program: list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;***** VARIABLE DEFINITIONS CBLOCK 0x20 ; declaraţia de variabile TIMER x necesare subrutinei

;de întârziere, RAM starts at address 20h TIMER1 TIMER2 TIMER3 ENDC ;********************************************************************** ORG 0x000 ; processor reset vector main ; Initializarea porturilor microcontrolului movlw b'00000000' ; toti pini porturilor = low movwf PORTA movlw b'00000000' movwf PORTB movlw b'00000000' movwf PORTC

Page 16: Proiectare Cu Microprocesor Lab

16

movlw b'00000000' movwf PORTD movlw b'00000000' movwf PORTE bsf STATUS,RP0 ; saltul in bankul 1 de memorie RAM,

;necesar setarii registrilor TRISx movlw b'11111111' ; toti pinii portului PORTA = de intrare movwf TRISA movlw b'00000000' ; toti pinii portului PORTx = de iesire movwf TRISB movlw b'00000000' movwf TRISC movlw b'00000000' movwf TRISD movlw b'00000000' movwf TRISE movlw b'00000110' ; prin setarea registrului ADCON1 cu valoarea binara

;se seteaza pinii portului A ca pini I/O digitali movwf ADCON1 bcf STATUS,RP0 ; saltul in bankul 0 de memorie RAM GOTO EFECT_1 Meniu CLRF PORTB ;stergerea registrului BTFSC PORTA,0 ;testarea nivelului logic a pinului 0 din PORTA GOTO EFECT_1 ;daca este 1 se face saltul la eticheta EFECT_1 BTFSC PORTA,1 GOTO EFECT_2 BTFSC PORTA,2 GOTO EFECT_3 BTFSC PORTA,3 GOTO EFECT_4 GOTO Meniu EFECT_1 BTFSC PORTA,0 GOTO EFECT_1 E1 MOVLW B'10000000' CALL DELAY_ROUTINE ; MOVWF PORTB MOVLW B'11000000' CALL DELAY_ROUTINE ; MOVWF PORTB MOVLW B'11100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11110000' ;

Page 17: Proiectare Cu Microprocesor Lab

17

MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111110' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111111' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111110' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11110000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'10000000' ; MOVWF PORTB GOTO E1 EFECT_2 BTFSC PORTA,1 GOTO EFECT_2 E2 MOVLW B'00000001' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000010' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00001000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00010000' ; MOVWF PORTB

Page 18: Proiectare Cu Microprocesor Lab

18

CALL DELAY_ROUTINE MOVLW B'00100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'01000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'10000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'01000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00010000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00001000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000010' ; MOVWF PORTB CALL DELAY_ROUTINE GOTO E2 EFECT_3 BTFSC PORTA,2 GOTO EFECT_3 E3 MOVLW B'00000011' ; MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE MOVLW B'00001100' ; MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE MOVLW B'00110000' ; MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE MOVLW B'11000000' ; MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE GOTO E3 EFECT_4 BTFSC PORTA,3 GOTO EFECT_4 E4 MOVLW B'11111111' ;

Page 19: Proiectare Cu Microprocesor Lab

19

MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE MOVLW B'00000000' ; MOVWF PORTB CALL DELAY_ROUTINE CALL DELAY_ROUTINE GOTO E4 DELAY_ROUTINE MOVLW 0x0B ;subrutina de intarziere MOVWF TIMER3 DEL_LOOP1 MOVLW 0xE7 MOVWF TIMER2 DEL_LOOP2 MOVLW 0x2D MOVWF TIMER1 DEL_LOOP3 BTFSC PORTA,0 GOTO MENIU BTFSC PORTA,1 GOTO MENIU BTFSC PORTA,2 GOTO MENIU BTFSC PORTA,3 GOTO MENIU DECFSZ TIMER1,F GOTO DEL_LOOP3 DECFSZ TIMER2,F GOTO DEL_LOOP2 DECFSZ TIMER3,F GOTO DEL_LOOP1 RETLW 0 END După editarea programului se dă comanda de compilarea şi în cazul existenţei unor erori se vor depana. Se porneşte simulatorul integrat: Debugger >>Select Tool>>MPLAB SIM. Din meniu, View>>Watch se va afişa o fereastră prin intermediul căruia se poate selecta regiştrii şi variabilele a căror valori se urmăresc odată cu emularea programului.

Page 20: Proiectare Cu Microprocesor Lab

20

După verificarea programului realizat, prin simulare, se va programa un microcontroller de clasă PIC 16F877A, utilizând pupitrul de lucru NX – 877 plus şi programatorul aferent.

Referatul de laborator trebuie să conţină programul studiat ,explicaţiile privind modul de funcţionare, denumirea şi semnificaţia biţilor regiştrilor folosiţi în program. Se va modifica programul astfel încât sa poată rula 5 programe diferite de aprindere a ledurilor.

Page 21: Proiectare Cu Microprocesor Lab

21

Laboratorul nr. 6

Studiul sistemului de întrerupere la un microcontroler PIC

În cadrul acestui laborator, pe baza cunoştinţelor căpătate în cadrul laboratorului precedent şi a cunoştinţelor acumulate la curs , se va realiza, simula un program în limbaj de asamblare utilizând MPLAB şi prin programarea unui microcontroler PIC16F877A se va testa acest program. Scopul acestui program este de a comanda aprinderea a 7 leduri conectate la portul PORTB al microcontrolerului în 3 moduri diferite, trecerea de la un “efect” la altul realizându-se prin apăsarea unui singur buton conectat la pinul 0 al portului PORTB, ceea ce determină generarea unei întreruperi spre unitatea centrală. Acest lucru se va realiza prin programarea, setarea registrului INTCON al microcontrolerului. Se va lansa în execuţie programul MPLAB, se va crea un proiect nou editându-se următorul program: list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;***** VARIABLE DEFINITIONS CBLOCK 0x20 w_temp ; variabile necesare salvarii registrului acumulator si a registrului STATUS status_temp ; in momentul tratarii unei intreruperi de catre unitatea centrala ST ; variabila necesara contorizarii numarului de apasari pe butonul conectat ;la pinul RB0 TIMER1 ; declaraţia de variabile TIMER x necesare subrutinei TIMER2 ;de întârziere, RAM starts at address 20h TIMER3 ENDC ;********************************************************************** ORG 0x0020 ; processor reset vector goto main ; go to beginning of program

Page 22: Proiectare Cu Microprocesor Lab

22

ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register BTFSC INTCON,INTF ; se verifica sursa intreruperii, daca a venit CALL CE ; de la pinul RB0 se face saltul la subrutina CE movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie CE INCF ST,1 MOVLW b'10000000' MOVWF OPTION_REG MOVLW b'10010000' MOVWF INTCON MOVLW 2 SUBWF ST,0 BTFSS STATUS,C GOTO AP1 GOTO AP2 RETURN main ; Initializarea porturilor microcontrolului movlw b'00000000' ; toti pini porturilor = low movwf PORTA movlw b'00000000' movwf PORTB movlw b'00000000' movwf PORTC movlw b'00000000' movwf PORTD movlw b'00000000' movwf PORTE bsf STATUS,RP0 ; saltul in bankul 1 de memorie RAM,

;necesar setarii registrilor TRISx movlw b'00000000' ; toti pinii portului PORTA = de iesire movwf TRISA movlw b'00000001' ; pinii 1 – 7 ai portului PORTx = de iesire movwf TRISB movlw b'00000000' movwf TRISC movlw b'00000000'

Page 23: Proiectare Cu Microprocesor Lab

23

movwf TRISD movlw b'00000000' movwf TRISE movlw b'00000110' ; prin setarea registrului ADCON1 cu valoarea binara

;se seteaza pinii portului A ca pini I/O digitali movwf ADCON1 MOVLW b'10000000' MOVWF OPTION_REG MOVLW b'10010000' ; activarea sistemului de intreruperi globale si acceptarea

; intreruperii generate in urma modificarii starii logice la pinul ;RB0

MOVWF INTCON bcf STATUS,RP0 ; saltul in bankul 0 de memorie RAM MOVLW 0.1 MOVWF ST AP1 MOVLW B'10000000' CALL DELAY_ROUTINE ; MOVWF PORTB MOVLW B'11000000' CALL DELAY_ROUTINE ; MOVWF PORTB MOVLW B'11100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11110000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111110' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111111' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111110' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11111000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11110000' ; MOVWF PORTB

Page 24: Proiectare Cu Microprocesor Lab

24

CALL DELAY_ROUTINE MOVLW B'11100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'11000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'10000000' ; MOVWF PORTB GOTO AP1 AP2 MOVLW B'00000001' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000010' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00001000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00010000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'01000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'10000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'01000000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00100000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00010000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00001000' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000100' ; MOVWF PORTB CALL DELAY_ROUTINE MOVLW B'00000010' ; MOVWF PORTB

Page 25: Proiectare Cu Microprocesor Lab

25

CALL DELAY_ROUTINE CLRF ST GOTO AP2 DELAY_ROUTINE

MOVLW D'100' ;subrutina de intarziere MOVWF TIMER3 DEL_LOOP1

MOVLW D'200' MOVWF TIMER2 DEL_LOOP2

MOVLW D'255' MOVWF TIMER1 DEL_LOOP3 DECFSZ TIMER1,F GOTO DEL_LOOP3 DECFSZ TIMER2,F GOTO DEL_LOOP2 DECFSZ TIMER1,F GOTO DEL_LOOP1 RETLW 0 END

După editarea programului se dă comanda de compilarea şi în cazul existenţei unor

erori se vor depana. Se porneşte simulatorul integrat: Debugger >>Select Tool>>MPLAB SIM. Din meniu, View>>Watch se va afişa o fereastră prin intermediul căruia se poate selecta regiştrii şi variabilele a căror valori se urmăresc odată cu emularea programului.

După verificarea programului realizat, prin simulare, se va programa un microcontroller de clasă PIC 16F877A, utilizând pupitrul de lucru NX – 877 plus şi programatorul aferent.

Referatul de laborator trebuie să conţină programul studiat ,explicaţiile privind modul de funcţionare, denumirea şi semnificaţia biţilor regiştrilor folosiţi în program. Se va modifica programul astfel încât sa poată rula 3 programe diferite de aprindere a ledurilor.

Page 26: Proiectare Cu Microprocesor Lab

26

Laboratorul nr. 7

Studiul întreruperilor. Ceas de timp real cu microcontroler PIC

În cadrul acestui laborator, pe baza cunoştinţelor căpătate în cadrul laboratorului precedent şi a cunoştinţelor acumulate la curs , se va realiza, simula un program în limbaj de asamblare utilizând MPLAB şi prin programarea unui microcontroler PIC16F877A se va testa acest program. Scopul acestui program este de a comanda aprinderea a 2 leduri conectate la portul PORTB al microcontrolerului la perioade de timp diferite şi bine definite, acest lucru realizându-se prin programarea regiştrilor TIMER X ai microcontrolerului. TIMER0 este un numărător pe 8 biţi care are posibilitatea de a genera întreruperi spre unitatea centrală în momentul când ajunge la valoarea maximă 255 şi se resetează. Acest lucru se va realiza prin programarea, setarea registrului INTCON al microcontrolerului. Se va lansa în execuţie programul MPLAB, se va crea un proiect nou editându-se următorul program: ;RB4 clipeste la 10 secunde ;RB1 clipeste la 1 secunda list p=16f877A ; list directive to define processor #include <p16f877A.inc> ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;***** VARIABLE DEFINITIONS CBLOCK 0x20 w_temp ; variabile necesare salvarii registrului acumulator si a registrului STATUS status_temp ; in momentul tratarii unei intreruperi de catre unitatea centrala timp ; declaraţia de variabile timp necesare controlului trecerii perioadei de timp timp1 ;stabilite constanta_timp ; variabila in vare se prescrie perioada de timp la care se aprinde ledul ; conectat la pinul RB4 ENDC ;**********************************************************************

Page 27: Proiectare Cu Microprocesor Lab

27

ORG 0x0020 ; processor reset vector goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register

;intreruperea ; daca a aparut intreruperea verific daca aceasta este de la TMR0

btfsc INTCON,T0IF ; se testeaza daca este vorba de o intrerupere de la TIMER0

goto timer_isr ; da, se trateaza intreruperea end_isr movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt timer_isr ; tratarea intreruperii timer TMR0 ; aceasta intrerupere apare la fiecare 100us. La intrerupere se reincarca constanta de divizare ; in TMR0 si se reactiveaza intreruperea. BCF STATUS, RP0 ;se comuta pe bank 0 ; clrf TMR0 incf timp,f bcf INTCON,T0IF ;se reactiveaza intreruperea TMR0 goto end_isr main ;initializari BCF STATUS, RP0 ;bank0 CLRF PORTA ;sterge registrul PORTA CLRF PORTB ;sterge registrul PORTB BSF STATUS, RP0 ;bank1 MOVLW 0xff ;PORTA = intrari MOVWF TRISA MOVLW b'00000000' ;BORTB<0:7> = iesiri MOVWF TRISB MOVLW B'11010011' ;Se seteaza optiunile ;Disable pull-ups ;INT on rising edge ;TMR0 to CLKOUT ;TMR0 Incr low2high trans. ;Prescaler assign to Timer0 ;Prescaler rate is 1:16

MOVWF OPTION_REG ;Write the OPTION register. CLRF INTCON ;Disable interrupts

Page 28: Proiectare Cu Microprocesor Lab

28

bcf STATUS,RP0 ;se comuta pe bank0 ;stabilesc temporizarea la 10 secunde movlw .10 ;temporizare 10 secunde movwf constanta_timp bucla bsf PORTB,4 ;se aprinde LED-ul call TEMPORIZARE bcf PORTB,4 ;se stinge LED-ul call TEMPORIZARE goto bucla ;------------------------------------------------------- ;SUBPROGRAME ;------------------------------------------------------- TEMPORIZARE bcf STATUS,RP0 ;se comuta pe bank0 ;se porneste temporizarea clrf TMR0 ;se incarca constanta in TMR0 clrf timp clrf timp1 movlw B'10100000' ;se activeaza intreruperile globala si cea a TMR0 movwf INTCON temporizare1 ;a trecut o secunda? movf timp,w sublw D'245' btfss STATUS,Z goto temporizare1 ;nu a trecut o secunda, astept ;da, a trecut o secunda clrf timp ;--------------------------- btfss PORTB,1 goto LED_stins bcf PORTB,1 temporizare2 ;--------------------------- incf timp1,f ;incrementez secunda movfw timp1 subwf constanta_timp,w ;timpul cerut btfss STATUS,Z goto temporizare1 ;nu s-a scurs timpul cerut ;s-a scurs timpul cerut ;reset timer0 CLRF INTCON ;Disable interrupts, se opreste Timer0 return ;---------------------------- LED_stins bsf PORTB,1 goto temporizare2

Page 29: Proiectare Cu Microprocesor Lab

29

;---------------------------- END ; directive 'end of program'

După editarea programului se dă comanda de compilarea şi în cazul existenţei unor erori se vor depana. Se porneşte simulatorul integrat: Debugger >>Select Tool>>MPLAB SIM. Din meniu, View>>Watch se va afişa o fereastră prin intermediul căruia se poate selecta regiştrii şi variabilele a căror valori se urmăresc odată cu emularea programului.

După verificarea programului realizat, prin simulare, se va programa un microcontroller de clasă PIC 16F877A, utilizând pupitrul de lucru NX – 877 plus şi programatorul aferent.

Referatul de laborator trebuie să conţină programul studiat ,explicaţiile privind modul de funcţionare, denumirea şi semnificaţia biţilor regiştrilor folosiţi în program. Se va modifica programul astfel încât să se modifice perioadele de aprindere, stingere ale celor două leduri precum prin setări diferite ale registrelor OPTION şi INTCON.