Sunteți pe pagina 1din 54

UNIVERSITATEA TEHNICĂ DIN MOLDOVA

Catedra CPAE

SISTEM DE ELABORARE A PROGRAMELOR PENTRU


MICROCOTROLOARE ÎNCAPSULATE
Indicaţii metodice

Сhişinău 2004
U.T.M..
Indicaţiile metodice sunt destinate studenţilor U.T.M. cu specialitatea 2102 – „Sisteme
radioelectronice” şi vor servi ca ajutor la efectuarea lucrărilor practice, de laborator şi la
elaborarea proiectelor de an.

Alcătuitori: conf. univ.dr.


Nicolae Secrieru,
conf. univ.dr.
Serghei Andronic

Redactor responsabil:
conf. univ.dr.
Serghei Andronic

Recenzent: conf. univ.dr.


Igor Mardare

 U.T.M., 2004
Introducere
Indicaţiile metodice sunt destinate pentru instruirea studenţilor la efectuarea lucrărilor
practice şi de laborator la disciplinele pentru studierea arhitecturii microprocesoarelor,
măsurărilor, achiziţionării şi prelucrării datelor, reglării şi controlului automat, acţionărilor
electrice, comunicări telefonice şi radio, la fel şi robototehnică, mecanotronică, electronica
transportului auto, electronica de putere ş.a.
Indicaţiile metodice sunt orientate spre utilizarea microsistemului «AFN_MicroLab»
bazat pe un microcontroler tip Motorola M68HC11 care este cel mai utilizat în cele mai diverse
domenii de control electronic şi după mai multe estimări poate să mai fie utilizat şi pe viitor.
Succesul acestui microcontroler se datorează arhitecturii simple, dar flexibile, fiabilităţii înalte,
diverselor mijloace moderne de proiectare şi elaborare a softului. Cunoştinţele acumulate despre
acest microcontroler pot fi utilizate şi extinse asupra altor microcontrolere din familiile
HC12/16/24, Power PC ale firmei Motorola, familiile AVR ale firmei ATMEL ş.a.
- Instruirea studenţilor în elaborarea programelor se sprijină pe tehnologia de programare
modernă – EDT (Embeedded Development Tools) a microsistemului «AFN_MicroLab» -
un pachet de programe instrumentale – mediul de programare (pentru PC) pentru efectuarea
ciclului deplin de elaborare a programelor pentru microcontroler care se încarcă în memoria
operativă RAM sau se înscrie în memoria permanentă ROM.
Indicaţiile metodice pot fi utilizate pentru efectuarea diverselor tipuri de lucrări practice
şi de laborator la elaborarea programelor în scopul studierii:
- metodelor de organizare a proceselor de calcul;
- interacţiunii cu unităţile periferice;
- comunicare cu alte calculatoare prin porturi SPI şi SCI, I2C, I2S;
- metodelor de măsurare a parametrilor analogici: temperatură, presiune, tensiune, ş.a;
- metodelor de măsurare a parametrilor semnalelor discrete;
- metodelor de acţionare a dispozitivelor: chei, relee, ş.a.
- metodelor de acţionare a motoarelor electrice;
- metodelor de reglare discretă: P, PD, PI, PID.
- metodelor de manipulare cu mişcările roboţilor, ş.a.
Aceste indicaţii metodice şi microsistemul «AFN_MicroLab» pot fi utilizate cu succes nu
numai în procesul de învăţământ, dar şi în procesul de cercetări din domeniul comunicaţiilor,
automatizării proceselor tehnologice în termoenergetică, robototehnică, mecatronică, ş.a.
Capitolul 1. STUCTURA LOGICĂ a MICROSISTEMULUI.
1.1 Componenţa şi funcţiile de bază ale microsistemului.
Microsistemul «AFN_MicroLab» este proiectat pe baza microcontrolerului tip Motorola
M68HC11. În componenţa lui intră următoarele (fig. 1.1, 1.2):
- CPU – unitatea centrală de procesare (procesorul);
- RAM intern – un spaţiu mic de 256 octeţi pentru memorarea datelor curente;
- EEPROM intern – memorie reprogramabilă pentru diverse dare, caracteristici;
- Timere – un set de timere pentru sesizarea evenimentelor externe şi generarea semnalelor de
control;
- Generator – generatorul de semnale de tactare ale microsistemului;
- Port A, Port B, Port C, Port D, Port E – un set de porturi de bază pentru interacţiunea cu
diverse dispozitive;

RAM EEPROM
intern intern

Timere CPU Generator

Port A

Expansiune BUS SPI SCI Convertor


A/D

Port D
Port E
Port Port
ADR DATA Port B Port C

Unitati RAM ROM/EPROM


periferice exntern extern

Fig. 1.1 Structura logică a microsistemului

Interfaţa tip SCI – pentru comunicarea în mod serial cu alte microsisteme sau calculator
personal;
- Interfaţa tip SPI – pentru comunicarea sau
controlul în mod serial cu unităţi
periferice;
- Convertor A/D – pentru conversia
semnalelor analogice în formă digitală;
Microcontrolerul M68HC11 are două
moduri de funcţionare:
a) monocip (single mode) -
microsistemul e bazat numai pe cipul
microcontrolerului;
b) extins (extended mode) -
microsistemul e bazat nu numai pe
cipul microcontrolerului, ci mai are un
set de cipuri auxiliare în calitate de
memorie externă, porturi adiţionale.
În microsistemul dat “Micro_LAB” este
utilizat modul extins, care include accesul la
Fig. 1.2 Sturctura internă a microcontrolerului.
trei tipuri de memorie externă: RAM şi ROM /
EEPROM extern, la fel şi două porturi suplimentare pentru extensia unităţilor periferice: Port
ADR şi Port DATA. Aceste două porturi sunt similare porturilor B şi C. Port ADR şi Port DATA
permit extinderea controlului până la 16 unităţi periferice.

1.2 Procesorul microsistemului.


Procesorul este un dispozitiv tipic din arhitectura Von Neyman şi conţine:
- unitatea aritmetică logică (UAL) pentru prelucrarea datelor cu virgulă fixă din 8 şi 16 biţi cu
o viteză de la 0,3…2,0 mln. operaţii pe secundă;
- unitatea de comandă (UC) microprogramabilă (numai în condiţii de fabrică) care execută un
set de 400 de instrucţiuni, 7 Acum. A 0 7 Acum. B 0 S X H I N Z V C Reg. CCR

15 Acum. D 0
grupate în 4 pagini; Fanion report
Fanion depasire
15 Reg. X 0
- setul de registre pentru Fanion zero
15 Reg. Y 0 Fanion negativ
memorarea operativă a I-intreruperi
15 Reg. SP 0
datelor (fig. 1.3). Report BCD
15 Reg. PC 0 X-intreruperi
Acest set de registre include: Validare Stop
Fig. 1.3 Setul de registre ale HC11.
- două acumulatoare pe 8 biţi, numite acumulator A şi acumulator B, care formează împreună
acumulatorul D pe 16 biţi: acumulatorul A prezintă octetul superior, iar B – octetul inferior;
- două registre IX şi IY specifice - de indexare, însă concomitent pot servi şi ca registre de uz
general;
- registrul SP – indicatorul stivei;
- registrul PC – contorul de program;
- registrul CCR – registrul S X H I N Z V C

fanioanelor, care salvează starea


procesorului după fiecare operaţie
Biti de mascare Biti conditii aritmetice

şi totodată conţine un set de biţi cu S - blocheaza instructiunea C - reportul bituli MSB in operatii aritmetice fara semn.
STOP, daca S=1.

ajutorul cărora se reglementează X - mascheaza solicitarile


externe XIRQ, daca X=1.
V - depasire complementare 2 in operatii aritmetice
cu semn.

I - mascheaza toate Z - rezultat zero in operatii aritmetice, transfer, logie, s.a.


întreruperile interne şi cele solicitarile de intreruperi N - rezultat negativ in operatii aritmetice cu semn.
(interne si externe), daca
externe. I=1. H - report BCD din bitul 3 in 4 numai in operatia ADD.

Fig. 1.4 Registrul CCR


Setul de instrucţiuni include câteva
grupuri de instrucţiuni, majoritatea cărora sunt prezentate în tabelele următoare 1.1 -:- 1.5.
Instrucţiuni de transfer date Tabelul 1.1
Mnemonica Operaţia Funcţia
Transfer Memorie - Registru
LDAA (M) => Acum. A Transfer 1 octet in acumulator.
LDAB (M) => Acum. B
LDD (M, M+1) => Acum. D Transfer 2 octeţi in registru.
LDX (M, M+1) => reg. X
LDY (M, M+1) => reg. Y
LDS (M, M+1) => reg. SP
PULB SP+1 => SP; (M) => Acum. B Extragere din stivă.
PULA SP+1 => SP; (M) => Acum. A
SP+1 => SP; (M, M+1) => reg.
PULX X.
SP+1 => SP; (M, M+1) =>
PULY reg.Y.
Transfer Registru - Memorie
STAA Acum. A => (M) Transfer 1 octet din registru in
STAB Acum. B => (M) memorie.
STD Acum. D => (M, M+1) Transfer 2 octet din registru in
STX reg. X => (M, M+1) registru.
STY reg. Y => (M, M+1)
STS reg.SP => (M, M+1)
PSHB Acum. B => (M); SP-1 => SP; Salvare in stivă.
PSHA Acum. A => (M); SP-1 => SP;
Reg. X => (M, M+1); SP-1 =>
PSHX SP;
Reg. Y => (M, M+1); SP-1 =>
PSHY SP;
Transfer Registru - Memorie
TBA Acum. A => Acum. B Transfer 1 octet din registru in
TAB Acum. B => Acum. A registru
TXS Reg. X => SP Transfer 2 octet din acumulator
TYS Reg. Y => SP in memorie.
TSX SP => Reg. X
TSY SP => Reg. y
XGDX Acum. D < => Reg. X Schimb de date.
XGDY Acum. D < => Reg. Y
Instrucţiuni de prelucrare date Tabelul 1.2
Mnemonica Operaţia Funcţia
Operaţii cu un operand
DEC (M)-1 => (M) Decrement locatii de memorie şi registre.
DECA Acum. A -1 => Acum. A
DECB Acum. B -1 => Acum. B
DEX reg. X -1 => reg. X
DEY reg. Y -1 => reg. Y
DES reg. SP - 1 => reg. SP
INC (M)+1 => (M) Increment locaţii de memorie şi registre.
INCA Acum. A +1 => Acum. A
INCB Acum. B +1 => Acum. B
INX reg. X +1 => reg. X
INY reg. Y +1 => reg. Y
INS reg. SP + 1 => reg. SP
NEG 0 - (M) => (M) Negare
NEGA 0 - A => A
NEGB 0 - B => B
COM (~M) => (M) Inversie
COMA (~A) => (A)
COMB (~B) => (B)
CLR 0 => (M) Ştergere
CLRA 0 => (A)
CLRB 0 => (B)
Prelucrare de biţi
BCLR (M)&(~Masca) => (M) Resetare biţi
BSET (M) | (Masca) => (M) Setare biţi
ROL (M<<1) => (M) Deplasament la stânga. MSB => Bit C.
ROLA (A<<1) => A
ROLB (B<<1) => B
ROR (M>>1) => (M) Deplasament la dreapta. LSB => Bit C.
RORA (A>>1) => A
RORB (B>>1) => B
ASL (M<<1) => (M) Deplasament la stânga. MSB => Bit C.
ASLA (A<<1) => A
ASLB (B<<1) => B
ASLD (D<<1) => D
ASR (M>>1) => (M) Deplasament la dreapta. LSB => Bit C.
ASRA (A>>1) => A
ASRB (B>>1) => B
Continuare Tabel 1.2
LSL (M<<1) => (M) Deplasament la stânga. MSB =>
LSLA (A<<1) => A Bit C.
LSLB (B<<1) => B
LSR (M>>1) => (M) Deplasament la dreapta. LSB =>
LSRA (A>>1) => A Bit C.
LSRB (B>>1) => B
LSRD (D>>1) => D
Operaţii aritmetice
ADDA A+(M) =>A Adunare registru cu memoria.
ADDB B+(M) =>B
ADDD D+(M, M+1) =>D; A +(M) => A,
B+(M+1) => B.
ABA A+B =>A Adunare registru cu registru.
ABX X+B =>X
ABY Y+B =>Y
ADCA A+(M) + C =>A Adunare registru cu memoria şi
ADCB B+(M) +C =>B report.
DAA Bin => BCD Ajustare Bin in BCD.
SUBA A-(M) =>A Scadere memorie din registru.
SUBB B-(M) =>B
SUBD D-(M, M+1) =>D; A -(M) => A, B-
(M+1) => B.
SBA A-B =>A Scadere registru din registru.
SBCA A-(M) - C =>A Scadere memorie şi report din
SBCB B-(M) -C =>B registru.
MUL A * B => D Inmulţire.
IDIV D/F => F, rest => D. Impărţire, virgula după LSB.
FDIV D/F => F, rest => D. Impărţire, virgula înainte de MSB.
Operaţii logice
ANDA A & (M) =>A Conjuncţia
ANDB B & (M) =>B
EORA A  (M) =>A Suma modulul 2.
EORB B  (M) =>B
ORAA A | (M) =>A Disjuncţia
ORAB B | (M) =>B
Operaţii de comparare Tabelul 1.3
BITA A & (M) =>CCR Testare biţi
BITB B & (M) =>CCR
CBA A - B =>CCR Comparare 1 octet.
CMPA A - (M) =>CCR
CMPB B - (M) =>CCR
CPD D - (M) =>CCR Comparare 1 octet.
CPX X - (M) =>CCR
CPY Y - (M) =>CCR
TST (M) - 0 =>CCR Testare 1 octet.
TSTA A - 0 =>CCR
TSTB B - 0 =>CCR
Instrucţiuni de salt condiţionat Tabelul 1.4
Mnemonica Testare bit CCR Condiţia
BMI N =1 Rez. < 0
BPL N=0 Rez. >=0
BVS V=1 Depăşire.
BVC V=0 Fără depăşire.
BLT N  V =1 A < (M), dacă e CMPA M.
BGE N  V =0 A >= (M), dacă e CMPA M.
BLE Z + (N  V) =1 A <= (M), dacă e CMPA M.
BGT Z + (N  V) =0 A > (M), dacă e CMPA M.
BEQ Z =1, fara semn - N=x A = (M), dacă e CMPA M.
BNE Z=0, fara semn - N=x A <> (M), dacă e CMPA M.
BHI Z + C =0, fara semn - N=x A > (M), dacă e CMPA M.
BLS Z + C = 1, fara semn - N=x A <= (M), dacă e CMPA M.
BCC(BHS) C =0, fara semn - N=x A >= (M), dacă e CMPA M.
BCS(BLO) C = 1, fara semn - N=x A < (M), dacă e CMPA M.
Instrucţiuni de salt necondiţionat Tabelul 1.5
Mnemonica Operaţia Funcţia
JMP (M,M+1) => PC. Salt lung
JSR PCl => (Msp), SP -1 => SP; Apel lung subrutină
PCh => (Msp), SP -1 => SP;
(M) => PCh, (M+1) => PCl.
RTS SP +1 => SP, (Msp) => PCh; Returnare din subrutină
SP +1 => SP, (Msp) => PCl;

Instrucţiuni de salt necondiţionat Continuare Tabel 1.5


RTI SP +1 => SP, (Msp) => CCR; Returnare din întreruperi.
SP +1 => SP, (Msp) => A; SP
+1 => SP, (Msp) => B; SP +1
=> SP, (Msp) => Xl; SP +1 =>
SP, (Msp) => Xh; SP +1 =>
SP, (Msp) => Yh; SP +1 =>
SP, (Msp) => Yl; SP +1 =>
SP, (Msp) => PCh; SP +1 => SP,
(Msp) => PCl;
BSR PCl => (Msp), SP -1 => SP; PCh Apel scurt subrutină
=> (Msp), SP -1 => SP; (M) =>
PCh, (M+1) => PCl.
BRA PC+/-(M) => PC. Salt scurt.

1.3 Organizarea memoriei şi modurile de adresare.


Spaţiul de memorie al microsistemului este liniar cu volumul maxim de 64 KByte. Acest
spaţiu este comun atât pentru memorie, cât şi pentru registrele porturilor dispozitivelor
periferice.
Spaţiul de adrese este divizat în următoarele zone:
- RAM intern cu volumul de 256 byte cu adresele $00-$FF, pentru memorarea datelor
operative ale programelor;
- I/O registre interne cu adresele $1000-$103F, pentru porturile interne ale
microcontrolerului;
$0000
- RAM extern cu volumul de 24 RAM Intern
(256 bytes)

Kbyte cu adresele $2000-$7FFF, $0100

pentru memorarea datelor $1000


I/O Registre interne
(64 bytes)
operative ale programelor;
$2000
- vectori de întreruperi virtuali
(adiţionali) cu adresele $7FC0-
RAM Extern
$7FFF, pentru asigurarea pentru programe aplicative
(24576 byte)

legăturii dintre vectorii reali şi


subrutinele de prelucrare a
întreruperilor; $7FC0
Vectori intreruperi virtuali
Registrul Data Externa

- I/O registre externe cu adresele $8000


RAM Extern
D7 D6 D5 D4 D3 D2 D1 D0 R/W
rezervat pentru monitor BD7 BD6 BD5 BD4 BD3 BD2 BD1 BD0 $A200
$A000-$B600, pentru porturile (8192 byte)
Registrul Adresa si Control Externa

externe ale microcontrolerului $A000


I/O Registre Externe
(1536 bytes)
D7 D6 D5 D4 D3 D2 D1 D0 Write

RS BSTR BR/W BA4 BA3 BA2 BA1 BA0 $A400

(în cazul concret acest spaţiu e $B600


EEPROM Intern
(512 bytes)

limitat numai la 32 de porturi $B800 Ceas Timp Real (optional)


I/O Registre Externe
(2048 bytes)
adiţionale); D7 D6 D5 D4 D3 D2 D1 D0 Write

$C000 D7 D6 D5 D4 D3 D2 D1 D0 $BA00

- EEPROM intern cu adresele


ROM Extern
$B600-$B7FF, pentru stocarea pentru MicroLab monitor
(16384 bytes)

datelor în memorie
$FFFF

reprogramabilă (diverse Fig. 1.4 Mapa adreselor microsistemului.


caracteristici, tablouri, ş.a.);
- I/O registre externe suplimentare cu adresele $B800-$BFFF, pentru porturile externe ale
microcontrolerului (în cazul concret acest spaţiu e liber);
- ROM extern cu adresele $C000-$FFFF cu volum de 16 KByte pentru programul monitor
« Micro_Lab », care poate fi substituit la necesitate cu alt program, înscris pe alt cip de
ROM.
Microcontrolerul susţine următoarele moduri de adresare:
a) implicită; b) imediată;
c) directă; d) extinsă; e) indexată; f) relativă.
Adresare imediata
(cazul I)
Adresare implicita

Exemple:
Ai-2 Ai-2 LDAA #100,
LDAB #$255
Ai-1 LDAA #$FF
Ai-1
Ai Cod Operatie

Ai Cod Operatie
Ai+1 Date imediate

PC Ai+1 PC Ai+2

Ai+2

Adresare imediata
(cazul II)

Exemple:
CLRA, TSX, COMB Ai-2 Exemple:
LDD #$A00,
Fig. 1.5 Ai-1
LDX #$255
LDY #$FF

Ai Cod Operatie

Adresare directa Ai+1 Date imediate - octet superior

Ai+2 Date imediate - octet inferior

Ai+3

Ai-2 Fig. 1.6


Ai-1 Exemple:
LDAA $50,
STD $A0,
Ai Cod Operatie LDX $FE

Ai+1 Adresa Adresa:= $00...$FF

PC Ai+2

Fig. 1.7
Adresare indexata

Ai-2
Ai-1
Ai Cod Operatie

Ai+1 Indice

PC Ai+2

Exemple:
LDAA 10, X
Ab ADD $A0, X
STD $E5, Y

Reg. X:= Ab
Reg. Y:= Ab
Ak:=[X/Y]+Indice

Ak-2
Ak-1
Ak Operand

Ak+1
Ak+2

Fig. 1.9

Metoda de adresare implicită presupune că operandul instrucţiunii este deja cunoscut, de


exemplu poate fi un registru al procesorului sau un bit concret dintr-un registru, şi din cauza dată
nu este necesar de indicat adresa operandului (vezi fig. 1.5).
Metoda de adresare imediată presupune că operandul instrucţiunii este încadrat în
instrucţiune. Operandul este o constantă de 8 sau 16 biţi şi ca urmare pot fi 2 cazuri de
instrucţiuni cu lungimea de 2 şi 3 octeţi (vezi fig. 1.6). Un caz particular este dacă constanta
prezintă o adresă, de aceea constanta va fi din 16 biţi şi instrucţiunea va avea lungimea de 3
octeţi.
Metoda de adresare directă presupune că operandul se află într-o locaţie din memoria
RAM internă, adică o locaţie cu adresa $00 - $FF
Adresare extinsa
(vezi fig. 1.7).
Metoda de adresare extinsă presupune că
operandul se află într-o locaţie din memoria RAM
Ai-2
externă, porturi I/O, ROM, adică orice locaţie cu
Ai-1
adresa $100 - $FFFF (vezi fig. 1.8).
Ai Cod Operatie Exemple:
LDAA $1050,
STD $FFA0,
Ai+1 Adresa - octet superior
LDX $B0FE

Ai+2 Adresa - octet inferior Adresa:= $0000...$FFFF

PC Ai+3

Fig. 1.8
Metoda de adresare prin indexare presupune că operandul se află într-o locaţie din
memoria RAM internă sau externă, porturi I/O, ROM, adică orice locaţie cu adresa din tot
spaţiul de adrese $0000 - $FFFF (vezi fig. 1.9), însă această adresă se calculează ca suma
registrului de indexare IX sau IY şi indicele, care se conţine în instrucţiune.
Metoda de adresare relativă presupune calculul adresei de salt în instrucţiunile de salt
relativ de valoare curentă a contorului de program – PC în baza deplasamentului. Sunt două
cazuri:

Adresare relativa
(cazul I - deplasament pozitiv) Adresare relativa
(cazul I - deplasament negativ)

Ai-2
Ak-2
Ai-1
Ak-1
Ai Cod Operatie - salt relativ
PCi+1 Ak Cod Operatie
PCi Ai+1 deplasament
Ak+1
Ai+2
Ak+2
Exemple:
BRA *+$50 Exemple:
BLT $C026 BRA *-$50
BGE ALPHA+20 BLT $C026
BGE ALPHA-20
Ak-2 PCi+1:=PCi + Deplasament
Ai-2 PCi+1:=PCi - Deplasament
Ak-1
Ai-1
PCi+1 Ak Cod Operatie
Ai Cod Operatie - salt relativ
Ak+1
Ai+1 deplasament
Ak+2
PCi Ai+2

Fig. 1.10
Fig. 1.11
a) deplasamentul este pozitiv şi saltul se va efectua spre adrese mai mari (vezi fig. 1.10);
b) deplasamentul este negativ şi saltul se va efectua spre adrese mai mici (vezi fig. 1.11).
Fig. 1.12 Lista porturilor I/O interne (partea I)

1.4 Porturile I/O interne


Microcontrolerul M68HC11 are un set de porturi I/O interne, prin intermediul cărora se
efectuează controlul unităţilor periferice. Lista acestor porturi este prezente în figurile 1.12, 1.13.

Fig. 1.13 Lista porturilor I/O interne (partea II).

Acest set de registre ale porturilor I/O se divizează în următoarele subgrupe:


- registre pentru transferul nemijlocit date cu porturile PortA, PortB, PortC, PortD, PortE cu
adresele respective: $1000, $1004, $1006, $1008, $100A;
- registre pentru stabilirea direcţiei de transfer date în porturile PortA, PortB, PortC, PortD -
DDRA, DDRC, DDRD cu adresele respective: $1001, $1004, $1007, $1009;
- registre pentru configurarea şi controlul timerelor cu adresele respective: $100B,… $1027;
- registre pentru configurarea şi transferul nemijlocit date prin interfaţa SPI cu adresele
respective: $1028, $1029, $102A;
- registre pentru configurarea şi transferul nemijlocit date prin interfaţa SCI cu adresele
respective: $1028, $1029, $102A;
- registre pentru configurarea şi achiziţie date prin convertorul ADC cu adresele respective:
$1030, $1032,…, $1035;
- registre pentru configurarea procesorului ţi alocării memoriei cu adresele respective: $1038,
$1039,…, $103F.
Explicaţii pentru cele mai importante registre vor fi date în compartimentele următoare, iar
alte detalii sunt prezentate în referinţe [11..15].

1.5 Vectori de întreruperi reali şi virtuali


Microcontrolerul M68HC11 are un mecanism bine dezvoltat de întreruperi în baza căruia
se sesizează evenimentele din exterior şi interiorul sistemului pentru a efectua controlul în timp
real. Un moment cheie în acest mecanism î-l joacă vectorii de întreruperi. Prin intermediul
vectorilor se efectuează legătura dintre evenimentele apărute şi subrutinele, care prelucrează
aceste evenimente. Lista vectorilor este prezentă în figura 1.14.

Fig. 1.14
Datorită faptului că microsistemul „Micro-LAB” este destinat instruirii de proiectare şi
elaborare a programelor de control, este introdus un element nou, anume – vectori imaginari sau
virtuali. Din cauza că programul nou elaborat se încarcă în memoria externă RAM, iar vectorii
reali se află în zona de memorie ROM, ocupată de monitorul-debuger al „Micro-LAB”, este

$2000

Subrutina prelucrare
intreruperi A

RAM Extern
pentru programe aplicative
(24576 byte)

Subrutina prelucrare
intreruperi B

$7FC0
Vectori intreruperi virtuali

$8000
RAM Extern
rezervat pentru monitor
(8192 byte)

$A000
I/O Registre Externe
(1536 bytes)

$B600
EEPROM Intern
(512 bytes)

$B800
I/O Registre Externe
(2048 bytes)

$C000

ROM Extern
pentru MicroLab monitor
(16384 bytes)

$FFFF Vectori de intrerupere reali

Fig. 1.15. Conexiunea subrutinelor


cu vectorii de intreruperi

imposibil de efectuat legătura dintre vectorul de întreruperi şi subrutina de prelucrare a lor.


Pentru a soluţiona elegant această problemă, s-au introdus vectori de întreruperi virtuali, prin
intermediul cărora se efectuează legătura dintre vectorul de întreruperi şi subrutina de prelucrare.
Adică în vectorii reali sunt plasate adresele vectorilor virtuali, iar pe adresele vectorilor virtuali
utilizatorul plasează adresele subrutinelor de prelucrare. Cu alte cuvinte, vectorii virtuali
formează o punte dintre vectorii reali şi subrutinele de prelucrare a întreruperilor (vezi fig. 1. 15).
Pentru a realiza această punte în programul monitor vectorii sunt declaraţi în modul următor
(vezi fig. 1.16).
;*************************************************************
;********** Vectori de intreruperi **************
;*************************************************************
;-------------------------------------------------------------
; Definirea vectorilor virtuali
;-------------------------------------------------------------
VEC_VIRT .EQU $7FC1
VEC_SCI: .EQU VEC_VIRT ;SCI Serial System
VEC_SPI: .EQU VEC_SCI+3 ;SPI Transfer Complete
VEC_PAIE: .EQU VEC_SPI+3 ;Pulse Accumulator Input Edge
VEC_PAO: .EQU VEC_PAIE+3 ;Pulse Accumulator Overflow
VEC_TOI: .EQU VEC_PAO+3 ;Timer Overflow
VEC_TIC4: .EQU VEC_TOI+3 ;Timer IC4/OC5
VEC_TOC4: .EQU VEC_TIC4+3 ;Timer OC4
VEC_TOC3: .EQU VEC_TOC4+3 ;Timer OC3
VEC_TOC2: .EQU VEC_TOC3+3 ;Timer OC2
VEC_TOC1: .EQU VEC_TOC2+3 ;Timer OC1
VEC_TIC3: .EQU VEC_TOC1+3 ;Timer IC3
VEC_TIC2: .EQU VEC_TIC3+3 ;Timer IC2
VEC_TIC1: .EQU VEC_TIC2+3 ;Timer IC1
VEC_RTI: .EQU VEC_TIC1+3 ;Real Timer Intrerrupt
VEC_IRQ: .EQU VEC_RTI+3 ;IRQ' (External Pin)
VEC_XIRQ: .EQU VEC_IRQ+3 ;XIRQ' (Pseudo Nonmasc. Intr.)
VEC_SWI: .EQU VEC_XIRQ+3 ;SWI
VEC_IOT: .EQU VEC_SWI+3 ;Illegal Opcode Trap
VEC_CFR: .EQU VEC_IOT+3 ;COP Failure (Reset)
VEC_CCMF: .EQU VEC_CFR+3 ;COP Clock Monitor Fail
VEC_RES: .EQU VEC_CCMF+3 ;Reset
;-------------------------------------------------------------
; Definirea vectorilor reali
;-------------------------------------------------------------
.ORG $0FFD6
VEC_REAL:
.DW VEC_SCI ; Citire din SCI.
.DW VEC_SPI ; SPI Serial transfer complete
.DW VEC_PAIE ; Pulse Accumulator Input Edge
.DW VEC_PAO ; Pulse Accumulator Overflow
.DW VEC_TOI ; Timer overflow.
.DW VEC_TIC4 ; Timer output comp. OC5
.DW VEC_TOC4 ; Timer output comp. OC4
.DW VEC_TOC3 ; Timer output comp. OC3
.DW VEC_TOC2 ; Timer output comp. OC2
.DW VEC_TOC1 ; Timer output comp. OC1
.DW VEC_TIC3 ; Timer input capture IC3
.DW VEC_TIC2 ; Timer input capture IC2
.DW VEC_TIC1 ; Timer input capture IC1
.DW VEC_RTI ; Real timer intrerrupt
.DW VEC_IRQ ; IRQ
.DW VEC_XIRQ ; XIRQ
.DW I_SWI ; SWI
.DW VEC_IOT ; Illegal opcode
.DW VEC_CFR ; COP failure
.DW VEC_CCMF ; Clock monitor failure
.DW START ; Reset
;-----------------------------------------------------------------

Fig. 1.16 Declaraţia vectorilor în programul monitorului.

Deci, după cum este arătat în fig. 1.16 programul monitorului asigură jumătate de punte, adică de
la vectorul real la vectorul virtual. Pentru a asigura conexiunea deplină, în fiecare program al
utilizatorului trebuie să fie făcute definiţiile vectorilor virtuali, în care să fie plasate adresele
subrutinelor de prelucrare a fiecărei întreruperi (vezi fig. 1.17).
; . . . . . . . .

;*****************************************************************************
;************ Subrutine de prelucrare intreruperi **********************
;*****************************************************************************

;*****************************************************************************
;***************** Timer input/output OC & IC **********************
;*****************************************************************************
Int_OCn_ICm:
ldaa #OC1F|OC2F|OC3F|OC4F|OC5F|IC1F|IC2F|IC3F|IC4F
staa TFLG1 ; Se reseteaza toate fanionele
rti
;*****************************************************************************
;********** IRQ - intrerupere externa neidentificata **************
;*****************************************************************************
I_RTI: ldaa #$40 ; Real timer intrerrupt
staa TFLG2 ;
ldaa S_ALARM_1 ; Se inregistreaza
oraa #Err_2 | Err_3| Err_4 ; eroarea.
jmp RESTART
;*****************************************************************************
;********** IRQ - intrerupere externa neidentificata **************
;*****************************************************************************
I_IRQ:
ldaa S_ALARM_1 ; Se inregistreaza
oraa #Err_2 | Err_3| Err_4 ; eroarea.
jmp RESTART
;*****************************************************************************
;********** XIRQ - intrerupere externa neidentificata **************
;*****************************************************************************
I_XIRQ:
ldaa S_ALARM_1 ; Se inregistreaza
oraa #Err_2 | Err_3| Err_4 ; eroarea.
jmp RESTART
;*****************************************************************************
;***************** Illegal opcode **********************
;*****************************************************************************
I_IOC:
ldaa S_ALARM_1 ; Se inregistreaza
oraa #Err_0 ; eroarea.
jmp RESTART

; . . . . . . . .

;*****************************************************************************
; Vectori de intreruperi virtuali
;*****************************************************************************
.ORG $7FC1 ;
Vect_VIRT:
JMP I_SCI ;Citire din SCI.
JMP I_SPI ;SPI Serial transfer complete
JMP I_PAIE ;Pulse Accumulator Input Edge
JMP I_PAO ;Pulse Accumulator Overflow
JMP I_TOF ;Timer overflor.
JMP Int_OCn_ICm ;Timer output comp. OC5
JMP Int_OCn_ICm ;Timer output comp. OC4
JMP Int_OCn_ICm ;Timer output comp. OC3
JMP Int_OCn_ICm ;Timer output comp. OC2
JMP Int_OCn_ICm ;Timer output comp. OC1
JMP Int_OCn_ICm ;Timer input capture IC3
JMP Int_OCn_ICm ;Timer input capture IC2
JMP Int_OCn_ICm ;Timer input capture IC1
JMP I_RTI ;Real timer intrerrupt
JMP I_IRQ ;IRQ
JMP I_XIRQ ;XIRQ
JMP I_SWI ;SWI
JMP I_IOC ;Illegal opcode => Restart
JMP I_COP ;COP failure => Restart
JMP I_CMF ;Clock monitor failure => Restart
JMP START

.END START

Fig. 1.17 Definirea vectorilor in programul utilizatorului


1.6 Porturi de intrare/ieşire extinse
Microcontrolerul M68HC11 are un set restrâns de porturi I/O interne. Specificul
porturilor interne constă în faptul că interacţiune dintre microcontroler şi unitatea periferică este
controlată la nivel de program şi executată la nivel de hard. În realitatea aplicaţiile necesită un set
mai larg de porturi de intrare/ieşire, prin intermediul cărora se efectuează controlul tuturor
unităţilor periferice. O soluţie pentru depăşirea acestei probleme este crearea porturilor de
intrare/ieşire într-un număr mult mai mare decât porturile interne, utilizând spaţii de adrese
libere. În cele mai multe cazuri, inclusiv în „AFN MicroLab”, se recurge la un port extins
multiplexat, în care interacţiune dintre
Write Write
$A200 $A200
microcontroler şi unitatea periferică este
Ciclul de citire
controlată şi executată la nivel de program.
BA0...BA4
Portul extins este format dintr-un registru de
control şi adrese (adresa A200) şi un registru BR/W

bidirecţional de date (adresa A000). BSTR


Registru de control şi adrese conţine 5 biţi
BD0...BD7
pentru a adresa unităţilor periferice (A0-:- $A000

A4), un bit de comandă R/W – citire/scriere


Read
şi un bit STR – pentru sincronizarea $A000

schimbului de date. Registrul de date


Fig. 1.18. Citirea datelor din port extins
conţine opt biţi de date (D0 -:- D7) (vezi fig.
1.4). Diagramele de interacţiune ale
Write Write Write
portului extins sunt prezentate în $A000 $A200 $A200

Ciclul de Inscriere
figurile 1.18, 1.19.
BA0...BA4
Algoritmul de schimb de date
prin portul extins multiplexat se reduce BR/W

la următoarele acţiuni:
BD0...BD7
- se stabileşte adresa unităţii
BSTR
periferice;
- se stabileşte operaţia citire sau Write Write
$A200 $A200
înscriere;
Fig. 1.19 Inscrierea datelor în port extins.
- se setează datele pe liniile de date;
- cu ajutorul semnalului STR se formează un impuls, care prin frontul negativ se indică
finalizarea schimbului de date;
- portul se stabileşte în starea iniţială.
1.7 Portul de interacţiune cu convertorul analog-digital
Convertorul AD prezintă un convertor pe 8 biţi cu 8 canale multiplexate, care este
sincronizat de semnalul de sistem Eclock sau de un generator intern de tip RC. Acest convertor
consistă din 4 blocuri funcţionale (vezi fig. 1.20): portul E cu 8 intrări analogice; multiplexorul
analog; convertorul propriu-zis; unitatea de control şi memoria de stocare a rezultatelor.

Fig. 1.20 Structura convertorului analog-digital

Multiplexorul selectează o intrare analogică din cele 8 posibile ale portului E, care va fi
conectată la intrarea convertorului. Intrarea selectată este indicată in biţii CC, CB, CA ale
registrului de control ADCTL. Pinii portului E sunt permanent direcţionaţi ca intrări analogice,
astfel multiplexorul comută unul din pinii portului E la intrarea convertorului.
Conversia semnalului analogic de la intrarea selectată de multiplexor are loc în blocul
convertorului, care la rândul lui este format dintr-un convertor digital analog (CDA), un
comparator şi un registru al aproximărilor succesive (SAR). Fiecare conversie prezintă o
secvenţă din 8 comparări, începând cu bitul MSB – cel mai semnificant. Fiecare comparare

Fig. 1.21. Structura registrului de stare/control ADCTL.


determină valoarea unui bit, care se va salva in registrul aproximărilor succesive SAR. Când
secvenţa de conversie este completă, conţinutul SAR se salvează intr-un registru de date
ADR0-:- ADR3.
Toate operaţiile de control ale convertorului se efectuează prin intermediul biţilor
registrului de control ADCTL. Biţii CC, CB, CA ale registrului de control ADCTL indică codul
canalului care va fi selectat de către multiplexor, iar cu bitul CD =1 – convertorul se comută la
canalele de testare. Odată cu înscrierea codului canalului se va da start la operaţiunea de
conversie. In afară de operaţiile de sus registrului de control ADCTL mai conţine doi biţi pentru
stabilirea modului de conversie şi starea procesului de conversie: conversia decurge sau s-a
finalizat. Registrul de stare/control ADCTL are structura prezentată în fig. 1.21. Deci, biţii
CA,CB,CC – conţin numărul canalului; bitul CCF (Conversion Complete Flag) – reflectă starea
procesului de conversie; biţii SCAN şi MULT reflectă modurile de conversie, care sunt explicate
mai jos.
1) SCAN = 0, MULT = 0 – modul cel mai simplu, care constă în efectuarea unei singure
conversii pe canalul indicat (conversia se lansează cu înscrierea codului canalului în ADCTL);
2) SCAN = 0, MULT = 1 – modul care constă în efectuarea a câte o conversie, începând cu
canalul 0 până pe canalul 3 (conversia se lansează cu înscrierea codului canalului în ADCTL);
3) SCAN = 1, MULT = 0 – modul care constă în efectuarea a conversiei continue pe canalul
indicat (conversia se lansează cu o singură înscriere a codului canalului în ADCTL);
4) SCAN = 1, MULT = 1 – modul care constă în efectuarea a conversiei continue, începând cu
canalul 0 până pe canalul 3 (conversia se lansează cu o singură înscrierea codului canalului în
ADCTL).

Fig. 1.22. Succesiunea operaţiilor de conversie a datelor.

In fig. 1.22 este reflectată succesiunea de conversie a datelor în modul 2. Dacă SCAN =
1, atunci conversia va fi continuă şi va reflecta modul 4.
1.8 Portul de comunicare serială - SCI
Portul serial de comunicare - SCI prezintă o interfaţă asincronă de recepţie/transmisie
date, care funcţionează ca un subsistem independent. SCI are un format standard (un start bit,
8/9 biţi de date şi un stop bit) şi o multitudine de rate de transmisie. Receptorul şi emiţătorul sunt
independente cu excepţia ratei de transmisie, care e unică pentru ambele (vezi fig. 1.23 – schema
de transmisie date). Portul SCI suportă transmiterea datelor printr-o singură linie: RxD (PD0) –
recepţie şi TxD (PD1) – transmisie date.
Funcţionarea portului SCI este gestionată de trei registre de configurare. Două registre de
control (SCCR1 şi SCCR2) se utilizează pentru configuraea modurilor de funcţionare a portului.
Registrul ratei de transmisie (BAUD) selectează prescalerul şi dictează rata de transmisie.
Fiecare bit din registrul de control SCCR1 prezintă un fanion sau un bit de comandă, iar biţii din
SCCR2 validează intreruperile generate de situaţii anumite. Registrul de stare SCSR reflectă
starea curentă a portului printr-un set de fanioane: TRDE, RDRF, IDLE,ş.a.
Registrul de date (SCDR) este format din două register independente – registrul de transmisie şi
registrul de recepţie. Accesul la aceste două registre e canalizat de operaţia de citire sau scriere în

Fig. 1.23 Schema de transmisie date


SCDR. Dacă se utilizează formatul din 9 biţi, atunci biţii R8 şi T8 din SCCR1 se adaugă ca al 9-
lea bit la recepţie sau transmisie respectiv. Ambele registre de date sunt cuplate la registrele de
conversie serial-paralel şi innvers. Când datele sunt inscrise în SCDR se transformă în cod serial,
având ieşire la pinul TxD din portul D (fig. 1.23).
În mod similar, când datele sunt recepţionate, din cod serial obţinut de la intrarea RxD se
transformă în cod paralel şi dacă registrul de deplasament s-a completat, se stochează în registrul
SCDR (canalul de recepţie).
Capitolul 2. MEDIU INSTRUMENTAL de ELABORARE a
PROGRAMELOR MICROSISTEMULUI „AFN Micro_LAB”
2.1 Conexiunea „AFN Micro_LAB” cu calculatorul personal
O latură deosebit de importantă în proiectarea şi elaborarea programelor (softului) pentru
microcontroloare încorporate (încapsulate) constă în faptul că el, microsistemul nu are resurse
mari de memorie, nici dispozitive periferice de interacţiune cu utilizatorul şi din această cauză nu
se creează cu ajutorul lui programe. De regulă, această problemă se rezolvă cu ajutorul
calculatoarelor personale, care au resurse necesare şi satisfăcătoare. Ca urmare, apare necesitatea
de a transfera programele elaborate în memoria microsistemului. Există mai multe căi de
soluţionare a problemei în cauză:
a) formarea unui cip de ROM, care se încorporează în microsistem;
b) transferul programului în RAM, EPROM sau în memoria „flash” printr-un canal paralel;
c) transferul programului în RAM, EPROM sau în memoria „flash” prin canal serial RS-232;
d) transferul programului în RAM, EPROM sau în memoria „flash” printr-un canal serial
special, numit BDM (Background Debuging Mode) [15, 17].
Primele trei căi au devenit deja tradiţionale, iar ultimul e un mijloc modern, care prevede
în microsistem un nucleu – BDM, care permite executarea programului pe microsistem în regim
„pas cu pas” cu monitorizarea lui de pe calculatorul personal.
Pentru microsistemul „AFN Micro_LAB” este utilizat cazul transferului programului în
RAM extern prin canal serial RS-232. Schema de conexiune este prezentă în fig. 2.1.

S1 Act. 1
AFN
Display Sn Act. n
MicroLab
Ac.1 Indicator

amu
Ac. n Indicator
PC (IBM)
UART

RS-232
RS-232

tastatura
şoricel

Fig. 2.1 Schema de conexiune a microsistemui cu calculatorul personal .


În conformitate cu schema dată calculatorul personal are o dublă destinaţie de a elabora, simula
şi încărca programele microsistemului, pe de o parte, şi de interacţiona cu microsistemul pe
parcursul funcţionării microsistemului. Microsistemul are destinaţia de a executa programe de
achiziţie date de la senzori şi de a efectua controlul şi acţionările respective asupra organelor de
acţionare, de a comunica în sensul recepţiei comenzilor şi transmiterii rezultatelor în calculatorul
personal.

2.2 Tehnologia de elaborare a programelor în mediul instrumental al


microsistemului „AFN Micro_LAB”
La etapa actuală sunt recunoscute trei tehnologii de elaborare a programelor pentru
calculatoare, inclusiv şi pentru microcontroloare încapsulate:
- tehnologia tradiţională, care cuprinde etapele de editare, translare, creare şi editare legături între
module de program şi rulare a programului, care se efectuează cu un set de programe separate;
- tehnologia „Turbo”, care cuprinde aceleaşi etape din tehnologia tradiţională, cu excepţia că
toate programele asociate etapelor de
elaborare sunt unite sub controlul Start

unui program integrat de


monitorizare a procesului de Editare text program

elaborare, ceea ce permite majorarea


Compilare
eficienţei; Fişiere *.C, *.asm

- tehnologia „Visio” este o


Creare program executatnt
dezvoltare a tehnologiei „Turbo”, cu opţiuni de rulare

care permite crearea programelor


Analiză erori, restructurare
sursă nu numai în limbaje Rulare program
program, proiect
tradiţionale de programare, ci un
Da
constructor de componente vizuale Erori ?

de formare a algoritmilor viitorului Nu

program. Recompilare program


fără opţiuni de rulare
Microsistemul „AFN
Micro_LAB” este înzestrat cu Înscriere program în
Memorie EPROM
sisteme instrumental de elaborare a
programelor de tip „Turbo”. Schema Fig. 2.2
tehnologică de elaborare a programelor se prezintă ca un proces iterativ, format din câteva etape
şi care se finalizează cu înscrierea programului definitivat în memoria ROM/EPROM a
microsistemului (vezi fig. 2.2). Vom analiza două medii instrumentale, care au aceiaşi schemă
tehnologică (fig. 2.3): primul pentru elaborarea programelor în limbaj de asamblare şi al doilea -
pentru elaborarea programelor în limbajul C – IAR EWB va fi descris în compartimentul 2.3.
La baza primului sistem instrumental stă programul „UltraEdit are posibilităţi extinse de
editare a textelor şi de a lansa şi alte programe afiliate. Acest program joacă două roluri
prezentate în fig. 2.3: program coordonator şi editor de texte ale programelor. Programul
„UltraEdit” permite crearea şi editarea aşa numitelor proiecte, care includ în sine un set de
fişiere. Programul are câteva ferestre, în care se prezintă lista de fişiere din proiect, textele
programelor amplasate în fişiere şi alte ferestre auxiliare (fig. 2.4).
Programul „UltraEdit” are un meniu dezvoltat ce permite o prelucrare eficientă a
textelor programelor, permite colorarea conţinutului textului programelor pentru evidenţierea
instrucţiunilor, pseudo-instrucţiunilor, variabilelor, constantelor, ş.a. O latură importantă a
acestui program este opţiunea meniului „Comenzi avansate” (Advanced). Cu ajutorul acestei
opţiuni se lansează programele necesare pentru elaborarea programului pentru microsistem.
Translarea programelor proiectului deschis se efectuează prin acţionarea „Compilare
OBJ” sau „Compliare BIN” din opţiunea „Advanced” a meniului. Aceasta duce la lansarea
programului „TBASM” – translatorului din limbajul de asamblare pentru diverse familii de
microprocesoare, inclusiv familia M68HC11.
Raportul despre rezultatul translării programului se prezintă într-o fereastră aparte, în
care se menţionează, dacă translarea s-a finalizat cu succes sau în caz contrar se afişează lista de
erori. Această listă descrie în detaliu tipul erorii, cu ce instrucţiune sau variabilă este asociată şi
în ce fişier şi care linie de program se află, după cum e prezentat în fig. 2.3.
Crearea programelor complexe necesită utilizarea librăriilor. Librăriile prezintă fişiere
cu organizarea internă specială, care conţin directorul modulelor şi propriu-zis modulele de
program, care pot fi incluse în diverse programe. Librăriile sunt de două tipuri: de sistem şi
aplicative. Primul tip include module de programe, care sunt utilizate în majoritatea aplicaţiilor,
de exemplu, module de calcul a funcţiilor matematice, module de transformare a datelor dintr-o
formă în alta, iar librăriile utilizatorului conţin module cu funcţii mai complexe, dar specifice,
pentru domenii aparte, de exemplu, module de achiziţie date pentru unul sau mai multe canale,
filtrarea datelor achiziţionate, module de acţionare a diverselor dispozitive, ş.a.
Programul coordonator - EWB

Program Program Program Program Program Program


EDITOR Translator LINKER SIMULATOR LOADER- WRITER-
Textul DEBUGER EPROM
programului

Fişier Program- Program-


obiect (*.obj) executant (*.bin)
Fişier Librarie
(*.lib)
Fişier Program-
sursă (*.asm) Fişier Program- Fişier Mapa
listing (*.lst) adrese (*.map)

Program BIBLIOTECAR

Fig. 2.3 Schema tehnologică de elaborare a programelor.


Fig. 2.4 Interfaţa sistemului instrumental.

De regulă, fişierul listării se include în proiect şi se vizualizează pentru a verifica


rezultatul de translare . Deseori, se comit erori asociate de sintaxa instrucţiunilor. În scopul
simplificării analizei şi corecţiei erorilor,
se apelează la ajutor – la un document tip
”HELP”, în care se explică toate laturile
formării programelor pentru
microcontrolerul HC11 în limbaj de
asamblare şi C. Apelul documentului se
efectuează cu programul „WinHelp”, care
lansează prin acţionarea „Ajutor HC11”
din opţiunea „Advanced” a meniului (vezi
fig. 2.5).
Rularea programului elaborat
recent se poate efectua în două moduri: a) Fig. 2.5 Interfaţa documentului “Ajutor HC11”.
prin simulare; b) prin interpretare directă pas cu pas, fiind încărcat pe microsistem. Rularea
programului prin simulare se efectuează cu programul „HC_Simulator”, care se lansează prin
acţionarea „Simulare HC11” din opţiunea „Advanced” a meniului. Aceasta duce la lansarea
programului „HC_Simulator” (vezi fig. 2.6).

Fig. 2.6. Interfaţa simulatorului.

Acest program are un set de ferestre, în care se afişează listingul programului, valorile
registrelor de bază, valorile registrelor porturilor I/O, numele şi valorile unui set de variabile
indicat. Rularea programului se poate efectua atât pas cu pas, cât şi în baza punctelor de oprire
stabilite de utilizator în punctele-cheie ale programului. Procesul de rulare este urmărit pe
fereastra cu listingul programului, în care o linie marcată reflectă instrucţiunea curentă şi
concomitent pe ferestrele cu valorile registrelor, variabilelor, porturilor I/O.
Rularea se efectuează cu scopul verificării corespunderii programului algoritmului
propus. Dacă pe parcursul rulării se observă în program nereguli sau diverse erori şi abateri de la
algoritm, atunci se recurge la modificarea necesară, uneori cardinală a programului. Deci, se
revine la etapele precedente de creare a programelor şi în rezultatul unui număr de iteraţii se
ajunge la programul scontat.
2.3 Tehnologia de elaborare a programelor în mediul instrumental IAR EWB

Sistem instrumental „IAR EWB” prezintă un sistem tip Turbo pentru elaborarea
programelor micro controloarelor încapsulate cu posibilităţi de editare a textelor surse, descrise
în limbajul C, cu posibilităţi extinse de a lansa şi alte programe pentru realiza toată schema
tehnologică (fig. 2.3). Programul „IAR EWB” permite crearea şi editarea aşa numitelor proiecte,
care includ în sine un set de fişiere, are câteva ferestre, în care se prezintă lista de fişiere din
proiect, textele programelor amplasate în fişiere şi alte ferestre auxiliare (fig. 2.7).
În mod similar cu sistemul instrumental precedent sunt posibilităţi de inspecta şi edita textul din

Fig. 2.7 Interfaţa programului IAR EWB

toate fişierele proiectului. Cu ajutorul comenzilor din meniu sau butoanelor de comandă se vor
lansa procedurile de translare, creare a programelor executive în conformitate cu schema
tehnologică. Raportul despre rezultatul translării programului se prezintă într-o fereastră aparte
„Messages”, în care se menţionează, dacă translarea s-a finalizat cu succes sau în caz contrar se
afişează lista de erori. Această listă descrie în detaliu tipul erorii, cu ce instrucţiune sau variabilă
este asociată şi în ce fişier şi care linie de program se află.
Sistemul instrumental „IAR EWB” include un program-debuger dezvoltat, numit „CSPY”, care
permite rularea programelor prin simularea lor pe calculator PC (fig. 2.8). Acest program
rulează programul la nivelul instrucţiunilor programului sursă în limbajul C şi permite
Fig. 2.8. Rularea programului la nivel de instrucţiuni C.

executarea lui instrucţiune cu instrucţiune, urmărind variabilele şi structurile de date ale


programului. Rularea programului la nivel de instrucţiuni C e cea mai rapidă şi uşoară
modalitate de elaborare a programelor pentru părţile mai puţin critice ale programului fără a ne
deranja cum se va implementa acest program în coduri de Motorola M68HC11.

Fig. 2.9 Rularea programului la nivel de instucţiuni assembler.


Programul „CSPY” are o facilitate de rulare la nivel de instrucţiuni de asembler a
programului elaborat în limbajul C, care permite executarea lui pe paşi a câte o instrucţiune de
asembler. În această modalitate de rulare a programului se poate vizualiza textul programului în
formă mixtă – formată din instrucţiuni ale limbajului C, urmat de instrucţiuni în limbajul
asembler, care sun echivalentul instrucţiunii ale limbajului C. Pe parcursul rulării programului se
pot monitoriza registrele şi memoria microcontrolerului. Rularea programului la nivel de
instrucţiuni asembler permite focusarea atenţiei la secţiunile cele mai critice ale programului şi
asigură verificarea precisă înainte de a înscrie programul în memoria microcontrolerului.
Capitolul 3. LUCRĂRI DE LABORATOR DE ELABORARE A
PROGRAMELOR MICROSISTEMULUI „AFN Micro_LAB”
3.1 Lucrarea Nr. 1. Studiul tehnologiei de elaborare a programelor în mediul
instrumental al microsistemului „AFN Micro_LAB” şi arhitecturii microcontrolerului
M68HC11
Generalităţi.
Microsistemul „AFN Micro_LAB” este înzestrat cu sisteme instrumentale de elaborare a
programelor de tip „Turbo”. Schema tehnologică de elaborare a programelor se prezintă ca un
proces iterativ, format din câteva etape şi care se finalizează cu înscrierea programului definitivat
în memoria RAM/ROM/EPROM a microsistemului (vezi fig. 2.2).
Scopul lucrării : Lucrarea curentă are scopul de a familiariza studentul cu tehnologia de
elaborare a programelor în mediul instrumental al microsistemului „AFN Micro_LAB” în
limbajele C şi asembler şi de a însuşi setul de instrucţiuni, spaţiul de adrese şi modurile de
adresare ale microcontrolerului M68HC11.
Pentru efectuarea cu succes a lucrării se recomandă de îndeplinit următoarele sarcini:
I. Din sursele recomandate de găsit răspuns la următoarele întrebări:
 Care sunt etapele de elaborare a unui program pentru microcontrolere;
 Care este sensul tehnologiilor tradiţionale, „Turbo” şi „Visio”;
 Cum se aplică tehnologia „Turbo” de monitorizare a procesului de elaborare a
programelor pentru microcontrolerul M68HC11;
 Esenţa programelor în formă de cod sursă, listare, cod obiect şi cod binar ?
 Care este schema de interacţiune dintre calculatorul PC şi microsistemului „AFN
Micro_LAB” ?
 Care sunt modurile de funcţionare ale monitorului microsistemului „AFN
Micro_LAB” ?
 Cum se încarcă un program elaborat în memoria microsistemului „AFN
Micro_LAB” ?
 Cum se rulează un program în microsistemul „AFN Micro_LAB” ?
 Cum se execută un program în microsistemul „AFN Micro_LAB” ?
 Care sunt tipurile de instrucţiuni ale microcontrolerului M68HC11 ?
 Modurile de adresare şi modalitatea de aplicare a lor.
 Cum se divizează spaţiul de adrese ale microcontrolerului M68HC11 ?
 Structura generală a unui program în limbaj de programare asamblor al
microcontrolerului M68HC11 ?

II.De elaborat exemple de programe simple cu o structură liniară în limbajul C şi de


asamblare al microcontrolerului Motorola HC11 şi de executat următoarele:
 de realizat exemple cu ajutorul „Micro-LAB”-lui, utilizând modurile de adresare
imediat, direct şi extins;
 de rulat aceste exemple de programe şi de studiat sensul instrucţiunilor şi modurilor
de adresare;
 de realizat exemple cu ajutorul „Micro-LAB”-lui, utilizând modurile de adresare
indexat şi relativ;
 de rulat aceste exemple de programe şi de studiat sensul instrucţiunilor şi modurilor
de adresare;
 de format raportul pe lucrarea curentă, care să includă textul explicativ al exemplelor,
listingul programelor cu comentarii;
 de dat interpretare a rezultatelor obţinute.
3.2 Lucrarea Nr. 2. Descrierea şi implementarea algoritmilor ramificaţi şi ciclici în
limbaj C şi de asamblare
Generalităţi.
Programul în limbajul de asamblare reprezintă o succesiune monotonă de instrucţiuni,
care face imposibil a observa structura algoritmului descris (ramificări, cicluri, subprograme).
Există situaţii frecvente, când este necesară întreruperea execuţiei consecutive şi transferarea
controlului la o altă secvenţă din program. Aceste salturi ale execuţiei pe secvenţe pot fi
efectuate în mod condiţionat sau necondiţionat cu ajutorul instrucţiunilor tradiţionale de salt:
BR, JMP, BNE ş. a. Practica ne demonstrează că în asemenea cazuri succesiunea de instrucţiuni
din asamblor «camuflează» structura logică a algoritmului (format din ramificări, cicluri,
subprograme etc.).
Algoritmii cu ramificări se realizează în funcţie de condiţiile de ramificare a proceselor
de calcul, care sunt descrise în limbajele de programare cu ajutorul expresiilor relaţionale sau
logice. Limbajul de asamblare nu conţine astfel de mecanism pentru descrierea condiţiilor de
ramificare şi din această cauză aceste condiţii se reflectă printr-o serie de comparări. Pentru a
simplifica realizarea ramificărilor, se descrie în mod formalizat în modul următor :
< Ramificarea>::=IF < condiţiile de ramificare >
THEN <bloc_THEN> [ ELSE <bloc_ELSE>] ENDIF
unde:
IF - începutul ramificatorului;
THEN - începutul blocului de instrucţiuni, care se va executa, dacă condiţia are valoarea logică
"adevărat";
ELSE - începutul blocului de instrucţiuni, care se va executa în caz contrar (condiţia are valoarea
"fals");
ENDIF - sfârşitul ramificatorului.
Deci, în blocul THEN se va descrie secvenţa de instrucţiuni ale asamblorului, când
expresia relaţională dată va avea valoarea "adevărat".In mod similar blocul ELSE va conţine
succesiunea de instrucţiuni, ce se va executa în cazul contrar.
Realizarea ramificărilor se poate efectua în baza a schemelor tipice de organizare a

Cazul 1: condiţie simplă REL1. Cazul 2: condiţie compusă


(REL1 OR REL2)
IF REL1 ANALIZA REL1 IF REL1 ANALIZA REL1
THEN NU M2 OR REL2 DA M1
----------- M1: ----------- THEN ANALIZA REL2
Blocul THEN Blocul THEN NU M2
----------- ------------ ------------ M1: -----------
ELSE JMP M3 Blocul THEN Blocul THEN
----------- M2: ----------- ----------- ------------
Blocul ELSE Blocul ELSE ELSE JMP M3
----------- ------------ ----------- M2: ----------
ENDIF M3: - - - - - Blocul ELSE Blocul ELSE
----------- ------------
ENDIF M3: - - - - -

ramificărilor cu condiţii simple şi compuse şi generare a codului de maşină echivalent.


In schemele date se folosesc următoarele notaţii:
REL1, REL2, REL3 – expresii a condiţiilor simple; ANALIZA - instrucţiune de analiză
(comparaţie) a condiţiilor simple (de regulă, CMP, TST, BIT, TEST); M1 - marca începutului
blocului <THEN); M2 - marca începutului blocului <ELSE>; M3 - marca sfârşitului ramificării;
MA - marca auxiliară; DA - instrucţiune de salt condiţionat, care se execută, când condiţia are
valoarea "adevărat"; NU - instrucţiune de salt condiţionat, care se executa, când condiţia are
valoarea "fals".
Deseori apare necesitatea de a selecta pentru execuţie o secvenţă de instrucţiuni din trei
sau mai multe secvenţe posibile (alternative). Această selecţie poate fi efectuată cu ajutorul
ramificărilor încapsulate. Ramificări încapsulate se numesc ramificările, în care blocurile THEN
şi ELSE ale instrucţiunii IF conţin alte instrucţiuni de ramificare IF (vezi detalii în cap. I din
[23]).
Structurile ciclice ale algoritmilor reflectă acţiuni (operaţii), care se execută de mai multe
ori. Existenţa în limbajele de programare a mijloacelor de descriere a structurilor ciclice, oferă
posibilitatea prezentării programelor într-o formă mai compactă şi cu fiabilitate sporită. Vom
analiza mijloacele de descriere a structurilor ciclice folosite în asamblor. Există câteva tipuri de
cicluri: a) cu postcondiţii, în care analiza condiţiilor se efectuează după execuţia corpului
ciclului; b) cu precondiţii, în care se analizează condiţiile înainte de execuţia corpului ciclului
(sau în interiorul corpului); c) cu contor, în care numărul de repetări este cunoscut sau poate fi

Cazul 1: condiţie compusă Cazul 2: condiţie compusă


(REL1 OR REL2) (REL1 AND REL2)
REPEAT M1: REPEAT M1:
----------- ------------ ------------- -------------
Corp ciclu Corp ciclu Corp ciclu Corp ciclu
------------ -------------- ------------- --------------
UNTIL REL1 ANALIZA REL1 UNTIL REL1 ANALIZA REL1
DA M2 NU MB
OR REL2 ANALIZA REL2 AND REL2 ANALIZA REL2
DA M2 DA M2
ENDREP MB: JMP M1 ENDREP MB: JMP M1
M2: --------------- M2: -------------

calculat preliminar. Asemănător ramificărilor realizarea ciclurilor se poate efectua în baza


schemelor tipice de organizare cu condiţii simple şi compuse şi generare a codului de maşină

Cazul 3: Ciclu LOOP cu condiţie Cazul 4: Ciclu LOOP cu condiţie


compusă (REL1 OR REL2): compusă (REL1 AND REL2):

LOOP M0: -------------- LOOP M0: --------------


WHEN REL1 ANALIZA REL1 WHEN REL1 ANALIZA REL1
DA M2 NU M1
OR REL2 ANALIZA REL2 AND REL2 ANALIZA REL2
EXIT DA M2 EXIT DA M2
----------- M1: --------- ----------- M1: ---------
Corp ciclu Corp ciclu Corp ciclu Corp ciclu
----------- ------------ ----------- ------------
ENDLOOP JMP M0 ENDLOOP JMP M0
M2: ------------ M2: ------------

echivalent (vezi detalii în cap. II din [23]).

In realitate un ciclu poate avea o structură mai complicată nu numai corp din secvenţe
liniare sau ramificate, ci poate să conţină unul sau câteva cicluri de tip diferit. Corpul ciclului
interior trebuie să se conţină în întregime în corpul ciclului exterior. Astfel de structuri ciclice se
numesc cicluri încapsulate. In principiu ciclurile se pot îmbina în diferite nivele de atâtea ori de
cât e necesar (vezi detalii în cap. II din [23]).
Scopul lucrării : Lucrarea curentă are scopul de a familiariza studentul cu metodele şi
procedeele de organizare a algoritmilor cu ramificări şi cicluri şi de însuşire a tehnicii de
implementare a acestor tipuri de algoritmi în limbajul C şi de asamblare.
Pentru efectuarea cu succes a lucrării se recomandă de îndeplinit următoarele sarcini:
I. Din sursele recomandate de găsit răspuns la următoarele întrebări:
 Cum se descriu condiţiile de ramificare cu ajutorul expresiilor relaţionale ?
 Enumeraţi operaţiile utilizate în expresiile relaţionale.
 Cum se descriu condiţiile complexe de ramificare ? Care este rolul operaţiilor logice ?
 Cum se descrie o ramificare simplă în asamblor structurat şi în asamblor simplu ?
 Cum se descriu ramificările cu blocuri scurte şi lungi în asamblorul structurat şi care
este echivalentul lor în asamblorul simplu ?
 Cum se descriu ramificările cu condiţii compuse complexe în asamblorul structurat ?
 Care sunt regulile de formare a ramificărilor cu condiţii legate prin operaţia logică –
disjuncţia sau conjuncţia ?
 Care sunt regulile de formare a ramificărilor cu condiţii legate prin operaţiile logice -
disjuncţia şi conjuncţia ?
 Ce numim ramificări încapsulate ?
 Care sunt regulile de formare a ramificărilor încapsulate ?
 Câte tipuri de cicluri cunoaşte-ţi ? Care este diferenţa dintre ele ?
 Care este schema-bloc a ciclului cu postcondiţie ?
 Cum se descrie un ciclu cu postcondiţie în asamblor structurat şi care este
echivalentul lui în asamblor simplu ?
 Cum se descrie ciclul de tipul REPEAT cu condiţii complexe ?
 Care este echivalentul ciclului cu postcondiţii complexe în asamblor simplu ?
 Care este schema-bloc a ciclului cu precondiţie ?
 Cum se descrie un ciclu cu precondiţie în limbaj C şi care este echivalentul lui în
asamblor simplu ?
 Cum se descrie ciclul de tipul LOOP cu condiţii complexe ?
 Care este echivalentul ciclului cu precondiţii complexe în asamblor simplu ?
 Ciclul de tipul LOOP cu două condiţii separate: care e specificul lui ?
 Cum se poate organiza un ciclu de tipul LOOP infinit ?
 In ce cazuri se poate utiliza astfel de ciclu ?
 Care este specificul ciclului cu contor ?
 Ce se poate de folosit în calitate de contor în astfel de cicluri ?
 Cicluri incluse: cum se descriu ele în limbaj C ?
 Care sunt regulile de organizare a ciclurilor incluse în asamblor simplu ?
II. De selectat din capitolele II şi III din [23] câte două exemple de programe ramificate
(cu condiţii simple şi compuse) şi două exemple de programe cu cicluri de tipul
indicat de laborant cu condiţii simple şi compuse şi un exemplu de ciclu încapsulat şi
de realizat următoarele lucrări:
- de transcris exemplele în limbajul C şi de asamblare ;
- de realizat şi de rulat exemplele date cu ajutorul „Micro-LAB”-lui;
- de analizat codul generat de compilatorul C şi programele transcrise manual ;
- de format raportul pe lucrarea curentă, care să includă textul explicativ al
exemplului, listingul programului cu comentarii;
- interpretarea rezultatelor obţinute.

3.3 Lucrarea Nr. 3. Descrierea şi implementarea programelor modulare în limbaj C


şi de asamblare
Generalităţi.
Folosirea principiului modular la proiectarea şi descrierea programelor contribuie la
reducerea esenţială a cheltuielilor pentru crearea, rularea şi exploatarea lor, făcându-le, totodată,
mai înţelese (citabile) pentru programatori. Modulul de program constituie un mijloc
fundamental al programatorilor şi poate fi studiat sub diverse aspecte. Unul dintre ele este legat
de descompunerea problemelor în probleme mai simple şi independente, care se pot realiza în
module de program conform tehnologiei moderne de proiectare descendentă (TOP-DOWN) şi
programării structurate. Alt aspect îl constituie reprezentarea modulului de program ca element
de structură a procesului de calcul. Schimbul de date între module este foarte important,
deoarece în utilizarea principiului modular un loc de frunte îl ocupă coordonarea (convenţia)
protocoalelor schimbului de date dintre module. Acceptarea unor reguli (convenţii) unice
permite să reducem probabilitatea apariţiei erorilor în programe.
Există o serie întreagă de procedee aplicabile la schimbul de date şi la interacţiunea între
modulele de program. In limbajele de nivel înalt (FORTRAN, PASCAL, C ş.a.) sunt realizate în
diferite moduri şi sunt folosite variate mijloace, uneori specifice limbajului concret, însă deseori
se limitează doar la câteva procedee, ceea ce împiedică folosirea mai eficientă a arhitecturii
calculatorului. In limbajele de asamblare există altă extremă, care, pe de o parte, permite
utilizarea la maximum arhitectura calculatorului, iar pe de altă parte, o asemenea "libertate" face
dificila proiectarea programelor modulare.
De aceea este necesar de găsit o soluţie de compromis: un set de procedee unificate ce ar
permite utilizarea mai eficientă a arhitecturii microprocesoarelor. Vom analiza module de
program cu diferite interfeţe, inclusiv şi interfeţe asamblor - limbaje de nivel înalt. De regulă,
modulele de program acţionează în interesele unui sau mai multor programe, de aceea modulul
de program poate constitui şi un mijloc de reprezentare a acţiunilor complexe. Modulul de
program, care apelează la alt modul, conţine o instrucţiune cu ajutorul căreia se face apelul. Din
acest punct de vedere distingem modulul de program apelator şi modulul apelat. Când execuţia
modulului apelat se finalizează, se reîntoarce gestiunea modulului de program apelator.
Accentuăm că atunci când se face apelul, se transmit argumentele, iar la revenire se transmit
rezultatele formate de modulul apelat. Pe lângă argumente şi rezultate modulele deseori conţin
rezultate intermediare, necesare pentru executare. Astfel de date se mai numesc datele (variabile)
locale, deoarece ele sunt accesibile numai în modulul, în care au fost definite.
Orice modul de program poate să conţină apelul altui modul, care constă din numele şi
lista parametrilor, definite în modulul apelat. Parametrii din această listă, care se transmit
modulului apelat, se numesc parametri actuali sau concreţi, fiecare dintre care corespund
parametrilor formali. Metodele schimbului de date dintre modulele de program sunt următoarele
(vezi mai detaliat [23]) :
a) transferul valorii argumentului - valoarea parametrului actual - se transmite într-o variabilă
locală a modulului apelat ;
b) transferul rezultatului – rezultatul, care se conţine într-o variabilă locală a modulului apelat se
transmite într-o variabilă a modulului apelator ;
c) modificarea parametrilor - valoarea parametrului actual - se transmite într-o variabilă locală a
modulului apelat, apoi rezultatul obţinut se transmite în aceeaşi variabilă a modulului apelator,
care conţinea valoarea parametrului actual ; există şi altă variantă a acestei metode - nu se
transferă parametrul, ci doar adresa lui ;
d) zona datelor comune - parametrii - nu se transferă, pentru că modulele au acces direct la toate
aceste date.
Parametrii pot fi transmişi în mod static sau în mod dinamic - în dependenţă de modul de
alocare a memoriei pentru parametri în modulul de program. Modul static prevede repartizarea
zonei de memorie cu o mărime fixă fiecărui modul de program în procesul de translare sau
editare a legăturilor din program. In acest caz una şi aceeaşi zonă de memorie este legată de unul
şi acelaşi modul de program. Acest mod de transmisiune a parametrilor asigură o viteză rapidă,
insă memoria nu se utilizează eficient, întrucât e necesar a rezerva memorie pentru un număr
maxim de parametri. Modul dinamic de transmisiune este diametral opus modului static: zona de
memorie este rezervată numai pentru parametrii ce se utilizează în fiecare apel şi nu e obligatoriu
a folosi una şi aceeaşi zonă. Acest mod asigură utilizarea mai eficace şi deseori convenabilă a
memoriei, însă transmisiunea parametrilor este în acest caz mai puţin rapidă.
Scopul lucrării: Lucrarea curentă are scopul de a familiariza studentul cu metodele şi
procedeele de organizare a programelor modulare şi de însuşire a tehnicii de implementare a
acestor procedee în limbaj C şi de asamblare.
Pentru efectuarea cu succes a lucrării se recomandă de îndeplinit următoarele sarcini:
Din sursele recomandate de găsit răspuns la următoarele întrebări:
 Explicaţi metodica de descompunere a problemelor în probleme mai simple şi
independente, care se pot realiza în module de program conform tehnologiei moderne
de proiectare descendentă ;
 Enumeraţi modurile de organizare a programelor modulare şi arătaţi avantajele şi
problemele care trebuiesc depăşite pentru fiecare mod.
 Cum se descriu parametrii modulelor de program ?
 Care sunt regulile de selectare a modurilor de organizare a programelor modulare în
limbaj de asamblare simplu ?
De selectat din capitolele IV din [23] câte două exemple de programe modulare şi de
realizat următoarele lucrări:
- de transcris exemplele în limbajul de asamblare al microcontrolerului Motorola
M68HC11;
- de realizat şi de rulat exemplele date cu ajutorul „Micro-LAB”-lui;
- de format raportul pe lucrarea curentă, care să includă textul explicativ al
exemplului, listingul programului cu comentarii;
- interpretarea rezultatelor obţinute.

3.4 Lucrarea Nr. 4. Descrierea şi implementarea algoritmilor de achiziţie date


Generalităţi.
Procesul de achiziţie date poate fi divizat în următoarele etape:
- acumularea unui set de valori de la senzor într-un bufer de date;
- prelucrarea preliminară a valorilor acumulate din bufer;
- transformarea valorii prelucrate în mărime fizică, scalată în unităţi de măsură.
Prima etapă presupune efectuarea a unui număr concret de măsurări cu convertorul analog-
digital cu un interval anumit de timp şi acumularea acestor valori într-un bufer de date.
Deoarece procesul de măsurare este influenţat de fluctuaţiile proprii ale parametrului măsurat

C

Fig. 3.1 Fluctuaţiile parametrilor măsuraţi

şi de perturbaţii, valorile acumulate pot fi eronate. Pentru a obţine valoarea reală a


parametrului e necesară o prelucrare preliminară. Sensul acestei prelucrări este filtrarea
rezultatelor de valorile dispersate şi calculul valorii medii din setul de valori filtrate. Un
procedeu simplu de filtrare a valorilor dispersate este sortarea valorilor acumulate, divizarea

Frecv.

Valori.
Vmin. V’min. Vmed. V’max. Vmax..
Fig. 3.2 Distribuţia valorilor măsurate

scării de valori în 4 părţi, eliminarea ¼ din valorile minime şi ¼ din valorile maxime şi
medierea valorilor filtrate.
Considerând că caracteristica senzorului este liniară, transformarea valorii măsurate în
valoare a parametrului exprimată în unităţi de măsură se va efectua după următoarea formulă:

Vpar = Vmed (Pmax – Pmin)/(Vmax – Vmin) [unit. măsură],

unde Vmed - valoarea medie calculată în rezultatul achiziţiei de date;

Vmax - valoarea maximă a convertorului analog/digital;

Vmin - valoarea minimă a convertorului analog/digital;

Pmax - valoarea maximă a parametrului măsurat;

Pmin - valoarea minimă a parametrului măsurat;

Scopul lucrării : Lucrarea curentă are scopul de a familiariza studentul cu metodele şi


procedeele de achiziţie date şi de însuşire a tehnicii de implementare a acestor algoritmi în limbaj
de asamblare.
Pentru efectuarea cu succes a lucrării se recomandă de îndeplinit următoarele sarcini:
I. Din sursele recomandate de găsit răspuns la următoarele întrebări:
 care sunt modurile de funcţionare a convertorului analog-digital;
 care este procedeul de efectua o singură măsurare de la un senzor;
 care este procedeul de efectua un set de măsurări de la un senzor;
 care este procedeul de efectua un set de măsurări de la un grup de senzori;
 cum se organizează întregul proces de achiziţie date.
II. De realizat următoarele lucrări:
 de elaborat un program simplu pentru efectuarea măsurărilor cu convertorul
analog-digital în modurile de scanare şi multiplexare a canalelor ;
 de elaborat programul de achiziţie date de la un senzor, urmată de prelucrare
preliminară şi transformare a datelor.
 de format raportul pe lucrarea curentă, care să includă textul explicativ al
exemplului, listingul programului cu comentarii;
 interpretarea rezultatelor obţinute.
Lucrarea Nr. 5. Modelarea, ajustarea şi realizarea regulatorului numeric PID.
Generalităţi.
Algoritmii de reglare numerică sunt o parte componentă a programelor
microcontroloarelor, care efectuează anchetarea senzorilor, calculul valorilor semnalelor de
comandă după o anumită legitate de reglare, care mai apoi se aplică asupra obiectului de reglare.
Perioada de anchetare (cuantificare a procesului de reglare) se modifică în funcţie de
caracteristicile dinamice ale procesului (obiectului) de reglare şi se prezintă de la câteva
milisecunde până la zeci de secunde.
Ajustarea regulatorului numeric constă în punerea în concordanţă a parametrilor
regulatorului cu caracteristicile dinamice ale obiectului de comandă. Caracteristicile dinamice
sunt reflectate de către funcţiile de transfer ale regulatorului şi obiectului. Schema de interacţiune
a regulatorului PID cu buclă închisă cu obiectul de comandă e prezentată în figura 3.3.

Fig. 3.3 Schema de interacţiune a regulatorului PID.

Obiectele de comandă pot fi de diverse tipuri, dintre care mai răspândite sunt următoarele:
1) Obiect static cu funcţia de transfer:

e TdelayS 1
Wob ( s )  Kob  *
Tob  s  1 Tob 2 * s  1

2) Obiect astatic cu funcţia de transfer:


 TdelayS
1 e 1
Wob ( s )  Kob     *
 s  Tob  s  1 Tob 2 * s  1
Iar funcţia de transfer a regulatorului PID e următoarea:

 1 Kd * s 
Wreg ( s )  KP  1  
 Ti  s TFD * s  1

Ecuaţia regulatorului PID:


 1
t
dx(t ) 
CO (t )  KP  e(t )    e(t )  dt  Kd  
 Ti 0 dt 
unde:
PV(t) - variabila de reglare care se măsoară (Process Variable);
e(t) =Scop -PV(t) - abaterea (eroare) de reglare;
CO(t) - semnalul de ieşire a regulatorului (Controller Output);
KP - coeficientul de amplificare; Ti - constanta de timp integrală; Kd – coeficientul derivatei.
Metodele practice de acordare se bazează pe aprecierea comportării sistemului automat prin
aproximarea valorilor minime ale unor criterii integrale de eroare care conduc în final la regimuri
tranzitorii cu durata şi suprareglare optime. Cel mai utilizat criteriu din aceasta categorie este
criteriul de performanta Ziegler-Nichols, care asigura acordarea în raport cu variaţia mărimii de
intrare. Potrivit acestui criteriu, se aduce regulatorul automat la structura de regulator
proporţional, stabilind Ti -> Tmax si Td -> 0 si se va creşte factorul de amplificare KP până când
în sistem se instalează un regim permanent oscilant, adică sistemul se afla la limita de stabilitate.
Se măsoară factorul de amplificare KP si perioada oscilaţiilor Tos după care se calculează
valorile optime ale parametrilor de acord după cum urmează:
- pentru legitatea P:
Kopt = 0,5 Kos
- pentru legitatea PI:
Kopt = 0,45 Kos ; Ti opt = 0,8 Kos
- pentru legitatea PID:
Kopt = 0,75 Kos; Ti opt = 0,6 Tos ; Td opt= 0,1 Tos
Verificarea comportării sistemului optimizat după acest criteriu se poate face prin simulare
numerică sau direct pe instalaţia industrială aflată în funcţiune. Ajustarea regulatorului se va
efectua unui program, care modelează regulatorul PID cu buclă închisă. Pentru aceasta trebuie de
introdus următoarele date:
1) Parametrii obiectului; 2) Parametrii regulatorului;
3) Tipul procesului tranzitoriu; 4) Durata procesului de reglare.
Rezultatele se obţin în formă de următoarele grafice:
a) Variabila reglabilă; b) Eroare de reglare; c) Integralul erorii;
b) derivata erorii; e) semnalul de ieşire al regulatorului; f) caracteristica de transfer a
obiectului.
Lucrarea se va efectua în următoarea ordine:
1) Modelarea se efectuează prin metoda de calcul numeric pentru o durată de 500 de
intervale discrete de timp.
2) 2) Durata de modelare nu depinde de numărul de intervale, ea se introduce şi determină
durata unui interval discret de timp (tact).
3) Rezultatele numerice pot fi analizate pe coala "Data", iar cele grafice - "Rezultat".
4) Valorile scopului sau perturbaţiei (care au valori iniţiale 1) se pot modifica pe coala
"Data".
5) Regulatorul poate fi ajustat preliminar în baza metodei "Ziegler-Nichols" pentru contur
cu buclă închisă.
Ordinea de ajustare:
1. Se introduc parametrii obiectului de reglare (de exemplu: Tob1 = 5 sec, Tob2 = 10 sec,
Tdelay = 1 sec).
2. Se stabilesc iniţial parametrii regulatorului în modul următor:
a) Ti = Val. max, Ti=10000, aceasta valoare reduce la zero componenta integrală a
regulatorului;
b) ) KD = 0, coeficientul derivatei - zero, adică se reduce şi influenţa componentei
derivatei;
c) KP = 0,005 - coeficientul de amplificare are o valoare foarte mică.
3. Urmărind procesul de reglare (pe diagrama "Procesul de reglare"), se măreşte treptat
coeficientul de amplificare, până când nu apar oscilaţii stabile (pronunţate) - (pentru
exemplul dat: KP=8).
4. Se determină perioada oscilaţiilor din diagrama "Procesul de reglare" - în cazul dat Pos =
23 sec.
5. . Se determină parametrii optimi ai regulatorului pentru legea PID:
Kopt= (0,5 -:- 0,75), Kos = 0,6*8 = 4,8;
Ti opt = 0,6 , Tos = 0,6* 23 = 13,8;
Td opt= 0,1, Tos = 2,3 sec.
6. Se introduc parametrii optimi şi se analizează rezultatele obţinute.
Note: Programul poate modela un tip de proces tranzitoriu din următoarele :
1) variaţia scopului (de la 0 la 1 sau valoarea indicată) în momentul t=0;
2) variaţia perturbaţiei (de la 0 la 1 sau valoarea indicată) în momentul t=0;
7. De realizat algoritmul PID în limbaj C şi de realizat un program simplu de reglare în limbaj
de asamblare.
3.6 Lucrarea Nr. 6. Descrierea şi implementarea algoritmilor comunicare
Generalităţi.
Exercitarea funcţiilor de comandă în sistemul distribuit este strâns influenţată de modurile
de comunicare între componentele lui. Specificul sistemelor distribuite constă în interacţiunea
intensă între modulele sistemului. Această interacţiune se exercită prin comunicare între module
(unităţi de comandă). Datorită proprietăţilor canalului serial de comunicare se propune ca
comunicarea în sistemul de comandă distribuit să se efectueze în mai multe modalităţi simple şi
rapide. Totodată se impune şi următoarea restricţie: într-un interval de timp o unitate de comandă
funcţionează în regim de “Master”, iar celelalte - în regim de “Slave”. Analiza sistemelor
similare arată că mai reuşite pentru astfel de sisteme sunt modalităţile standardului PROFIBUS:
transfer de date cu confirmare (Send Data with Acknowledge – SDA); transfer de date fară
confirmare (Send Data with No
Acknowledge – SDN); transfer şi
cerere de date cu răspuns (Send and
Request Data with Reply – SRD);
transfer şi cerere ciclică de date cu
răspuns (Cyclic Send and Request
Data with Reply – CSRD).
Fig. 3.4. Modalitatea SDN de comunicare între unităţile de
Transfer de date cu comandă.
confirmare (Send Data with Acknowledge – SDA) permite programului aplicativ prin
intermediul programului de comunicare al staţiei (unităţii de comandă) în regim de “Master” să
transmită datele (SDA-data) la o singură unitate de comandă locală în regim de “Slave”. Dacă
datele recepţionate (SDA-data) nu conţin erori, atunci ele sunt predate prin intermediul
programului de comunicare (nivelul 2) al unităţii de comandă locale programului aplicativ local,
care trebuie să confirme că a recepţionat datele cu succes. În caz contrar, dacă datele recepţionate
(SDA-data) conţin erori, atunci ele totuşi sunt predate prin intermediul programului de
comunicare al unităţii de comandă locale programului aplicativ local, care trebuie să confirme că
a recepţionat datele, dar cu erori. Confirmarea trebuie transmisă programului aplicativ al unităţii
de comandă în regim de “Master”, care analizează această confirmare şi dacă nu s-au recepţionat
datele cu succes, procedura SDA se repetă. Transfer de date fară confirmare (Send Data with no
Acknowledge – SDN) permite programului aplicativ prin intermediul programului de
comunicare al unităţii de comandă în regim de “Master” să transmită datele (SDN-data) la o
singură unitate de comandă locală sau concomitent la un grup sau la toate staţiile locale, care
funcţionează în regim de “Slave”. Programul aplicativ al unităţii de comandă în regim de
“Master” primeşte confirmare despre terminarea transferului de date de la programul de
comunicare al staţiei curente, dar nu confirmare de la unităţile locale că au recepţionat cu succes
sau nu (SDN-data). Programul aplicativ al unităţii de comandă în regim de “Slave” îşi primeşete
aceste (SDN-data), dacă au fost recepţionate cu sau fără erori. Transfer şi cerere de date cu
răspuns (Send and Request Data with Reply – SRD) permite programului aplicativ prin
intermediul programului de comunicare din al unităţii de comandă în regim de “Master” să
transmită datele (SRD-data) la o singură unitate de comandă locală şi în acelaţi timp să ceară
datele (UPDATE-data) care au fost obţinute de către programul aplicativ de pe unitatea locală
“Slave” în ultimul moment. Dacă datele recepţionate (SRD-data) nu conţin erori, atunci ele sunt
predate prin intermediul programului de comunicare unităţii de comandă programului aplicativ
local. Acest mod de comunicare prvede la fel cerere de date fără a trnsfera date unităţii locale -
(SRD-data=Null). Programul aplicativ de pe “Master” trebuie să primească unul din trei
răspunsuri: datele cerute (UPDATE-data) sau indicaţie că datele cerute (UPDATE-data) nu sunt
prezente sau o infirmare că datele (SRD-data) au fost recepţionate. Primele două reacţii se
consideră ca o confirmare pozitivă a recepţiei datelor (SRD-data). Dacă o eroare a avut loc,
atunci programului de comunicare unităţii de comandă “Master” trebuie să repete transferul.
Transfer şi cerere de date ciclic cu răspuns (Cyclic Send and Request Data with Reply – CSRD)
permite programului aplicativ prin intermediul programului de comunicare al unităţii de
comandă în regim de “Master” să transmită în mod ciclic datele (S_UPDATE-data) la o staţie
locală (unitate de comandă) şi în acelaşi timp să ceară datele (R_UPDATE-data) care au fost


Mesaj 1 (cu adresa UCL2) M1
UCC M1

UCL1 Mesaj 2 (cu


adresa UCC) M2
UCL2
Pauză M2

UCLn
c 2c
Prima sesiune Repetare sesiune

Fig. 3.5. Diagrama sesiunii schimbului de date între două unităţi: UCC şi UCL2.
obţinute de către programul aplicativ de pe staţia locală “Slave” în ultim moment. Dacă datele
recepţionate (SRD-data) nu conţin erori, atunci ele sunt predate ciclic prin intermediul
programului de comunicare al unităţii de comandă programului aplicativ local. Acest mod de
comunicare prevede la fel cerere de date fără a transfera date staţiei locale - (S_UPDATE -
data=Null). Programul aplicativ de pe unitatea centrală “Master” trebuie să primească ciclic
unul din trei răspunsuri: datele cerute (R_UPDATE-data) sau indicaţie că datele cerute
(R_UPDATE-data) nu sunt prezente sau o confirmare (mai bine-zis, infirmare) că datele
(S_UPDATE -data) nu au fost recepţionate. Primele două reacţii se consideră ca o confirmare
pozitivă a recepţiei datelor (S_UPDATE -data). Dacă o eroare a avut loc, atunci programului de
comunicare al unităţii de comandă în regim de “Master” trebuie să repete transferul.
In baza modalităţilor mai sus numite au fost protocolul de schimb de date între unităţile
de comandă ale reţelei distribuite de microcontroloare. Algoritmii şi programele de comunicare,
care realizează protocolul dat, efectuează schimbul de date în bază de sesiuni. O sesiune de
schimb de date dintre staţia “Master” şi o staţie “Slave” cuprinde mesajul M1 format şi transmis
de “Master” şi după o pauză trebuie să vină răspunsul de la “Slave” prin mesajul M2. De
exemplu, M1 - READ_ALL_DATA, M2 - RECEIVE_ALL_DATA,
CONFIRM_TRUE/CONFIRM_FALSE (vezi fig. 3.5). Dacă în cadrul unei sesiuni staţia “Slave”
îşi recunoaşte adresa sa, dar mesajul este eronat, atunci “Slave” transmite răspunsul
CONFIRM_FALSE. În cadrul unei sesiuni staţia “Master” dacă nu recepţionează răspunsul pe
parcurs intervalului de timp c, care depinde de viteza de comunicare sau răspunsul este eronat,
atunci se echivalează cu răspunsul CONFIRM_FALSE. Dacă în cadrul sesiunii precedente staţia
“Master” a primit răspunsul CONFIRM_FALSE, atunci se repetă mesajul M1. În cadrul de două
sesiunii precedente dacă staţia “Master” a primit răspunsul CONFIRM_FALSE, atunci se ia
decizia de a micşora viteza de comunicare sau/şi informarea personalului (sistemului) despre
situaţia creată. În mod similar se realizează toate celelalte modalităţi de comunicare.
Toate mesajele pentru oricare mod de comunicare pot avea un format unic cu structura
următoare: header (începutul), corp (conţinut) şi suma de control.

Header Corpul mesajului Suma de control


4 byte 0 – 256 byte 2 byte

Note: Lungimea câmpurilor corespunde datelor fără protecţie. Dacă datele sunt protectate,
atunci lungimea câmpurilor se va mări în funcţie de modul de protecţie. De exemplu:
a) pentru codul Hamming (7,4) lungimea se dublează, iar pentru (22,16) – creşte cu 33%, adică
la 2 byte se mai adaugă 1 byte.
Headerul mesajului conţine informaţie de control utilă pentru organizarea procesului de
comunicare:
- adresa staţiei destinatare, căruia îi este adresat mesajul;
- adresa staţiei sursă, care transmite mesajul;
- codul comenzii de comunicare, care prescrie cum trebuie să fie transmis mesajul;
- numărul de byte, care reflectă lungimea corpului mesajului.

Adr_1 Adr_2 COM CNT


1 byte 1 byte 1 byte 1 byte
Fiecare byte din header are următoarea formă:
Start 0 1 2 3 4 5 6 7 Stop
Conţinut

Scopul lucrării : Lucrarea curentă are scopul de a familiariza studentul cu metodele şi


procedeele de comunicare între microcontroloare şi de însuşire a tehnicii de implementare a
acestor algoritmi în limbaj de asamblare.
Pentru efectuarea cu succes a lucrării se recomandă de îndeplinit următoarele sarcini:
III. Din sursele recomandate de găsit răspuns la următoarele întrebări:
 de însuşit noţiunile de bază a protocoalelor de comunicare;
 care este specificul comunicării prin canale seriale;
 cum se organizează schema de comunicare între abonaţi;
 care este diferenţa dintre modul sincronic şi asincronic de schimb de date;
 care este structura unui mesaj.

II. De creat un simplu model de protocol de comunicare şi de realizat următoarele lucrări:


 de transcris modulele de recepţie şi transmisie a mesajelor pentru nivelul fizic în
limbajul de asamblare al microcontrolerului Motorola M68HC11;
 de realizat şi de rulat exemplele date cu ajutorul „Micro-LAB”-lui;
 de utilizat un program de comunicare tip „ComKit” pe calculatorul personal şi de
verificat modelul protocolului de comunicare;
 de format raportul pe lucrarea curentă, care să includă textul explicativ al exemplului,
listingul programului cu comentarii;
 interpretarea rezultatelor obţinute.
Referinţe

1. Bîrca-Gălăţeanu S., Stoichescu D., Constantin H. Electronica de putere. Aplicaţii. -Bucureşti:


Edit. Militară, 1991.
2. Woolvet g., ş.a. Traducers in digital systems. (Датчики в цыфровых системах. -Москва:
Энергоиздат, 1981)..
3. Interfacing sensors to the IBM PC. (Сопряжение датчиков и устройств ввода данных с
компютерами IBM PC, -Москва: Мир , 1992.)
4. Wakerly John. Microcomputer architecture and programing. (Архитектура и
програмирование микро-ЭВМ, -Москва: Мир , 1984).
5. ATMEL Corporation. AVR Enhanced RISC Microcontrollers Data Book. May 1996.
6. AVR Studio ver. 2.02 with ICE 200. - http://www.atmel.com.
7. 8-bit AVR Microcontroller with 128K bytes In-System Programmable Flash.
ATmega103(L). - http://www.atmel.com.
8. Motorola HC11 microcontrolers. Reference guide. -New York: Motorola Inc., 1991.
9. MC68HC11F1 Technical Data – N.Y.: MOTOROLA, INC. 1995.
10. MC68HC11 Series. Programming reference guide. – N.Y.: MOTOROLA, INC. 1998.
11. M68HC12A4EVB Evaluation board user’s manual. -New York: Motorola Inc., 1996.
12. Motorola Semiconductor Technical Data. CPU12 Reference Guide. -New York: Motorola
Inc., 2000.
13. The M68HC12 family of 16-BIT Microcontrollers. - http://www.mot.com/m68hc12 .
14. CPU12 Reference Manual. -New York: Motorola Inc., 2000.
15. Motorola Semiconductor Application Note. Selecting the Right Microcontroller Unit. -New
York: Motorola Inc., 2001.
16. OSEK Operating System. User’s Manual. -New York: Motorola Inc., 2001.
17. ADSP-21000 Family. Application Handbook Volume 1. Analog Devices, Inc., 1994
18. ADSP-2106x SHARC. DSP Microcomputer Family. - Analog Devices, Inc., 1998
19. Secrieru, N., Bejan, V., Ciumac, A., Pascal, V.; Sistem de simulare pentru încercarea
unităţilor de comandă a motoarelor cu ardere internă. -Bucureşti: ESFA' 95. Vol. 3. - p.
161-165.
20. Secrieru N.,Gremalschi A., Cornea I. Arhitectura şi organizarea microprocesoarelor.
Chişinău: Universitas, 1994
21. Secrieru N. Programarea microprocesoarelor in limbaj de asamblare. - Chişinău: Universitas,
1994.

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