Documente Academic
Documente Profesional
Documente Cultură
Chișinău 2023
Scopul : Alegerea modului de dezvoltare.
Elaborarea unui program elementar in limbajul ASEMBLER sau C.
Translarea unui program in cod executiv
4. O prima aplicatie
4.1. Descrierea lucrarii de laborator
// + +
// | 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);
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++);
}
#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.
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.
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 :