Documente Academic
Documente Profesional
Documente Cultură
Curs Microcontroler PDF
Curs Microcontroler PDF
VI
MICROCONTROLLERE
CUPRINS
VIII
MICROCONTROLLERE
1
DESCRIERE GENERAL
1.1
ISTORIC
unitatea central;
generatorul de tact (la care trebuie adugat din exterior un cristal de cuar
sau n aplicaii mai puin pretenioase, un circuit RC);
memoria volatil (RAM);
memoria nevolatil (ROM/PROM/EPROM/EEPROM);
dispozitive I/O seriale i paralele;
controller de ntreruperi, controller DMA, numrtoare/temporizatoare
(timers), covertoare A/D i D/A, etc.;
periferice.
Preul unui MC este redus din cauza cantitilor mari n care se fabric.
Preul mic al MC aduce cu sine i micorarea preului sistemelor de control (se
micoreaz inclusiv costul proiectrii).
Diferenele dintre microprocesor i unitatea central a MC se atenueaz n
timp. Astfel, marii constructori de procesoare au realizat nite circuite care s-ar
putea numi super-microcontroller-e, aa cum sunt Motorola 68EC300, INTEL
386EX sau IBM PowerPC 403GB, care sunt microcalculatoare pe un singur chip.
MICROCONTROLLERE
MC
'90
'92
'94
'96
'97
'98
4-bit
8-bit
16-bit
1393
2077
192
1596
2862
340
1761
4689
810
1849
6553
1628
1881
7529
2191
1856
8423
2969
'99
(estimat)
1816
9219
3678
'00
(estimat)
1757
9715
4405
Tabelul 1.2
MC
'90
'92
'94
'96
'97
'98
4-bit
8-bit
16-bit
778
588
22
979
843
45
1063
1449
106
1100
2123
227
1096
2374
313
1064
2556
419
'99
(estimat)
1025
2681
501
'00
(estimat)
970
2700
585
Productor
Intel
AMD
Motorola
IBM
TI
Cyrix
Hitachi
NEC
LSI Logic
IDT
1994
10800
881
781
468
219
210
188
100
58
45
1995
8036
992
827
297
202
240
66
82
51
25
1. Descriere general
Productor
Motorola
NEC
Mitsubishi
Hitachi
Intel
TI
Philips
Matsushita
Lucent (AT&T)
Toshiba
1.2
1994
1781
1421
945
899
835
807
524
500
492
400
1995
1511
1208
708
782
605
534
345
413
275
328
Memoria
Intrri
Unitatea
central
de
prelucrare
Ieiri
Generator de
tact
Figura 1.1 Schema simplificat a unui microcontoller
MICROCONTROLLERE
Bus de
adrese
Intrri
digitale
Memorie pentru
programe
Bus de
date
Memorie pentru
date
Dispozitive I/O
Reset
Oscilator
Ieiri
digitale
1. Descriere general
1.3
ARHITECTURA MC
MICROCONTROLLERE
1. Descriere general
MICROCONTROLLERE
1.3.2 Memoria
MC folosesc diferite tipuri de informaii, care sunt stocate n diferite tipuri
de memorii. Instruciunile care controleaz funcionarea MC trebuie stocate ntr-o
memorie nevolatil, unde informaiile se pstreaz i dup oprirea i repornirea
sursei de alimentare. Rezultatele intermediare i variabilele pot fi nscrise ntr-o
memorie volatil, la acestea este important s se poat face scrierea /citirea rapid i
simplu n timpul funcionrii.
Memoria RAM (Random Access Memory) este o memorie volatil care
poate fi citit sau scris de unitatea central. Locaiile din RAM sunt accesibile n
orice ordine. Pe chip, memoria RAM ocup mult loc i implicit costurile de
implementare sunt mari. De aceea un MC include de obicei puin RAM. Memorie
RAM static alimentat de la baterie se folosete pentru stocarea nevolatil a
cantitilor mari de date, la o vitez de acces mare i cu un numr nelimitat de
tergeri i renscrieri.
Memoria ROM (Read Only Memory) este cea mai ieftin i cea mai simpl
memorie i se folosete la stocarea programelor n faza de fabricaie. Unitatea
central poate citi informaiile, dar nu le poate modifica.
Memoria PROM (Programmable Read Only Memory) este similar cu
memoria ROM, dar ea poate fi programat de ctre utilizator. Dup posibilitile de
tergere, aceast memorie poate fi de mai multe feluri:
Memoria EPROM (Erasable PROM) care se poate terge prin expunere la
raze ultraviolete. MC cu EPROM au un mic geam de cuar care permite ca chip-ul
s fie expus la radiaia ultraviolet. tergerea este neselectiv, adic se poate terge
doar ntreaga informaie i nu numai fragmente. Memoria poate fi tears i
renscris de un numr finit de ori. Programarea EPROM-ului necesit o procedur
special, iar MC cu EPROM au nevoie de regul pentru nscrierea EPROM-ului de
o tensiune auxiliar, de 12 V de exemplu. Unele MC au incluse circuite de
programare a memoriei EPROM, cu ajutorul crora unitatea central poate
programa memoria EPROM. n timpul programrii memoria EPROM nu este
conectat la magistrala de date i adrese. Unele MC sunt prevzute cu mod special
de lucru, n care sunt vzute din exterior ca nite memorii EPROM obinuite i pot
fi astfel programate cu orice programator.
1. Descriere general
10
MICROCONTROLLERE
1. Descriere general
11
Porturi paralele
Porturile paralele I/O faciliteaz transferul simultan al mai multor bii ntre
MC i mediu. Numrul de bii transferai ca urmare a executrii unei instruciuni
depinde de organizarea particular a porturilor n cadrul MC; unele porturi sunt
organizate pe 8 bii, altele pe un numr mai mare de bii. Sensul transferului, I
(input) sau O (output) este programabil i se stabilete de obicei ntr-un registru de
sens. Pentru a veni n ntmpinarea cerinelor specifice de interaciune cu mediul
sunt implementate mecanisme de apelare la nivel de bit pentru registrele porturilor
paralele I/O. Mecanismul presupune o structur hardware corespunztoare i
instruciuni pentru manipularea informaiei la nivel de bit (un operand este un bit).
Astfel, la execuia unei instruciuni orientat pe bit, exist posibilitatea de a
transfera un singur bit, de a masca bii care nu sunt folosii ntr-o operaie
particular i de a efectua operaii logice pe un singur bit al unui port paralel I/O.
Datorit capabilitii de manipulare la nivel de bit la descrierea caracteristicilor
sistemului paralel I/O se specific numrul total de linii I/O.
MC68HC705C8 dispune de 31 de linii I/O digitale de uz general grupate n patru
porturi (A, B, C i D). Porturile A, B, i C sunt porturi de cte opt bii fiecare i pun
12
MICROCONTROLLERE
la dispoziie n total 24 de linii care pot fi folosite fie ca intrri, fie ca ieiri. Portul D
dispune de 7 linii care pot fi folosite doar ca intri.
PA7
DDRA6 DDRA5
0
PA6
PA5
Bit 0
DDRA4
DDRA3
DDRA2
DDRA1
DDRA0
PA3
PA2
PA1
PA0
PA4
13
1. Descriere general
pin
I/O
[1]
[3]
[2]
Operaie
scriere
Bit DDR
0
scriere
citire
citire
0
1
Se poate observa c o linie de ieire a unui port paralel este mai mult dect
un latch simplu; totodat, informaia nscris n latch-ul de ieire nu se schimb
dect dac se efectueaz o nou operaie de scriere la port.
Unele porturi paralele sunt considerate cvasi-bidirecionale, ceea ce
nseamn c o linie poate fi folosit n acelai timp ca ieire i ca intrare. Aceast
flexibilitate este considerat de interes n aplicaii i este posibil printr-un truc.
14
MICROCONTROLLERE
VCC
Pull-up
intern
Bus intern
Scriere latch
CLK
pin
I/O
n1
Citire pin
Figura 1.5 Structura unei linii cvasi-bidirecionale
1. Descriere general
15
linii datele. Modul de lucru n care magistralele interne sunt disponibile la pini este
numit mod expandat de lucru.
Pentru a evalua capabilitatea porturilor paralele se recomand considerarea
urmtoarelor nsuiri:
16
MICROCONTROLLERE
Magistrala intern
Registru de
prescalare
Buffer
transmisie
Buffer
recepie
Baud rate
Registru de
deplasare la
transmisie
Registru de
deplasare la
recepie
TxD
RxD
Selecie ceas
CLK
Ceasul pentru generarea ratei de transfer poate fi intern sau extern. n cazul
n care se selecteaz ceas intern, acesta se formeaz din ceasul unitii centrale cu o
prescalare. Pentru ca rata de transfer s fie programabil ceasul prescalat se
divizeaz n continuare folosind un numrtor al unui timer din resursele proprii.
Interfaa UART dispune de un registru de stare i un registru de control cu ajutorul
crora se pot prgrama modul de lucru, parametrii de comunicaie, selectarea
ceasului, divizarea ceasului.
Conexiunile interfeei seriale asincrone sunt disponibile la pini cu funcii
multiple la unul din porturile paralele.
1. Descriere general
17
18
MICROCONTROLLERE
generator
clock
SLAVE
MISO
MOSI
MOSI
MISO
SCK
SCK
Registru de
deplasare (8b)
+5V
nSS
nSS
Figura 1.7 Conexiune serial sincron master-slave
19
1. Descriere general
MASTER
SLAVE 0
SLAVE 1
RD
RD
SLAVE k
RD
MOSI SCK MISO nSS MOSI SCK MISO nSS MOSI SCK MISO nSS
SCK
MOSI
RD
MISO
+5V
nSS
PB0
PB1
PBk
MASTER
SLAVE 0
SLAVE 1
RD
RD
SLAVE k
RD
SCK
MOSI
RD
MISO
+5V
nSS
Figura 1.9 Conexiune serial sincron single-master multi-slave (varianta 2)
20
MICROCONTROLLERE
Module Timer
Natura aplicaiilor pentru care s-a nscut microcontroller-ul implic o
multitudine de funcii de timp puse la dispoziia utilizatorului prin module de timp
numite timer. Un MC este echipat n mod obligatoriu cu un astfel de modul mai
mult sau mai puin complex. Un sistem timer obinuit pune la dispoziie un set de
funcii implementate pe baza unui numrtor liber central i a unor blocuri
funcionale pentru fiecare funcie n parte. Timer-ul are n structura sa, dintre toate
celelalte subsisteme, cele mai multe registre. Toate funciile unui timer pot genera
ntreruperi independente; fiecare are controlul propriu i propriul vector de
ntrerupere.
Modulele timer complexe sunt construite cu arii de numrare programabile
(PCA). Pentru aplicaii speciale n timp real s-au construit module timer cu unitate
aritmetic i logic proprie.
Timer-ul este folosit pentru a msura timpul i pentru a genera semnale cu
perioade i frecvene dorite. Timer-ele nu sunt doar circuite cu funcii de
temporizare; n modulul timer sunt implementate cteva mecanisme care pun la
dispoziia utilizatorului funcii specifice. Mecanismul de comparare permite
controlul unor semnale de ieire; mecanismul de captur permite monitorizarea
unor semnale de intrare; numrtoarele interne permit generarea de referine de
timp interne, necesare n bucle de ntrziere, multiplexarea diferitelor sarcini
software, .a. Timer-ul poate fi folosit practic pentru orice funcie de timp, inclusiv
generarea unor forme de und sau conversii D/A simple. Funciile oferite de un
timer sunt:
1. Captur la intrare (IC - input capture) - aceast funcie se bazeaz pe
posibilitatea de a stoca valoarea numrtorului principal la momentul apariiei
unui front activ al unui semnal extern. Facilitatea permite msurarea limii
unui impuls sau a perioadei unui semnal. Facilitatea poate fi folosit i ca
referin de timp pentru declanarea altor operaii.
21
1. Descriere general
Cerere de
ntrerupere
TOF
TCNT(H)
Clock
MC
:
1,4,8,16
TCNT(L)
Numrtor
16 biti
La RTI, COP i
acumulator de impulsuri
Figura 1.10 Schema bloc a unui timer (MC 68HC11) numrtorul liber
22
MICROCONTROLLERE
Cerere de
ntrerupere
Latch
16 bii
ICxF
Detector de
tranziii
Pin
ICx
TICx
Figura 1.11 Funcia de captur la intrare schema bloc
1. Descriere general
23
24
MICROCONTROLLERE
OCxI
ntrerupere
Comparator
16 bii
OCxF
TOCx
Ctrl.
pin
Pin
OCx
25
1. Descriere general
COP - Watchdog
COP (Computer Operating Properly) este un ceas de gard, numit
watchdog, folosit pentru a detecta erorile de program. Folosirea ceasului de gard
este opional. n cazul n care se folosete, programul utilizator trebuie s reseteze
periodic un registru COP; dac nu are loc resetarea, unitatea centrala decide c a
aprut o problem n rularea programului i reseteaz sistemul pentru a preveni o
desfurare necontrolat a programului.
Funcia ceasului de gard poate fi realizat folosind un canal timer de uz
general sau, situaia ntlnit n mod obinuit la MC, ceasul de gard este un timer
dedicat, folosit doar pentru funcia gard. Structura unui modul watchdog este
reprezentat n figura 1.13
Clock
Numrtor
RESET
INIT
Registru de
prescalare
Registru de
control
BUS INTERN
26
MICROCONTROLLERE
T1
Fig. 1.14 Semnal PWM
PWM
Numrtor
Registru prescalare
PWM
clock
intern
BUS INTERN
1. Descriere general
27
registrului PWM. Ct timp rezultatul comparaiei este mai mic sau egal, se va
genera un unu logic la ieirea PWM. Dac rezultatul comparaiei este mai mare, se
va genera la ieirea PWM un zero logic. Dac registrele comparate sunt de opt bii
factorul de umplere poate fi ntre 1/256 i 1. Un canal PWM odat programat va
genera la ieire semnalul periodic continuu, fr intervenia unitii centrale.
Ca i la celelalte componente funcionale, n ceea ce privete global
modulele timer (includem i modulele watchdog i PWM) vor fi prezentate n
ncheiere cteva criterii de apreciere:
28
MICROCONTROLLERE
ADC0
ADC1
ADC2
ADC3
Mux
analogic
Selecie
canal
E/nM
START
pin
start
STOP
Date
Registru de control
Registru de date
bus intern
1.4
SISTEMUL DE NTRERUPERI
1. Descriere general
29
30
MICROCONTROLLERE
31
1. Descriere general
00H
JMP
MAIN
ORG
03H
JMP
ORG
0BH
JMP
ORG
13H
JMP
NEW_ADDR_ISR2
ORG
1BH
JMP
NEW_ADDR_ISR3
START:
;
ISR_EXT0:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare
ntreruperilor
datorate
;depirii capacitii de numrarea a canalului
;0 numrtor/temporizator
ISR_T0:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare ntreruperilor externe de
;stare -canal 1 -
ISR_EXT1:
;
;Adresa din tabela vectorilor de ntrerupere
;corespunztoare
ntreruperilor
datorate
;depirii capacitii de numrarea a canalului
;1 numrtor/temporizator
ISR_T1:
;
;
32
MICROCONTROLLERE
ORG
23H
ISR_SI:
JMP
NEW_ADDR_ISR4
;
NEW_ADDR_ISR0:
;Aici se vor plasa instruciunile corespunztoare rutinei de servire a ntreruperilor de la
;sursa extern corespunztoare canalului 0.
NEW_ADDR_ISR1:
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor datorate
;depirii de numrare la timer 0.
NEW_ADDR_ISR2:
;Aici se vor plasa instruciunile corespunztoare rutinei de servire a ntreruperilor de la
;sursa extern corespunztoare canalului 1.
NEW_ADDR_ISR3:
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor datorate
;depirii de numrare la timer 1.
NEW_ADDR_ISR4
;Aici se vor plasa instruciunile corespunztoare rutinei e servire a ntreruperilor provenite
;de la UART.
ISR corespunztoare
evenimentului 1
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR2
Al treilea
eveniment
Al doilea
eveniment
ISR corespunztoare
evenimentului 2
ISR corespunztoare
evenimentului 3
Scrie n Tabela Vectorilor de
ntrerupere, adresa ISR1
33
1. Descriere general
00H
JMP
MAIN
BOOT:
ISR_EXT0:
JMP
BUTON
;S-a considerat c prima linie de ntreruperi externe de stare reprezint canalul de transfer al
;informaiilor corespunztor butonului START/STOP
;
34
MICROCONTROLLERE
1.5
MANAGEMENTUL PUTERII
1. Descriere general
35
MC se menine n mod Idle (Wait). Pinii de port pstreaz starea pe care au avut-o
la intrarea n acest mod. Din modul Idle se poate iei prin Reset sau la sesizarea
unei ntreruperi interne sau externe.
Consumul de energie este minim atunci cnd sunt activate cele mai puine
funcii. Consumul minim de energie se obine n modul de operare Power Down
(Stop). n modul Idle (Wait) consumul este redus faa de regimul de operare
normal dar este mai mare dect n mod Power Down (Stop). n acelai timp,
consumul n mod Idle (Wait) este cu att mai redus cu ct sunt mai puine funcii
active la intrare n mod. n mod Power Down (Stop) exist posibilitatea unei
reduceri suplimentare a consumului prin reducerea tensiunii de alimentare (la unele
MC).
OnNow este o iniiativ actual pentru modernizarea metodelor de
economie de energie n sistemele cu microprocesoare. Se intenioneaz obinerea
unui consum de energie (pentru un calculator PC) de o treime din cel actual i un
timp de ieire din starea inactiv mai mic de 5 secunde. Informaii despre aceast
iniativ se gasesc la adresa www.microsoft.com/hwedev/onnow.htm
Un alt aspect important al alimentrii sistemelor construite cu MC este
calitatea semnalului furnizat de sursa de alimentare. Dac nivelul tensiunii de
alimentare nu se ncadreaz ntr-o plaj permis este posibil ca programul s
funcioneze defectuos, s se abat de la cursul firesc. Pentru a elimina acest risc, pe
care nu ni-l putem permite n sistemele de control, n MC sunt implementate
module de monitorizare a tensiunii de alimentare. Acestea pot genera un Reset de
sistem sau o ntrerupere n cazuri considerate limit.
LVR (Low Voltage Reset) este un circuit care monitorizeaz tensiunea de
alimentare a unitii centrale i foreaz un reset dac se constat c aceasta este
mai mic dect un minim predefinit.
LVI (Low Voltage Interrupt) este un circuit care monitorizeaz tensiunea
de alimentare a unitii centrale i genereaz o ntrerupere dac se constat c
aceasta este mai mic dect un minim predefinit. ntreruperea foreaz executarea
unei rutine de oprire neforat.
1.6
36
MICROCONTROLLERE
UNITATE CENTRAL
UAL
Registre
interne
Memorie
pentru
programe
Unitate de control
Memorie
pentru
date
BUS INTERN
Controller de
ntreruperi
Controller DMA
RS
reg.
de
stare
RC
reg. de
comenzi
RD
reg.
de
date
Intrri/ieiri
de date
Seriale/Paralele
1. Descriere general
37
adresare separat (MCS 51). Sub numele de dispozitiv I/O, ntr-o abordare
generalizat, sunt cuprinse principalele interfee ale MC (timer, canal serial UART)
i linii I/O grupate n porturi paralele de uz general. Acelai nume generic poate
acoperi i interfeele speciale ntlnite n configuraii particulare de MC (convertor
A/D, interfa serial sincron, interfa LCD, interfa USB, etc).
1.7
FAMILII DE MC
38
MICROCONTROLLERE
de MC PIC: low range, middle range i high range (care se disting prin
dimensiunea cuvntului de program i prin faciliti legate de structur) PIC16C5xx, PIC16C6xx i PIC17Cxx, din care linia 16C6xx este cotat cel
mai bine pe pia.
COP400 (National Semiconductor) este un MC pe 4 bii care are 512o-2K
ROM, i 32x4- 160x4 RAM, n capsule de 20-28 de pini, cu tensiuni de alimentare
2,3V-6,0V. Sunt echipate cu numrtoare/temporizatoare i magistral
1. Descriere general
39
40
MICROCONTROLLERE
Circuit
RAM
M68HC11A0
256
M68HC11A1
256
M68HC11A2
M68HC11A8
256
M68HC11E1
512
M68HC11E9
512
M68HC11F1
1024
I 8035
I 8039
I 8041
I 8748
64
128
64
64
I 8051
I 8751
128
128
ROM/
(E)EPROM
512
EEPROM
2048
EEPROM
8K ROM
512
EEPROM
512
EEPROM
12K ROM
512
EEPROM
512
EEPROM
1024 ROM
1024
EPROM
4096 ROM
4096
EPROM
Clock
I/O
A/D
Timer
0.476 s
4x8
1x6
4x8
1x6
4x8
1x6
4x8
1x6
4/8
4/8
4/8
4/8
4x8
1x6
4x8
1x6
4/8
2.5 s
1.4 s
2.5 s
2.5 s
4x8
1x6
3X8
3X8
3X8
3X8
2
2
2
2
1 s
1 s
4X8
4X8
2
2
0.476 s
0.476 s
0.476 s
0.476 s
0.476 s
0.476 s
1. Descriere general
1.8
41
CLASIFICAREA MC
Super H - Hitachi
PIC - MicroChip
AVR i ARM - Atmel
2
PROGRAMAREA SISTEMELOR CU MC
2.1
PROIECTAREA PROGRAMELOR DE
APLICAIE
2.1.1 Generaliti
Dezvoltarea aplicaiilor cu microsisteme presupune pe lng proiectarea
circuitelor electronice aferente acestora i specificarea n concordan cu aceasta,
prin instruciuni, a funciunilor pe care sistemul trebuie s le realizeze.
Prin faptul c microsistemele dispun de circuite microprogramabile,
structura acestora va fi adaptat aplicaiei specifice prin rularea programelor de
iniializare a sistemului, programe care duc la o configurare particular, specific.
Deci, una dintre funciunile de baz pe care microsistemele dotate cu
microcontroller-e trebuie s o implementeze o reprezint chiar propria configurare
-iniializare-, cci avnd drept suport aceeai structur, un sistem realizeaz noi
funciuni ca urmare a programrii iniiale sau pe parcurs.
O problem practic ce este pus la programarea microsistemelor o
reprezint organigrama pe care trebuie s o utilizm la proiectarea programelor de
funcionare. Aceasta variaz n raport cu "uneltele" soft avute la dispoziie:
asamblor1, compilator2, link-editor3, convertor OBJ-HEX4, depanator5, emulator6,
mediu de simulare7, etc.
Asamblorul este acel program ce convertete fiierul surs -fiier de tip text (ASCII) ce
conine instruciuni ale microcontroller-ului sub form de mnemonice, n fiier obiect,
respectiv ntr-un fiier ce conine codurile main corespunztoare instruciunilor
specificate n cadrul fiierului surs
2
Compilatorul este acel program ce convertete fiierul surs, scris n limbaj evoluat, n
fiier obiect.
2. Programarea sistemelor cu MC
43
MICROCONTROLLERE
44
Monitorul este acel grup de programe, rezident n memoria PROM/EPROM a unui sistem
de dezvoltare, care dispune de un set minimal de funciuni ce ajut la proiectarea i
depanarea pe plac a programelor scrise n cod main.
2. Programarea sistemelor cu MC
45
46
0032
0033
0034
MICROCONTROLLERE
4 STEPS2
DATA 32H ;Locaie nr. pasi MPP2
5 SPEED_L
DATA 33H ;Locaie low(CT)timer 0
6 SPEED_H
DATA 34H ;Locaie high(CT)timer 0
7
BSEG
0010 8 SENS
BIT 10H
;Bit "sens de rotaie MPP"
0011 9 COMMAND
BIT 11H
;Bit comand MPP
;Setarea acestui bit genereaz iniierea micrii MPP. Pentru aceasta trebuie s
;iniializm n prealabil: STEPS1, STEPS2, SPEED_L, SPEED_H i SENS.
;Bitul SENS este setat la rotirea spre stnga i resetat la rotirea spre dreapta
10 CSEG
11 EXTRN CODE(INIT) ;Declaraie rutina INIT extern
0000
12 BOOT:
0000 020054 13
JMP MAIN
0003
14
ISR_EXT0:
;nceputul tabelei vectorilor de ntrerupere
0003 02000E 15
JMP ISR_T0
000B
16
ORG 0BH
000B
17
ISR_TIMER0:
000B 02000E 18
JMP ISR_T0
000E C0D0 19
ISR_T0: PUSH PSW
;Salvare PSW n stiv
0010 C0E0
20
PUSH ACC
;Salvare Acumulator
0012 D2D3 21
SETB PSW.3 ;Comutare n bancul 1 de registre generale
0014 E531
22
MOV A,STEPS1
;ncarc n A nr.pai MPP1
0016 B4000C 23
CJNE A,#0,CONT_01 ;Test STEP1=0?
0019 E532
24
MOV A,STEPS2
;Da!
001B B40026 25
CJNE A,#0,CONT_02 ;Test STEP2=0?
001E C28C 26
CLR TR0
;Anulare funcionare timer 1
0020 D0E0
27
END_ISR: POP ACC
;Da! Ieire ISR
0022 D0D0
28
POP PSW
;Refacere stare registre generale
0024 32
29
RETI
;Ieire din ISR
0025 E532
30
CONT_01: MOV A,STEPS2
;STEP1<>0
0027 B40012 31
CJNE A,#0,CONT_03 ;Test STEP2=0?
002A E530
32
MOV A,STATUS_MPP ;Da! STEP1<>0, STEP2=0
002C 540F
33
ANL A,#0FH ;Mascheaz biii corespunztori MPP 2
002E 1531
34
DEC STEPS1 ;Actualizeaz contor de pai MPP1
0030 201006 35
EXEC_STEP: JB SENS,LEFT ;Test sens rotaie MPP
0033 03
36
RR A
;Rotete informaia de comand la dreapta
0034 F590
37
EXEC_BOOTH: MOV P1,A ;Scrie comanda ctre MPP
0036 02004C 38
JMP REPRG_T0
0039 23
39
LEFT: RL A ;Rotete informaia de comand la dreapta
003A 80F8
40
JMP EXEC_BOOTH
003C E530
41 CONT_03: MOV A,STATUS_MPP ;STEP1<>0, STEP2<>0
003E 1531
42
DEC STEPS1
0040 1532
43
DEC STEPS2
;Actualizare informaie de pai
0042 80EC
44
JMP EXEC_STEP
2. Programarea sistemelor cu MC
0044 E530
0046 54F0
0048 1532
004A 80E4
004C 85338A
004F 85348C
0052 80CC
0054
0054 120000
0057 201102
005A 80FB
005C D28C
005E C211
47
45
46
47
48
49
50
END
n cazul n care realizm controlul unui semnal analogic cu ajutorul
sistemului format din microcontroller i convertor digital-analog de 12 bii avnd
drept interfa o interfa paralel, vom dedica 12 linii din cadrul a dou porturi
acestui scop.
ntr-un mod analog, putem defini i operaiile de citire a informaiilor de
stare att cele corespunztoare unor mrimi analogice ct i cele corespunztoare
mrimilor digitale. Vom dedica fiecrui semnal analogic locaii de memorie avnd
o lime a cuvntului cel puin egal cu rezoluia convertorului ( 1 byte pentru o
rezoluie de 8 bii, 2 bytes pentru rezoluii mai mari de 8 bii i pn la 16 bii,
respectiv 3 bytes pentru rezoluii cuprinse ntre 17 i 24 de bii, etc.)
Deci, numrul de linii dedicate transferului de informaii va depinde de
interfaa convertorului, iar memoria alocat reinerii strii corespunztoare mrimii
va fi mai mare sau egal cu rezoluia convertorului, vorbim de ceea ce ndeobte se
numete "alinierea" datelor, respectiv asigurm uniformitatea dimensiunii locaiilor
de memorie dedicate variabilelor sistemului ceea ce uureaz accesul la informaie
prin folosirea unor indeci adecvai.
Necesitile de control a timpului sunt satisfcute prin dedicarea unor
canale temporizatoare/numrtoare. Aici apar cele mai delicate probleme, mai ales
n cazul unor sisteme ce controleaz procese cu constante de timp mici. n acest
caz critic, este necesar s alocm pentru controlul ntrzierii respective un canal
temporizator separat, s minimizm numrul de instruciuni ale rutinei de servire a
ntreruperilor i s analizm, iar apoi s setm cu atenie prioritile stabilite la
arbitrarea ntreruperilor. Va trebui ca sistemul nostru s satisfac cerinelor impuse
de teorema eantionrii att la achiziia de semnal ct i n comand, ceea ce
presupune ca frecvena minim de eantionare s fie mai mare dect dublul
frecvenei maxime ce intervine n cadrul procesului reglat.
Nu trebuie s uitm c n cazul unui sistem controlat de ctre un
microcontroller paralelelismul n aciune i interaciunea cu procesul se mbin
48
MICROCONTROLLERE
Prin sistem de operare n timp real nelegem ansamblul de rutine ce ofer principalele
rutine de comand i control a sistemului, cu condiia respectrii teoremei de eantionare
att n comad ct i n control
10
Prin task nelegem acele uniti de program executabile independent i care de regul
implementeaz o singur funciune ce este apelat de ctre planificatorul (n cazul nostru,
programul principal) sistemului.
11
Rutinele implementeaz poriuni mici de program, ce trateaz evenimente ce apar n
funcionarea sistemului. Sunt caracterizate prin rapiditate n execuie i de regul sunt
asociate unui anumit eveniment decelabil de ctre planificatorul sistemului de operare sau
declaate de ctre o cerere de ntreruperi.
12
sunt poriuni de program apelate de ctre task-uri, i pot fi: dedicate, cazul celor activate
de ctre un "anumit" task, comune, cele apelate de ctre mai multe task-uri i re-entrante,
cele disponibile a fi utilizate de mai multe task-uri aparent simultan, fiind rentreruptibile.
13
Prin portabilitate nelegem gradul de reutilizare a programelor scrise pentru un anume
sistem la o clas larg de sisteme analoge celui iniial.
2. Programarea sistemelor cu MC
49
Aceasta este organizat dup principii ce pot diferi: FIFO prima dat memorat
este i prima dat extras, (First In First Out) sau ultima dat memorat este
prima dat extras LIFO (Last In First Out), etc. Dimensiunea zonei de
memorie este adecvat aplicaiei i fluxurilor informaionale vehiculate. Tot n
aceast categorie putem ncadra acele zone de "memorie comun", utilizate de
ctre task-uri diferite ce ruleaz pe sistem, zon prin intermediul creia sunt
pasate informaii de la un task la altul n scopul sincronizrii acestora. De
asemenea n cazul unor sisteme multiprocesor se implementeaz stive circulare
de mesaje ce asigur arbitrarea accesului procesoarelor la zona de memorie
comun, implementndu-se aa numita csu potal ("Mail Box"), etc.
Dimensiunea acestor zone poate fi att variabil ct i fix.
Simbolurile terminale sunt acei atomi lexicali care nu mai pot fi descompui n
continuare.
15
Simbolurile neterminale sunt simboluri rezultate ca urmare a compunerii unor simboluri
terminale.
MICROCONTROLLERE
50
Mnemonic
Aciunea
Mnemonic
Aciunea
MOV A,<src>
MOV <dest>,A
MOV <dest>,<src>
MOV DPTR,#data16
PUSH <src>
POP <dest>
XCH A,<byte>
XCHD A,@Ri
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
MOVX A,@DPTR
SWAP A
ANL A,<byte>
ANL <byte>,A
ANL 17 < byte > <-data8
ADD A,<byte>
ADDC A,<byte>
A <- <src>
<dest> <- A
<dest> <- <src>
DPTR <-data16
INC SP,@SP <- <src>
DEC SP,<dest> <- @SP
A <-> <byte>
A <-> <@Ri>
A <- @Ri
@Ri <- A
A <- @DPTR
@DPTR <- A
A<-@DPTR
A[high] <-> A[low]
A <- <byte>
<byte> <- A
<byte><- data8
A<-A+<byte>
A<-A+<byte>+C20
MOVF f,d
16
MOVWF
MOVLW
SWAP f,d
ANDWF f,d
ANDLW18 k19
ADDWF f,d
ADDLW21 k
d=0f[high] <->f[low]
d=0 W<-W * <f>
d=1 f<-W * <f>
W <- W*k
d=0 W<-W+f
d=1 f<-W+f
W <- W+k
2. Programarea sistemelor cu MC
21
51
ADDWF execut funcia aritmetic adunare ntre operanzi, analog avem SUBLW pentru
scdere i respectiv ADDLF/SUBLW pentru adunare/scdere data pe 8 bii
MICROCONTROLLERE
52
Familia 8051
Mnemonic
MUL AB
RR A
RRC A
RL A
RLC A
JMP addr22
CALL addr
RET
RETI24
A[low]<AxBB[high]<-AxB
A<- int(AxB) A<mod(AxB)
A0->A7 A7->A6 .
A0->C C->A7 .
A7->A0 A0->A1 .
A7->C A6->A7 .
PC23 <-addr
@SP <- PCPC <- addr
PC <- @SP
PC <- @SP
SETB b25
CLR b
INC A
INC DPTR
DEC A
DEC < byte>
b <- 1
b <- 0
A <-A+1
DPTR<- DPTR +1
A <- A-1
Byte<-byte-1
DIV AB
Mnemonic
Aciunea
RRF
A0->A7 A7->A6 .
RLF
A7->A0 A6->A7 .
GOTO addr
CALL addr
RETURN
RETFIE
RETLW k
BSF f,b
BCF f,b
INCF
PC <-addr
@SP <- PCPC <- addr
DECF
f <- f - 1
PC<-@SP, W<-k
fb <-1
fb <-0
f <- f + 1
Instruciunile mai sus prezentate fac parte din prima categorie. Lista
complet de instruciuni este detaliat pe CD la capitolele corespunztoare celor
dou microcontroller-e. Urmeaz instruciunile de decizie:
Familia 8051
Mnemonic
Aciunea
Mnemonic
Aciunea
JB addr_rel
b=1 =>PC<-PC+addr_rel
BTFSC f,b
JNB addr_rel26
b=0 =>PC<-PC+addr_rel
BTFSS f,b
fB=0 =>PC<-PC+2
Salt peste instr. urmtoare
fB=1 =>PC<-PC+2
Salt peste instr. urmtoare
JZ addr_rel
JNZ addr_rel
JC addr_rel
JNC addr_rel
JBC bit,addr_rel
A=0 =>PC<-PC+addr_rel
A0 =>PC<-PC+addr_rel
C=1 =>PC<-PC+addr_rel
C=0 =>PC<-PC+addr_rel
b=1 =>PC<PC+addr_rel,b <- 0
Ultimul tip de instruciuni, cel de ciclare este ilustrat doar prin cteva
exemple:
22
2. Programarea sistemelor cu MC
Familia 8051
Mnemonic
Aciunea
CJNE A,<byte>,addr_rel
A<byte> =>PC
<-PC+addr_rel
<byte>data8 =>
PC<-PC+addr_rel
byte <- byte1,PC<PC+addr_rel
CJNE <byte>,#data8,addr_rel
DJNZ <byte>,addr_rel
53
Mnemonic
Aciunea
DECFSZ f,d
INCFSZ f,d
5.
Prin "mapare" nelegem definirea unei funciuni surjective ce are drept mulime de
definiie mulimea porturilor i celorlalte dispozitie periferice i ca domeniu al valorilor un
subdomeniu din spaiul de adrese corespunztor memoriei interne a microcontroller-ului.
MICROCONTROLLERE
54
BIBLIOTECI
(DIVERSE)
EDITAREA
FIIERELOR
SURS (asamblare)
(FORMAT ASCII)
EDITAREA
FIIERELOR SURS
(n limbaj C)
(FORMAT ASCII)
ASAMBLAREA
FIIERELOR
SURS
COMPILAREA
FIIERELOR
SURS
LINK-EDITAREA
CONVERSIA FIIERELOR
OBIECT N FIIERE FORMAT
INTEL-HEX
TRANSFERUL FIIERELOR PE
SISTEMUL DE DEZVOLTARE I
DEPANAREA APLICAIEI
SCRIEREA PROGRAMULUI DE
FUNCIONARE N MEMORIA
EPROM/FLASH A SISTEMULUI
FIIER SURS
MACRO
ASSEMBLER
A51
FIIER
LISTING
2. Programarea sistemelor cu MC
55
LINK -EDITORUL
SPECIFIC
PROCESOARELOR
8051
FIIERUL OBIECT n
MODULUL OBIECT
ABSOLUT
FIIERUL CU REFERINE
NCRUCIATE
BIBLIOTECA
FIIERUL FORMAT
INTEL - HEX
FIIERUL OBIECT
ABSOLUT
CONVERTORUL
OHS51
FIIERUL SIMBOLIC
DIGITAL RESEARCH
HEX
FIIERUL N FORMAT
MICROTEK
MICROCONTROLLERE
56
Exemple:
START:
JMP
MAIN
LOOP:
DJNZ R7,LOOP
;R7 este simbolul corespunztor registrului R7, LOOP este simbolul corespunztor
;adresei de salt (acesta este un comentariu)
Utilizarea etichetelor nu este opional atunci cnd la adresele
corespunztoare acestora se face referire n program. Ele sunt de asemenea utile
pentru a da o mai mare lizibilitate programelor. mpreun cu comentariile ofer un
real ajutor att pentru proiectant ct i pentru cel ce analizeaz ulterior programele.
Numerele care sunt utilizate n cadrul programelor surs pot fi scrise n
urmtoarele formate:
Baza
Sufix
Caractere acceptate
Exemple
Hexazecimal
H, h
0,1,,9,A,B,C,D,E,F
1234H, 0E7H29, 0A345h
Zecimal
D,d
0,1,2,3,4,5,6,7,8,9
1234, 1234D,023d
Octal
O,o
0,1,2,34,5,6,7
123O, 256O,111Q,125q
Binar
B,b
0,1
11011101B
irurile sunt expresii ce includ maximum dou caractere ncadrate ntre apostrofuri.
Exemple:
'A' evaluat ca 0041H
'AB' evaluat ca 4142H
'ab' evaluat ca 6162H, etc.
28
<CR> reprezint -returul de car ("Carriage Return" ), iar <LF> sfritul de linie ("Line
Feed")
29
Caracterele scrise n format hexazecimal care ncep printr-o cifr exprimabil ca un
alfanumeric vor fi scrise cu 0 n faa acesteia. Acest caracter este ignorat la asamblare.
2. Programarea sistemelor cu MC
57
Simboluri: reprezint valori numerice, adrese sau nume de registre ce permit mai
buna lizibilitate a programelor. Atributele ce pot fi date simbolurilor sunt:
TYP: cu valorile CODE, DATA, BIT sau TYPELESS sau REGISTER
SEGMENT: orice simbol conine i untip de segment.
SCOPE: exprim validitatea simbolului, ea poate fi local (valabil doar n rutina
sau segment de program n care este specificat, public, caz n care n toate
modulele de program poate fi referit i este recunoscut, external, caz n care
definirea simbolului este realizat ntr-un alt fiier surs sau address symbol,
VALUE: reprezint valoarea numeric corespunztoare simbolului, aceasta
depinde de adresa tipului de simbol respectiv.
CHANGEALE: Aceste simboluri pot fi redefinite prin intermediul directivei SET.
Simbolurile care nu au fost definite utiliznd directiva SET nu pot fi redefinite
Asamblorul A51.EXE admite drept nume de simboluri irurile de caractere de pn
la 31 de caractere, primul trebuind s fie obligatoriu un caracter alfanumeric:
'A','a','Z','z'. Celelalte caractere pot fi orice caracter alfanumeric sau numeric.
Asamblorul dispune de anumite simboluri rezervate, respectiv de nume ce
definesc resurse ale microcontroller-ului respectiv. Iat cteva dintre acestea: A
=acumulatorul, R0,R1,..R7 sunt registre generale ale bancului curent, DPTR este
simbolul corespunztor registrului de adresare "Data Pointer", C este flag-ul de
transport (Carry Flag), AB sunt registrele A, respectiv B utilizate la nmulire i
mprire, iar AR0 la AR7 sunt registre generale ale bancului de registre curente.
Operatorii aritmetici recunoscui sunt:
Operatorul
Exemplu
Semnificaia
+, +5 +1 +0Ah
Semnul numrului
+,2+10-1
Reprezint operatorul aplicat
*
1234H*5
Repezint operatorul de multiplicare
/
45/9
Repezint operatorul de mprire
MOD
17 MOD 5
Reprezint operatorul de mprire ntreag
^
2^3
Reprezint operatorul de exponeniere
()
(2+5)*34
Precizeaz precedena operaiilor
Operatori binari utilizai sunt:
Operator Exemplu
Semnificaie
NOT
NOT 5
Complementul lui 5
HIGH
HIGH 1234H
Selecteaz partea mai semnificativ, respectiv
12H
LOW
LOW 1234H
Selecteaz partea mai puin semnificativ,
respectiv 34H a numrului 1234H
MICROCONTROLLERE
58
Operator
SHR,
SHL
AND
OR
XOR
Exemplu
2 SHL 4
0FEH AND 14H
0FEH OR 14H
0FEH XOR 14H
Semnificaie
Exprim deplasarea spre dreapta, respectiv stnga
a biilor numrului 2 cu 4 (ranguri)
Reprezint SI -ul logic ntre cei doi operanzi
Reprezint SAU -ul logic ntre cei doi operanzi
Reprezint SAU-EXCLUSIV ntre cei doi
operanzi
Exemplu
8>=17
8 LTE 45
8 NE 45
8 EQ 45
8 LT 45
8 GT 45
Semnificaie
Mai mare sau egal. Valoarea returnat: FALS
Mai mic sau egal. Valoarea returnat: ADEVRAT
Nu este egal. Valoarea returnat: ADEVRAT
Egal. Valoarea returnat: FALS
Mai mic dect. Valoarea returnat ADEVRAT
Mai mare dect. Valoarea returnat FALS
2. Programarea sistemelor cu MC
59
Nume_segment_relocatabil
SEGMENT
Tip_segment [Tip_relocatabil]
EQU
permite specificarea unei valori pentru o variabil utilizat n faza
de asamblare
SET
permite specificarea unei valori pentru o variabil utilizat n faza
de asamblare, valoare ce poate fi ulterior modificat
DATA
reprezint zona de memorie intern avnd adresele ntre 0 i 127
IDATA
reprezint zona adresabil indirect din memoria intern a
microcontroller-ului 0 la 127 sau 0 la 255 inclusiv.
XDATA reprezint zona adresabil pe byte situat n memoria extern
microcontroller-ului
BIT
reprezint zona adresabil pe bit situat ntre 20H i 27H inclusiv
CODE reprezint spaiul alocat codului (programelor executabile)
Rezervarea spaiului de memorie este realizat prin intermediul
dispoziiilor:
[Nume_bloc_memorie:]
DS
Dimensiune bloc de memorie
[Nume_variabil_byte:]
DB
Valoare de iniializare byte
[Nume_variabil_cuvnt:]
DW
Valoare de iniializare cuvnt
[Nume_variabil_bit:]
DBIT Valoare bloc bii
Dispoziiile ce pot fi incluse se pot adresa i link-editorului, ele trebuind s
fie specificate n programul surs. Acestea sunt:
PUBLIC directiv ce declar o variabil sau bloc de memorie "vizibil" n toate
modulele de program surs.
EXTRN directiv ce precizeaz faptul c variabila specificat se afl n alt modul
de program, implicit alt fiier surs. Se precizeaz tipul acestei variabile ce poate fi
numele unei rutine,deci este de tipul CODE sau o variabil din memorie, deci
DATA.
NAME directiv ce definete numele unui modul de program
Dintre dispoziiile de control a asamblrii menionm:
ORG adres Dispoziie ce specific adresa de la care se locateaz codul scris n
continuare
END Indic sfritul unui modul de program
RSEG Indic nceputul zonei registrelor generale (000H)
CSEG Indic nceputul memoriei de program (000H)
DSEG Indic nceputul zonei memoriei de date (memoria intern - 000H)
XSEG Indic nceputul zonei de memorie externe a microsistemului
ISEG Indic nceputul zonei de memorie interne adresabile indirect
BSEG Indic nceputul zonei adresabile pe bit
USING Specific bancul de registre generale utilizat
Dm n continuare doar un exemplu ce ilustreaz cum funcioneaz cteva
dintre aceste directive.
LOC OBJ LINE
SOURCE
0020 1 VAL
EQU 20H
;Iniializeaz variabila byte VAL cu 20H
0010 2 VAL1
EQU 16
;Iniializeaz variabila byte VAL1 cu 16
3
DSEG
60
MICROCONTROLLERE
0000 4 DS
10H
;Rezerv 15 bytes n zona RAM intern
0010 5 REG23:
DS
11H
;Rezerv blocul REG23 de 17 bytes n zona RAM
0021 6 BITI:
DS
01H
;Rezerv 1 byte cu numele BITI
0030 7 VAL2
SET VAL+VAL1 ;Inializeaz variabila VAL2
;funcie de variabilele VAL, VAL1. Variabila poate fi redefinit n program
REG 8 COUNTER SET R0
;Definete variabila COUNTER ce poate fi redefinit n program
9
BSEG
AT
BITI+8
;Seteaz adresa de la care definim zona utilizator accesibil pe bit
0029 10 BIT_0:
DBIT 1
;Definete bitul BIT_0
002A 11 BIT_1:
DBIT VAL2 ;Definete funcie de VAL2 bitul BIT_1
0008 12 VAL2
SET 8H
;Redefinete variabila VAL2
0008 13 BIT_2
BIT
VAL2 ;Definete bitul BIT_2
14 XSEG AT 80H
;Definete zona memorie externe utilizator ncepnd de la adresa 80H
0080 15
STACK1 DATA 80H
;Definete pointer-el STACK1
16
CSEG
;Definete nceputul zonei "memorie de program"
0000 17
START CODE 00H
;Definete tipul memoriei
0000 020003 18
JMP MAIN
;Instruciune de salt
0003 19
ISR0 CODE START+3 ;Definete adres coresp. ISR0
000B 20
ISR1 CODE START+0BH ; Definete adres coresp. ISR0
0003 21
MAIN:
;Adres de salt (definit de eticheta MAIN)
0003 858081 22
MOV SP,STACK1 ;Iniializare cu STACK1 a SP
23 END
;Sfrit program surs
SYMBOL TABLE LISTING
------ ----- ------NAME
TYPE
V A L U E ATTRIBUTES
BITI . . .
D ADDR
0021H A
BIT_0. . .
B ADDR
0025H.1 A
BIT_1. . .
B ADDR
0025H.2 A
BIT_2. . .
B ADDR
0021H.0 A
COUNTER. . REG R0
ISR0 . . .
C ADDR
0003H A
ISR1 . . .
C ADDR
000BH A
MAIN . . .
C ADDR
0003H A
REG23. . .
D ADDR
0010H A
SP . . . .
D ADDR
0081H A
STACK1 . .
D ADDR
0080H A
START. . .
C ADDR
0000H A
VAL. . . .
N NUMB
0020H A
VAL1 . . .
N NUMB
0010H A
VAL2 . . .
N NUMB
0008H A
2. Programarea sistemelor cu MC
61
[list_parametrii_formali]30
Nume_simbol31 [,Nume_Simbol1][]
Numr_repetiii32
IRP
parametru_formal <list>
IRPC parametru_formal,parameru_actual
EXITMcomand terminarea buclei macro curente
Exemple:
Am specificat deasupra liniei de definiie elementele acesteia:
Nume definiie MACRO
Cuvnt cheie
Parametrul MACRO
1 CLR_MEM
MACRO
DIMENS
2
MOV
R0,#DIMENS ;ncarc n R0 valoarea DIMENS
3 LOOP:
;Eticheta de definire a buclei
4
MOV
@R0,#00H
;Scrie la adresa memorat n R0:00H
5
DJNZ
RO,LOOP
;Testeaz i cicleaz pn R0=0
6
ENDM
;Sfrit MACRO CLR_MEM
; Macro-ul realizeaz umplerea cu zero a memoriei interne de la adresa 000H i
; pn la adresa DIMENS
7 REP_OK:
;Definete o etichet de recunoatere
8
REPT 2
;Definete factorul de repetiie
9
MOV R0,#1 ;ncarc n R0 valoarea 1
10
MOV A,@R0 ;Transfer de la adresa 1 informaia n A
11 ENDM
;Sfrit surs program generat repetitiv
0000 7801
12+1 MOV R0,#1 ;Programul generat (4 instruciuni)
0002 E6
13+1 MOV A,@R0
0003 7801
14+1 MOV R0,#1
0005 E6
15+1 MOV A,@R0
0006
16 IRP_EX:
;Exemplu de generare succesiune instruciuni
17
IRP
X,<2,3> ;Definire variabil X
30
MICROCONTROLLERE
62
18
19
20
[etichet:]
Nume_Macro
[Parametri_actuali]
2. Programarea sistemelor cu MC
63
MICROCONTROLLERE
64
0000 E599
4
5
2. Programarea sistemelor cu MC
65
Funciunea
[(nume_modul1,nume_modul2,)]
TO
nume_bibliotec
MICROCONTROLLERE
66
Memorie EEPROM
Porturi de intrare
Zona de dezvoltare
Microcontroller
Memorii EPROM /SRAM
Porturi de ieire
2. Programarea sistemelor cu MC
67
MICROCONTROLLERE
68
Sintaxa
D'<digii>, .<digii>
H'<digii>', 0x< digii >
O'< digii >'
B'< digii >'
'<caracter>', A'<caracter>'
Exemple
D'123', .255
H'EF' , 0xE32A
O'1234'
B'11010011'
'V', A'u'
Descriere
Definete un simbol drept
constant n program
Definete text de substituie
Definete o constant
Include un fiier surs
Definete tipul procesorului
Asigneaz o valoare unei
variabile (poate fi apoi
redefinit)
Renun la definiia anterior
precizat prin #DEFINE
Declar un simbol drept
variabil
Definete o macroinstruciune de decizie
Realizeaz buclarea atta
timp ct condiia testat la
nceput este adevrat
Sintaxa
Constant<etichet>=[<expresie>,
<etichet>=<expresie>,..]
#define <nume> [<arg>,<arg>,..]
<etichet> equ <expresie>
include <nume_fiier>
Processor <tip_procesor>
<etichet> set <expresie>
#undefine <etichet>
variable <etichet>[=expresie]
if <expresie>
while <>expresie
2. Programarea sistemelor cu MC
Directiva
BANKISEL
RES
FILL
DA
DATA
DB
DE
DT
DW
MACRO
EXITM
GLOBAL
__MAXRAM
Descriere
Selecteaz un banc de
memorie intern pentru acces
indirect
Rezerv spaiu de memorie
Umple o zon de memorie cu
o anume informaie
mpacheteaz n memoria de
program un ir
Creaz o valoare numeric
sau una text
Declar un byte
Declar o dat n EEPROM
Definete o tabel
Declar o dat un cuvnt
Definete un MACRO
Ieire dintr-unMACRO
Export definiia unei
etichete
Specific adresa maxim
pentru memoria RAM
69
Sintaxa
bankisel <etichet>
res <numr_de_locaii>
fill <expresie>,<numr_locaii>
<etichet> da
<expresie>[,<expresie>,]
data <expresie>[,<expresie>..],
data <text>[,<text>,..]
db <expresie>[,<expresie1>,..]
de <expresie>[,<expresie1>,..]
dt <expresie>[,<expresie1>,..]
dw <expresie>[,<expresie1>,..]
<etichet> macro [<argument>,
<argument1>,..]
Exitm
global <etichet>
__maxram <expresie>
3
MICROCONTROLLERE MOTOROLA
(MC cu arhitectur CISC)
Motorola a dezvoltat cteva tipuri de uniti centrale, la care s-au ataat o
multitudine de interfee, obinnd astfel foarte multe tipuri de circuite, compatibile
din punct de vedere software. Motorola a creat astfel posibilitatea producerii a
nenumrate variante de MC, care s acopere ct mai multe din aplicaiile
utilizatorului, numind aceste structuri CSIC (Customer Specified Integrated
Circuit). Spre deosebire de familia 8051 unde pe nucleul creat de INTEL, firme
constructoare au dezvoltat propriile MC compatibile, Motorola a creat o familie de
MC, obinnd astfel o unitate n diversitate.
Schema bloc simplificat a unui MC din familia Motorola este dat n
figura 3.1.
Memorie ROM,
EPROM sau OTP
+VDD
(+5V/+3V)
Unitatea central
6805, 6808...
RESET
IRQ
Memorie RAM
Oscilator
Memorie
EEPROM
Magistrala de date i
adrese
Port A
Port B
Port C
Porturi cu funcii
speciale (timer, CAN,
SPI, SCI)
71
3. Microcontrollere Motorola
3.1
MC M68HC05
Adresa (H)
0000
0001
0002-0003
0004
0005
72
MICROCONTROLLERE
Coninut
Nefolosit
Stare i control pentru timer
Registru numrtor pentru timer
Stare i control a ntreruperilor
Nefolosit
Nefolosit
Registru de programare a EPROM
Nefolosit
Nefolosit
RAM utilizator sau stiv (64 octei)
Nefolosit (512 octei)
EPROM (1232 octei)
Nefolosit (30 octei)
Test ROM (2 octei)
Registru COP
Registru de mti
Rezervai
Vector pentru timer (octet semnificativ)
Vector pentru timer
Vector pentru IRQ (octet semnificativ)
Vector pentru IRQ
Vector pentru SWI (octet semnificativ)
Vector pentru RESET (octet semnificativ)
Vector pentru RESET
Adresa (H)
0006-0007
0008
0009
000A
000B-0011
0012-0017
0018
0019-001F
0020-00BF
00C0-00FF
0100-02FF
0300-07CF
07D0-07ED
07EE-07EF
07F0
07F1
07F2-07F7
07F8
07F9
07FA
07FB
07FC
07FE
07FF
73
3. Microcontrollere Motorola
UAL
Unitatea aritmetic i logic
Registru index
Indicator de stiv
Numrtor de program (PC)
Registru de condiii
74
MICROCONTROLLERE
3. Microcontrollere Motorola
75
k este n registrul index, iar adresa nceputului tabelului este al doilea octet al
instruciunii.
7. adresare indexat cu offset pe 16 bii - instruciunile au trei octei, fiind
accesibile toate locaiile. UC adun fr semn registrul index la cei doi octei
din instruciune i se obine adresa efectiv a operandului (primul octet dup
codul instruciunii este octetul HIGH).
8. adresare relativ este folosit n instruciunile de salt. La un salt relativ, se
adun (cu semn) octetul care urmeaz dup codul instruciunii la coninutul
registrului Program Counter. Se pot face salturi relative n gama 127 de octei
nainte sau napoi.
76
MICROCONTROLLERE
3. Microcontrollere Motorola
timer
nIRQ sau PA
instruciunea SWI
Reset (POR, RESET din exterior, COP sau adres ilegal)
77
07F8h i 07F9h;
07FAh i 07FBh;
07FCh i 07FDh;
07Feh i 07FFh.
78
MICROCONTROLLERE
bit. Pentru a economisi timpul unitii centrale, interfeele pot lucra cu unitatea
central prin intermediul ntreruperilor.
b. Portul serial asincron SCI (Serial Communications Interface)
SCI este un transmitor receptor asincron universal (UART) cu
posibilitatea lucrului full-duplex. Pentru un transfer bidirecional sunt suficieni doi
pini. Cu circuite de translaie de nivel RS232 se pot face transferuri la distane
suficient de mari. Se poate programa una din 32 viteze de transmisie i lungimea
caracterului; se pot valida separat transmitorul i receptorul; se pot genera
ntreruperi n diferite situaii; se poate detecta eroare de cadrare la recepie.
Formatul datelor este ca la orice transmisie asincron (RS232 sau RS422).
Linia este n stare MARK, iar transmisia unui caracter este semnalat de trecerea
liniei n stare SPACE pe durata bitului de START. Urmeaz 8 sau 9 bii de date i
un bit de STOP.
Datele care se doresc a fi transmise sunt scrise n registrul de date al SCI
(SCDR), apoi se valideaz transmisia prin poziionarea bitului TE (Transmit
Enable) n registrul de control al SCI (SCCR2). Dup ce cuvntul a fost transmis,
se poziioneaz bitul TDRE (Transmit Data Register Empty) n registrul de stare
SCSR (SCI Status Register). Se indic astfel c poate fi transmis un nou cuvnt. Se
pot transmite caractere speciale, cum ar fi BREAK, care ine linia n stare SPACE
(se transmite un ir de 0) dac se poziioneaz bitul SBK n SCCR2 sau un caracter
care ine linia n stare MARK.
Golirea registrului de date semnalizat de TDRE sau de TC (Transmission
Complete) din SCDR poate genera o ntrerupere.
Datele sunt recepionate n SCDR, la recepia complet fiind poziionat
bitul RDRF (Receive Data Register Full) n SCSR. Pentru eliminarea recepiilor
false fiecare bit de start este eantionat i citit de 16 ori; orice nepotrivire a
eantioanelor duce la respingerea acestui bit. Dac nu se recepioneaz bitul de
STOP se anun o eroare de cadrare prin poziionarea bitului FE n SCR.
ntreruperile la recepie pot fi generate dac bitul RDRF din SCSR indic
recepia unui caracter, dac este o eroare de vitez de recepie (prin recepia unui
caracter nainte ca cel precedent s fi fost citit) sau dac s-a recepionat un caracter
special format numai din valori de 1.
Structura registrului de control SCCR1 este:
Bit 7 este al 9-lea bit recepionat dac s-a definit o transmisie pe 9 bii
Bit 6 este al 9-lea bit de transmis dac s-a definit o transmisie pe 9 bii
Bit 4 comand lungimea caracterului, 8 sau 9 bii
Bit 3 este un bit de trezire care comand ce fel de condiie trezete SCI
Structura registrului de control SCCR2 este:
Bit 7 - TIE Transmit Interrupt Enable - valideaz ntreruperile cerute de TDRE
Bit 6 - TCIE Transmit Complete Interrupt Enable - valideaz ntreruperile
cerute de TC
Bit 5 - RIE Receive Interrupt Enable - valideaz ntreruperile cerute de RDRF
79
3. Microcontrollere Motorola
Bit 5
0
0
1
1
Bit 4
0
1
0
1
Bit 2
0
0
0
0
1
1
1
1
Bit 1
0
0
1
1
0
0
1
1
Bit 0
0
1
0
1
0
1
0
1
Rata de transfer
ceas de transfer
ceas de transfer/2
ceas de transfer/4
ceas de transfer/8
ceas de transfer/16
ceas de transfer/32
ceas de transfer/64
ceas de transfer/128
80
MICROCONTROLLERE
de transmisie SPI (SPDR - SPI Data Register) de unde datele merg ntr-un registru
de deplasare n care sunt serializate i de unde sunt transmise sincron cu ceasul de
transmisie. Transmisia se termin dup 8 tacte, cnd se poziioneaz bitul SPIF.
nainte ca master-ul s trimit un nou octet trebuie s se reseteze bitul SPIF prin
citirea registrul de stare SPSR. n slave datele intr n registrul de deplasare cu
tactul de recepie, acelai cu cel de transmisie. Cnd au intrat 8 bii, caracterul este
transferat n registrul de date SPDR. Pentru a se evita erorile de vitez (sau de
suprascriere - Overrun) trebuie ca octetul din SPDR s fie citit nainte ca un alt
octet s fie transmis din registrul de deplasare.
Poziionnd bitul MSTR din registrul SPCR n 1, MC lucreaz n mod
master. n acest mod pinii au urmtoarea semnificaie:
n figura 3.3 este artat o conexiune SPI n care sunt legate un circuit master i
mai multe circuite slave.
SPI
MISO
MOSI
SCK
/SS
+1
Port I/O
0
1
2
MC master
Dispozitiv slave
Dispozitiv slave
3. Microcontrollere Motorola
81
registrul de date este gol sau plin (la transmisie respectiv la recepie) se
semnaleaz cu SPIF care poate genera o ntrerupere dac ntreruperea este
validat cu SPIE;
la apariia unei erori Mode Fault semnalat cu MODF, dac ntreruperea
este validat cu SPIE.
d. Timer
82
MICROCONTROLLERE
Divizare
cu 4
Numrtor de 8 bii
MSB
Numrtor de 7 bii
Numrtor de 3 bii
COP
Selecie ieire
Generare de Reset
intern al UC
RT1
0
0
1
1
RT0
0
1
0
1
Perioada de ntrerupere
8.2ms
16.4ms
32.8ms
65.5ms
83
3. Microcontrollere Motorola
semnal, iar la tranziii de polaritate opus poate determina limea unui impuls.
Polaritatea de declanare este programabil. Prin comparare se poate genera un
semnal de ieire cnd numrtorul timerului atinge o valoare selectat. La fiecare 4
tacte se compar valoarea numrtorului cu cea scris n registrul de comparare.
Dac este egalitate se genereaz un semnal TCMP.
e. Portul PWM
Modulaia impulsurilor n lime (Pulse Width Modulation) are multe
aplicaii, mai ales n comanda motoarelor de curent continuu sau a surselor de
alimentare. Din acest motiv unele MC includ n structura lor un modulator PWM
ca interfa.
Circuitul MC68HC05D9 conine 5 canale PWM de cte 6 bii care sunt
realizate cu ajutorul unui numrtor de 6 bii, un registru de control PWM i 5
registre de date care formeaz 5 linii PWM ce sunt disponibile la pinii portului D
(figura 3.5).
R
E
G
I
S
T
R
U
PWM4 (000Dh)
PWM3 (000Ch)
Numrtor de 6
bii
PWM2 (000Bh)
PWM1 (000Ah)
PWM0 (0009h)
PWM 4
PWM 3
D
E
PWM 2
M
O
D
PWM 1
P
W
M
PWM 0
0008h
Figura 3.5 Structura modulului PWM la familia 6805
n registrul de mod sunt 5 bii care valideaz modulul PWM astfel nct
semnalele PWM s fie livrate pe la pinii portului D. Tot n registrul de mod mai
este un bit, SCIB, care selecteaz dac la adresa 000Dh s fie date pentru PWM
sau rata de divizare pentru SCI. Dac nu sunt folosite ca ieiri PWM, liniile
portului D pot fi folosite ca intrri/ieiri obinuite. Registrul de mod PWM se afl
la adresa 0008h.
84
MICROCONTROLLERE
Transceiver
Cablu USB
D+
D-
Registre USB
Stabilizator 3,3V
BUS INTERN
85
3. Microcontrollere Motorola
g. Interfaa LCD
MC6805 DragonKat este denumirea unui MC din familia 6805 care
conine o interfa pentru un afior cu cristale lichide.
Interfaa pentru LCD conine:
Un punct este aprins cnd o linie Bpi i una SEGi sunt active. Pentru
caracterul A, memoria RAM de display are coninutul din tabelul 3.4.
Tabelul 3.4
Coninutul memoriei pentru afiarea caracterului A
Adresa
200
201
202
203
204
205
206
207
Bit0
0
0
1
1
1
1
1
0
Bit1
0
1
0
0
1
0
0
0
Bit2
1
0
0
0
1
0
0
0
Bit3
0
1
0
0
1
0
0
0
Bit4
0
0
1
1
1
1
1
0
86
MICROCONTROLLERE
Registru
de control
Registru de
date LCD
(40bii)
Driver
pentru
planul
din
spate
BP0-BP15
Driver de segmente
SEG0-SEG39
Figura 3.8 Schema bloc a intefeei LCD
87
3. Microcontrollere Motorola
3.1.8 Autoverificarea
MC are 2 moduri de operare: normal i auto-verificare. Modul de operare
este selectat de nivelul logic pe pinul IRQ n momentul unui RESET. n modul
normal de operare ncepe rularea unui program din EPROM, deci EPROM-ul
trebuie sa fie programat dac a fost ales modul normal de operare. n modul
autotest MC ruleaz un program coninut n ROM n zona de memorie 3F00h3FDEh. Autotestul comunic rezultatele la pinii PC3-PC0, unde se pot conecta
LED-uri.
MC68xx
A0-A7
D0-D7
A8-A12
PA
PA0PA7
PB
SCI
PD
PD1
PD0
Circuite de
modificare de
nivel RS232
PB0PB7
PC
PC0PC4
TxD
RxD
88
MICROCONTROLLERE
3.2
MC M68HC08
89
3. Microcontrollere Motorola
+VDD (+5V
sau +3V)
Unitatea central
6805, 6808...
RESET
IRQ
Memorie RAM
(128bytes)
Oscilator
Memorie
EEPROM
Port A
Port B
ADC
Magistral de date i
adrese
Port C
Port D
Port E
Port F
Seriale
Timer
Port G
Port H
Tastatur
90
MICROCONTROLLERE
91
3. Microcontrollere Motorola
ADC
Cerere de
ntrerupere
ADSCR
Selecie
canal
Intrri
analogice
Ceas de conversie
92
MICROCONTROLLERE
Bit 5 ADCO (ADC Continous Conversion), dac este setat se face conversie
continu.
Bit4-0 ADCH4-0 selecteaz unul din cele 8 canale de conversie
registru de date (ADR)
registru de ceas (ADCLK) care conine:
Bit 7-5 ADIV2-0 formeaz rata de divizare a ceasului de conversie de la
ADICLK (000) la ADICLK/16 (100).
Bit 4 ADICLK selecteaz ca ceas de conversie ceasul intern sau un ceas
generat de timer.
O conversie ncepe dup scrierea registrului ADSCR. Rezultatul conversiei
este stocat n registrul de date (ADR) i la terminarea conversiei se poziioneaz
bitul COCO. Dac se opteaz pentru conversie continu, dup prima conversie
urmeaz alta, care rescrie registrul de date. Dac sunt validate ntreruperile,
sfritul conversiei poate cere ntrerupere ctre UC sau poate face i o cerere
DMA.
c. Interfaa extern msCAN08 (Motorola Scalable CAN)
Protocolul CAN a fost definit de BOSCH n 1991 pentru utilizarea pe o
magistral la autoturisme, unde s ndeplineasc condiii specifice: procesare n
timp real, fiabilitate ntr-un mediu perturbat i pre mic. Caracteristici ale
magistralei msCAN08 sunt:
MC 2
msCAN08
TxCAN RxCAN
Transceiver
msCAN08
TxCAN RxCAN
Transceiver
Magistrala
93
3. Microcontrollere Motorola
RxF
Filtru
Date spre
CPU
Tx0
TxE 0
PRIO
Tx1
TxCAN
PRIO
Tx2
PRIO
Date de
la CPU
TxE 1
TxE 2
94
MICROCONTROLLERE
95
3. Microcontrollere Motorola
EEBPx
0
0
0
0
1
EERAS1
0
0
1
1
X
EERAS0
0
1
0
1
X
Operaia
Programare de octet
tergere de octet
tergere bloc
tergere global
Nu se executa programare/stergere
96
MICROCONTROLLERE
3.3
MC PE 16 BII - 6816
3. Microcontrollere Motorola
97
3.3.2 Interfee
Interfeele seriale sunt grupate sub forma unui modul serial cu coad de
ateptare (QSM Queued Serial Module) care conine o interfa serial SPI i una
SCI. Coada de ateptare este format n RAM i are dimensiunea de 16 cuvinte de
8-16 bii fiecare. Transmisia acestui ir de date poate fi executat automat, fr
intervenia unitii centrale. Modulul QSM este cuplat pe bus-ul IMB.
Convertorul analog numeric (ADC) este un convertor cu aproximaii
succesive cu rezoluia programabil de 8-10 bii, cu 8 canale multiplexate.
Convertorul este conectat pe bus-ul IMB.
Pentru date importante (cum ar fi cele din stiv) exist o memorie RAM
static de 1K octet care la cderea tensiunii de alimentare este alimentat de la un
pin special, unde se poate conecta o baterie.
Timer-ul are 11 canale, din care 2 sunt folosite pentru generarea
semnalelor PWM.
Circuitul este capsulat n capsule de 132 sau 144 pini.
Schema bloc a circuitului este dat n figura 3.14.
98
MICROCONTROLLERE
SIM
Unitatea central
6816
Port C
Port E
IMB
Memorie
SRAM
(1024 octei)
QSM
(SCI, SPI)
Port QS
Port F
Magistral de date i
adrese IMB
Port ADC
Timer
Port GP
PWM
3.4
MC PE 32 DE BII - 68300
99
3. Microcontrollere Motorola
3.5
MC
Magistrala
date
6805
6808
6816
68300
8
8
16
32
de Frecven
a
(MHz)
2
8
16
16
Pre
(USD)
31
48
48
48
1.9
2.1
8.25
17.5
6
6
6
6
4
FAMILIA MCS-51
8051 a fost propus de INTEL n a doua generaie de MC i este cel mai
folosit i cel mai bine vndut MC din lume. n 1976 Intel a prezentat familia de
microcontroller-e MCS48 care este compus din 8048, 8748 i 8035. A aprut
astfel pentru prima dat pe pia un microcalculator complet pe un singur chip. MC
includea o unitate central pe 8 bii, memorie ROM sau EPROM de 1024x8bii,
RAM 64x8 bii, porturi I/O i timere. n etapa a doua, INTEL a lansat familia
MCS-51 format din MC 8051, 8751 i 8031. INTEL recomand ca punerea la
punct a aplicaiei s fie realizat pe MC 8751 care este prevzut cu memorie
EPROM (4K octei). Memoria poate fi programat cu orice programator, dar se
recomand utilizarea programatorului de la INTEL (UPP, Universal PROM
Programmer). Pentru produse n serie mare se recomand 8051, care are memorie
ROM, programat de furnizor la comanda beneficiarului i care revine la un pre de
cost mult mai mic. MC 8031 nu conine ROM, dar se poate ataa n exterior ROM,
PROM sau EPROM, direct sau multiplexat.
8051 este un MC foarte puternic i uor de programat. Ca dovad, n
tabelul 4.1 se prezint cteva modele oferite de diferii furnizori, echivalente cu
8051:
Tabel 4.1
Modele echivalente 8051 oferite de diferii productori
Varianta
8031
8051
80C51GB
87C51GB
SABC502
80C552
83CL580
80C320
89S8252
89C55
Nr.
pini
40
40
68
68
40
68
56,
40
40.
40.
Productor
Toi
Toi
Intel
Intel
Siemens
Philips
Philips
Dallas
Atmel
Atmel
RAM Mem.
program
128
64K
128
4K
256
64Kx
256
8K
256
64Kx
256
64Kx
256
6K
256
64Kx
256
10K
256
20KF
Observaii
Procesor de baz, UART, Tmr0+1
Procesor de baz, UART, Tmr0+1
8051+PCA, 8bA/D
8051+PCA, 8bA/D
8052+XRAM+WDog
10bA/D, i2c, CC,PWM
LV 8052+A/DC+i2c+WDog
Fast, 2UART
FLASH 8k, WDog
FLASH,fast, LV
101
4. Familia MCS-51
4.1
STRUCTURA I FUNCIONAREA
Adrese
Unitatea central
Acumulator A
Ind. Stiv SP
Nr. program PC
Gener
ator de
RAM
Magistral de date
Timer
Controlle
r de
P0
P1
I
n
P2
P3
102
MICROCONTROLLER-e
acumulator A - 8 bii;
registrul de stare PSW (Program Status Word) - 8 bii;
registrul B (8 bii) folosit n operaiile de nmulire i mprire;
indicatorul de stiv (Stack Pointer) - 8 bii;
un registru numrtor de date (DPTR Data Pointer) - 16 bii - care poate fi
manipulat i ca 2 registre de cte 8 bii (DPH i DPL) i servete ca baz n
salturi indirecte sau n transferuri externe;
numrtorul de program (PC Program Counter) - 16 bii.
Adresa
salt
RESET
Extern 0
Timer 0
0000h
0003h
000Bh
de Sursa de ntrerupere
Extern 1
Timer 1
Port serial
Adresa de salt
0013h
001Bh
0023h
103
4. Familia MCS-51
Pin
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
Semnificaie
RXD-intrare serial a porului pentru recepie
TXD-ieire serial a portului pentru emisie
/INT0-ntrerupere extern pentru Timer 0
/INT1-ntrerupere extern pentru Timer 1
T0-intrare extern n Timer 0
T1-intrare extern n Timer 1
/WR-strob pentru scrierea memoriei de date extern
/RD-strob pentru citirea memoriei de date extern
Ieirile sunt bufferate i pot suporta pn la 4 intrri LS TTL. Pinii programai ca ieiri n
stare HIGH pot fi folosii ca intrri. Ca pini de intrare, dac au fost forai n LOW din
exterior, acetia furnizeaz curent.
104
MICROCONTROLLER-e
MC
8031AH
8051AH
8751H
8032AH
8052AH
8752BH
4. Familia MCS-51
105
M1
0
0
1
1
M0
0
1
0
1
Modul de operare
Timer pe 13 bii (Mod 0)
Timer/Counter pe 16 bii (Mod 1)
TL0 este timer/counter pe 8 bii i TH0 este timer pe 8 bii (Mod 2)
Timer/Counter 1 oprit (Mod 3)
106
MICROCONTROLLER-e
SM0
0
0
1
1
SM1
0
1
0
1
Mod
Mod 0
Mod 1
Mod 2
Mod 3
4. Familia MCS-51
107
108
MICROCONTROLLER-e
PT2
PS
PT1
PX1
PT0
PX0
C (10)
109
4. Familia MCS-51
X2
Operaia
RST
nPSEN
ALE
Programare
Verificare
1
Setarea bitului 1
de siguran
0
0
/EA/VP
P
P2.7
P2.6
0
1
0
1
110
MICROCONTROLLER-e
4.2
8051 are 111 instruciuni din care 64 sunt executate ntr-un singur ciclu.
4. Familia MCS-51
Adunare:
INC
ADD
ADDC
DAA
111
Scdere:
SUBB - scdere cu mprumut, scade operandul din acumulator, apoi
scade CY i pune rezultatul n A.
DEC - scade 1 din operand i pune rezultatul ca nou operand.
nmulire:
MUL - execut o nmulire fr semn ntre acumulator i registrul B,
rezultatul obinut fiind pe 2 octei (octetul cel mai semnificativ se
pune n B). Dac toi biii din octetul cel mai semnificativ al
rezultatului sunt 0 bitul OV i CY din PSW se pun la 0.
mprire:
DIV
- execut mprirea fr semn a coninutului registrului A la
coninutul registrului B. Partea ntreag a rezultatului se pune n A,
iar partea fracionar n B.
Instruciuni pentru operaii logice:
Instruciuni logice cu un singur operand:
CLR - reseteaz A orice bit adresabil direct.
SETB - seteaz orice bit adresabil direct.
CPL - complementeaz coninutul lui A, fr a afecta PSW.
RL
- rotaie stnga a acumulatorului.
RLC - rotaie stnga a A prin CY.
RR
- rotaie dreapta a A.
RRC - rotaie dreapta a A prin CY.
SWAP - inverseaz niblurile n A.
Instruciuni logice cu 2 operanzi:
ANL - I logic.
ORL - SAU logic.
XRL - SAU EXCLUSIV logic.
Instruciuni de control:
Apeluri i salturi necondiionate:
ACAL - este o instruciune pe 2 octei de apelare a unui subprogram care
se folosete atunci cnd adresa de salt este cuprins n 2K ai
paginii curente. Cmpul de adres de 11 bii este concatenat cu cei
mai semnificativi 5 bii din PC.
LCALL- este o instruciune pe trei octei de apelare a unui subprogram care
adreseaz toi cei 64K ai memoriei.
RET - transfer controlul la adresa de ntoarcere care a fost n prealabil
salvat n stiv i decrementeaz registrul SP cu 2.
112
MICROCONTROLLER-e
4. Familia MCS-51
113
ADD A,@R1
Adresare imediat - folosit cnd operandul este o constant cu o valoare
cunoscut, care se specific n codului instruciunii. n limbajul de asamblare al lui
8051 constanta este precedat de semnul #. De exemplu adunarea lui 15 cu 18
zecimal, cu rezultatul n acumulator:
MOV A,#15
ADD A,#18
4.3
114
MICROCONTROLLER-e
CPU
Secveniator
ECNTRL
EEPROM
ETIM
EDATA
EADRH
EADRL
BUS INTERN
4. Familia MCS-51
115
116
MICROCONTROLLER-e
4.4
117
4. Familia MCS-51
S1ADR
SDA
S1DAT
Arbitrare i
sincronizare
SCK
Generare ceas
B
U
S
I
N
T
E
R
N
S1CON
S1STA
ceasul serial de transfer n mod MASTER (SCK), care este n funcie de tactul
sistemului i poate fi de maximum 100kHz;
se poate selecta dac liniile I/O (P1.6 i P1.7) au semnificaiile generale sau
speciale pentru I2C;
118
MICROCONTROLLER-e
Registrul de stare S1STA (D9h - registru Read Only) poate fi folosit pentru
generarea unei ntreruperi i saltul la o rutin de servire.
n registrul de date S1DAT (DAh) se nscrie octetul care se transmite sau
se recepioneaz; cel mai semnificativ bit se transmite sau se recepioneaz primul.
n registrul de adrese S1ADR (DBh), la un dispozitiv MASTER se
stabilete adresa dispozitivului SLAVE cu care dorete un transfer de date.
Observaie: convertorul AD, interfaa I2C i canalul PWM0 pot lucra n
modurile cu economie de energie. Convertorul, interfaa I2C i canalul PWM0
rmn active n modul Idle al UC i pot genera o ntrerupere sau un RESET,
terminnd astfel modul inactiv al UC.
119
4. Familia MCS-51
8051
RAM
4-8 Koctei
Interfaa cu memoria
extern (nemultiplexat)
PIO
(24 linii)
BUS INTERN
Interfa I2C
D+
Interfaa USB inteligent
SCK
Transceiver USB
SDA
Figura 4.6 Schema bloc a unui MC cu interfa USB
120
MICROCONTROLLER-e
Temporizator/
Numrtor (Baza de
timp pentru modulele
PCA)
P1.3
P1.4
P1.5
CPS1
0
0
1
1
CPS0
0
1
0
1
Fiecare modul mai are asociat un registru de 16 bii (cte dou de 8 bii;
CCAP0H-CCAP5H i CCAP0L-CCAP5L) care stocheaz valoarea numrat la
apariia unei coincidene. n mod PWM aceste registre controleaz factorul de
umplere.
Funcionarea PCA:
4. Familia MCS-51
121
122
MICROCONTROLLER-e
S00-S21
12
linii
I/O
Modul LCD
Nucleu
8051
S22/BP3
S23/BP2
BP1
BP0
S01
2 elemente de afisaj,
(primulale
aprins,
al doilea
Figura 4.9 Comanda a doua elemente alturate
afiajului
LCDstins)
Primul element este aprins pentru c ntre segment i planul din spate este
o diferen de potenial, iar al doilea este stins pentru c nu exist o diferen de
potenial.
Comanda modulului de afiare se face cu 12 registre LCD0-LCD11
(adrese 9Ah-BFh) care conin configuraia segmentelor stinse/aprinse pentru
fiecare plan din spate.
123
4. Familia MCS-51
Nucleu 8051
(fra memorie)
RAM
ROM
Magistral de date
Porturi I/O
P3 P2 P1(4b) P0
8x6bit PWM
14bit PWM
DAC
124
MICROCONTROLLER-e
P1.3
P0.6
P1.0
MUX
ANALOGIC
Comparator
P1.1
DAC (4 bit)
2 ceasuri video;
semnalul de sincronizare orizontal;
4. Familia MCS-51
125
126
MICROCONTROLLER-e
RAM
64Koctei
Interfaa cu
memoria
extern
Interfaa
JTAG
BUS CSI
Matrice CSL
PIO
PIO
PIO
Matrice
de
legturi
Matrice
de
legturi
Modul CSL
Linii lungi de
adres
Linii
scurte de
interconectare
Modul CSL
Matrice
de
legturi
Matrice
de
legturi
Linii lungi I/O
127
4. Familia MCS-51
Intrri
1
Bistabil D
Ieiri
EN
T
4.5
128
MICROCONTROLLER-e
8051
X1 AD0-AD7
P0
LATCH
ADRESE
/A15
X2
RST
/WR
RAM
STATIC 32K
A0-A14
CS D0-D7
/WE
ALE
P2
A8-A15
P1
OE
BUS
ADRESE
A0-A15
/RD
/WR
PSEN /RD
BUS
DATE
D0-D7
EPROM
A0-A14
A15
/PSEN
CS
D0-D7
/OE
129
4. Familia MCS-51
8051
8243
X1
P0
P4
X2
RST
P2.3
P2.2
P2.1
P2.0
P23
P5
P22
P21
P20
P6
P2.5
P2.4
/CS
PROG
P7
P1
4.6
Tabelul 4.8
Tabel comparativ pentru MC din familia MCS -51
MC
PHILIPS
P87C51
PHILIPS
S87C552
PHILIPS XA-G3
TRISCEND E5
INTL 87C196
Magistrala de Frecven
date
a
(MHz)
8
16
Linii
I/O
Interfee
speciale
Pre
(USD)
32
16
48
35
16
8
16
30
40
20
32
128
53
2
2
6
90
27
18
130
MICROCONTROLLER-e
5
MICROCONTROLLER-E RISC
5.1.1
PIC12
131
5. Microcontroller-e RISC
(C), Digit Carry (C ) i Zero (Z). Numrtorul de program (PC) este un registru de
12 bii, ceea ce nseamn c poate adresa un spaiu de 2K cuvinte de 12 bii.
Schema bloc a acestui MC este dat n figura 5.1.
Memoria program
ROM/OTP/EPROM
Memoria de date
RAM 25 x 8 bii sau
41 x 8 bii
(set de registre )
Unitate central
ALU
PC
Ceas de
gard
Timer pt.
RESET
SDA
date
EEPROM serial
16 x 8
PIO
Registru
INDF
TMR0
PCL
STATUS
Adresa(H)
00
01
02
03
Registru
FSR
OSCCAL
GPIO
Registre
generale
Adresa(H)
04
05
06
07-1F
132
MICROCONTROLLER-e
Mnemonic-operanzi
ADDWF f,d
ANDWF f,d
CLRF f
CLRW
COMF f,d
DECF f,d
DECFSZ f,d
INCF f,d
INCFSZ f,d
IORWF f,d
MOVF f,d
MOVWF f
NOP
RLF f,d
RRF f,d
SUBWF f,d
SWAPF f,d
XORWF f,d
BCF f,b
BSF f,b
BTFSC f,b
BTFSS f,b
ANDLW k
CALL k
CLRWDT k
GOTO k
IORLW k
MOVLW k
OPTION k
RETLW k
SLEEP
TRIS f
XORLW k
Descriere
Adun W cu f
I LOGIC ntre W i f
Face n f toi biii 0
Face n W toi biii 0
Complementeaz f
Decrementeaz f
Decrementeaz f i trece mai departe dac este 0
Incrementeaz f
Incrementeaz f i trece mai departe dac este 0
SAU W cu f
Mut f
Mut W n f
Nici o operaie
Rotaie la stnga prin Carry
Rotaie la dreapta prin Carry
Scdere W din f
Schimb f
SAU EXCLUSIV W cu f
Bitul b din f este fcut 0
Bitul b din f este fcut 1
Se testeaz bitul b din f i face salt dac bitul este 0
Se testeaz bitul b din f i face salt dac bitul este 1
I ntre W i constanta k
Chemare subrutin
Resetare ceas de gard
Salt necondiionat
SAU ntre W i k
ncrcare imediat a constantei k n W
ncrcare registru de opiuni
ntoarcere din subrutin cu plasarea k n W
Intrarea n mod inactiv
ncrcarea registrului TRIS
SAU EXCLUSIV ntre k i W
133
5. Microcontroller-e RISC
GPIO,5
Alegere
tact
TIMER
Prescalare
GP2
(TOCKI)
(extern)
Magistrala de date
TOC5
PSA
134
MICROCONTROLLER-e
transferul de date poate avea loc doar dac magistrala de date nu este ocupat, cu
SDA i SCL=1. Un START este determinat de frontul SDA din 1 n 0, iar un front
SDA din 0 n 1 reprezint un STOP. Data trebuie s fie stabil pe SDA pe durata
unui impuls de tact SCL (o tranziie din 1 n 0, urmat de una din 0 n 1).
Subrutinele de scriere/citire a EEPROM-ului sunt disponibile pe site-ul firmei.
Pentru a asigura sigurana rulrii corecte a programului, circuitul este
echipat cu un ceas de gard, care poate fi resetat printr-o instruciune special,
asigurnd o ntrziere de 18ms pn s declaneze un RESET.
Familia PIC12 are posibilitatea de lucru ntr-un mod cu economie de
energie, numit SLEEP. n modul SLEEP oscilatorul este oprit, iar pinii I/O i
pstreaz starea. Intrarea n SLEEP se face cu o instruciune special. MC poate fi
scos din acest mod de lucru printr-un front aplicat la pin extern sau de ceasul de
gard.
Ca i mod de generare a tactului extern, circuitul poate lucra n mai multe
feluri:
135
5. Microcontroller-e RISC
Inscriptor
(ex. Calc. PC)
PIC12C5xx
+5V
Vdd
GND
Vss
Vpp
/MCLR/Vpp
CLK
GP1
D I/O
GP0
Vdd
GP5/OSC1
GP4/OSC2
GP3/MCLR/Vpp
PIC12C
1
2
3
4
8
7
6
5
Vss
GP0
GP1
GP2/T0CKI
5.1.2
PIC16
35 de instruciuni fa de 33;
frecvena maxim 20MHz fa de 4;
posibilitatea de lucru n ntreruperi, cu 7 surse interne i o surs
extern;
stiv automat cu 8 nivele;
13 linii I/O cu posibilitatea stabilirii individuale a sensului de transfer
i cu o linie de putere pentru comanda direct a unui LED;
136
MICROCONTROLLER-e
selecia tactului pentru convertor (Fosc/2, /8, /32 sau ceas propriu);
selecia canalului analogic;
un bit pentru START conversie;
un bit pentru terminare conversiei - poate fi citit i testat prin program,
sau poate cere o ntrerupere;
un bit pentru oprirea convertorului pentru a nu mai consuma curent,
dac nu este folosit n mod SLEEP.
5. Microcontroller-e RISC
137
5.1.3
PIC17
PIC17 are urmtoarele mbuntiri fa de PIC16:
58 de instruciuni fa de 38;
frecvena maxim 33MHz fa de 20;
stiv automat cu 16 nivele fa de 8;
33 de linii I/O cu posibilitatea stabilirii individuale a sensului de
transfer i cu o linie de putere pentru comanda direct a unui LED;
magistrala de instruciuni este pe 16 bii, fa de 14 bii;
memoria ROM este de 2048 x 16 cuvinte;
memoria RAM este de 232 de octei;
magistralele de date, i adrese (multiplexate) sunt accesibile la pin;
unitatea central poate executa nmuliri;
sunt admise 11 surse de ntreruperi fa de 8.
138
MICROCONTROLLER-e
Memoria program
ROM/OTP/EPROM
2K x 16 bii
M
A
G
I
S
T
R
A
L
A
Memoria de date
RAM 232 x 8 bii
Unitate central
ALU
PC
STIVA
16 x 16 bii
I
N
S
T
R
.
Timer
Ceas de
gard
Timer pt.
RESET
Control
ler de
ntrerup
3x
TIMER
UART
PIO
Port C i D
Port B
Port A
Modulul USART poate fi configurat s lucreze n mod serial asincron fullduplex (pentru a transfera date cu un terminal sau un PC), sau n mod sincron fullduplex (de ex. pentru a lucra cu memorii externe EEPROM).
5. Microcontroller-e RISC
139
5.2 MC ATMEL
Foarte bine plasate pe pia n zona aplicaiilor low cost sunt MC ale firmei
ATMEL. Firma fabric i MC echivalente 8051.
5.2.1
Familia AVR
140
MICROCONTROLLER-e
Memoria program
FLASH 2K octei
Memoria de date
ALU
PC
Magistral de date
SPI
Ceas de
gard
Timer
Oscilator
Controller de
ntreruperi
Port B
141
5. Microcontroller-e RISC
00h
Memoria program
FLASH
1Kx 16 bii
000h
32 registre de lucru
00h
EEPROM
128 octei
1Fh
64 registre I/O
SRAM
128 octei
60h
7Fh
3FFh
142
MICROCONTROLLER-e
Tabelul 5.3
Setul de instruciuni al familiei AVR
Mnemonic
ADD
ADC
SUB
SUBI
SBC
SBCI
AND
ANDI
OR
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
RJMP
RCALL
RET
RETI
Operanzi
Rd,Rr
Rd,Rr
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd,K
Rd,Rr
Rd
Rd
Rd,K
Rd,K
Rd
Rd
Rd
Rd
Rd
k
k
Operaie
Rd=Rd+Rr
Rd=Rd+Rr+C
Rd=Rd-Rr
Rd=Rd-K
Rd=Rd-Rr-C
Rd=Rd-K-C
Rd=Rd*Rr
Rd=Rd*K
Rd=Rd v Rr
Rd=Rd v K
Rd=RdRr
Rd=$FF-Rd
Rd=$00-Rd
Rd=Rd v K
Rd=Rd*(FFh-K)
RD=Rd+1
Rd=Rd-1
Rd=Rd * Rd
Rd=RdRd
Rd=$FF
PC=PC+k+1
PC=PC+k+1
PC=STACK
PC=STACK
Operaie
Sum
Sum plus carry
Diferen
Diferen cu o constatnt
Diferen cu carry
Dif. cu const. i carry
SI logic
SI logic cu const.
SAU logic
SAU logic cu const.
SAU exclusiv
Complement fa de 1
Complement fa de 2
Set bit K n registru
Clear bit K n registru
Increment
Decrement
Test de 0 sau Clear registru
Set registru
Salt relativ la k
Salt la subrutin
Return din subrutin
Ret. din subrutin de tratare a
ntreruperii
if (RD=Rr) PC=PC+2 Compar , skip dac egal
CPSE
Rd,Rr
CP
CPC
CPI
SBRC
Rd,Rr
Rd,Rr
Rd,K
Rr,b
SBRS
Rr,b
SBIC
P,b
SBIS
P,b
if (P(b)=1) PC=Pc+2
or 3
or 3
Rd-Rr
Rd-Rr-C
Rd-K
Compar
Compar cu carry
Compar cu constat
if (Rr(b)=0) PC=Pc+2 Skip dac bitul b din Rr este 0
or 3
if (Rr(b)=1) PC=Pc+2
or 3
143
5. Microcontroller-e RISC
Mnemonic
BRBS
Operanzi
s,k
Operaie
if(SREG(s)=1)
PC=PC+k+1
if(SREG(s)=0)
PC=PC+k+1
Operaie
Salt dac SF este1
BRBC
s,k
BREQ
BRNE
BRCS
BRCC
BRSH
BRLO
BRMI
BRPL
BRGE
k
k
k
k
k
k
k
k
k
if (Z=1) PC=PC+k+1
if (Z=0) PC=PC+k+1
if (C=1) PC=PC+k+1
if (C=0) PC=PC+k+1
if (C=0) PC=PC+k+1
if (C=1) PC=PC+k+1
if (N=1) PC=PC+k+1
if (N=0) PC=PC+k+1
if (NV=0)
PC=PC+k+1
if (NV=1)
PC=PC+k+1
if (H=1) PC=PC+k+1
if (H=0) PC=PC+k+1
if (T=1) PC=PC+k+1
if (T=0) PC=PC+k+1
if (V=1) PC=PC+k+1
if (V=0) PC=PC+k+1
Salt: egalitate
Salt: diferit
Salt: carry setat
Salt: carry este zero
Salt: mai mare sau egal
Salt: mai mic
Salt: minus
Salt: plus
Salt : mai mare sau egal, cu
semn
Salt : mai mic dect 0, cu semn
BRLT
BRHS
BRHC
BRTS
BRTC
BRVS
BRVC
BRIE
k
k
k
k
k
k
k
BRID
if (I=0) PC=PC+k+1
LD
ST
MOV
LDI
IN
OUT
SBI
CBI
LSL
Rd,Z
Z,Rr
Rd,Rr
Rd,K
Rd,P
P,Rr
P,b
P,b
Rd
LSR
Rd
ROL
Rd
Rd=(Z)
(Z)=Rr
Rd=Rr
Rd=K
Rd=P
P=Rr
I/O (p,B)=1
I/O (p,B)=0
Rd(n+1)=Rd(n),Rd(
0)=0
Rd(n)=Rd(n+1),Rd(
7)=0
Rd(0)=C,Rd(n+1)=
Rd(n),
C=Rd(7)
if (I=1) PC=PC+k+1
144
MICROCONTROLLER-e
Mnemonic
ROR
Operanzi
Rd
ASR
Rd
SWAP
Rd
BSET
BCLR
BST
BLD
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLS
SEV
s
s
Rr,b
Rd,b
Operaie
Rd(7)=C,Rd(n)=Rd(
n+1),
C=Rd(0)
Rd(n)=Rd(n+1),
n=0..6
Rd(3..0)=Rd(7..4),
Rd(7..4)=Rd(3..0)
SREG(s)=1
SREG(s)=0
T=Rr(b)
Rd(b)=T
C=1
C=0
N=1
N=0
Z=1
Z=0
I=1
I=0
S=1
S=0
V=1
CLV
V=0
SET
CLT
SEH
T=1
T=0
H=1
CLH
H=0
NOP
SLEEP
WDR
Operaie
Rotire spre dreapta prin carry
Shift aritmetic spre dreapta
Inverseaz jumtile
Seteaz flag s
Reseteaz flagul s
Stocheaz bitul b din Rr n T
Incarc T n bitul b din Rd
Seteaz Carry flag
Reset Carry flag
Seteaz Negative flag
Reseteaz Negative flag
Seteaz Zero flag
Reseteaz Zero flag
Activeaz ntrerupere
Dezactiveaz ntrerupere
Seteaz flagul de semn
Reseteaz flagul de semn
Seteaz
flagul
overflow
complement fa de 2
Reseteaz flagul overflow
complement fa de 2
Seteaz T n SREG
Reseteaz T n SREG
Seteaz Half Carry Flag n
SREG
Reseteaz Half Carry Flag n
SREG
No operation
Sleep
Watch dog reset
145
5. Microcontroller-e RISC
Vcc
SAU
LOGIC
RESET
/RESET
/Q
Ceas de gard
Oscilator RC
intern
Numrtor
Reset
146
MICROCONTROLLER-e
147
5. Microcontroller-e RISC
AT902323
/RESET
XTAL1/PB3
Ceas de
programare
serial
GND
Tact
Vcc
PB2
PB1
PB0
AT902323
/RESET
XTAL1/PB3
Vcc
PB2
PB1
PB0
4,5-5,5V
Date seriale de
ieire
Instruciuni seriale
de intrare
Date seriale de
intrare
2,7-6,0V
SCK
Programare cu
tensiune mare
Programare cu
tensiune mic
MISO
MOSI
148
MICROCONTROLLER-e
INTERFAA
CENTRONICS
12V
AT902323
STB
/RESET
XTAL1/PB3
Vcc
PB2
4,5-5,5V
PB1
GND
PB0
D0
D1
ACK
Memoria mai este prevzut cu 2 bii care nu pot fi teri (fuzibili) care pot
comanda:
149
5. Microcontroller-e RISC
Oscilator intern
Unitate central
Ceas
de
gard
RESET
32 registre de
uz general
Memoria program
FLASH 2K octei
ALU
Controller de ntreruperi
Memoria de date
RAM 128 octei
EEPROM 128 de octei
PC
Magistrala de date
SPI
ADC
Port B
Port C
Timer
Timer 16b
UART
Comparator
Port D
Canalul serial UART permite transferul de date full duplex, cu 8 sau 9 bii
de date, cu generarea de rat de transfer. Canalul serial poate cere ntrerupere la
transmisie complet, registru de transmisie gol sau recepie complet. Recepia i
transmisia se fac ca i la celelalte MC, cu un registru de deplasare pentru
serializare/deserializare i un registru de date. Se poate realiza i o comunicaie
serial multiprocesor (Multi- Processor Communication Mode), prin transmisia n
mesaj nti a adresei unui destinatar i apoi a mesajului propriu-zis. Se poate astfel
realiza o comunicaie n care un procesor este MASTER iar celelalte SLAVE.
Canalul serial este controlat de un registru de comand i stare.
Comparatorul analogic, pe lng ntreruperea pe care o poate genera, poate
s declaneze o captur la timerul de 16 bii la acest tip de MC.
Convertorul A/D este un convertor cu aproximaii succesive cu eantionare
memorare i cu un bloc de multiplexare analogic pe 6 canale la intrare.
Convertorul poate lucra cu conversie singular sau conversie continu. Convertorul
are pini de alimentare separai din exterior i un pin pentru conectarea tensiunii de
referin. Ca i tact de conversie, convertorul accept tactul sistemului divizat cu
un registru de prescalare. Tactul se poate ncadra n valorile optime 50-200kHz.
150
MICROCONTROLLER-e
Intrri
analogice
Multiplexor
analogic
Selecie
canal
Cerere de
ntrerupere
START
ADMUX
Convertor Analog
Digital cu aprox.
succesive
Eantionare
Memorare
ADCSR
Date
Tact
conversie
BUS INTERN
Registru de
prescalare
CK
Prin registrul ADMUX se comand cu 3 bii selecia unui canal din cele 6.
Registrul de control i stare ADCSR poate declana o conversie prin poziionarea
unui bit. Funcionarea convertorului poate fi validat/invalidat. Prin registrul de
control se poate programa i rata de prescalare. Pentru a micora perturbaiile
introduse de unitatea central n timpul achiziiei de date se poate comanda UC n
stare inactiv. Dup efectuarea conversiei ntreruperea de la convertor va trezi UC
(ADC Noise Canceler Function).
nscrierea memoriei FLASH i EEPROM se poate face i n mod paralel,
ceea ce nseamn o vitez mai mare de scriere i un plus de simplitate la
programare. Semnalele folosite n acest mod de programare sunt date n figura
5.12.
Pentru nscrierea sau citirea datelor se folosesc 8 linii cu semnificaii duble
din porturile PC i PB. /OE stabilete dac este vorba de scriere sau citire. Scrierea
se face cu strobul /WR. BS selecteaz octetul mai semnificativ sau mai puin
semnificativ. Semnalele XA0 i XA1 stabilesc dac se ncarc memoria FLASH,
sau o adres a EEPROM, un octet de date sau o comand. Sunt posibile 9 comenzi:
151
5. Microcontroller-e RISC
tergere memorie, scriere bii de securitate, scriere bii fuzibili, scriere FLASH,
scriere EEPROM, citire bii de identificare, citire bii fuzibili i de securitate, citire
FLASH, citire EEPROM. Modul de scriere paralel poate fi uor realizat prin
intermediul interfeei CENTRONICS; citirea pentru verificare este mai complicat.
RDY/BSY
AT90S4433
PD1
Vcc
/OE
PD2
PC,PB
/WR
PD3
BS
PD4
XA0
PD5
XA1
PD6
+12V
RESET
tact
XTAL
+5V
8 linii de date,
bidirecionale
5.2.2
Familia ARM
152
MICROCONTROLLER-e
Emulator n
circuit
(Ice Breaker)
Bus C
Distribuitor
de
magistrale
37 registre de 32 bii
Bus A
ALU pe 32 de bii
Controller
JTAG
Bus B
Magistrala de
date (32)
Decodor
ARM
Decodor
Registru de date (32)
THUMB
6
CRITERII DE PROIECTARE
6.1
Sunt multe aspecte de care trebuie inut seama la alegerea unui MC pentru
o anumit aplicaie. Alegerea unui MC potrivit poate duce la succesul proiectului,
aa cum o alegere nepotrivit poate duce la eecul proiectului. Fiecare cititor
trebuie s adapteze aceste criterii nevoilor sale i scalei proprii de valori.
Obiectivul urmrit n alegerea unui MC este obinerea calitii dorite cu un
cost ct mai sczut. Calitile dorite nseamn performan, fiabilitate, caliti EMC
(de compatibilitate electromagnetic cu mediul), iar costul total include costurile
cercetrii, proiectrii, construciei, testrii, reparrii produsului.
n primul rnd se pune problema stabilirii funciei pe care MC trebuie s-o
ndeplineasc n sistem. Alegerea din catalog a unui MC trebuie fcut n ideea a
ct mai puin hardware suplimentar (din motive economice). Procesul de cutare
este dificil din cauza numrului foarte mare de tipuri de MC disponibile pe pia.
Munca de cutare este ajutat de bazele de date din Internet, aa cum este baza de
date de la www.questlink.com . Dup stabilirea MC optim se verific preurile,
dac este disponibil, suportul acordat de fabricant, existena uneltelor de
dezvoltare, stabilitatea firmei constructoare. Un criteriu important este posibilitatea
de a fi gsit pe pia (optenabilitatea), mai ales n zone n care circulaia mrfurilor
este destul de greoaie.
Criteriile pentru alegerea unui MC sunt, n ordinea importanei:
154
MICROCONTROLLERE
!
!
!
!
6. Criterii de proiectare
155
American Educational Systems AES-51(8051), AES-11(68HC11), AES88(8088) conin o tastatur, un afiaj cu LCD i documentaie.
Firma Texas Instruments pune la dispoziia celor interesai un set de
accesorii pentru familia TMS370, un sistem de dezvoltare extins XDS i unelte de
dezvoltare (CDT). Aplicaia poate fi scris n limbajul C, de exemplu pe un PC
(utiliznd orice editor) i codul pentru TMS va fi generat de link editor. Codul
poate ajunge la MC prin intermediul interfeei seriale RS232. XDS analizeaz
softul creat, (chiar n domeniul timp) i permite punerea la punct (chiar rularea lui
pas cu pas).
Exist firme specializate n construirea unor module de evaluare cu diferite
MC, aa cum este de exemplu PHYTEC (www.phytec.de).
Fiecare furnizor de MC pune la dispoziia clienilor un Kit de start (Starter
Kit), care este un instrument foarte valoros pentru a putea ncepe lucrul cu un
anumit tip de MC. Kit-ul de start conine o plac cu soclu i hard-ul aferent pentru
programarea iniial a MC, uneori programarea EPROM-ului, interfaa i cablul de
legtur la PC, documentaie i programe (asamblor, link editor, debugger) dar nu
conine de regul un MC. Preul unui astfel de Kit pornete de la 100USD
(www.schuricht.de , www.farnell.com ).
Un alt argument pentru alegerea unui MC este comoditatea folosirii lui.
Unele MC, aa cum este Motorola 68HC11A8P1 are nscris n ROM un program
monitor (numit Buffalo). Pentru punerea n funciune este nevoie doar de o
legtur serial RS232 cu un PC (este nevoie de o conversie de nivel) i se poate
lucra de pe PC cu monitorul MC, rulnd programele n RAM-ul MC i stocndu-le
n EEPROM. Pe Internet exist subprograme scrise n Buffalo. Un alt MC,
8052AH-BASIC conine un BASIC. MC Dallas din seria DS5000 are nevoie doar
de un cristal pentru oscilator i este gata de lucru. MC conine memorie RAM
static alimentat de la o baterie i programul i datele sunt astfel nevolatile.
6.2
156
MICROCONTROLLERE
START
A N A L IZ A C E R IN E L O R P R O C E S U L U I C O N T R O L A T :
N E C E S IT IL E D E C O N T R O L C O R E S P U N Z T O A R E
S E M N A L E L O R A N A L O G IC E I D IG IT A L E
A N A L IZ A C E R IN T E L O R L E G A T E D E C O M A N D A I
C O N TR O L U L N T R Z IE R IL O R I F R E C V E N E I
A N A L IZ A S T R U C T U R II H A R D W A R E :
A T R IB U IR E A R E S U R S E L O R H A R D W A R E P E N TR U P R O C E S A R E A
S E M N A L E L O R D IG IT A L E S I A N A L O G IC E D IN P R O C E S
A N A L IZ A C E R IN E L O R L E G A T E D E S IN C R O N IZ A R E A
F U N C IO N R II U C N C A D R U L P R O C E S U L U I
A T R IB U IR E A R E S U R S E L O R S IS T E M U L U I D E N T R E R U P E R I
S E M N A L E L O R M A I S U S A N A L IZ A T E
A N A L IZ A P O S IB IL E L O R IN T E R F E R E N E D IN T R E S IS T E M U L
C O N C E P U T I M E D IU L A M B IA N T
P R O IE C T A R E A P R O G R A M E L O R D E A P L IC A IE :
D E F IN IR E A V A R IA B IL E L O R D E D IC A T E M E M O R R II S T R II
S IS T E M U L U I I C E L O R C E S U N T N E C E S A R E D E S E R V IR II
F L U X U R IL O R IN F O R M A IO N A L E
D E F IN IR E A F U N C IU N IL O R C O R E S P U N Z T O A R E F IE C R E I
R U T IN E D E S E R V IR E A N T R E R U P E R IL O R
D E F IN IR E A R O L U L U I F IE C R E I R U T IN E P R IN P R E C IZ A R E A :
P A R A M E T R IL O R D E IN T R A R E , A F U N C IU N II P R O P R IU -Z IS E ,
A T IM P U L U I D E E X E C U IE I A V A R IA B IL E L O R I
S E M N A L E L O R R E Z U L T A T E N U R M A E X E C U IE I R U T IN E I
D E F IN IR E A R O L U L U I P R O G R A M U L U I P R IN C IP A L
P R O IE C TA R E A R U T IN E L O R D E S E R V IR E A N T R E R U P E R IL O R , A
R U T IN E L O R I A P R O G R A M U L U I P R IN C IP A L
P R O C E S A R E A F I IE R E LO R R E Z U L T A T E N U R M A P R O IE C T R II:
ASAM B LARE A
L IN K -E D IT A R E A
C O N V E R S IA O B J IN T E L -H E X
D EP AN ARE A PRO GR AM E LO R
T E S T A R E A S IS T E M U L U I
S IM U L A R E A F U N C IO N R II S IS T E M U LU I
D E P A N A R E A P E S IS T E M U L D E D E Z V O L T A R E A A P L IC A IE I
6. Criterii de proiectare
6.3
157
PROIECTAREA SISTEMELOR CU MC N
VEDEREA SIGURANEI N EXPLOATARE
158
MICROCONTROLLERE
DZ
5V
0,1
VSS
Mas flotant
n acest caz se creeaz o linie de mic impedan spre mas prin reeaua de
alimentare de la VDD. La acest tip de alimentare se recomad decuplarea liniilor de
frecven nalt spre linia de +5V.
Un circuit critic este cel de generare a tactulului. Orice impuls parazit care
apare modific factorul de umplere de 50% al semnalului de tact i instruciunea nu
se execut corect, circuitul ieind din program. O astfel de situaie singular poate
fi rezolvat de ceasul de gard care comand un RESET, dup care MC ruleaz din
nou corect. Se recomand ca toate componentele aferente generrii tactului s fie
situate ct mai aproape de circuit, iar dac este posibil toate traseele s fie
nconjurate de un traseu lat de gard. Se recomand o decuplare a cristalului la
linia de cea mai mic impedan (de regul masa) cu condensatori SMD. Se
recomand s se pstreze o distan mare ntre liniile de frecven mare i circuitul
de tact.
Este de asemenea important protecia pinilor de intrare, cum ar fi RESET
sau IRQ. Un pin n aer poate comuta dac n vecintatea lui sunt linii de nalt
6. Criterii de proiectare
159
160
MICROCONTROLLERE
7
APLICAII
7.1
L1
Ev1
Ev2
L2
162
MICROCONTROLLERE
163
7. Aplicaii
Rx
P3.
Tx
P3.
AT89C2051
P3.
P3.
P3.
P3.
Ev
Ev
p
L1
L2
164
MICROCONTROLLERE
Numele SFR
PC
ACC
B
PSW
SP
DPTR
P0-P3
IP
IE
TMOD
SCON
SBUF
PCON
Valori de RESET
00H
00H
00H
00H
07H
00H
FFH
xx000000B
0xx00000B
00H
00H
Nedeterminat
0xxx0000B
1.
2.
165
7. Aplicaii
AC
MSB
F0
RS1
RS0
OV
F1
P
LSB
166
MICROCONTROLLERE
CY carry flag este setat atunci cnd n urma unei instruciuni aritmetico-logice
apare o operaie de transport sau mprumut
AC Auxiliary Flag utilizat tot n cadrul unor instruciuni aritmetico-logice
F0 User definible Flag poate fi scris i citit de ctre utilizator ca indicator specific
RS1 i RS0 codific natura (binar) bancul int de registre generale astfel:
00 specific bancul 0 de registre generale
01 specifica bancul 1 de registre generale
10 specifica bancul 2 de registre generale
11 specifica bancul 3 de registre generale
OV este setat auotmat la apariia unei depiri n cadrul unei operaii de transfer a
datelor
F1 User definible Flag poate fi scris i citit de ctre utilizator ca indicator specific
P Parity Flag specific paritatea byte-ului de informaie prelucrat
PCON
SMOD
GF1
GF0
PD
IDL
SMOD (Serial Mode) setat (dac este fixat pe 1 logic) multiplic cu 2 frecvena de
emisie/recepie serial a datelor
GF1 (General Flag 1), este un bit ce poate fi scris sau citit de ctre utilizator prin
program
GF0 (General Flag 0), este un bit ce poate fi scris sau citit de ctre utilizator prin
program
PD (Power Down Flag) Setarea acestui bit trece microcontroller-ul n starea de
putere redus blocnd funcionarea oscilatorului intern i aducnd n starea high
FFH ieirile porturilor sale. Informaiile stocate n memoria intern a procesorului,
abstracie fcnd cele din registrele speciale (SFR) sunt meninute, chiar cnd
tensiunea de alimentare a circuitului scade la 2 V. De asemenea, programul n curs
va fi oprit imediat dup efectuarea instruciunii curente n care a aprut setarea
acestui flag. Acest flag are preceden n raport cu flag-ul IDL (Idle) atunci cnd
cele dou flag-uri sunt setate simultan.
Ieirea din starea PD se face prin aplicarea unui semnal de Reset.
IDL (IDLE Flag) Setarea acestui flag duce la trecerea ntr-o stare de consum redus
a microcontroller-ului, stare n care frecvena de ceas a sistemului este aplicat
doar elementelor periferice, controller-ul de ntreruperi, interfaa serial, timer-ele
etc. Porturile rmn n starea anterioar setrii bitului IDL, iar semnalele ALE i
PSEN# trec n 1 logic. Revenirea n stare de lucru se poate realiza pe dou ci:
Prin generarea extern a unei ntreruperi, aceasta va reseta flag-ul IDL iar la
terminarea ei, prin program, dup instruciunea RETI putem seta din nou acest
flag, sau printr-un Reset hardware, caz n care durata minim a impulsului de Reset
trebuie s depeasc 24 de ciclii de ceas.
Aceste dou stri Power Down i Idle Mode sunt stri n care consumul
microcontroller-ului este redus i pot fi exploatate atunci cnd aplicaia pe care
vrem s o realizam corespunde unui aparat portabil care trebuie s protejeze la
maximum resursele energetice.
167
7. Aplicaii
TMOD
GATE
C/T#
M1
Timer 1
M0
GATE
C/T#
M1
M0
Timer0
Registrul TMOD nu poate fi accesat dect pe byte, deci scrierea unei informaii n
acest registru poate fi fcut prin instructiuni de tipul:
MOV TCON,#nnH sau
MOV @R0,#nnH
unde R0=#TCON. Atenie, aceast instructiune poate scrie
n memoria intern extins, dac microcontroller-ul prezint o astfel de memorie
(vezi PCB80C552 i alte analoge lui).
Modurile de funcionare ale canalelor temporizatoare/numrtoare sunt n numr
de 4 i sunt codate natural prin simpla scriere a numrului binar corespunztor
canalului n biii 0 i 1 pentru Timer0 sau 4 i 5 pentru Timer1. Iat care sunt
aceste moduri:
Modul 0, permite temporizarea1 sau numrarea impulsurilor2 aplicate la intrarea
canalului respectiv dispunnd de: un divizor cu 25 =32 (prescale) i apoi divizarea
programat cu o constant de timp ce poate fi format din orice numr
reprezentabil pe 8 bii, deci cuprins ntre 0 i 255, 0 corespunde unei divizri cu
256. Numratoarele canalului temporizator numra n sens direct, adic fiecare
front negativ al unui impuls aplicat la intrare determin incrementarea
numrtorului. Limea minim a unui impuls este de 1/24 din frecvena de ceas a
sistemului. Structura canalului temporizator numrtor este dat n figura 4.
Modul 1, asigur temporizarea sau numrarea impulsurilor aplicate pe intrarea
canalului, constanta de timp fiind un numr cuprins ntre 0 i 65535 cu 0
corespunztor lui 65536.
Modul 2, permite divizarea frecvenei de intrare sau numrarea impulsurilor
aplicate cu un numr reprezentabil pe 8 biti, aceasta constant este reinuta n THx
i este rencrcat automat n TLx atunci cnd canalul numrtor efectueaz
tranziia de stare din 11111111B n 00000000B.
Modul 3, este diferit la canalul 0 n raport cu canalul 1. Pentru canalul 0 setarea
acestui mod permite mprirea celor dou numrtoare TL0 i TH0 ntre pinii de
comand ai canalelor 0 i 1. Temporizatoarele/numrtoarele canalului 0 low pot fi
comandate de ctre pinii corespunzatori canalului 0 (TL0), i
temporizatoarele/numrtoarele canalului 0 high de ctre pinii corespunztori ai
canalului 1 (TH0). Dac programm canalul 1 n modul 3 aceasta duce la blocarea
acestuia i reinerea informaiilor de la momentul respectiv. Utilizarea canalului 0
168
MICROCONTROLLERE
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
169
7. Aplicaii
SCON
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
SM0 i SM1 seteaz unul dintre cele patru moduri distincte n care interfaa UART
a microcontroller-ului poate funciona. Detalierea acestor moduri este realizat n
continuare:
Modul 0, corespunztor combinaiei 00 a biilor respectivi, permite serializarea
octeilor ce sunt transmii i receptionai semi-duplex pe linia RxD. Linia TxD este
utilizat pentru transferul semnalului de ceas serial, n acest caz 1/12 din frecvena
de ceas a microcontroller-ului.
Modul 1, corespunztor combinaiei 10 a biilor respectivi, asigur transferul fullduplex asincron al informaiilor, respectiv 1 bit de start (0), 8 bii de date i n final
un bit de stop (1). Frecvena de transmisie este variabil, ea fiind setat de ctre
canalul 1 temporizator corespunztor frecvenei de apariie a strii overflow.
Modul 2, corespunztor combinaiei 01 a biilor respectivi, asigur transferul
asincron al informaiilor cu 1 bit de start (0), 8 bii de date, un bit programabil, care
poate fi chiar bitul de paritate i un bit de stop (1). La transmisie bitul 9 este reinut
n locaia TB8, iar la recepie acesta este memorat n RB8. Rata de transfer este
programabil la 1/32 sau 1/64 din frecvena de ceas a sistemului.
Modul 3, corespunztor combinaiei 11 a biilor respectivi, asigur transferul
asincron al informaiilor ntr-un format analog celui din modul 2 cu excepia
faptului c rata de transfer este variabil i setat de ctre frecvena programat
pentru canalul 1 al circuitului temporizator intern al microcontroller-ului.
Bitul SM2 permite validarea unui mod special de comunicaie via interfaa serial
USART i anume a modului prin care pe acelai bus pot fi prezente mai multe
sisteme care pot recepta informaia. n acest caz, al 9-lea bit poate fi utilizat ca bit
de specificare a tipului de informaii ce sunt transmise. Astfel, setnd bitul SM2,
poate fi generat o ntrerupere atunci cnd i bitul al 9-lea transmis este 1 (spre
exemplu), ceea ce va determina analiza de ctre sistemul receptor a informaiilor i
rejectarea acestora atunci cnd cuvntul de adresare respectiv nu corespunde
propriei adrese.
Bitul REN permite validarea ntreruperilor la recepie atunci cnd este setat, ceea
ce face ca la recepia bitului de stop, corespunztor formatului de transmisie
specificat, s se genereze o ntrerupere i totodat s se seteze bitul RI.
Bitul TI este setat harware la ncheirea transferului unei informaii via interfaa
serial, caz n care dac ntreruperile corespunztoare acesteia au fost validate are
loc transferul programului ctre ISR corespunzatoare. Resetarea acestui bit cade n
responsabilitatea programatorului, acesta trebuind s-o efectueze n cadrul ISR.
Bitul RI semnaleaz recepia complet a unitii de informaie, via interfaa
UART. La recepia bitului de stop, flag-ul RI este automat (hardware) setat.
Programatorul are obligaia ca n ISR corespunztoare recepiei datelor s tearg
bitul RI, pentru a reanclaa mecanismul de semnalizare a recepiei datelor pe
UART.
170
MICROCONTROLLERE
IE
EA
SI
TF1
IE1
TF0
IE0
7. Aplicaii
171
172
MICROCONTROLLERE
STATUS
-
CDA
L2
L1
CLR TI
;terge flag-ul Transmision Buffer Empty (Buffer de transmisie gol) pentru
;reanclanarea ntreruperilor la transferul unui nou caracter
JB
RI,RECEPTIE ;Retestare recepie caracter de ctre UART
RETI
RECEPTIE:
7. Aplicaii
173
SETB P3.5
;Comand pompa de presiune
;Comand micarea de retragere a actuatorului acionnd Electrovalva 2 i pompa.
CRL STATUS1
; Reseteaz starea consemnat anterior, respectiv actuator avansat
SETB STATUS2
;Consemneaz comand actuatorului
SETB IE.0
;Valideaz i ntreruperile corespunztoare limitatorului 1
JMP END_ISR_SI
;Testare cereri de stare din partea sistemului ierarhic superior
;Ecoul la acestea const ntr-un caracter ce definete starea curent a sistemului
ISR_SI_2:
CJNE A,#'S',ISR_SI_3
JB
STATUS2,ISR_SI_4
MOV SBUF,#'D'
;Transmite ecoul corespunztor strii reaDy - pregtit
JMP END_ISR_SI
ISR_SI_3:
CJNE A,#'P',END_ISR_SI
;n cazul n care codul nu corespunde protocolului stabillit, - cuvntul recepionat
;nu este unul dintre cuvintele cheie- el va fi ignorat
JB
STATUS0,LIM1
JB
STATUS1,LIM2
MOV SBUF,#'M'
;Transmite ecoul actuator n micare (poziie intermediar)
JMP END_ISR_SI
LIM1:
MOV SBUF,#'I'
;Transmite ecoul actuator retras
JMP END_ISR_SI
LIM2:
MOV SBUF,#'E'
;Transmite ecoul actuator avansat
END_ISR_SI:
CLR RI
;Reseteaza flag-ul recepie caracter
RETI
ISR_SI_4:
MOV SBUF,#'B'
JMP END_ISR_SI
Vom descrie n continuare rutinele de servire a ntreruperilor ce asigur
oprirea comenzilor de avans i retragere a actuatorului electro-hidraulic.
Corespunztor fiecrei linii de ntreruperi externe vom scrie cte o rutin
(ISR_EXT0 i respectiv ISR_EXT1)
ISR_EXT0:
CLR IE.0
;Sterge flag-ul de validare a ntreruperilor corespunztor sursei
174
MICROCONTROLLERE
CLR P3.6
;terge comada corespunztoare lui Ev2
CLR P3.5
;terge comanda corespunztoare pompei
CLR STATUS2
;terge bitul ce consemneaz micarea actuatorului
SETB STATUS0
;eteaz bitul ce specific starea "actuator retras"
RETI
ISR_EXT1:
CLR IE.2
;terge flag-ul de validare a ntreruperilor corespunztor sursei
CLR P3.7
;terge comada corespunztoare lui Ev1
CLR P3.5
;terge comand corespunztoare pompei
CLR STATUS2
;terge bitul ce consemneaz micarea actuatorului
SETB STATUS1
;Seteaz bitul ce specific starea "actuator avansat"
RETI
Programul principal al sistemului va include doar o rutin de ateptare a
unui eveniment. Iat-l:
ORG 0H
JMP MAIN
JMP ISR_EXT0 ;Saltul la rutina de ntreruperi corespunztoare lui L1
ORG 13H
JMP ISR_EXT1 ;Saltul la rutina de ntreruperi corespunztoare lui L2
ORG 23H
JMP ISR_SI
;Saltul la rutina de ntreruperi corespunztoare UART
ORG 100H
$INCLUDE
INIT
$INCLUDE
SERIAL
$INCLUDE
EXT1&2
;Dispoziii de inserare a programelor anterioare n cadrul programului principal
MAIN:
CALL INIT
;Construim tabela cu salturile la rutinele de servire a ntreruperilor sau la
programul principal
JMP $
;Instruciunea asigur saltul permanent la ea nsi
Urmare a scrierii programului, memoria de program a sistemului dup
parcurgerea etapelor de asamblare, link-editare i conversie OBJ->HEX (IntelHEX
code), va cuprinde n ordine, ncepnd de la adresa 0 instruciunea de salt la
programul principal, instruciunile de salt ctre rutinele de servire a ntreruperilor i
rutinele de servire a ntreruperilor i programul principal n ordinea specificat prin
dispoziiile INCLUDE. Odat nscris n memoria flash a procesorului, sistemul este
gata s satisfac funciunile specificate n raport cu protocolul stabilit.
175
7. Aplicaii
176
MICROCONTROLLERE
IND ADR
TMR0
PCL
STATUS
FSR
PORT A
PORT B
IND ADR
OPTION
PLC
STATUS
FSR
TRIS A
TRIS B
EEDATA
EEADR
PCLATCH
INTCON
68 x 8 GPR
EECON1
EECON2
PCLATCH
INTCON
Mapped
7. Aplicaii
177
registrului din zona file Register i/sau indexul bitului corespunztor locaiei
respective.
Instruciunile de salt, cum ar fi, CALL i GOTO sunt singurele care
dureaz mai mult de un ciclu instruciune i care necesit modificarea coninutului
PC-ului.
Setul de instruciuni al procesorului este ortogonal, ceea ce presupune c
modalitatea de acces la orice locaie de memorie este identic att la scriere ct i
la citire, att pentru zona GPR ct i pentru zona SFR.
n cazul operaiilor calate pe bit, instruciunile vor citi nti tot registrul,
vor opera pe bitul selectat ( specificat ) i vor ntoarce napoi rezultatul n registrul
specificat.
Uniformitatea n tratare att la nivel de bit ct i la nivel de octet, precum
i a registrelor de uz general i special i a porturilor permite reducerea
semnificativ a operaiilor de transfer intermediar care sunt specifice procesoarelor
CISC.
Este de menionat c Work Register (W Register), funcioneaz ca
acumulator i particip la majoritatea instruciunilor att cele de transfer direct ct
i la cele de transfer indirect via un registru de adresare INDR -, adic un registru
ce memoreaz adresa surs sau destinaie a informaiilor.
Iat cteva instruciuni pe care n cadrul programului le vom utiliza.
Prezentarea lor o facem pentru c ele prezint trsturi specifice n raport cu cele
de la microcontroller-ul Atmel.
Aceste instruciuni le vom putea clasifica aa n :
Instruciuni de transfer, aritmetico-logice i de redirectare a
programului, cum ar fi:
Pot conine drept parametri pn la trei valori i anume:
Prin k (8 bii) specificm o valoare imediat ce este inclus n corpul
instruciunii
Prin f (8 bii) specificm adresa din zona de memorie File Register la
care face referire instruciunea.
Prin b specificm bitul la care face referire instruciunea (valoare pe 3
bii)
Falg-ul d specific registrul destinaie n care se stocheaz rezultatul
operaiei sau al transferului, dac acesta este 0, atunci rezultatul este
reinut n regsitrul W, altfel el este reinut n registrul f din File
Register.
MOVF f,d
Transfer data ntre W i registrul f cu indicarea registrului de
memorare a rezultatului.
MOVWF f
Transfer data din W n registrul f
MOVLW k
Transfer valoare imediat k (specificat n cadrul instruciunii) n
registrul W.
SWAPF f,d
Comutare semi-bytes n cadrul registrului f cu reinerea
rezultatului n W sau f funcie de d.
ANDWF f,d SI-LOGIC, ntre informaiile din W i f, bitul d are acelai rol,
178
MICROCONTROLLERE
ANDLW k
SI-LOGIC ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este reinut n W.
ADDWF f,d Adunarea informaiilor din W i f, bitul d specific destinaia
rezultatului.
ADDLW k
Adunarea ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este stocat n registrul W.
SUBWF f,d
Scderea informaiile din W i f cu acelai rol pentru flag-ul d
SUBLW k
SI-LOGIC ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este stocat n registrul W.
IORWF f,d
SAU-LOGIC, ntre informaiile din W i f, bitul d are acelai rol,
IORLW k
SAU-LOGIC ntre valoarea specificat k i valoarea stocat n W.
Rezultatul este reinut n W.
XORWF f,d SAU-EXCLULSIV, ntre informaiile din W i f, bitul d are
acelai rol,
XORLW k
SAU-EXCLUSIV, ntre valoarea specificat k i valoarea stocat
n W. Rezultatul este reinut n W.
CALL k
Apel rutin k (11/13 bii specificai prin instruciune)
GOTO k
Salt la adresa k (11/13 bii specificai prin instruciune)
RETURN
Revenire din subrutin
RETFIE
Revenire din subrutina de tratare a ntreruperilor
RETLW k
Revenire din subrutin cu ncrcarea unei valori literale n W.
Instruciunilede setare/resetare bytes sau bii, cele de rotire pot fi ncadrate
n categoria curent, unele dintre acestea le vom detalia, avnd n vedere
particularitile pe care ele le prezint. Spre exemplu, instruciunea :
RRF f,d
nu face altceva dect s deplaseze ctre dreapta cu o poziie
informaia din registrul f, rezultatul fiind reinut conform valorii lui d, n W sau
chiar n registrul f. La fiecare deplasare, bitul 0 este mutat n bitul de C (de
transport), iar acesta este transferat n bitul 7 al registrului f, etc.
Analog, funcioneaz i instruciunea RLF f,d , caz n care bitul C (de
transport) va fi copiat n bitul 0 al registrului f i bitul 7 al aceluiai registru fi
memorat n C.
BTFSS
logic
BTFSC
logic
Instruciuni de decizie:
Test bit i salt peste instruciunea urmtoare dac acesta este 1
Test bit i salt peste instruciunea urmtoare dac acesta este 0
179
7. Aplicaii
RP1
RP0
T0#
PD#
DC
IRP este bitul care selecteaz bancul de registre ( la adresarea indirect) valoarea 0
corespunde intervalului de adrese 00H la FFH, iar valoarea 1 corespunde
intervalului 100H la 1FFH.
RP1,RP0 corespunde seleciei bancului de registre (la adresarea direct) selecie
astfel:
00 corespunde intervalului de adrese 00H la 7FH
01 corespunde intervalului de adrese 80H la FFH
10 corespunde intervalului de adrese 100H la 17FH
11 corespunde intervalului de adrese 180H la 1FFH
T0# (time out bit), exprim depirea capacitii de numrare a canalului 0,
respectiv tranziia de stare de la FFH spre 00H.
PD# (Power Down), odat setat exprim trezirea sistemului, la pornirea acestuia
sau dup execuia instruciunii CLRWDT. n rest bitul de mai sus este resetat.
Z (Zero flag), este setat la ntlnirea coincidenei a dou valori numerice sau cnd
rezultatul operaiei aritmetico-logice este zero. n rest, acesta este resetat.
DC (Digital Carry), exprim transportul sau mprumutul la nivel de semibyte.
Setat la apariia transportului, resetat la apariia unui mprumut.
C (Carry), este setat la apariia unui transport la nivel de byte, i resetat n rest.
OPTION
RBPU#
INTEDG
TOCS
TOSE
PSA
PS2
PS1
PS0
RBPU#, (Pull up bits port B),setat exprim invalidarea funciunii pull-up pentru
liniile portului B, iar resetat, asigur funcia pull-up pentru aceste linii.
INTEDG (Interrupt Edge Select) setat permite generarea ntreruperilor pe frontul
cresctor, iar resetat realizeaz generarea ntreruperii pe frontul descresctor.
TOCS (TMR0 Source Clock), selecteaz sursa impulsurilor ce sunt numrate de
ctre canalul 0 numrrtor/temporizator, setat permite numrarea impulsurilor
externe, aplicate la pinul RA4, resetat selecteaz frecvena intern de ceas divizat
cu 4.
180
MICROCONTROLLERE
EEIE
TOIE
INTE
RBIE
TOIF
INTF
RBIF
7. Aplicaii
181
PIC 16F84
182
MICROCONTROLLERE
BR =
f Clk
1
,
4 PS (256 CT )
unde BR este rata de tranmisie serial (o vom stabili la 19200 Bauds), fClk este
frecvena de ceas a sistemului, PS este factorul de divizare al prescaler-ului, iar CT
este constanta de timp ncrcat de ctre programator. Formula nu ine cont de
erorile datorate momentului de timp la care are loc rencrcarea constantei de timp
i de timpul necesar microcontroller-ului pentru a intra n ISR.
n cazul nostru, vom obine: 130 valoarea produsului PS*(256-CT).
Considernd pentru PS valoarea 1, deci nu utilizm prescaler-ul, vom
nscrie n registrul corespunztor timer-ului 0, valoarea 7EH.
Atenie, este de observat c timer-ul numr n sens direct, deci valoarea
corespunztoare este dat de diferena ntre valoarea la care se realizeaz
consemnarea depirii capacitii canalului i valoarea dorit.
Eroarea datorat rotunjirii valorii corespunztoare ratei de transfer va fi de
0,16%.4
Pentru a implementa aceast funcie, vom folosi cteva locaii de memorie
i anume:
CHR_TRS:
locaie ce memoreaz octetul de transmis
CHR_REC:
locaie ce reine octetul recepionat
RI
bit ce specific recepia complet a caracterului pe linia serial
3
Formula este aproximativ cci ea nu ine cont de timpii necesari execuiei instruciunilor
din cadrul rutinei de servire a ntreruperilor, timpi care de altfel pot fi diferii, funcie de
starea n care este gasit procesorul la anclaarea ntreruperii
Err =
r p
unde
p
183
7. Aplicaii
TI
R
T
TI
RI
END
C2
C1
C0
Unde:
END are semnificaia de sfrit transmisie sau recepie byte
C2,C1,C0 sunt biii utilizai pentru contorul de bii, transmii sau
recepionai
Astfel, la transmisie vom face urmtoarele:
184
MICROCONTROLLERE
7. Aplicaii
185
186
MICROCONTROLLERE
BTFSC SI_STARE,6
;Test ntrerupere de la TMR0 la recepia caracterelor?
;Da! Intrerupere la recepia caracterelor
GOTO RECEPTIE
;Nu!
BTFSC SI_STARE,7
;Test ntrerupere de la TMR0 la transmisia caracterelor?
;Da! Intrerupere la transmisia caracterelor
GOTO TRANSMISIE
;Nu! Eroare, refacem doar flag ce semnaleaz ntreruperea coresp. lui TMR0
BCF INTCON,T0IF
GOTO END_ISR
RECEPTIE
BTFSS PORTB,0
;Eantionare linie RxD (linia RxD este linia RB0) ;Da, linia este zero!
GOTO REC_ZERO
;Nu, Setez carry flag
BSF STATUS,C
;Setez bitul 0 din STATUS register care este Carry Flag
GOTO REC_CONT
REC_ZERO
BCF STATUS,C
;Resetez bitul 0 din STATUS register care este Carry Flag
REC_CONT
RRF CHR_REC,F
;Rotesc prin Carry locaia (file register REC_CHR) Bitul de Carry
; va ajunge n poziia bitului 7 din REC_CHR i dup 8 bii receptai pe poziia 0
INCF SI_STARE,F
;Incrementez contorul din SI_STARE i l salvez n el nsui
BTFSS SI_STARE,3
;Testez atingerea recepiei celui de-al 8-lea bit al caracterului
GOTO END_REC_BIT
END_REC_CHR
BCF SI_STARE,6
;Resetez flag-ul ce indic starea "n recepie caracter"
BSF SI_STARE,4
;Setez flag-ul RI, "Caracter recepionat disponibil"
BCF INTCON,T0IF
;Resetez flag-ul ce semnalizeaz "overflow" canal temporizator
BCF INTCON,T0IE
;Invalidez ntreruperile corespunztoare canalului temporizator
BCF SI_STARE,3
;Resetez contor numrtor bii recepionai
GOTO END_ISR
7. Aplicaii
END_REC_BIT
MOVWF
CT
;ncarc constanta de temporizare n W
MOVF TMR0,F
;O transfer ctre TMR0
BCF INTCON,T0IE
;Resetez flag-ul corespunztor ntreruperilor de la TMR0 Reanclanare TMR0
GOTO END_ISR
TRANSMISIE
BTFSC SI_STARE,3
;Test corespunztor ncheierii transferului datelor ce formeaz caracterul (8 bii)
GOTO TEST_END_TRS
CONT_TRS
BTFSC CHR_TRS,0
GOTO SET_BIT_TRS
BCF PORTB,1
;Scriu 0 logic pe linia TxD
GOTO TRS_BITI
SET_BIT_TRS
BSF PORTB,1
;Scriu 1 logic pe linia TxD
TRS_BITI
RRF CHR_TRS,F
;Rotesc biii caracterului de transmis n bufferul de transmisie
MOVLW
CT
MOVF TMR0,F
;Rencarc constanta de timp corespunztoare frecvenei de transmisie pe UART
BCF INTCON,T0IF
;Resetez flag-ul indicator timer "overflow"
BSF INTCON,T0IE
;Validez ntreruperile ptr. canalul temporizator
INCF SI_STARE
;Incrementez contorul de bii la transmisie
GOTO END_ISR
TEST_END_TRS
BTFSC SI_STARE,0
;Testez dac este de transmis bitul de STOP
GOTO END_TRS
TRS_STOP_BIT
BSF PORTB,1
;Scriu 1 logic pe linia serial, corespunztor bitului de STOP
GOTO TRS_BITI
END_TRS
BCF INTCON,T0IE
;Invalidez ntreruperilor corespunztoare TMR0
BCF INTCON,T0IF
;terg flag-ul indicator de ntrerupere
187
188
MICROCONTROLLERE
MOVLW
0x76
;Maschez bitul T, i biii contorului de bii ai UART
ANDWF
SI_STARE,F
;Realizez resetarea biilor 7,3 i 0 din SI_STATUS
BSF SI_STARE,5
;Setez TI, indic "buffer transmisie gol"
GOTO END_ISR
INIT
MOVLW
0x0C
MOVWF
FSR
NEXT
CLRF INDF
INCF FSR
BTFSC FSR,6
GOTO NEXT
BTFSC FSR,4
GOTO NEXT
;Umple cu 0 memoria SRAM a microcontroller-ului de la adresa 0x0C la 0x4F
BCF STATUS,RP0 ;Select bank 0
MOVLW
0x02
MOVF PORTB,F
MOVLW
0x01
MOVF PORTA,F
BSF STATUS,RP1 ;Select bank 1
MOVLW
0x31
MOVWF
TRISB
MOVLW
0x00
MOVWF
TRISA
BCF STATUS,RP0 ;Iniializeaz porturile A i B
RETURN
;********************************************************
MAIN
CALL INIT
LOOP
BTFSC SI_STARE,4
;Testare dac a fost recepionat un caracter pe UART
CALL EXEC_CDA
;Execuie comanda venit pe UART de la PC
CONTINUE0
BTFSC INT_TRS,0
;Testare dac este de transmis un caracter via UART
CALL INIT_TRS
CONTINUE1
GOTO LOOP
EXEC_CDA
MOVLW
0x41 ;ncarc comanda 'A' - avans
7. Aplicaii
189
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'A'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO AVANS
;Execut avans
MOVLW
0x52 ;ncarc comanda 'R' - retragere
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul receptionat i 'r'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO RETRAGERE
MOVLW
0x53
;Incarc comanda 'S' - stare
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'S'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO REQ_STARE
MOVLW
0x50 ;ncarc comanda 'P' - poziie
XORWF
CHR_REC,W
;Testez identitatea ntre caracterul recepionat i 'P'
BTFSC STATUS,Z
;Testez identitatea Z=1 IDENTIC
GOTO POZITIE
END_EXEC_CDA
BCF SI_STARE,4
;Resetez flag corespunztor caracterului recepionat.Acesta a fost citit i interpretat
RETURN
AVANS
BSF PORTB,2
;Comand Ev1
BSF PORTA,0
;Comand pompa
BCF STARE,0
;Resetez stare sistem L1 atins
BSF STARE,2
;Setez starea "actuator n micare"
GOTO END_EXEC_CDA
RETRAGERE
BSF PORTB,3
;Comand Ev1
BSF PORTA,0
;Comanda pompa
BCF STARE,1
;Resetez staresistem L1 atins
BSF STARE,2
;Setez starea "actuator in micare"
GOTO END_EXEC_CDA
REQ_STARE
BTFSS STARE,2
;Testez atingere limitator L1
;Da! Consemneaz stare i iniiaz emisie ecou
GOTO READY
BUSY
MOVLW
0x42 ; W <-'B' Busy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
190
MICROCONTROLLERE
READY
MOVLW
0x44 ; W <-'D' reaDy
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
POZITIE
BTFSC STARE,0
GOTO LIM1
BTFSC STARE,1
GOTO LIM2
BTFSC STARE,2
GOTO MOVE
GOTO END_EXEC_CDA
LIM1
MOVLW
0x49 ; W <-'I' retras (L1 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
LIM2
MOVLW
0x45 ; W <-'E' avansat (L2 Atins)
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
MOVE
MOVLW
0x4C ;W <-'M' in micare
MOVF CHR_TRS,F ; CHR_TRS <- W
BSF INT_TRS,0
;Iniiere transmisie
GOTO END_EXEC_CDA
INIT_TRS
BTFSS SI_STARE,5 ;Testez dac TI este activ,
;n acest caz nu am voie s iniiez o nou transmisie, voi atepta!
GOTO END_INIT_TRS
BCF PORTB,1
;Scriu 0 logic pe linia TxD
MOVLW
CT
MOVF TMR0,F
;ncarc constanta de timp nTMR0
BSF SI_STARE,7 ;Set "transmisie n curs"
BSF INTCON,T0IE
;Validez ntreruperile corespunztoare canalului TMR0
END_INIT_TRS
RETURN
STARE
DB
0x00 ;Vectorul de stare al actuatorului
;Bit 0 L1 atins
;Bit 1 L2 atins
;Bit 2 n micare
191
7. Aplicaii
SI_STARE
DB
0x00 ;Vectorul stare corespunztor UART
CHR_REC
DB
0x00 ;Locaie ce reine caracterul recepionat
CHR_TRS
DB
0x00 ;Locaie ce reine caracterul de transmis
TEMP_WORK
DB
0x00 ;Locaie ce memoreaz W pe durata ISR
TEMP_WORK1
DB
0x00
;Locaie ce memoreaz STATUS register pe durata ISR
INT_TRS
DB
0x00
;Locaia memoreaz n bitul 0 cererea de transmisie a unui caracter.
CT
EQU 0x7E ;Constanta de timp coresp. ceasului UART
n text toate etichetele la care se face referire sunt scrise cu caractere
ngroate. Pentru a avea imaginea modului n care assembler-ul plaseaz codul
nostru, dm pe CD i partea referitoare la locatare din listing-ul rezultat n urma
asamblrii. Aceast list este dat cu titlu informativ pentru a putea sesiza
modalitatea n care sunt asignate automat locaiile de memorie, variabilelor.
n final vom face o scurt analiz comparativ a soluiilor avute n vedere
la implementarea aplicaiei.
Criteriul
Atmel AT89C2051
PIC16F84
Von Neumann
CISC5
4 bancuri a cte 8 registre
fiecare
Harvard
RISC9
2 Bancuri File Registres a cte
68 de bytes fiecare
Memoria intern
128 bytes
Numr intrri/ieiri:
Linii de comand i control
Canale temporizatoare
15 I/O
13 I/O
2 (4 moduri de programare)
1 canal (8 bii) 256 valori
1 canal sincron/asincron
Vectorizat6
Dispune
de
2
intrri
analogice7
2,7 la 5 V
Flash Reprogramabil
1 (2 moduri de programare)
Procesorul:
Arhitectura
Setul de instruciuni
Registre de uz general
WatchDog
UART
Sistemul de ntreruperi
Alte faciliti speciale
Tensiune alimentare
Programarea controller-ului
Memoria de program
Faciliti energetice
2 Kbytes (CISC)
Low Power i IDLE mode8
192
Faciliti software:
Assembler
Compilaror C
Link-editor
Translator INTEL-HEX code
Emulator
Mediu integrat
Aspecte economice:
Pre/bucat
Optenabilitate:
Seria produsului:
Grad
de
pregatire
proiectant:calat
pentru
microcontroller-ul respectiv
Suport de dezvoltare12:
Strategia firmei:
Timpul preconizat pentru
dezvoltarea aplicaiei
MICROCONTROLLERE
MASM
macro-asamblor,
integrabil n mediul MPLAB
DA
MPLINK
DA
DA
DA (MPLAB)
7,24
DM
(Hoepping
Elektronik)
DA
Nu avem date precise
NU
NU
DA
Nu avem date precise
193
7. Aplicaii
7.2
IMPLEMENTAREA INTERFEELOR LA
PROCES
Vom prezenta pentru fiecare dintre aceste cazuri att aspectele legate de
implementarea hardware, inclusiv caracteristicile convertoarelor, ct i aspectele ce
in de implementarea software.
194
MICROCONTROLLERE
195
7. Aplicaii
RxD
P1.5
CS#
P1.7
DOUT
ADS7822
AT89C2051
P1.4 DCLOCK
TxD
196
MICROCONTROLLERE
ntre rupere
ntre rupere
S-A PRODUS UN
EVENIM ENT
Servire ntrerupere
corespunztoare UART,
respectiv RI sau TI
Servire ntrerupere
corespunztoare canalului T0
Implementeaz achiziia
197
7. Aplicaii
198
MICROCONTROLLERE
7. Aplicaii
199
(12)
ANL A,#0F0H
;Maschez LSB=biii 4-7 ai LSB
(12)
ORL A,DATA_LSB
(12)
MOV DATA_LSB,A ;Formez primii 8 bii ai datei convertite
(24)
POP ACC
(12)
ANL A,#0FH
;Maschez cel mai seminificativ semibyte
(12)
MOV DATA_MSB,A ;Formez urmtorii 4 bii -cei mai
;semnificativi
(24)
POP PSW ;Refac starea PSW dinaintea intrrii n ntreruperi
(24)
POP ACC ;Refac starea ACC dinaintea intrrii n ntreruperi
(24)
RETI
180/12=8,5
S este timpul ct dureaz execuia instruciunilor de mai sus
66,5
S ESTE TIMPUL TOTAL CORESPUNZTOR ISR _T0
;Rutina de servire a ntreruperilor corespunztoare UART
;Sistemul va transmite date doar la cererea sistemului ierarhic superior i
;numai maximum doi bytes
ORG 23H
ISR_SI:
(24)
JB
RI,REC ;Testare dac a fost recepionat un caracter
TRS:
;NU! Intrerupere la transmisie
(12)
CLR TI
(12)
JNB TRS_MSB,END_TRS;Test dac mai sunt de transmis date
(12)
MOV SBUF,DATA_MSB
;Transfer MSB data achiziionat
(12)
CLR TRS_MSB
END_TRS:
(24)
RETI
REC:
(12)
CLR RI
(12)
MOV DATA_REC,SBUF
;Scriu data n buffer-ul de recepie
(12)
SETB REC_EN
;Specific recepia unui caracter
(24)
RETI
MAIN:
CALL INIT
;Rutina de initializarea a sistemului
LOOP:
JNB REC_EN,LOOP
ANALIZA:
MOV A,#'A' ;Incarc primul caracter utilizat drept comanda
CJNE A,DATA_REC,CONTINUE0
CALL INIT_ACHIZITIE
JMP LOOP
CONTINUE0:
;Aici pot fi inserate celelate teste pentru comenzile pe care le instituim prin
protocol
;
NOP
200
MICROCONTROLLERE
INIT_ACHIZITIE:
;Rutina de initiere a achizitiei datelor trebuie sa valideze intreruperile
;corespunzatoare canalului 0 si sa incarce constanta de timp corespunzatoare
;ratei de esantionare
MOV TH0,#CT_H
MOV TL0,#CT_L
SETB TR0
SETB T0
RET
INIT:
;Rutina de iniiere de sistem. Nu mai detaliem iniializarea memoriei
MOV IE,#90H ;Iniializez ntreruperile corespunztoare UART
MOV PSW,#0 ;Iniializez PSW
MOV SCON,#SET_UART ;Iniializez UART
MOV TMOD,#SET_TIMER
;Setez modurile de funcionare ale timer-elor
MOV TL1,#0
MOV TH1,#SET_T1 ;Setez constantele de timp
RET
S observm c dac calculm timpul de execuie corespunztor
instruciunilor rutinei de servire a ntreruperilor la achiziia datelor n cazul unei
frecvene de ceas de 24 MHz obinem o durat de 66,5 s, adic frecvena maxim
de achiziie este de: 15.037 Hz. Putem constata c i n situaia n care am utilizat
facilitile hard de sincronizare, respectiv sistemul de ntreruperi totui viteza de
achiziie este puternic legat de modul de implementare prin program a acesteia,
deci acest aspect va trebui cu cea mai mare grij analizat i proiectat.
Observm c dac am fi utilizat la achiziia datelor de la convertorul
analog-digital facilitatea interfeei UART a microcontroller-ului (vezi modul 0 de
funcionare) am fi putut crete frecvena maxim de achiziie aproape de limita
superioar corespunztoare convertorului analog-digital. n acest caz, observm c
ar fi fost necesar s recepionm sincron doi octei, ceea ce ar fi dus la consumarea
unui timp de aproximativ 16 ciclii de ceas, adic la 24 MHz timpul de achiziie ar
fi fost de 8s, ceea ce corespunde unei rate de eantionare de 125000Hz ceea ce
evident c depete frecvena maxim admisibil a convertorului. Evident, n
acest caz am fi renunat la utilizarea UART drept port de legtur cu sistemul
ierarhic superior.
7. Aplicaii
201
Pentru a-l putea conecta, este necesar s cunoatem care este modul de
funcionare al convertorului. Astfel, semnalul Read/Convert (R/C#) asigur
citirea rezultatului sau declanarea conversiei, semnalul CS# permite trecerea busului din starea High Impedance ntr-una din strile 1 sau 0 logic, semnalul BYTE
permut magistralele low/high de ieire, iar linia BUSY# semnaleaz situaia n
care convertorul se gsete n faza de eantionare i conversie a semnalului
analogic.
Pentru a realiza conversia de semnal va trebui s cunoatem care este
succesiunea de semnale de comand. Combinaiile posibile sunt prezentate n
tabelul I.
202
MICROCONTROLLERE
Astfel aplicnd
simultan un 0 logic pe
liniile CS# i R/C# i
meninnd cel puin 40
ns linia R/C# n zero
logic
realizm
eantionarea
i
conversia
semnalului
analogic.
Semnalul
BUSY va sta n zero
logic din momentul
iniierii conversiei i
pn la momentul la
care
aceasta
s-a
ncheiat. Convertorul l
va aduce automat pe 1
logic, moment la care
valoarea
numeric
corespunztoare
semnalului de intrare va
fi valid pe ieirea
convertorului.
Linia BYTE va permuta biii inferiori i superiori ai rezultatului. Astfel dac
BYTE=0, pinii de ieire ai convertorului de la 6 la 13 vor scoate semi-byte-ul mai
semnificativ, pentru ca dac BYTE = 1, aceiai pini s rein cei mai puini 8 bii ai
rezultatului conversiei.
Structura schemei electrice este gndit pentru procesorul AT89C2051, n
urma analizei resurselor pe care acesta le posed, precum i a necesitilor datorate
convertorului analog-digital ADS7821 (figura 7.15).
TxD
CS#
R/C#
P3.7
BYTE
P3.2
BUSY
P1.0-7
6-13
ADS7821
P3.5
AT89C2051
RxD
P3.4
7. Aplicaii
203
204
MICROCONTROLLERE
EQU
EQU
00H
80H
EQU 21H
;
EQU 55H
;
EQU 5CH ;
constanta de timp necesara la declansarea conversiei semnalului
DSEG
BSEG
RX
BIT
10H
;Specifica receptia unui caracter
TX
BIT
11H
;Specifica necesitatea transferului DATA_LSB
DE
BIT
12H
;Specifica existenta unei date achizitionate
DATA_UART DATA 30H
;Locatie data receptionata pe UART
DATA_LSB DATA 31H
;Locatie LSB data achizitionata
DATA_MSB DATA 32H
;Locatie MSB data achizitionata
CSEG
;ISR_EXT0 Rutina de servire a intreruperilor corespunzatoare achizitiei de la CAD
ORG 0H
JMP MAIN
JMP ISR_EXT0
ORG 0BH
JMP ISR_T0
ORG 23H
JMP ISR_SI
ISR_EXT0:
PUSH PSW
;Salveaza starea UC
SETB PSW.3
;Seteaza bancul 1 de regsitrii generali, ca registrii "tinta"
MOV DATA_MSB,P1
;Salveaza
partea
mai
semnificativa a datei
205
7. Aplicaii
SETB P3.7
>MSB
MOV DATA_LSB,P1 ;Salveaza partea mai putin semnificativa a
datei
SETB DE
POP PSW
;Reface starea UC
RETI
;Iese din ISR
;ISR_T0 Rutina de servire a intreruperilor corespunzatoare frecventei de
esantionare
ISR_T0:
PUSH ACC
;Salveaza acumulatorul
MOV A,P3
ANL A,#0E7H
MOV P3,A
;Genereaza simultan CS#=0 si R/C#=0
POP ACC
;Reface acumulatorul
SETB P3.5
;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizare
RETI
;Iese din ISR
;ISR_SI Rutina de servire a intreruperilor corespunzatoare UART
ISR_SI:
JB
RI,RECEPTIE ;Testare intrerupere la receptie
;NU! Intrerupere la transmisie
TRANSMISIE:
CLR TI
;Sterg flag pentrua reanclasa intreruperea
JB
TX,SCRIE
;Test daca trebuie sa transmit si LSB
;NU!
RETI
;Iesire din ISR
SCRIE:
MOV SBUF,DATA_LSB
;Scriu LSB
CLR TX
;Sterg flag atentionare transfer via UART
a LSB
RETI
;Iesire din ISR
RECEPTIE:
CLR RI
;Sterg flag receptie data pe UART
MOV DATA_UART,SBUF ;Citesc data receptionata pe linia
seriala
SETB RX
;Semnalez receptia si citirea datei
RETI
;Programul principal de functionare a sistemului
MAIN:
CALL INIT
LOOP:
206
MICROCONTROLLERE
MOV A,DATA_UART
CJNE A,'A',TEST1
;Comanda SOC ("Start Of Conversion")
MOV A,P3
ANL A,#0E7H
MOV P3,A
;Genereaza simultan CS#=0 si R/C#=0 ;
SETB P3.5
TEST1:
CJNE A,'C',TEST2
MOV A,P3
ANL A,#0E7H
MOV P3,A
;Genereaza simultan CS#=0 si R/C#=0 ;
POP ACC
;Reface acumulatorul
SETB P3.5
;Pregatim citirea datei coresp.valorii
analogice
MOV TL0,#CT_L
MOV TH0,#CT_H ;Scriu valorile de temporizare
SETB TR0
;Validez impulsurile catre temporizator canalul 0SETB IE.1
;Validarea
intreruperilor
"timer
0
overflow"
TEST2:
CJNE A,'D',FINAL
SETB DE
FINAL:
JNB DE,LOOP
INIT_TRS:
JB
TI,INIT_TRS
MOV SBUF,DATA_MSB
SETB TX
CLR DE
JMP LOOP
INIT:
MOV R0,7FH
LP:
MOV @R0,#0H
DJNZ R0,LP
;Reseteaza memoria interna a controller-ului
MOV SP,#60H
MOV TMOD,#CT_SMOD
MOV TCON,#CT_ST
MOV SCON,#CT_SSCON
MOV IE,#91H
MOV P3,#0FFH
207
7. Aplicaii
RET
END
Locatarea variabilelor i a registrelor utilizate de ctre aplicaie este dat pe CD.
208
MICROCONTROLLERE
209
7. Aplicaii
MB1
MB0
A3
A2
A1
A0
210
MICROCONTROLLERE
Byte 3 (MSB)
BIAS
O = Off
REF
DF
U/B#
BD
MSB
SDL
DRDY/
DSYNC#
1 = On
1 =comp 2
0=
Bipolar
0= MSB
0=MSB
0=SDIO
Byte 2
MD2
MD1
MD0
G2
G1
G0
CH1
CH0
211
7. Aplicaii
Byte 1
SF2
SF1
SF0
DR12
DR11
DR10
DR9
DR8
SF2, SF1, SF0 selecteaz una dintre valorile modului turbo de funcioare a
circuitului, iar valorile DR12 la DR0 seteaz frecvena de decimare pentru filtrul
digital al convertorului.
Byte 0
DR7
DR6
DR5
DR4
DR3
DR2
DR1
DR0
212
MICROCONTROLLERE
8. Testare dac mai sunt de transmis alte comenzi sau cereri de date.
Dac da se reia ciclul de la punctul 2. CS# rmne inactiv 10,5 ciclii
de ceas.
Programul de mai jos prezint cteva rutine, ca de transfer a unui cuvnt de
comand, precum i cea de citire a unei date format din trei octei. Programarea
microcontroller-ului va fi specific pentru fiecare aplicaie n parte, ea trebuind s
realizeze adaptarea parametrilor convertorului n raport cu rezoluia i rata de
eantionare impuse de aplicaie.
Programul de funcionare permite:
1. Sincronizarea transferului comenzilor ctre CAD;
2. Generarea soft i emiterea semnalului de ceas (SCLK), ctre CAD
3. Transferul informaiilor de iniializare i a comenzilor ctre CAD
4. Recepia datelor corespunztoare semnalului analogic convertit
Iat acest program:
ORG 28H
PROG: DB
01100100B
;Cuvnt de instruciuni
DB
01000010B
;Cuvnt de C-d nr. 3
DB
00000000B
;Cuvnt de C-d nr. 2
DB
00000000B
;Cuvnt de C-d nr. 1
DB
00000000B
;Cuvnt de C-d nr. 0
;Cuvntul de instruciuni asigur scrierea cuvintelor de comand 3, 2, 1 i 0
DB
11000000
;Cuvntul asigur citirea celor 3 regitrii corespunztori valorii semnalului
analogic convertit
BUFFER:
DS
03H
CAD:
JB
P1.0,CAD
;Testeaz starea CAD, respectiv DRDY#=0
MOV R1,#04H
MOV R0,#PROG
;Pregtete transmiterea a 5 octei ctre CAD, ce sunt: cuvntul de instruciuni i
;cele 4 cuvinte de comand. Cuvintele sunt memorate ncepnd de la adresa PROG
LOOP_1:
MOV A,@R0
CALL SERIAL_OUT
INC
R0
DJNZ R1,LOOP_1
CAD1: JB
P1.0,CAD1
;Testeaz starea CAD, respectiv DRDY#=0
MOV A,@R0
CALL SERIAL_OUT
LOOP_2:
JB
P1.0,LOOP_2
;Ateapt conversia datelor de ctre CAD, semnalul DRDY# va fi resetat
MOV R1,#03H
MOV R0,#BUFFER
;Pregtete citirea celor 3 bytes de date, corespunztori semnalului analogic
LOOP_3:
7. Aplicaii
213
CALL SERIAL_IN
MOV @R0,A
INC
R0
DJNZ R1,LOOP_3
;ncheie un ciclu complet Iniializare comand i achiziie data convertit
SERIAL_OUT: CLR P1.3
MOV R7,#08H
RL
A
RL
A
LOOP_OUT:
JB
ACC.2,SET_OUT
CLR P1.2
JMP CLOCK_OUT
SET_OUT:
SETB P1.2
CLOCK_OUT: SETB P1.3
CRL P1.3
;Genereaz semnalul SCLK
RL
A
DJNZ R7,LOOP_OUT
;Transfer un octet ctre CAD
RET
SERIAL_IN: CLR P1.3
MOV R7,#08H
LOOP_IN:
JB
P1.1,SET_IN
CLR ACC.0
JMP CLOCK_IN
SET_IN:
SETB ACC.0
CLOCK_IN: SETB P1.3
CRL P1.3
RL
A
DJNZ R7,LOOP_IN
;Recepteaz un octet de la CAD
RET
214
MICROCONTROLLERE
bit. Frontul pozitiv reprezint frontul pe care data este memorat n registrul de
deplasare aflat pe intrarea convertorului digital-analog PCM56. Intrarea LE trebuie
s stea pe 1 logic cel puin un ciclu de ceas, ea plasndu-se pe durata transferului
serial al datelor pe 0 logic. La sfritul transferului ea va fi trecut n 1 logic pentru
cel puin 1,5 perioade de ceas.
7. Aplicaii
215
216
MICROCONTROLLERE
SETB PSW.3
;Utilizez bancul 1 de regitrii generali
CLR P1.5
;Invalidez LE, => Posibilitate de scriere in buffer-ul de serializare al CDA
MOV R7,08H
;ncarc contor al biilor de serializat corespunztor MSB
MOV A,DATA_HIGH
;ncarc MSB
LOOP_CDA1: RL
A
;Rotesc informaia din Acumulator
CLR P1.7
;Reset semnal Clock ctre CDA
JB
ACC.0,SET_BIT_CDA
CLR P1.6
;Reset DATA ctre CDA
CLK_CDA:
SETB P1.7
;Set semnal Clock ctre CDA
DJNZ R7,LOOP_CDA1
JMP CONT
SET_BIT_CDA:
SETB P1.6
;Set DATA ctre CDA
JMP CLK_CDA ;Am transmis MSB ctre CDA, urmeaz LSB
CONT:
MOV R7,08H
MOV A,DATA_LOW
LOOP_CDA2: RL
A
CLR P1.7
;Reset semnal Clock ctre CDA
JB
ACC.0,SET_BIT_CDA1
CLR P1.6
;Reset DATA ctre CDA
CLK_CDA1: SETB P1.7
;Set semnal Clock ctre CDA
DJNZ R7,LOOP_CDA1
SETB P1.5
;Lctuiesc informaia transferat serial n buffer-ul de ieire al CDA
CLR P1.5
;Revalidez accesul la buffer-ul de intrare (serial) al CDA
POP ACC
POP PSW
;Refac starea UC dinaintea intreruperii de timp
RETI
SET_BIT_CDA1:
SETB P1.6
;Set DATA catre CDA
JMP CLK_CDA1
ISR_SI:
JB
RI,RECEPTIE
TRANSMITE:
CLR TI
RETI
RECEPTIE:
MOV DATA_SI,SBUF
CLR RI
SETB REC
RETI
MAIN:
217
7. Aplicaii
MOV R0,#7FH
LP:
MOV @R0,#00H
DJNZ R0,LP
;Scriu 0 in toate locatiile corespunzatoare memoriei interne a controller-ului
MOV SP,70H
;Setez adresa pentru stiva sistemului
CALL INIT
;Realizez initializarile canalelor temporizatoare si a interfetei seriale
MOV IE,#92H
;Validez ntreruperile corespunztoare canalului 0 temporizator i UART
LOOP:
;Se va particulariza programul funcie de protocolul dorit i funcie de
;particularitile sistemului
JNB REC,LOOP
;Testare caracter recepionat i comanda corespunzatoare codului asignat
; ................
CLR REC
;Reanclaare analiz a unui eventual nou caracter recepionat via UART
JMP LOOP
INIT:
MOV TMOD,CT_TMOD
MOV TCON,CT_TCON
MOV TL0,#CT_LOW0
MOV TH0,#CT_HIGH0
MOV TL1,#CT_LOW1
SETB 0D7H
;Dublez rata de transfer serial a informaiilor =>PCON.7=SCON=1
RET
END
218
MICROCONTROLLERE
AFISAJ SI
TASTATUR
CNTAR
DIFERENTIAL
(PARTEA MECANIC)
Captor
Tensometric
PREAMPLIFICATOR
AMPLIFICATOR
CONVERTOR
ANALOG-DIGITAL
PORT
INTRARE
SISTEM DIGITAL
CU MICROCONTROLLER
219
7. Aplicaii
=a
1
, unde:
2( a + b ) +
220
MICROCONTROLLERE
13
7. Aplicaii
221
222
MICROCONTROLLERE
LOCAL B_0,B_1,B_2
MOV R6,#04H
B_0:
MOV R7,#0FFH
B_2:
DJNZ R7,B_2
;Anclansare WATCH DOG
ORL PCON,#10H
MOV T3,#00H
DJNZ R6,B_0
ENDM
;Temporizarea de: 0,002048secunde.
;Registrul este pointer-ul n buffer-ul de mesaj de scris la afior LCD
;Registrul DPTR este pointer-ul ctre portul microsistemului la care se afl afiorul
;LCD
BUCLA:
MOV A,#0
;Pointer la buffer-ul de mesaj
MOVC A,@A+DPTR ;Rutina de scriere mesaj la LCD
INC DPTR
MOV R0,DPL
MOV R1,DPH
MOV DPL,R3
MOV DPH,R4
WAIT
ORL PCON,#10H ; Setare flag corespunztor WATCH DOG
MOV T3,#00H
;Anclanare WATCH DOG: scrie constanta
MOVX @DPTR,A
;Scrie caracterul ctre LCD
MOV DPL,R0
MOV DPH,R1
DJNZ R2,BUCLA
MOV DPL,R3
MOV DPH,R4
MOV A,#2
MOVX @DPTR,A
;Scrie comanda de avans cu un caracter la afiorul LCD
WAIT
RET
;Rutin de scriere a mesajelor ctre afiorul LCD
;MESAJ1 i MESAJ2 adresele de nceput pentru mesajele de afiat pe primul
;respectiv, pe al doilea rnd al afiajului
LCD_PRINT
MACRO #MESAJ1,#MESAJ2
MOV DPTR,#100H
;Adresa de scriere la LCD
MOV A,#1
;Selecie funcie:
MOVX @DPTR,A
;DISPLAY / CLEAR LCD
WAITL
MOV A,#80H
;Selecie funcie Cursor plasat pe:
MOVX @DPTR,A
;RNDUL 1
7. Aplicaii
223
WAIT
MOV R2,#10H;ncarc contor caractere ce vor fi afiate pe r-dul 1
MOV DPTR,#101H ;ncarc adresa de scriere ctre afiorul LCD
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ1 ;ncarc pointer ctre mesajul de afiat
MOV R0,DPL
MOV R1,DPH
WAITL
CALL BUCLA ;Rutin de scriere mesaj (lungime mesaj 16 car.)
WAITL
MOV DPTR,#100H
MOV A,#0C0H
MOVX @DPTR,A;
Comand saltul la rndul 2 al afiorului
WAIT
MOV DPTR,#101H
MOV R3,DPL
MOV R4,DPH
MOV DPTR,#MESAJ2 ;ncarc pointer ctre mesajul de afiat
MOV R0,DPL
MOV R1,DPH
MOV R2,#10H
;Contor de caractere Rnd 2
WAITL
CALL BUCLA ;Rutin de scriere mesaj (lungime mesaj 16 car.)
WAITL
ENDM
n continuare prezentm rutina de nmulire ntreag a dou valori
memorate n locaiile OP1 i OP2 (locaii de 16 bii fiecare). n locaiile MREZ1,
MREZ2, MREZ3 i MREZ4 (8 bii fiecare), n ordinea cresctoare a rangului, vom
obine rezultatul nmulirii. Rutina va genera produsul celor doi operanzi, iar flagul C va fi afectat la depirea buffer-ului rezultat.
Notnd cu N1H i N1L, respectiv cu N2H i N2L octeii corespunztori
celor dou numere, acestea pot fi scrise astfel: N1=256*N1H+N1L, iar
N2=256*N2H+N2L. (N1L=LOW(1),N2L=LOW(N2), iar N1H=HIGH(N1)
N2L=HIGH(N2)).
nmulindu-le obinem:
N1*N2=65536*N1H*N2H+256*(N1H*N2L+N2H*N1L)+N1L*N2L. Execuia
acestei nmuliri se va face ncepnd de la dreapta spre stnga, inndu-se cont de
eventualul bit de transport ce poate apare la execuia operaiilor.
M16:
MOV
B,OP1L
;ncarc n B pe N1L
MOV
A,OP2L
;ncarc n A pe N2L
MUL
AB
;Execut N1L*N2L
224
MICROCONTROLLERE
MOV
MREZ1,A ;Reine LSB rezultat din nmulirea
N1L*N2L
MOV
MREZ2,B ;Reine MSB rezultat din nm. N1L*N2L
MOV
A,OP2H
MOV
B,OP1L
MUL
AB
;Execut produsul: N2H*N1L
ADD
A,MREZ2 ;Adun: LSB(N2H*N1L)+MSB(N1L*N2L)
MOV
MREZ2,A ;Salveaz rezultatul
MOV
A,B
;Transfer n registrul A=MSB(N2H*N1L)
ADDC
A,MREZ3 ;Adun cu transport n A=MSB(N2H*N1L)
MOV
MREZ3,A ;Transfer rezultat n MREZ3
MOV
A,OP1H
MOV
B,OP2L
MUL
AB
;Execut produsul:N1H*N2L
ADD
A,MREZ2
;Adun: LSB(N1H*N2L)+LSB(LSB(N2H*N1L)+MSB(N1L*N2L))
MOV
MREZ2,A ;Transfer rezulatul n MREZ2
MOV
A,B
;Transfer MSB(N1H*N2L) n registrul A
ADDC
A,MREZ3
MOV
MREZ3,A
;Reine n MREZ3,MREZ2 i MREZ1 expresia calculat:
;256*(N1H*N2L+N2H*N1L)+N1L*N2L
;De observat c mulirea cu 256 este specificat prin locaia n care rezultatele sunt
;salvate, dup regula rangul cel mai ridicat este plasat la o adres mai mare
MOV
A,OP1H
MOV
B,OP2H
MUL
AB
;Execut produsul N1H*N2H
ADD
A,MREZ3
MOV
MREZ3,A ;Salvez LSB(N1H*N2H)
MOV
A,B
ADDC
A,MREZ4
MOV
MREZ4,A ;Salvez MSB(N1H*N2H)
RET
NR_OCT
DATA 13H
;Index octei serializai
SERBUF
DATA 21H ;Locaie octet de serializat ctre afioare
;Locaiile E3 i E4 reprezint biii 3, respectiv 4 ai Acumulatorului
SERPIN1
BIT
0E3H ;Ieire clock registru intrare serial/ieire paralel
SERPIN0
BIT
0E4H ;Ieire date registru de deplasare (MMC4015)
BIT_0
BIT
8
;Bitul 0 al locaiei SERBUF (21H)
BIT_1
BIT
9
;Bitul 1 al locaiei SERBUF (21H)
BIT_2
BIT
0AH ;Bitul 2 al locaiei SERBUF (21H)
BIT_3
BIT
0BH ;Bitul 3 al locaiei SERBUF (21H)
BIT_4
BIT
0CH ;Bitul 4 al locaiei SERBUF (21H)
BIT_5
BIT
0DH ;Bitul 5 al locaiei SERBUF (21H)
7. Aplicaii
BIT_6
BIT_7
BUF_AF:
225
BIT
0EH ;Bitul 6 al locaiei SERBUF (21H)
BIT
0FH ;Bitul 7 al locaiei SERBUF (21H)
DB
01H,23H,45H,67H,89H ;Zon memorare informaii
DB
11H,11H,11H,11H,11H ;de afiat.
DB
22H,22H,22H,22H,22H ;Valori de TEST
DB
33H,33H,33H,33H,33H
; Refresh afioare
MOV SP,#70H
;Setare adres de baz stiv
MOV NR_OCT,#0 ;niializare contor
MOV DPTR,#(BUF_AF-1) ;Iniializare pointer
LOOP_BY:
INC
DPTR
;Incrementare pointer
MOVX A,@DPTR
;Citete primul caracter (numr)
MOV SERBUF,A
PUSH DPH
PUSH DPL
;Reine n stiv DPTR
MOV DPTR,#120H
;ncarc n DPTR adresa portului pentru afioarele cu 7 segmente
Biii 3 i 4 sunt folosii pentru transferul semnalelor de CLOCK i respectiv DATE
CLR SERPIN1
;Pune pe zero linia de CLOCK
MOV C,BIT_7 ;Transfer n C falg bitul 7 al datei de serializat
MOV SERPIN0,C
;Scrie bitul respectiv ca bit 4 al reg.A
MOVX @DPTR,A;Scrie la portul de adres 120H primul bit MSB
SETB SERPIN1
MOVX @DPTR,A
;Pune linia CLOCK pe 1 logic
;Repet paii corepunztori bitului 7 pentru bitul 6 al datei de transmis
CLR SERPIN1
MOV C,BIT_6
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 5
MOV C,BIT_5
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 4
MOV C,BIT_4
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 3
226
MICROCONTROLLERE
MOV C,BIT_3
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 2
MOV C,BIT_2
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 1
MOV C,BIT_1
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
CLR SERPIN1
;Idem bitul 0
MOV C,BIT_0
MOV SERPIN0,C
MOVX @DPTR,A
SETB SERPIN1
MOVX @DPTR,A
,0;Reface din stiv pointer-ul de adresare pentru buffer-ul de date
POP DPL
POP DPH
INC
NR_OCT
;Incrementeaz contorul de transfer octei
MOV A,NR_OCT
CJNE A,#5,LOP_BY ;5 reprezint numrul de afioare 7 seg.
;Testeaz dac au fost serializate toate informaiile
JMP EXIT
;Ieire din rutin
LOP_BY:
JMP LOOP_BY
EXIT:
n legtur cu utilizarea canalului Watch Dog (WD) trebuie s artm
urmtoarele: aa cum s-a precizat n capitolele 1, 2 i 4 rolul acestui canal
temporizator const n generarea unui RESET-hard atunci cnd el atinge
starea"overflow", respectiv are loc tranziia de la 11111111B la 00000000B.
ncrcnd o anume constant de timp exprimabil pe 8 bii, putem
modifica intervalul de timp dup care, dac nu este rencrcat constanta,
respectivul canal temporizator va genera semnalul de RESET.
n cazul nostru, sistemul a prezentat o "sensibilitate" iniial relativ
important la zgomotele din mediul industrial. De aceea am adoptat urmtoarea
soluie: am setat la 256*16s perioada temporizat de ctre WatchDog i periodic
n programul de funcionare, am reanclanat WD prin rencrcarea constantei de
7. Aplicaii
227
timp mai sus precizate. Cum sistemul este un sistem de comand i control
(comanda elementelor auxiliare ale dozatorului care realizeaz umplerea automat
a sa, precum i un sistem de msurare, cci sistemul cntrete o anumit cantitate
ce este prescris pe fluxul tehnologic), cu un numr de 8 stri, acestea au fost
numerotate i stocate mpreun cu restul variabilelor att n memoria intern ct i
n cea extins a microcontroller-ului. Actualizarea strii s-a realizat de fiecare dat
imediat dup ce starea respectiv a aprut. Rutina de iniializare a sistemului a fost
modificat astfel nct dup fiecare RESET, s analizeze starea sistemului i
funcie de aceasta s realizeze saltul la nceputul programului corespunztor strii.
Enumerm strile principale ale sistemului i variabilele ce sunt modificate
n concordan cu acestea.
0=stare ateptare programare / comand sistem Variabilele: DOZ=0 i PRG=0
1=stare programare sistem de la tastatur implic Variabilele: PRG=1 i DOZ=0
2=stare dozare: Variabilele: PRG=0 i DOZ=1
3=stare temporizare1 Variabilele PRG=0 i DOZ=0
4=stare temporizare2 Variabilele PRG=0 i DOZ=0
5=stare temporizare3 Variabilele PRG=0 i DOZ=0
6=stare aseptare comand manual de golire
7=stare temporizare la comanda clapei de golire
8 stare de temporizare pentru blocarea clapetei de golire
Sistemul este supervizat de un calculator de proces ce asigur integrarea sa
pe linia tehnologic, dar poate funciona i autonom, caz n care operatorul poate
interveni pentru a goli manual containerul dozatorului.
Prezentm n continuare acea parte din programul de funcionare ce
realizeaz directarea corespunztoare a execuiei dup ce s-a generat semnalul de
RESET.
MAIN:
ANL IE,#00H
;Invalidate ntreruperile
MOV DPTR,#HPRT_O2
MOV A,#00H
MOV PORT_O2,A
;Oprete motor ce introduce materie pulverulent n cntar - comanda este dictat
;de fluxul tehnologic specific
MOV R0,#7FH
INIT_1:MOV @R0,#00H
DJNZ R0,INIT_1
;Iniializare memorie intern cu 0
ORL TCON,#0CH
;Valideaz activarea ntreruperilor exeterne de stare 1 pe front - se evit astfel
;reanclanarea ntreruperilor n cazul cnd nivelul semnalului rmne prea mult
;timp n 0 logic.
MOV SP,#6EH
;Poziionare stiv sistem la adresa 6EH
;Testare stare sistem - este executat pentru o eventual resetare ca urmare a
;aciunii Watch Dog-ului, care genereaz ceea ce se cheam "Warm Boot"
228
MICROCONTROLLERE
MOV R0,#0D0H
;Locaia D0 reine STAREA sistemului14
MOV A,@R0
;Starea 0 corespunde situaiei de RESET la pornirea sistemului "COLD RESET"
CJNE A,#5AH,PRIM_RESET ;n caz de COLD RESET
;Valoarea 5AH la locaia D0H exprim execuia unui "Warm Boot" ca urmare a
;forrii de ctre WD a unui semnal de RESET pentru sistem.
MOV PORT_O1,#03h
;Reprezint traiectoria programului n caz de Warm RESET
MOV DPTR,#HPRT_O1
MOV A,PORT_O1
MOVX @DPTR,A ;Comand de refacere stare port "port01" de
comand
ERR_RESET:
MOV R0,#90H
MOV R1,#57H
MOV R2,#23
;Pregtire registre pentru transferul pe bloc al informaiilor de stare
;Registrul R0 este pointer-ul surs, registrul R1 este pointer-ul destinaie i
;registrul R2 este contorul utilizat pentru transferul blocului de date de stare (23D ;lungimea acestuia), din memoria intern extins15 n memoria SRAM ncepnd de
;la adresa 57H
ERR_LOOP1:
MOV A,@R0
;Copiaz informaie surs n registrul A
MOV @R1,A
;Slaveaz registrul A n memoria intern
INC R1
INC R0
;Incrementeaz pointerii
;Execut copiere bloc de la 90H
DJNZ R2,ERR_LOOP1
la 57H
ORL PCON,#10H
MOV T3,#00H
;Anclanare WATCH DOG
;Aceast operaie trebuie realizat periodic la execuia programului pentru a
;preveni generarea unui semnal de RESET
MOV A,STARE
;Locaia reine ultima stare postat.
Indexarea ;strilor este fcut natural n ordinea de apariie a acestora
;Postarea indexului strii se face ntotdeauna dup ce starea respectiv a fost atins.
14
229
7. Aplicaii
Este necesar testarea redundant a acestei stri cci apariia semnalelor parazite are
caracter aleator
17
Aceast stare este tratat deosebit de celelalte, cci este necesar o cntrire distinct a
pulberii aflate n buncrul cntarului dozator, iar pe de alt parte trebuie analizat valoarea
curent a greutii acesteia n raport cu cea prescris i trebuiesc luate acele decizii care se
impun, inclusiv generarea semnalelor de eroare n dozare atunci cnd cantitatea de dozat a
fost depit.
230
MICROCONTROLLERE
DEC R0
DJNZ R2,INIT_2
MOV R0,#0D0H
MOV @R0,#5AH
;ERR_RESET1:
;Iniializare valori prescrise implicite. Reprezint valorile iniiale care asigur
;starea de baz a sistemului dozator.
MOV VAL_PRESCR_L,#40H
MOV VAL_PRESCR_H,#1FH
;Urmeaz instruciunile ce detaliaz aciunea sistemului n fiecare dintre posibilele
stri pe care acesta le poate atinge dup generarea semnalului de RESET
Programul n forma sa complet este memorat pe CD.
n concluzie, putem spune c proiectarea aplicaiilor dedicate impune o
deosebit rigurozitate. Nu este suficient proiectarea corect din punct de vedere
hardware i software a aplicaiei, sistemul realizat va trebui s fie integrat corect n
mediul, procesul, aplicaia mai larg pentru care a fost construit. Complexitatea
interaciunilor ce apar n "viaa" sistemului nu poate fi n totalitate simulat, ceea
ce face ca etapa de testare "n sistem" o proiectului s aibe o importan esenial.
Nu putem afirma c o anume etap a proiectrii este mai puin important dect
alta, dar prin iterarea raional a etapelor de proiectare, prin testarea cu o colecie
ct mai larg de stimuli a sistemului i prin verificarea sa ntr-un mediu
"zgomotos" putem atinge sigurana necesar funcionari satisfctoare a acestuia.
Este necesar, deseori, s construim nc din faza de proiectare odat cu
programele de funcionare i "uneltele" specifice de testare a sistemului. Aceste
"unelte" nu sunt altceva dect rutine, programe, uneori complexe, ce asigur
validarea corectei funcionri corespunztoare fiecrei etape pe care sistemul o
parcurge n funcionare. Dezvoltarea programelor de testare simultan cu
proiectarea sistemului reduce substanial timpul necesar validrii finale.
Nu trebuie neglijat principiul redundanei funcionale -oglindit att la
nivel fizic (hard) ct i la nivel logic (soft), atunci cnd dorim s realizm un
sistem robust i fiabil. Va trebui s verificm ntotdeauna dac suntem corect
"ancorai" n timp, dac sistemul nostru i menine proprietatea de a fi un sistem
de reglare "n timp real", asta presupune s verificm dac toate informaiile pe
care sistemul de comand le prelucreaz sunt "oportune", deci n concordan cu
teorema eantionrii.
Aplicaiile ce sunt detaliate pe CD-ul ataat lucrrii sunt aplicaii "reale" ce
funcioneaz n cadrul unor ntreprinderi ca: ELCO- SA Tg. Secuiesc, CIMUS SA
Cmpulung i F.S. SA Rnov. Ele au fost "validate" ntr-o perioad de funcionare
ce depete civa ani. Aducem mulumiri celor ce le-au testat i ne-au ajutat la
implementarea acestora, ajutorul lor a fost deosebit de important, iar pentru aceasta
le mulumim