Documente Academic
Documente Profesional
Documente Cultură
Memoria Program La Microcontrollere
Memoria Program La Microcontrollere
MICROCONTROLLER
Un microcontroler este un sistem cu microprocesor, care conţine memorie de date şi de program,
interfete seriale şi paralele, timere, sistem de intreruperi externe şi interne - toate integrate într-un singur
chip.
2. MEMORIA
Este compusa din doua blocuri
- Memoria de program
- Memoria de date
Memoria RAM de uz general
8k * 14 biți
56k * 14 biți
Memorie ROM
Memorie FLASH
Memorie EPROM
Memorie EEPROM
Aceasta are organizarea de tip Stivuire.
4. Organizarea memoriei:
Contorul de Program (PC) specifica adresa instrucțiunii care trebuie adusa pentru execuție.
Are dimensiunea de 13 biți sau 16 biți pentru modelele enhanced .
Este compus din doi byte, unul mai semnificativ (PCH), altul mai puțin semnificativ (PCL) PCL
Este un registru care poate fi atât citit cat si scris PCH conține biții sau din PC si nu poate fi
direct citit si scris, ci numai prin intermediul registrului PCLATCH
În general MCU preia informaţia de la interfeţele de intrare, o prelucrează şi aplică rezultatul
către interfaţa de ieşire.
5. Contorul de program
Pentru a comuta intre paginile de memorie de program, trebuie modificați cei mai
semnificativi biti din contorul de program.
Daca se executa instrucțiuni consecutive, contorul de program va trece de granițele paginii
fără intervenția utilizatorului.
Pentru dispozitive care au implementat mai puțin de 8k de memorie de program, accesarea
unei locatii peste cea fizica va cauza accesarea adresei din pagina fizica, ignorând biții din
PCLATCH.
Exista si un vector de reset, acesta va forta contorul de program sa fie setat la valoarea 00h.
Când o întrerupere este recunoscuta, pc este forțat la adresa 04h.
In momentul in care se face reset, se sterge continutul registrului PCLATCH.
6. 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
7. 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.
8. Stiva
13. Timerul:
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.
Caracteristici:
Poate fi scris is citit
Prescaler de diferite dimensiunj (biti)
Sursa pentru semnalul de clock poate fi externa sau interna
Poate opera in diferite moduri(sincron, asincron)
PWM
Descrierea functionarii unui timer de 8 biti (de cele mai multe ori timer0 si timer2)
Registrii TIMER1
4) Tipuri de adresari
a. Adresarea directa
b. 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.
5) Prezentati un caz de adresare indirecta a memoriei de date
Utilizarea adresarii indirecte simple pentru a sterge RAM intr-un numar minim de
instructiuni
6) ADC
ADC-ul sau convertorul analog-digital este un periferic din cadrul microcontrollerului.
a. Caracteristici
i. Rezolutia
ii. Acuratetea
iii. Rata de esantionare
iv. Viteza
b. Descrieti functionarea unui modul ADC cu circuit de esantionare/memorare si convertor
cu aproximatii succesive de 10 bit
Convertorul mai precis conversia se face prin esantionare. Conversia se face comparand valoarea
esantionului cu o valoare numerica a unui esantion, cand valoarea esantionului de comparat scade sub
valoarea esantionului comparat. Fiecare numar apare la frecventa de esantionare, iar lungimea fiecarui
numar este de lungimea data in acel convertor de 10 biti. Astfel se obtine un sir de numere, repetabil,
valoarea in fiecare moment fiind reprezentata pe 10 biti.
Conversia succesiva, cu o rapiditate crescuta => convertorul cu aproximații succesive. Acesta funcționează
pe principiul evaluarii a unui esantion, care compara valoarea analogic cu jumatatea din valoarea maxima in
prima faza, dupa comparatie se compara cu jumatatea din valoarea ramasa, iar urmatorul pas cu jumatete din
valoarea care a ramas de comparat. Acest algoritm duce la ajungerea la o valoare mica, mai mica dacat acea
cuanta foarte rapid. Daca convetrorul este pe 10 biti sunt necesari 10 pasi de conversie + unul din motive
tehnice. uC necesita un pin de intrere analogica care este asignat unui circuit de esantionare- memorare,
pentru a memora es in intervalul a 2 esantionari. Dupa esantionare fiecare esantion necesita conversia,
aceasta facandu-se in 10+1 pasi. Esantionarea trebuie facuta astfrl incat frecventa sa fie x2 fata de cea a f din
spectrul semanaului es.
Modul de conversie: ADC = (VIN*1024) / VREF
Fara timer:
DDRB = 0b00000000; //0 – output si 1 - input
while(1)
{
PORTB = 0b00000001;
_delay_ms(1000);
PORTB = 0b00000010;
}
Cu timer:
Configurarea registrilor:
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on
GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR
internally tied to VDD)
#pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled)
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled)
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled)
void interrupt ()
{
//set timer value IE max is 255 for Timer0
//reset interrupt flag to 0
//increment a variable by 1
}
Ce este ALU
o ALU este unitatea aritmetica s ilogica
o Aceasta este in strânsă legătura cu mărimea registrului de lucru si cu tipul mictrocontroller
Ce face ALU
o Afecteaza functii aritmetice si logice intre date din registrul de lucru si oricare alt registru
o Poate efectua urmatoarele operatii:
Adunare
Scadere
Shiftare
Operatii logice
Ce ste un mictrocontroller si ce face el
o uC este un sistem cu microprocessor (acesta are CPU, diferite memorii de date si programe si
porturi I/O, Timere...)
o +???
Harvard
o Spatiu de memorie separate pentru instructiuni si date
o Sunt posibile largimi diferite pentru busurile de date si instructiuni
o Numar minim de cicli processor/ ciclu fetch
o Cresterea reala a Throughput-ului
Von Neumann
o Instructiunile si datele sunt aduse pe acelasi bus = system de comunicare intre diferite
componente (autostrada de date)
o Banda limitata
o Numar mare de cicli processor/ ciclu fetch = operatia de baza a unui processor (citire,
decodificare, executie)
o Versatilitate
Memoria program
o MAI SUS
CPU
Responsabila cu:
o Aducerea instructiunii corecte pentru executie
o Decodarea acestei instructiuni
o Executia acestei instructiuni
CPU lucreaza in conjunctie cu ALU pentru a complete executia instructiunii (in operatii aritmetice si logice)
Controleaza:
o Busul adreselor de memorie program
o Busul adreselor se memorie de date
o Accesul la stiva
Stiva (generatlitati)
o Este o memorie de tip LIFO (Last In First Out).
o Permite aparitia unor combinatii de pana la 8 sau 16 (enhanced) apeluri de subrutine sau interuperi.
o Spatiul stivei nu se poate citi sau scrie
o Spatiul stivei nu face parte din spatial de memorie program sau memorie de date
o Stiva este golita in cazul aparitiei uneia din instructiunile return, retlw sau retfie
TRIS
o Bitii din registrul TRIS sunt suprascrisi in cazul anumitor periferice, cand acestea sunt validate.
o Trebuie evitate instructiuni de tip citeste-modifica-scrie (BSF, BCF, XORWF) care au ca destinatie
registrul TRIS.
o Registrul TRIS controleaza directia pinilor portului, chiar cand acestia sunt utilizati ca intrari
analogice
o Utilizatorul terbuie sa se asigure ca bitii TRIS se mentin setati tot timpul cand se utilizeaza acesti pini
ca intrari analogice.
PWM
o 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
o Fiecare modul CCP are 3 registrii.
o Pot fi mai multe module CCP intr-un μC.
o Mai cauta
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.