Sunteți pe pagina 1din 6

Ministerul Educației și Cercetării al Republicii Moldova

I.P. Centrul de Excelență în Energetică și Electronică


Catedra ,,Automatizări’’

Lucrare de Laborator NR.4


Disciplina: Automatizare cu microprocesoare
Tema: Studiul mediului de programare a aplicațiilor MPLAB
IDE.

A elaborat elevul din grupa AT-0119


A verificat profesorul Litvin Nicolae

Chișinău 2023
Scopul : Alegerea modului de dezvoltare.
Elaborarea unui program elementar in limbajul ASEMBLER sau C.
Translarea unui program in cod executiv

3. MPLAB IDE, PICC

Pentru programarea PIC-ului poate fi utilizat mediul dedezvoltare MPLAB(*). Codul


programului poate fi scris intr-unlimbaj C specializat. Pentru PIC12F675 exista colectia de
programe utilitare PICC Lite(**) care include: un compiler, unassambler, un linker. La
generarea programului este creat siun fisier cod masina care poate fi scris din MPLAB in
memoriaMCU.

3.1. Crearea unui proiect in MPLAB

Din meniul Project se selecteaza optiunea ProjectWizard; aceasta alegere este


recomandata inainte de realizarea primului proiect in MPLAB deoarece optiuneafaciliteaza
configurarea unor parametri.
Se alege tipul microcontroller-ului (Device): PIC12F675.Se alege colectia de
programe folosita (Active
Toolsuite): HI-TECH PICC Toolsuite; aceasta colectie estedisponibila in MPLAB dupa
instalarea PICC Lite.
Se creaza un director pentru fisierele proiectului si ise da un nume proiectului.
Se introduc in proiect fisierele programului; pentru unprogram PICC pot fi
introduse fisiere sursa cu extensia .c sau .as, fisiere header cu extensia .h, fisiere obiect cu
extensia .obj si fisiere library cu extensia .lib.

3.2. Utilizarea fisierelor PICC

Fisierele sursa si header contin codul programului C. Incadrul codului se poate


face referire la functii existente infisiere library. Fisierele sursa pot fi scrise in limbaj c sau
assembler (extensia .as). Codul programului este compilatsi rezulta unul sau mai multe
fisiere obiect (cate unul pentru fiecare fisier sursa). Legatura dintre fisierele obiect se face
in cadrul operatiei de link-are. Rezultatul link-arii poate fi un fisier hex (cod obiect) sau un
fisier library. Operatia de link-are permite atasarea unor fisiere hex la fisierele obiect.
Fisierele hex pot fi scrise in memoria program a PIC-ului.

3.3. Simularea in MPLAB

Evolutia programului poate fi urmarita cu ajutorul facilitatii MPLAB SIM din


meniul Debugger(->Select Tool).
Pentru a vedea cum variaza continutul registrilor PIC- ului, trebuie sa fie deschisa
o fereastra Watch, din meniul View; registrii cu functii speciale (cum este GPIO, pentru
informatia transmisa pe pini) sunt numiti SFR, iar variabilele din program sunt numite
Symbols. Se recomanda activarea optiunii Binary, pentru vizualizarea continutului.
Optiunea Settings din meniul Debugger permite modificarea parametrilor
simulatorului. In fereastra Animation/Realtime Updates (din Settings) trebuie sa selectati
“Enable Realtime watch updates” pentru a vedeamodificarile registrilor; poate fi aleasa si
perioada deactualizare a registrilor in fereastra Watch.

4. O prima aplicatie
4.1. Descrierea lucrarii de laborator

Aplicatia propusa consta in implementarea unui ciclu, cudurata nedeterminata, de


aprindere si stingere a LED-ului D0(vezi fig.4).
Implicit se doreste ca celelalte LED-uri sa nu fie aprinse. Se va tine cont la
realizarea programului de faptulca, pentru aprinderea unui LED, potentialul de la anod
trebuie sa fie mai mare decat cel de la catod. Un LED va ramane stins daca ambele
potentiale sunt egale.
Programul C include un fisier header pentru configurareaPIC-ului, definirea
constantelor si declararea functiilor.
Fisierul sursa contine cod pentru configurarea PIN-ilor PIC-ului (intrare/iesire, tipul
semnalului vehiculat) si pentruaprinderea/stingerea diodei.

4.2. Codul programului C

// + +
// | LED header file |
// | LED.h |
// + +

#include <pic.h>

// Configurare PIC
CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS & INTIO);

// Constante
#define count 100000

// Declarare Functii
void Init(void);
void delay(unsigned int);

(*) MPLAB este un produs al firmei Microchip


(**) PICC este un produs al firmei HI-TECH Software
// + +
// | LED source file |
// | LED.c |

2
// + +

#include "LED.h"

void main(void)
{
Init();

while(1)
{
GPIO = 0b00010000; // aprinde LED-ul D0
delay(count);
GPIO = 0; // stinge LED-urile
delay(count);
}
}

// Initializare
void Init(void)
{
TRISIO = 0b11001111;
ANSEL = 0b00000000;
CMCON = 0b00000111;
ADCON0 = 0b00000000;
}

// Intarziere
void delay(unsigned int amount)
{
unsigned int index;
for(index=0;index<amount;index++);
}

4.3. Explicarea codului

#include <pic.h>
Fisierul pic.h contine definitii ale unor variabile “desistem”, de exemplu registrii
ai PIC-ului; vom putea scrie GPIO in loc de adresa (hexa) corespunzatoare.

CONFIG(UNPROTECT & BOREN & MCLRDIS & PWRTEN & WDTDIS


& INTIO);
Aceasta comanda modifica “Configuration bits” (biti deconfigurare). Bitii apartin
registrului CONFIG.
Denumirile din paranteza sunt compuse din doua cuvinte. Al doilea este (cu
exceptiile UNPROTECT si INTIO) EN – Enable(activeaza) sau DIS – Disable
(dezactiveaza). Dezactivarea unui bit inseamna ca nu se mai citesc semnale de la circuitul
reprezentat de bit, pe pinul corespunzator al MCU.

WDT inseamna Watch Dog Timer. WDT este un circuit (oscilator RC care activeaza
un numarator – Counter) care inregistreaza erori (adrese incorecte) in timpul executiei unui
program. Dupa un numar de erori inregistrate se produceReset.
PWRT inseamna PoWeR up Timer. Activarea PWRT introduce ointarziere – Delay
(72ms) la punerea sub tensiune – Power upcare permite stabilizarea ceasului MCU
(uniformizarea

3
oscilatiilor) inainte de executarea primei instructiuni deprogram.
MCLR inseamna Master CLear Reset. Activarea MCLR permitecontrolarea
activarii functiei Reset, la revenirea din stareaSleep (de exemplu). Starea Sleep
corespunde lipsei de activitate a MCU. Actiunea MCLR consta in punerea sub tensiune a
MCU.
BOR inseamna BRown-Out (in manualul PIC12F675, este scris BOD – Brown-
Out Detect). Brown-Out corespunde scaderiitensiunii de alimentare sub o anumita valoare
(4V). In aceasta situatie se activeaza functia Reset.
INTIO precizeaza ca trebuie sa fie luate in considerare de catre MCU intreruperile
venite pe pinii de intrare/iesire.Intreruperea este un semnal care arata ca pe pinul
respectiv se transmite informatie (portul este activ). La primirea intreruperii MCU
activeza un cod specific de tratare a intreruperii, dupa care continua executarea
programului.
UNPROTECT informeaza MCU ca se vor efectua operatii decitire/scriere cu
memoria de program si cea de date.

In fisierul sursa, in functia main() are loc o data, lainceputul programului,


initializarea unor registrii, dupa care se repeta aprinderea si stingerea LED-ului D0,
operatiidecalate cu functia delay.

TRISIO = 0b11001111;
TRISIO inseamna TRI-State Input Output. Bitii registrului TRISIO sunt in
corespondenta cu pinii PIC-ului. Daca un bit al TRISIO are valoarea 1 inseamna ca pinul
cu acelasi numar de ordine va primii semnale din exterior (pin de intrare); valoarea 0 a
unui bit TRISIO corespunde unui pinde iesire. Numerotarea bitilor se face de la dreapta la
stanga (bitul cel mai putin semnificativ este bitul 0).
11001111 inseamna ca numai pinii 4 si 5 sunt de iesire (pinii
1 si 2 sunt de intrare). Prin modificarea bitilor registruluiGPIO se vor putea trimite semnale
doar pe pinii 4 si 5, care vor conduce la aprinderea (doar a) diodei D0 (vezi fig. 4).

ANSEL = 0b00000000;
ANSEL inseamna ANalog SELection. Dupa cum se poate vedeain figura 5 exista 4
pini pentru transfer analogic: AN0-GP0,AN1-GP1, AN2-GP2, AN3-GP4; GP inseamna
General Purpose (Pin).Bitii 0 3 cu valoarea 0 impun ca pinii enumerati anterior sa fie
destinati trnasferului digital (valoarea 1 corespunde intrarilor analogice). Bitii 4 6
specifica alegerea frecventei oscilatorului pentru sincronizarea conversiei (desemnal)
Analog/Digital. In exemplul de fata nu exista intrarianalogice, deci nu este necesara
conversia Analog/Digital; bitii 6 pot avea orice valoare. Bitul 7 al ANSEL nu este
4 implementat.

4
CMCON = 0b00000111;
CMCON inseamna CoMparator CONtrol. Bitii 0 2 cu valoarea
1 indica faptul ca pinii GP 0 2 nu sunt conectati la comparatorul analogic si informatia
vehiculata pe GP 0 2 estedigitala. GP0 corespunde intrarii inversoare a omparatorului,iar
GP1 intrarii neinversoare. Bitul 3 cu valoarea 1 comuta intre ele intrarile. Bitul 4 cu
valoarea 1 indica inversarea iesirii. Bitul 5 este neimplementat. Bitul 6 cu valoarea 1 indica
faptul ca iesirea este “1” logic atunci cand intrarea pozitiva este mai mica decat cea
negativa. Bitul 7 e neimplementat. Comparatorul nu este conectat (bitii 2 au valoarea 1)
0 deci ceilalti biti pot avea orice valoare.

ADCON0 = 0b00000000;
ADCON0 inseamna Analog/Digital CONtrol. Bitul 0 cu valoarea 0 specifica faptul
ca modulul de conversie AD este inchis si nealimentat. Bitul 1 cu valoarea 1 ar comanda
inceperea conversiei. Bitii 2,3 specifica pinul pentru intrarea analogica. Bitii 4,5 sunt
neimplementati. Bitul 6 specifica voltajul de referinta. Bitul 7 precizeaza aliniereape 16 biti
a rezultatului conversiei: aliniere cu bitul cel mai semnificativ in stanga sau cu bitul cel mai
putin semnificativ in dreapta (pentru rezultat reprezentabil pe maiputin de 16 biti).

GPIO = 0b00010000;
GPIO inseamna General Purpose Input/Output. Numai bitii0 5 sunt implementati.
Valoarea 1 pentru un bit inseamna ca potentialul pinului corespunzator este ridicat
(tensiunea dereferinta/alimentare).

GPIO = 0;
Valoarea primita putea fi scrisa si 0x00 (hexa) sau 0b00000000. Toti pinii de
iesire primesc potential scazut.
Conform circuitului reprezentat in figura 4, pentru aaprinde LED-ul D0 se impune
ca potentialul pinului 4 sa fieridicat, iar potentialul pinului 5 sa fie scazut. LED-ul D2nu
se aprinde deoarece pinul 2 este desemnat ca intrare (TRISIO,1). Stingerea LED-ului se
face coborand potentialulde pe pinul 4.

Intarzierea aprinderii si stingerii se face printr-un ciclu for executat de count ori.
Daca se cunoaste cate cicluri de ceas necesita executarea instructiunii for atuncise
poate determina valoarea in secunde a intarzierii.

Concluzie :

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