STRUCTURA SOFTWARE SI
REALIZAREA PROGRAMULUI
4.1 Notiuni introductive
Dezvoltarea aplicatiilor cu microsisteme presupune pe langa proiectarea circuitelor electronice aferente acestora si specificarea in concordanta cu aceasta, prin instructiuni, a functiunilor pe care sistemul trebuie sa le realizeze.
Prin faptul ca microsistemele dispun de circuite microprogramabile, structura acestora va fi adaptata aplicatiei specifice prin rularea programelor de initializare a sistemului, programe care duc la o configurare particulara, specifica. Deci, una dintre functiunile de baza pe care microsistemele dotate cu microcontroler-e trebuie sa o implementeze o reprezinta chiar propria configurare-initializare, caci avand drept suport aceeasi structura,un sistem realizeaza noi functiuni ca urmare a programarii initiale sau pe parcurs.
O problema practica ce este pusa la programarea microsistemelor o reprezinta organigrama pe care trebuie sa o utilizam la proiectarea programelor de functionare. Aceasta variaza in raport cu 'uneltele' soft-uri avute la dispozitie:
. &n 848c22i bsp; &n 848c22i bsp; Asamblorul - este acel program ce converteste fisierul sursa -fisier de tip text (ASCII) ce contine instructiuni ale microcontrolerului sub forma de mnemonice, in fisier obiect, respectiv intr-un fisier ce contine codurile masina corespunzatoare instructiunilor specificate in cadrul fisierului sursa;
. &n 848c22i bsp; &n 848c22i bsp; Compilatorul - este acel program ce converteste fisierul sursa, scris in limbaj evoluat, in fisier obiect;
. &n 848c22i bsp; &n 848c22i bsp; Link-editorul - realizeaza cuplarea mai multor module de program memorate in fisiere obiect distincte si aloca zonele de memorie necesare programelor si variabilelor utilizate de catre acestea. Link-editorul favorizeaza dezvoltarea structurata a programelor precum si reutilizarea unor module de program in aplicatii distincte;
. &n 848c22i bsp; &n 848c22i bsp; Convertorul OBJ-IntelHEX - realizeaza conversia din format OBJ (cod masina ), intr-un format ce contine: adresa de locatare, numarul de octeti ai liniei respective, tipul datelor (cod sau date), sirul de coduri, suma de control corespunzatoare tuturor informatiilor liniei respective si terminatorul de linie format din caracterele CR, LF;
. &n 848c22i bsp; &n 848c22i bsp; Depanatorul - permite executia pas cu pas, sau secventa dupa secventa, a unui program aflat in faza de testare cu scopul de a releva interactiunea acestuia cu procesul. In general acest program functioneaz impreuna cu un sistem de dezvoltare si dispune de un monitor - programul de baza ce ofera functiuni de depanare pe sistemul de dezvoltare
. &n 848c22i bsp; &n 848c22i bsp; Emulatorul - este programul care permite simularea functiunilor si instructiunilor microcontrolerului pe un alt sistem de calcul gazda. El poate prezenta unele restrictii in special in ceea ce priveste posibilitatile de simulare a intreruperilor. Acest program poate sa functioneze atat pe un calculator gen PC, cat chiar pe microcontrolerul ce face obiectul aplicatiei, atunci cand acesta o permite. In aceasta din urma situatie, sistemul cu microcontroler are drept consola chiar un PC, ce este conectat serial la sistemul cu microcontroler. Emulatorul rezident pe circuit permite o simulare avansata a functionalitatii sistemului putandu-se verifica atat functionarea programelor cat si aceea a rutinelor de servire a intreruperilor;
Mediul de simulare - este utilizat in cazul unor aplicatii extrem de complexe,caz in care practic sistemul ce implementeaza aplicatia este dezvoltat cu facilitati de depanare. Un astfel de sistem formeaza un mediu de simulare.El include atat facilitati soft (atat pe sistemul gazda ('host'), cat si pe cel tinta('target')),cat si facilitati hard ce tin de existenta unor generatoare de semnal programabile,care sa ofere excitatiile adecvate.
Metodologia proiectarii se bazeaza pe analiza structurata a aplicatiei, pe separarea cat mai rational a functiunilor sistemului in raport cu necesitatile de comanda si cu cele de sincronizare in timp. Se disting ca 'stiluri' de programare, stilul de programare ce utilizeaza extensiv implementarea prin rutine specifice a fiecarei functiuni, ceea ce duce la generarea unui program ce prezinta multe apeluri de functiuni, utilizeaza o stiva relativ extinsa, dar care foloseste eficient memoria sistemului si stilul de proiectare a programelor care specifica prin macro-uri fiecare functiune in cadrul programului principal si minimizeaza astfel numarul de apeluri, implicit reduce dimensiunea stivei, dar creste memoria necesara pentru program.
Evident, tinand cont de varietatea aplicatiilor cat si de varietatea implementarilor hard, nu este posibil enumerarea unei 'retete' dupa care sa procedam! Fiecare aplicatie va trebui sa fie tratata adecvat, masura in care implementam prin rutine, direct in programul principal, sau in rutinele de servire a intreruperilor, functiunile sistemului va depinde esential de coordonata 'timp', respectiv, de masura in care putem indeplini restrictiile specifice unui sistem de comanda si control in timp real.
Proiectarea programelor pentru un sistem impune ca proiectantul sa considere in stransa corelatie doua aspecte: cel specific procesului si cel ce tine de specificitatea procesorului.
Desi varietatea sistemelor este deosebit de larga, totusi putem considera ca, in general, doua clase de sisteme sunt preponderente, iar la Urnit acestea sunt unicele intalnite in practica, si anume:
. &n 848c22i bsp; &n 848c22i bsp; sisteme de reglare, sisteme ce indeplinesc una sau mai multe functii scop, care sunt mentinute in limite de variatie prestabilite, si
. &n 848c22i bsp; &n 848c22i bsp; sisteme de control, respectiv sisteme ce implementeaza un automat cu un numar finit de stari .
Tot aici trebuie sa subliniem deosebit de stransa legatura ce apare intre aspectele 'hard' ale sistemului si aspectele 'soft' ale acestuia. Aceasta legatura trebuie sa fie permanent in atentia proiectantului, el trebuie sa-si 'inchipuie' cum si in ce se traduce executia fiecarei instructiuni si de asemenea, mai important, sa tina cont de sincronizarile ce apar in 'viata sistemului' intre functionarea unitatii centrale si procesul reglat. Spre deosebire de programarea in limbaje de inalt nivel sau nivel mediu, in cazul nostru rezultatele programarii se traduc prin actiuni specifice in cadrul sistemului, sistemul de intreruperi jucand un rol esential. Interactiunile, in acest caz sunt uneori mai greu de vizualizat, de aceea in timp s-a dezvolat o ampla varietate de unelte de dezvoltare care sprijina proiectantul de soft in realizarea acestuia.
Prin sistem de dezvoltare se intelege acel sistem ce include procesorul impreuna cu memoria aferenta, (SRAM si EPROM/Flash ) si care dispune de porturi, eventual de posibilitatea de generare de semnale, spatiu pentru 'cablarea' unor subsisteme aditionale specifice (interfete analog digitale si digital-analogice, driver-e de putere, etc.) si de programe 'monitor 8 rezidente in memoria fixa a sa, ce implementeaza dispozitivul logic 'consola' drept legatura cu PC-ul. Aceste programe pot dispune si de alte rutine, cum ar fi un asamblor/dezasamblor ce permite scrierea sau modificarea 'on-line' a programelor ce ruleaza pe sistem. Sistemul dispune de 'uneltele soft' ce ajuta la asamblarea programelor, editarea acestora precum si a datelor din memoria sistemului de dezvoltare, darea in executie a programului, oprirea acestuia in puncte prestabilite ('break points'), vizualizarea starii registrelor generale, etc. Toate acestea presupun existenta unui dispozitiv logic, 'consola', care asigura controlul sistemului, fie de o consola propriu-zis , fie, mai des, de catre un PC ce este conectat serial la sistem. Aspecte specifice de programare apar si ca urmare a arhitecturii procesorului CISC, RISC sau SISC. Aceste aspecte sunt 'detalii' extrem de importante in programare, caci ele duc la modificarea stilului de proiectare a programelor.
Sa analizam pe rand aceste aspecte.
Prin analiza necesitatilor impuse de implemetarea comenzii si controlului unui sistem, va trebui sa intelegem urmatoarele:
Analiza necesitatilor de comanda si control pe care le impune sistemul.
. &n 848c22i bsp; &n 848c22i bsp; Canale digitale de transfer a informatiilor - (vom avea in vedere, numarul acestora, si modul in care ele pot fi grupate). Este bine sa asiguram corespunzator fiecarei linii de comanda, sau de achizitie digital cate un bit corespunzator in cadrul unor locatii de memorie ce reflecta permanent starea acestora.
. &n 848c22i bsp; &n 848c22i bsp; Canale analogice de transfer al informatiilor - vor necesita alocarea unui numar de linii de iesire (este cazul convertoarelor digital-analogice), respectiv un numar de linii de intrare (este cazul convertoarelor analog-digitale) ce este functie de tipul de convertor, respectiv de interfata acestuia cu microsisternul.
. &n 848c22i bsp; &n 848c22i bsp; Necesitatile de control a timpului - (frecventei, perioadei sau intarzierii) in cadrul sistemului sunt implementate prin utilizarea judicioasa a canalelor temporizatoare. Modulul timer 0 poate fi utilizat in urmatoarele moduri:
temporizator/numarator pe 8 biti;
2. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; numarator pentru prescalare de 8 biti;
3. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; ceas din exterior sau din interior.
4.2 Utilizarea compilatorului Keil nVision2
Compilatorului Keil nVision2 este realizat de firma Keil si poate fi descarcat de pe site-ul www.keil.com Acest compilator este folosit pentru intreaga gama de microcontrolere din familia 8051.
Crearea si compilarea unei aplicatii utilizand acest program se face astfel:
a) Crearea unui proiect
Pentru crearea unui proiect se alege din bara de meniu Project > Create new Project
dupa care se introduce numele proiectului. In fereastra care apare se va alege tipul de micocontroler folosit " Dallas Semiconductor DS89C420 '. Aceasta fereastra este ilustrata in figura 4.1.
Fig. 4.1
b) Setarea proiectului si alegerea optiunilor
Din bara Target I se alege Option for Target 'Target 1', in care se selecteaza:
. &n 848c22i bsp; &n 848c22i bsp; Tipul de memorie Large: variables in XDATA
. &n 848c22i bsp; &n 848c22i bsp; Marimea codului folosit - Large: 64K program
. &n 848c22i bsp; &n 848c22i bsp; Frecventa de tact - Xtal(Mhz): 33.0 Fereastra cu setari si optiuni este ilustrata in figura 4.2.
Fig. 4.2.
c) Compilarea proiectului
Pentru compilarea programului se foloseste Project > Build Target din bara de meniu. Daca programul este compilat si nu va da nici un mesaj de eroare, atunci compilarea s-a facut cu succes si se va creea fisierul in cod hexa. Compilarea programului este ilustrata in figura 4.3.
Fig. 4.3.
Avantatul principal al programatorului si compilatorului Keil este ca limbajul de programare folosit este limbajul C .
Realizarea programului
Proiectarea programelor de functionare ale unui sistem trece prin mai multe etape :
Functiunile sistemului, lungimea canalelor de comunicatie nesesare transferului infomatiilor precum si locatiile de memorie tinta (destinatie) a acestora.
2. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; Identificarea acelor canale de transfer a informatiilor care asigura sincronizarea UC cu procesul condus,
3. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; Analiza prioritatilor ce trebuie sa fie atribuite canalelor de transfer la tratarea informatiilor pentru a respecta teorema esantionarii.
4. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; Se evidentiaza similitudinile ce apar in functionarea sistemului sunt grupate in raport cu criterii specifice, functionale canalele de transfer a informatiilor si sunt conturate task-urile. rutinele si subrutinele ce implementeaza functiunile sistemului de comanda si control.
5. &n 848c22i bsp; &n 848c22i bsp; &n 848c22i bsp; Sunt analizate variatele posibilitati de implementare hard a aplicatiei, respectiv sunt dedicate canalelor informationale liniile porturilor, canalele temporizatoare, celelalte resurse diferitelor necesitati ale sistemului.
In final trebuie sa subliniem ca procesul de proiectare este un proces iterativ, care presupune parcurgerea succesiv de mai multe ori a etapelor de proiectare, pentru a se obtine o implementare a aplicatiei optimala.
4.3.1 Proiectarea programului conform organigramei si tabelului de stare
Implementarea programului ce va fi scris in memoria microcontrolerului se va face cu ajutorul softului Keil uVision2.
In continuare se prezinta fisierul sursa impreuna cu comentarile de rigoare :
Intersectie semaforizata
Programul aplicatiei:
Bliblotecile folosite vor fi prezentate in anexele 2,3,4,5,6.
#include <reg420.h>
#include 'variabile.h'
#include 'i2c.h'
#include 'set_reset.h'
#include 'intrins.h'
#define SYSCLK 11060000
// Adresele circuitelor PCF8574 din sistem
// Scriere
unsigned char PCF0_W =0x70;
// Citire
unsigned char PCF0_R =0x71;
// Scriere
unsigned char PCF1_W =0x72;
// Citire
unsigned char PCF1_R =0x73;
unsigned short stare;
int m;
void delay (int ms);
void delay1 (int ms);
void delay2 (int ms);
void delay3 (int ms);
void delay4 (int ms);
void delayp(unsigned int t);
void stare_A();
void stare_B();
void stare_C();
void stare_D();
void stare_E();
void stare_F();
void stare_G();
void stare_H();
void stare_I();
void stare_J();
void stare_K();
void stare_L();
void main(void)
}
void stare_A()
void stare_B()
void stare_C()
void stare_D()
void stare_E()
void stare_F()
void stare_G()
void stare_H()
void stare_I()
void stare_J()
void stare_K()
void stare_L()
void delay (int ms)
if(GI==1)
if(SE1==1)
if(SE2==1)
if(SE3==1)
if(SE4==1)
}
TF0 = 0;
void delay1 (int ms)
if(GI==1)
if(SE2==1)
if(SE3==1)
if(SE4==1)
}
TF0 = 0;
void delay2 (int ms)
if(GI==1)
if(SE1==1)
if(SE3==1)
if(SE4==1)
}
TF0 = 0;
void delay3 (int ms)
if(GI==1)
if(SE1==1)
if(SE2==1)
if(SE4==1)
}
TF0 = 0;
void delay4 (int ms)
if(GI==1)
if(SE1==1)
if(SE2==1)
if(SE3==1)
}
TF0 = 0;
void delayp(unsigned int t)
|