Documente Academic
Documente Profesional
Documente Cultură
Periferice
Sunt dispozitive adaugate pe chip, care fac diferenta fata de
un microprocesor
- Porturi I/O de uz general
- Timere
- Captura, comparare si modulatia impulsurilor in durata (CCPWM)
- Interfete seriale standard
- Interfete paralele standard
- Referinte de tensiune
- Comparatoare
- Convertoare analog digitale
- Afisaj lcd
Functii speciale
Ajuta la cresterea flexibilitatii in proiectare, a realizarii unui
sistem de incredere, cu un cost mult redus
- Configurare
- Power on reset (POR)
- Brown out reset (BOR)
- Watchdog timer
- Sleep
- Oscilatorul intern
- Programarea in circuit (ICSP)
ARHITECTURA INFLUENTEAZA
- Performantele globale
- Viteza operationala
- Structura memoriei disponibile
VON NEUMANN
•Instructiunile si datele sunt aduse pe
acelasi bus
•Banda limitata
•Numar mare de cicli procesor / ciclu fetch
•Versatilitate
HARVARD
•Spatiu de memorie separat pentru
instructiuni si date
•Sunt posibile largimi diferite pentru busurile de date si instructiuni
•Numar minim de cicli procesor / ciclu fetch
•Cresterea reala a Throughput-ului
FORMATUL GENERAL AL
INSTRUCTIUNILOR
Instructiunile microcontrollerelor din gama mid-range pot fi impartite in
patru formate generale:
- Operatii cu registrii orientate pe byte
- Operatii cu registrii orientate pe bit
- Operatii literale si de control
- Instructiuni de salt (CALL si GOTO)
Codul de operand (opcode) al instructiunilor poate varia de la 3 la 6 biti
Sunt implementate 35 instructiuni
EXECUTIA INSTRUCTIUNILOR
Clock (ceas) de instructiune
Fiecare ciclu de instructiune (TCY) este alcatuit din 4 cicli Q (Q1-Q4)
Durata unui ciclu Q este aceiasi ca perioada oscilatorului (TOSC)
Cicli Q corespund proceselor de decodare, citire, procesare, scriere, etc.
Cei 4 cicli care formeaza un ciclu instructiune (TCY) pot fi generalizati ca:
- Q1: Ciclul de decodare a instructiunii sau NOP fortat
- Q2: Ciclu de citire a datelor sau NOP
- Q3: Procesarea datelor
- Q4: Ciclu de scriere a datelor sau NOP
REGISTRUL STATUS
Registrul STATUS contine:
- starea aritmetica a ALU,
- starea bitului RESET
- biti de selectie a bancului de memorie de date
Registrul STATUS poate fi destinatia oricarei instructiuni
Daca registrul STATUS este destinatia unei instructiuni care afecteaza biti Z, DC sau C, scrierea
acestor biti va fi blocata
Acesti biti sunt setati sau stersi in concordanta cu logica
microcontrollerului
Biti C si DC opereaza ca bit de borrow (imprumut) si digit borrow in
Scaderi
MEMORIA
Este compusa din doua blocuri
- Memoria de program
- Memoria de date
Memoria RAM de uz general
Registrii cu functiuni speciale (Fiecare bloc are propriul bus)
Accesul la blocurile de memorie poate sa apara in acelasi ciclu sistem
MCU din familia Microchip mid range au un contor de program de:
- 13 biti => 2 13 = 8k spatiu de adresare
- 16 biti => 2 16 = 64k spatiu de adresare (56k
Instructiunile sunt organizate pe 14 biti si sunt ‘single word’
Rezulta un spatiu de adresare de:
- 8k * 14 biti
- 56k * 14 biti
Spatiul de memorie de program este divizata in pagini de
cate 2k fiecare
ORGANIZAREA MEMORIEI DE
PROGRAM
Pentru a comuta intre paginile de memorie de program, trebuie
modificati cei mai semnificativi biti din contorul de program (PC)
Aceasta se face prin modificarea valorii unui registru special SFR
numit program counter latch high (PCLATCH)
Daca se executa instructiuni consecutive, contorul de program va
trece de granitele paginii fara interventia utilizatorului
Pentru dispozitive care au implementat mai putin de 8k de memorie
de program, accesarea unei locatii peste cea fizica va cauza
accesarea adresei din pagina fizica , ignorand bitii din PCLATCH
Vectorul de reset
- Un reset va forta contorul de program la valoarea 00h
- Vom numi aceasta adresa adresa vectorului de reset”
- Orice reset va sterge continutul registrului PCLATCH
Vectorul de intrerupere
- Cand o intrerupere este recunoscuta , pc este fortat la adresa 04h.
- Vom denumi aceasta adresa : adresa vectorului de intrerupere
- Nu se modifica registrul PCLATCH
Trebuie avut grija daca adresa de salt din intrerupere este in alt bank
de memorie
Inainte de a fi modificat de ISR, continutul PCLATCH trebuie salvat ,
astfel incat dupa revenirea din rutina de intrerupere , continutul sau sa
poata fi restaurat
STIVA
Stiva este o memorie de tip LIFO (Last In First Out)
Stiva permite aparitia a unor combinatii de pana la 8 sau
16 (enhanced) apeluri de subrutine sau intreruperi
Stiva contine adresa de reintoarcere din ramura de
program activa, in executia programului
Microcontrollerele din gama mid-range au o stiva cu 8
nivele x 13 biti, iar cele din gama enhanced o stiva de 16
nivele de 15 sau 16 biti
spatiul stivei nu se poate citi sau scrie
spatiul stivei nu face parte din spatiul de memorie
program sau memorie de date
ADRESAREA INDIRECTA
Adresarea indirecta este un mod de adresare a
memoriei de date, in care adresa memoriei de date din
instructiune nu este fixata
Este utilizat un registru SFR ca pointer la locatia din
memoria de date care trebuie citita sau scrisa
Deoarece acest pionter este in RAM, continutul sau
poate fi modificat de catre program
RESET
Logica de reset este utilizata pentru a aduce
microcontrollerul intr-o stare stabila, cunoscuta.
Sursa care a determinat aparitia semnalului de reset
poate fi determinata verificand bitii de stare a
dispozitivului.
Logica de reset este proiectata astfel incat sa creasca
performanta si sa scada costul sistemului
PORTURI I/O
PINUL I/O DE UZ GENERAL POATE FI
CONSIDERAT CA CEL MAI SIMPLU
PERIFERIC
PINI I/O PERMIT MICROCONTROLLERULUI
SA MONITORIZEZE SI SA CONTROLEZE
ALTE DISPOZITIVE
PENTRU FLEXIBILITATE SI
FUNCTIONALITATE, PINI I/O POT AVEA MAI
MULTE FUNCTIUNI ALTERNATIVE
TIPUL FUNCTIUNII ESTE DAT DE TIPUL
DISPOZITIVULUI SI DE NECESITATILE I/O
CONSIDERATII DE PROGRAMARE
PENTRU PORTURI I/O BIDIRECTIONALE
ORICE INSTRUCTIUNE CARE EFECTUEAZA O OPERATIE DE
SCRIERE, EFECTUEAZA DE FAPT O OPERATIE DE CITIRE URMATA
DE O OPERATIE DE SCRIERE. INSTRUCTIUNILE BCF SI BSF, DE
EXEMPLU, CITESC REGISTRUL IN CPU, EXECUTA OPERATIILE PE BIT
SI SCRIU REZULTATUL INAPOI IN REGISTRU
TREBUIE AVUT GRIJA CAND SE LUCREAZA CU ACESTE INSTRUCTIUNI DACA PORTUL
ESTE SETAT PE UNII PINI CA INTRARE,
IAR PE ALTII CA IESIRE
EXEMPLU: O OPERATIE TIP BSF A BITULUI5 APARTINAND PORTULUI
B, VA CAUZA CITIREA TUTUROR CELOR 8 BITI PORTB IN CPU. APOI, INSTRUCTIUNEA BSF
VA MODIFICA VALOAREA BITULUI 5 SI
VALOAREA PORTB ESTE SCRISA IN LATCH-UL DE PORT. DACA UN
ALT BIT AL PORTB ESTE UTILIZAT CA PIN BIDIRECTIONAL I/O SI ESTE DEFINIT CA
INTRARE IN ACEST TIMP, SEMNALUL DE INTRARE
PREZENT LA PIN VA FI CITIT DE CPU SI RESCRIS IN LATCH-UL DE
DATE A ACESTUI PIN. ATAT TIMP CAT PINUL STA IN STAREA DE
INTRARE, NU APARE NICI O PROBLEMA. DAR DACA BITUL ESTE COMUTATA CA IESIRE,
CONTINUTUL LATCH-ULUI DE DATE POATE FI NECUNOSCUT.
CONSIDERATII DE PROGRAMARE
OPERATII SUCCESIVE LA UN PORT I/O
SCRIEREA ACTUALA LA UN PORT I/O LA SFARSITUL
CICLULUI DE INSTRUCTIUNE, LA FEL CA IN CAZUL
CITIRII, DATELE TREBUIE SA FIE VALIDE LA INCEPUTUL CICLULUI DE INSTRUCTIUNE
TREBUIE AVUT GRIJA CAND APAR INSTRUCTIUNI
DE SCRIERE URMATE DE OPERATIUNI DE CITIRE,
PE ACELASI PORT
SECVENTA DE PROGRAM TREBUIE SA PERMITA STABILIZAREA VALORII TENSIUNII LA
PIN, INAINTE CA URMATOAREA INSTRUCTIUNE CARE CAUZEAZA
CITIREA DE LA PORT SA FIE EXECUTATA, ALTFEL
S-AR PUTEA CITI VECHEA STARE A PORTULUI IN
LOC DE CEA CURENTA
TIMERE
CIRCUITE DE TEMPORIZARE SI/SAU NUMARARE
INDEPENDENTE DE FUNCTIONAREA CPU
VALOAREA REGISTRILOR POATE FI CITITA SI SCRISA
LA DEPASIREA VALORII MAXIME SETEAZA UN BIT DE DEPASIRE SI POT GENERA
INTRERUPERI
SURSA SEMNALULUI DE CLOCK POATE FI INTERNA
SAU EXTERNA MICROCONTROLLERULUI
FRONTUL PE CARE SE FACE INCREMENTAREA CONTORULUI POATE FI ALES
POT EXISTA MAI MULTE TIMERE INTR-UN μC
MARIMEA REGISTRULUI TIMER ESTE IN FUNCTIE DE TIPUL μC SI DE TIPUL TIMERULUI
ALES
TIMER0
TIMER0 ARE URMATOARELE PROPRIETATI:
- TIMER / COUNTER DE 8 BITI
- POATE FI CITIT SI SCRIS
- PRESCALER (PREDIVIZOR) DE 8 BITI
PROGRAMABIL SOFTWARE
- SURSA PENTRU SEMNALUL CLOCK POATE FI
EXTERNA SAU INTERNA
- POATE GENERA INTRERUPERI LA DEPASIREA VALORII MAXIME A REGISTRULUI TIMER
DE LA FFh LA 00h
- SE POATE SELECTA FRONTUL SEMNALULUI DE CLOCK PENTRU SURSA EXTERNA
TIMER1
TIMER1 ARE URMATOARELE PROPRIETATI:
- TIMER / COUNTER DE 16 BITI (TMR1H, TMR1L)
- POATE FI CITIT SI SCRIS
- PRESCALER (PREDIVIZOR) DE 4 BITI
PROGRAMABIL SOFTWARE
- SURSA PENTRU SEMNALUL CLOCK POATE FI
EXTERNA SAU INTERNA
- POATE GENERA INTRERUPERI LA DEPASIREA VALORII MAXIME A REGISTRULUI TIMER
DE LA FFFFh LA 0000h
- TIMER1 POATE OPERA IN TREI MODURI:
TIMER SINCRON
NUMARATOR SINCRON
NUMARATOR ASINCRON
TIMER2
TIMER2 ARE URMATOARELE PROPRIETATI:
- TIMER DE 8 BITI
- POATE FI CITIT SI SCRIS
- PRESCALER SI POSTSCALER PROGRAMABILE SOFTWARE
- REGISTRU DE PERIOADA
- UTILIZAT DE MODULUL CCP PENTRU GENERAREA PWM
- UTILIZAT DE MODULUL UART PENTRU GENERAREA BAUD RATE
COMPARARE/CAPTURA/PWM
FIECARE MODUL CCP (COMPARARE/CAPTURA/PWM) CONTINE UN REGISTRU DE 16 BITI,
CARE POATE OPERA CA: - REGISTRU DE 16 BITI DE COMPARARE - REGISTRU DE 16 BITI
DE CAPTURA - REGISTRU DE 10 BITI MASTER/SLAVE DE FACTOR DE UMPLERE PENTRU
GENERARE PWMMODULELE CCP SUNT IDENTICE CA OPERARE, CU EXCEPTIA OPERARII
TRIGERULUI DE EVENIMENTE SPECIALE FIECARE MODUL CCP ARE 3 REGISTRII
MODUL CAPTURA
IN MOD CAPTURA, LA UN EVENIMENT, SE CAPTUREAZA VALOAREA TMR1 IN
CCPRxH:CCPRxLUN EVENIMENT ESTE SELECTAT PRIN BITII DE CONTROL
CCPxM3:CCPxM0 (CCPxCON<3:0>)CAND SE REALIZEAZA O CAPTURA, SE SETEAZA BITUL
DE CERERE DE INTRERUPERE CCPxIFBITUL CCPxIF TREBUIE STERS PRIN SOFTWARE
contorul de program la valoarea 00h
- TIMER1TIMER1 VA GENERA INTRERUPERI LA DEPASIREA VALORII MAXIME (FFFF)
MODUL COMPARARE
IN MOD COMPARARE, VALOAREA DIN CCPRxH:CCPRxL RSTE COMPARATA CONSTANT
CU VALOAREA DIN TMR1.LA APARITIA UNEI EGALITATI, PINUL CCPx ESTE:cu PCL ca
destinatie. Se arata cum PC este incarcat INTRERUPERETIMER1 TREBUIE SA FUNCTIONEZE
IN MOD DE NUMARATOR SINCRONIZATO CAPTURA NU RESETEAZA TIMER1ALU si
COMPARARE/CAPTURA/PWM
FIECARE MODUL CCP (COMPARARE/CAPTURA/PWM)
CONTINE UN REGISTRU DE 16 BITI, CARE POATE
OPERA CA:
- REGISTRU DE 16 BITI DE COMPARARE
- REGISTRU DE 16 BITI DE CAPTURA
- REGISTRU DE 10 BITI MASTER/SLAVE DE FACTOR DE
UMPLERE PENTRU GENERARE PWM
MODULELE CCP SUNT IDENTICE CA OPERARE, CU EXCEPTIA OPERARII TRIGERULUI DE
EVENIMENTE
SPECIALE
FIECARE MODUL CCP ARE 3 REGISTRII
POT FI MAI MULTE MODULE CCP INTR-UN μC
MODUL PWM
IN MOD PWM, LA PINUL DE IESIRE CCPx, SE VA
GENERA UN SEMNAL PWM CU REZOLUTIA DE 10 BIT.
PENTRU A FI DISPONIBIL CA PIN DE IESIRE, ACESTA
TREBUIE SA AIBA BITUL CORESPONDENT DIN
REGISTRUL TRIS SETAT PE ‘0’.
STERGEREA REGISTRULUI CCPxCON VA FORTA
LATCH-UL PWM DE IESIRE LA STAREA INITIALA ‘0’.
ACESTA NU ESTE LATCH-UL DE PORT!
TIMER-UL DE 8 BITI ESTE CONCATENAT CU 2 BITI AI CLOCK INTERN SAU CU 2 BITI AI
PRESCALERULUI PENTRU A CREA O BAZA DE TIMP DE 10 BITI
O IESIRE PWM ARE O BAZA DE TIMP (PERIOADA T)
SI UN TIMP IN CARE ESTE PE ‘1’, (T1)
COMPARATOARE
MODULUL COMPARATOR CONTINE UNUL SAU MAO
MULTE COMPARATOARE ANALOGICE.
INTRAREA SI IESIREA COMPARATOARELOR SUNT MULTIPLEXATE CU PINI DE
INTRARE/IESIRE
CA INTRARE A COMPARATOARELOR, PE LANGA PINI
DE INTRARE/IESIRE, POATE FI SI IESIREA SURSEI DE REFERINTA INTERNE
CONTROLUL FUNCTIONARII COMPARATORULUI SE FACE CU REGISTRUL CMCON
COMPARATOARE. INTRERUPERI.
FLAG-UL DE INTRERUPERE AL COMPARATORULUI ESTE SETAT
ORICAND VALOAREA DE IESIRE A ACESTUIA SE SCHIMBA
PENTRUA A DETERMINA DACA S-A SCHIMBAT STAREA ACTUALA A COMPARATORULUI
TREBUIE CA SA SE MEMOREZE STAREA
BITILOR DE IESIRE
FLAG-UL DE INTRERUPERE A COMPARATORULUI ESTE BITUL CMIF
ACEST FLAG ESTE SETAT LA APARITIA UNEI INTRERUPERI SI
TREBUIE RESETAT SOFTWARE.
PENTRU VALIDAREA INTRERUPERII TREBUIE SETATI ATAT BITII
CMIE CAT SI PEIE
A.
1. Memoria de program a microcontrollerelor. Organizarea memoriei. Contorul de program. Stiva.
Prezentati un caz de setare a unei limite a memoriei de program.
Memoria de program face parte din structura unui uC, alaturi de memoria de date.
Fiecare bloc de moemorie are propiul BUS.
Accesul la blocurile de memorie poate sa apara in acelasi ciclu sistem.
Dimensionarea memoriei de program se face in functie de contorul de program si anume, pe cati
biti este acesta.
Organizarea instructiunilor se face pe 14 biti fiind scrise intr-un singur cuvant.
astfel rezultand un spatiu de adresare: 2x biti = y K => y K * 14 biti
Spatiul memorii de program este divizat in pagini a 2k fiecare.
Pentru a comuta printre paginile memoriei de program este necesara modificarea celor mai
seminificativi biti ai contorului de program. Aceasta se face prin modificarea unui registru special,
numit program counter latch high.
Cand se executa instructiunii consecutive, contorul de program o sa treca de sfarsitul pagginii fara
interventia utilizatorului.
In functionare se folosesc vectorii reset si intrerupere.
Vectorul reset determina fortarea contorului de program la valoarea 00h, aceasta fiind numita
adresa vectorului de reset. Cand are loc evenimentulo reset se sterge continutul registrului
PLATCH.
Vectorul de intrerupere: atunci cand se recunoaste o intrerupere contorul de program este fortat la
adresa 04h, aceasta fiind denumita adresa vectorului de intrerupere. Aceasta modificare nu se
face in registrul PLACH, deoarece continutul din acesta trebuie salvat astfel incat atunci cand se
revine din rutina de treatare a intreruperii continutul sa poata fi restaurat.
Contorul de profram (Programm Counter - PC) specifica adresa unei instructiunii, care trebuie
adusa pentru executie.
Are o dimensiune de 13 sau 16 biti, avand o structura compusa din 2 byte, PCH – mai semnificativ
si PCL – mai putin semnificativ.
Registrul PCL poate fi scris cat si citit, iar PCH nu poate fi scris sau citit., doar prin intermediul
registrului PCLATCH.
Contorul de program este descris de 4 situatii: PCL este o destinatie a unei instructiuni, incarcarea
PC cand este executata o instructiune de tip goto, incarcarea PC cand se executa o instructiune
de tip CALL sau de asemenea incarcarea PC-ului in timpul unei instructiuni de tip return (push
stiva).
Stiva este o memorie de tipul last in first out (LIFO), iar aceasta contine adresa de reintoarcere din
ramula de program in curs de rulare, in executia propriu-zisa a programului. Aceasta este
organizata pe nivele, 8 nivele x 13 biti sau in cazul uC mai performante 16 nivele x 16 biti.
Stiva permite aparitia de pana la 8 – 16 combinatii de apeluri in diferite sub-rutine sau intreruperi.
Spatiul stivei nu se poate citi sau scrie si nu face parte din memoria de program sau de date.
Se face PUSH in stiva atunci cand se executa o instructiune de tip call sau de exemplu cand
apare o ramnificare a programului.
Se face POP din stiva atunci cand apare o instructiune de tip return.
Pentru uC mai avensate exista indicatoare care atentioneaza depasirea valorii maxime sau
minime.
Daca in stiva avem de exemplu 16 valori memorate si aceasta este plina cea de-a 17 o sa fie
memorata in locul primei valori introduse.
Limita unei memorii de program, a unui spatiu de adresare se poate face in felul urmator:
MCU de 16 biti => 216=64 k spatiu de adresare
Organizarea instructiunilor se face pe 14 biti => 64k * 14 biti
Ficare pagina are cate 2k => 32 de pagini.
3. Timerul. Ce este. Care sunt principalele caracteristici. Descrieti functionarea unui timer simplu
cu dimensiunea de 8 bit.
Timer-ul este un circuit de numarare si/sau de temporizare independent de functionarea CPU.
Registrul acestuia poate fi scris, dar si citit. Poate genera intreruperi la depasirea valorii maxime a
acestuia.
Sursa semnalului se clock poate sa fie interna sau externa uC. Se poate alege frontul pe care sa
se faca incrementarea acestuia. Intr-un uC pot exista mai multe timere. Marimea registrului TIMER
poate varia in functie de tipul de timer ales sau de tipul uC. Ex. TIMER0 = 8biti si TIMER1 = 16
biti.
Timerul initial se constituie pornind de la setarea sursei de clk interne sau externe si a nivelului de
prescale (ex. 1:2).
Urmeaza initializarea acestuia cu zero sau alte valori in functie de folosirea in program. (TMR0 =
0;)
Timerul de poate incrementa sau decrementa la aparitia unei conditii sau unui eveniment, de ex
daca a fost apasat un buton timerul sa inceapa sa incrementeze de la 0 la o valoare setata sau
pana la valoarea maxima. Daca se stie valoarea maxima se poate face un contor care se fie
incrementat sau decrementat odata cu overflow-ul timer-ului 0. Dupa incheierea ciclului de
folosire acesta se poate reseta (T0IF = 0;) revenind la valoarea initiala daca se intampla un
eveniment sau este indeplinita o conditie.