Microcontrolerele din familia mcs 51 au o arhitectură de tip. Microcontrolere MCS–51. Diagrama bloc, ALU, memorie de date. Modul citire port
Intel este fondatorul arhitecturii familiei MCS-51, care își ia numele de la primul reprezentant al acestei familii - microcontrolerul 8051, lansat în 1980 pe baza tehnologiei n-MOS. Set norocos dispozitiv periferic, capacitatea de a selecta în mod flexibil memoria de program externă sau internă și un preț accesibil au asigurat succesul acestui microcontroler pe piață. Din punct de vedere al tehnologiei, microcontrolerul 8051 a fost un produs foarte complex pentru vremea sa - 128 de mii de tranzistori au fost utilizați în cristal, ceea ce era de 4 ori numărul de tranzistori din microprocesorul 8086 pe 16 biți. Acest microcontroler rămâne nucleul familia MCS-51 până astăzi.
Elementele principale ale arhitecturii de bază a familiei (arhitectura microcontrollerului 8051) sunt:
ALU pe 8 biți;
4 banci de registre, cate 8 in fiecare;
Memorie de program internă (rezidentă) 4 KB, tip ROM sau EPROM (8751);
Memorie de date internă (rezidentă) 128 octeți;
21 registre cu funcții speciale;
procesor boolean;
Două temporizatoare/contoare pe 16 biți;
Controlor port serial(UART);
Controler de întrerupere cu două niveluri de prioritate;
Patru porturi I/O pe 8 biți, dintre care două sunt utilizate ca magistrală de adrese/date pentru accesarea programelor externe și a memoriei de date;
Generator de ceas încorporat.
Apoi a fost lansat microcontrolerul 8052, care includea o cantitate crescută de memorie rezidentă pentru programe și date, un al treilea temporizator și un controler de întrerupere extins corespunzător.
Următorul pas fundamental în dezvoltarea MCS-51 a fost transferul tehnologiei de fabricație către CMOS (modificare 8xC51). Acest lucru a făcut posibilă implementarea modurilor Idl (idle) și Power Down (consum redus), care oferă o reducere bruscă a consumului de energie al cristalului și au deschis calea pentru utilizarea microcontrolerului în aplicații dependente de putere, de exemplu, în dispozitive autonome alimentate cu baterie.
Iar ultima etapă importantă în dezvoltarea lui 8051 MK de către Intel a fost lansarea microcontrolerelor 8xC51FA/FB/FC și 8xC51RA/RB/RC, care pentru concizie sunt adesea denumite 8xC51Fx și 8xC51Rx. Principala trăsătură distinctivă a acestui grup de cristale este prezența unui cronometru/contor specializat (SCA). În plus, microcontrolerele 8xC51Rx conțin în plus un timer watchdog (WDT). Să ne uităm la arhitectura și funcționalitatea PCA mai detaliat.
RSA include:
temporizator/contor pe 16 biți;
Cinci module de eșantionare și comparare pe 16 biți, fiecare conectat la propria linie de porturi I/O pentru microcontroler.
Cronometrul/contorul servește toate cele cinci module de eșantionare și comparare, care pot fi programate pentru a îndeplini una dintre următoarele funcții:
Eșantionarea pe 16 biți a valorii temporizatorului pe marginea pozitivă a unui semnal extern;
Eșantionarea pe 16 biți a valorii temporizatorului pe marginea negativă a unui semnal extern;
Eșantionarea pe 16 biți a valorii temporizatorului pe orice margine a unui semnal extern;
Temporizator programabil pe 16 biți;
Dispozitiv de ieșire de mare viteză pe 16 biți;
PWM pe 8 biți.
Toate funcțiile de mai sus sunt efectuate în PCA la nivel hardware și nu încarcă procesorul central. Acest lucru vă permite să creșteți debitul general, să îmbunătățiți acuratețea măsurătorilor și al procesării semnalului și să reduceți timpul de răspuns al microcontrolerului la evenimente externe, ceea ce este deosebit de important pentru sistemele în timp real. PCA implementat în 8xC51Fx (8xC51Rx) s-a dovedit a fi așa
Desemnare |
Max. frecvență (MHz) |
ROM/EPROM (octet) |
contoare | ||
A fost norocos că arhitectura acestor microcontrolere a devenit un standard al industriei, iar PCA în sine a fost reprodus de multe ori în diferite modificări ale MK 8051.
Unele caracteristici ale unui număr de microcontrolere MCS-51 fabricate de Intel sunt prezentate în Tabelul 1.1.
Inițial, cele mai mari blocaje ale arhitecturii MCS-51 au fost ALU bazată pe baterie de 8 biți și execuția instrucțiunilor relativ lentă (cele mai rapide instrucțiuni necesită 12 procesoare pentru a fi executate).
Tabelul 1.1
I/O |
ADC, intrări x biți |
periferie, particularități |
puterea U (ÎN) |
||
Opțiune de joasă tensiune | |||||
4 nivele IRQ, ceas out | |||||
4 nivele IRQ, ceas out | |||||
Versiunea de joasă tensiune 8xC51Fx | |||||
4 nivele IRQ, ceas out | |||||
4 nivele IRQ, ceas out | |||||
4 nivele IRQ, ceas out | |||||
zgomote frecvența ceasului(frecvența de sincronizare MK)). Acest lucru a limitat utilizarea microcontrolerelor din familie în aplicații care necesită viteză crescută și calcule complexe (16 și 32 de biți). Problema modernizării fundamentale a arhitecturii MCS-51 a devenit urgentă. Problema modernizării a fost complicată de faptul că la începutul anilor 90 deja au fost create o mulțime de dezvoltări în domeniul software-ului și hardware familia MCS-51 și, prin urmare, una dintre sarcinile principale ale proiectării noii arhitecturi a fost implementarea compatibilității hardware și software cu dezvoltările bazate pe MCS-51.
Pentru a rezolva această problemă, a fost creat un grup comun de specialiști de la Intel și Philips, dar ulterior căile acestor două companii s-au divergent. Ca urmare, în 1995, au apărut două familii semnificativ diferite: MCS-251/151 de la Intel și MCS-51XA de la Philips (vezi subsecțiunea 1.2).
Principalele caracteristici ale arhitecturii MCS-251:
Spațiu de adresă liniar de 24 de biți, adresând până la 16 MB de memorie;
Arhitectură de registre care permite accesarea registrelor ca octeți, cuvinte și cuvinte duble;
Modul de adresare a paginii pentru a accelera preluarea instrucțiunilor din memoria programului extern;
coada de instrucțiuni;
Set de instrucțiuni extins, inclusiv operații aritmetice și logice pe 16 biți;
Spațiu de adrese stivă extins (până la 64 KB);
Performant cel mai mult comanda rapidă in 2 batai.
Setul de instrucțiuni MCS-251 include două seturi de instrucțiuni - primul set este o copie a setului de instrucțiuni MCS-51, iar al doilea constă din instrucțiuni extinse care profită de arhitectura MCS-251. Înainte de a utiliza microcontrolerul, acesta trebuie configurat, adică folosind programatorul, „ardeți” biții de configurare care determină ce set de instrucțiuni va deveni activ după pornirea alimentării. Dacă instalați primul set de instrucțiuni, atunci în acest caz familia MCS-251 va fi compatibilă cu MCS-51 la nivel de cod binar. Acest mod se numește modul binar. Dacă instalați inițial un set de instrucțiuni extinse (Mod sursă), atunci programele scrise pentru MCS-51 vor necesita recompilare folosind instrumente încrucișate pentru MCS-251. Modul sursă vă permite să utilizați arhitectura MCS-251 cu eficiență maximă și să obțineți cea mai înaltă performanță.
Pentru utilizatorii concentrați pe utilizarea microcontrolerelor MCS-251 ca înlocuitor mecanic pentru MCS-51, Intel produce microcontrolere MCS-151 deja programate în modul Binary Mode.
Câteva caracteristici ale unui număr de microcontrolere MCS-251/151 sunt prezentate în Tabelul 1.1.
În prezent, Intel, care vizează piața procesoarelor Pentium, reduce producția de cristale MCS-51. În general, pentru un anumit dezvoltator, acest lucru poate trece neobservat, cu excepția cazului în care folosește microcontrolere 8xC51GB și 80C152Jx, care nu au analogii lor exacti printre produsele altor companii. În ceea ce privește toate celelalte microcontrolere din familia MCS-51, toate au fost replicate de multe ori de alte companii.
Baza microcontrolerului (vezi Fig. 1) este o unitate aritmetică logică (ALU) pe 8 biți. Memoria MK are arhitectura Harvard, i.e. logic împărțit în: memorie de program - PP (internă sau externă), adresată de un contor de program pe 16 biți (SC) și memorie de date - internă (Resident Data Memory - RPD) 128 (sau 256) octeți, precum și externă (Externă Memorie de date – VPD) până la 64 KB. Din punct de vedere fizic, memoria programului este implementată în ROM (numai citire), iar memoria de date este implementată în RAM (datele pot fi scrise și citite).
Recepție și livrare semnale externe realizat prin 4 porturi de opt biți P0..P3. La contact memorie externa programe (VPP) sau memorie de date (DVD), porturile P0 și P2 sunt utilizate ca magistrală externă multiplexată pentru adrese/date. Liniile de port P3 pot îndeplini și funcții alternative (vezi Tabelul 1).
Registrul DPTR pe 16 biți formează adresa VPD sau adresa de bază a memoriei programului în comanda de conversie a acumulatorului. Registrul DPTR poate fi folosit și ca două registre independente de 8 biți (DPL și DPH) pentru a stoca operanzi.
Registrul intern de comandă (RC) de 8 biți primește codul comenzii care se execută; acest cod este descifrat de circuitul de control, care generează semnale de control (vezi Fig. 1).
Accesarea registrelor de funcții speciale - RSF (SFR - acestea sunt încercuite în Fig. 1 linie punctata) este posibilă numai folosind adresarea directă de octeți în intervalul de adrese de la 128 (80h) și mai mult.
Memoria rezidentă de date (RDM) din primele modele de microcontrolere din familia MCS-51 avea un volum de 128 de octeți. Cei 32 de octeți inferiori ai RPD sunt, de asemenea, registre scop general– RON (4 bănci a câte 8 lei fiecare). Programul poate contacta unul dintre cei 8 RON ai băncii active. Selectarea băncii active de RON se realizează prin programarea a doi biți în registrul de stare a procesorului - PSW.
Tabelul 1 – Atribuirea pinii MCS–51
PIN nr. | Desemnare | Scop |
1..8 | P1 | Port I/O cvasi-bidirecțional pe 8 biți |
9 | RST | Semnal de resetare (nivel activ – ridicat); Semnalul RST resetează: PC-ul și majoritatea registrelor cu funcții speciale (SFR), dezactivând toate întreruperile și temporizatoarele; selectează RON Bank 0; scrie „toate” pe porturile P0_P3, pregătindu-le pentru intrare; scrie codul 07H în pointerul stivei (SP); |
10..17 | Port I/O cvasi-bidirecțional pe 8 biți; după înregistrarea în categoria corespunzătoare „1” – îndeplinește funcții suplimentare (alternative): Intrare port serial – RxD; Ieșire port serial – TxD; Intrare de întrerupere externă 0 – ~INT0; Intrare de întrerupere externă 1 – ~INT1; Intrare temporizator/contor 0 – T0; Intrare temporizator/contor 1 – T1; Ieșire stroboscopică semnal la scrierea la VPD – ~ WR; Ieșire stroboscopică semnal la citirea din VPD – ~ RD; |
|
18, 19 | X1, X2 | Pini pentru conectarea unui rezonator de cuarț sau circuit LC; |
20 | GND | Concluzie generală; |
21..28 | P2 | Port I/O cvasi-bidirecțional pe 8 biți; sau adresa de ieșire A în modul de funcționare cu memorie externă (VPP sau VPD); |
29 | PME | Strobe pentru citirea Memoriei Externe de Program, emis numai la accesarea ROM-ului extern; |
30 | ALE | Strobe pentru adrese de memorie externă (VPP sau VPD); |
31 | EA | Dezactivând RPP, nivelul „0” la această intrare transferă MK la eșantionarea comenzilor doar de pe pistă ; |
39..32 | P0 | Port I/O bidirecțional pe 8 biți; la accesarea memoriei externe, emite adresele A (care sunt scrise într-un registru extern folosind semnalul ALE), apoi schimbă un octet sincron cu semnalul ~PME (pentru comenzi) sau ~WR,~RD (pentru date în VPD) , la accesarea Memoriei Externe toate unitățile sunt scrise în registrul portului P0, distrugând informațiile stocate acolo; |
40 | Ucc | Ieșire tensiune de alimentare |
Schimbarea băncilor în lei simplifică execuția subrutinelor și gestionarea întreruperilor, deoarece nu este nevoie să trimiteți conținutul RON-urilor din programul principal la stivă atunci când apelați o subrutină (este suficient să mergeți la o altă bancă activă de RON din subrutină).
Accesul la RPD este posibil folosind adresarea indirectă sau directă de octeți (adresarea directă de octeți vă permite să accesați doar primii 128 de octeți ai RPD).
Zona RPD extinsă (pentru microcontrolere din familia MCS-52 și familiile ulterioare) de la adresa 128 (80h) la 255 (FFh) poate fi adresată numai folosind metoda de adresare indirectă.
Tabelul 2 – Blocul de registre cu funcții speciale (s f r)
Cod mnemo | Nume | |
0E0h | * ACC | Baterie |
0F0h | *B | Înregistrați expanderul acumulatorului |
0D0h | *PSW | Cuvânt de stare procesor |
0B0h | *P3 | Portul 3 |
0A0h | *P2 | Portul 2 |
90h | *P1 | Portul 1 |
80h | * P0 | Portul 0 |
0B8h | *IP | Întreruperea registrului prioritar |
0A8h | *IE | Întrerupeți registrul măștilor |
99h | SBUF | Buffer de transceiver serial |
98h | * SCON | Controlul portului serial/Registrul de stare |
89h | TMOD | Înregistrare mod temporizator/contor |
88h | * TCON | Control cronometre/contoare/registru stare |
8Dh | TH1 | Temporizator 1 (octet mare) |
8Bh | TL1 | Temporizator 1 (octet scăzut) |
8Ch | TH0 | Temporizator 0 (octet mare) |
8Ah | TL0 | Temporizator 0 (octet scăzut) |
83h | DPH | Data Pointer Register (DPTR) (octet mare) |
82h | DPL | Data Pointer Register (DPTR) (octet mic) |
81h | SP | Stack pointer register |
87h | PCON | Registrul de control al consumului de energie |
2. MODEL DE SOFTWARE MCS–51
MCS–51 TIPURI DE COMANDĂ
Aproape jumătate din instrucțiuni sunt executate într-un ciclu de mașină (MC). Cu o frecvență a oscilatorului de cuarț de 12 MHz, timpul de execuție a unei astfel de comenzi este de 1 μs. Instrucțiunile rămase sunt executate în 2 cicluri de mașină, adică. în 2μs. Numai instrucțiunile de înmulțire (MUL) și împărțire (DIV) sunt executate în 4 cicluri de mașină.
În timpul unui ciclu de mașină, au loc două accesări la memoria programului (internă sau externă) pentru a citi doi octeți ai unei comenzi sau un acces la memoria de date externă (EDM).
3. METODE (CĂI) DE ADRESAREA MCS–51
1. ADRESAREA REGISTRULUI – operandul de 8 biți este situat în RON al băncii de registre selectate (activ);
2 ADRESARE DIRECTĂ (indicată prin semnul – #) – operandul este situat în al doilea (și pentru un operand de 16 biți în al treilea) octet al comenzii;
3 ADRESARE INDIRECTA (indicata prin semnul – @) – operandul este localizat in Memoria de Date (RDM sau VPD), iar adresa celulei de memorie este cuprinsa intr-unul din RON-urile de adresare indirecta (R0 sau R1); în comenzile PUSH și POP adresa este conținută în pointerul de stivă SP; registrul DPTR poate conține o adresă VPD de până la 64K;
4 ADRESARE DIRECT BYTE – (dir) – este utilizat pentru accesarea celulelor RPD (adresele 00h...7Fh) și a registrelor de funcții speciale SFR (adresele 80h...0FFh);
ADRESAREA 5 BIȚI DIRECT – (bit) – este utilizată pentru a accesa 128 de biți adresabili separat aflați în celulele RPD la adresele 20H...2FH și la biții adresabili separat ai registrelor cu funcții speciale (vezi Tabelul 3 și modelul programului);
6 ADRESARE INDIRECTA INDEX (indicată prin semnul – @) – simplifică vizualizarea tabelelor în Memoria Programului, adresa PP este determinată de suma registrului de bază (PC sau DPTR) și registrului index (Acumulator);
7 ADRESARE IMPLICITĂ (INcorporată) – codul de comandă conține o referință implicită (implicit) la unul dintre operanzi (cel mai adesea la Acumulator).
4. FORMAT DE CUVINTE DE STARE PROCESOR (PSW).
C – flag carry (CARY) sau împrumut, îndeplinește și funcțiile unui „Acumulator boolean” în comenzile care operează cu biți;
AC – flag de transport auxiliar (suplimentar) – este setat la „1” dacă în comanda de adăugare (ADD, ADDC) a existat un transfer de la tetradă joasă la tetradă înaltă (adică de la al 3-lea bit la al 4-lea bit);
F0 – steag utilizator – setat, resetat și verificat de software;
RS1 | RS0 | bancă | Adresă (dir) |
0 | 0 | 0 | 00h..07h |
0 | 1 | 1 | 08h..0Fh |
1 | 0 | 2 | 10h..17h |
1 | 1 | 3 | 18h..1Fh |
RS1,RS0 – Înregistrați selecția băncii:
OV – Pavilion de depășire aritmetică; valoarea sa este determinată de funcționarea „SAU exclusiv” a semnalelor de transfer de intrare și de ieșire ale celui mai semnificativ bit al ALU; o singură valoare a acestui indicator indică faptul că rezultatul unei operații aritmetice în codul de complement a doi este în afara limitelor permise: –128…+127; când se efectuează o operație de împărțire, steag-ul OV este resetat, iar în cazul împărțirii la zero, acesta este setat; la înmulțire, indicatorul OV este setat dacă rezultatul este mai mare de 255 (0FFH);
PSW bit – Rezervă, conține un declanșator, accesibil prin scriere sau citire;
P – flag de paritate – este adăugarea numărului de biți unitar din acumulator la par; generat de un circuit combinațional (software accesibil doar prin citire).
Microcontrolerele MCS-51 nu au marcajul „Z”. Dar în comenzile de salt condiționat (JZ, JNZ), conținutul curent (zero sau non-zero) al acumulatorului este verificat de circuitul combinațional.
Toate comenzile de transfer și schimb de operanzi pot fi efectuate prin Acumulator (vezi Fig. 3). Mai mult, transferurile de la/la Memoria Externă (Memorie de program sau Memoria de date) pot fi efectuate numai prin intermediul bateriei.
Majoritatea transferurilor se pot face și printr-un octet direct (dir). Există chiar și transferuri dir-dir (vezi Figura 3).
Transferurile lipsă de la RON la RON pot fi implementate ca transferuri de la RON către un director de octeți adresat direct (ținând cont de faptul că RON-urile sunt localizate în zona inițială a memoriei de date rezidente, ale cărei celule pot fi adresate ca dir).
Instrucțiunile de schimb XCH permit transferul octeților fără a distruge ambii operanzi.
Instrucțiunile aritmetice sunt executate numai în Acumulator. Prin urmare, primul operand trebuie mai întâi plasat în Acumulator și apoi adăugați sau scădeți al doilea operand. Rezultatul este plasat în Acumulator.
Comanda de scădere SUBB este executată numai cu un împrumut (adică, indicatorul Cary este de asemenea scăzut din rezultat). Prin urmare, pentru a executa o comandă de scădere fără împrumut, trebuie mai întâi să lansați comanda C flag clear (CLRC).
Instrucțiunea de înmulțire a operanzilor pe un singur octet - MULAB - plasează un rezultat de doi octeți (16 biți): octetul mic în Acumulator, octetul mare în registrul B.
Rezultatul executării comenzii de împărțire a operanzilor pe un singur octet - DIVAB - este plasat: coeficientul - un Acumulator, restul - în registrul B.
Instrucțiunea de aritmetică INC adaugă unul la operandul selectat. Instrucțiunea aritmetică DEC scade unul din operandul selectat. Comanda Decimal Accumulator Adjustment (DAA) vă ajută să adăugați numere zecimale codificate binar (BCD) fără a le converti în format hexazecimal (format hex). Operanzii sursă trebuie să fie în format BCD, adică. Fiecare tetradă de un octet conține doar numere de la 0 la 9 (nu pot exista numere hexazecimale: A, B, C, D, E, F). Prin urmare, un octet poate conține numere de la 00 la 99 pentru numerele BCD împachetate sau numere de la 0 la 9 pentru numerele BCD dezambalate.
Comanda DA A - corecție zecimală efectuează acțiuni asupra conținutului Acumulator după adăugarea numerelor BCD în procesor (numerele au fost adăugate conform legilor aritmeticii hexazecimale) după cum urmează (vezi exemplu):
· dacă conținutul tetradei joase a acumulatorului este mai mare de 9 sau este setat indicatorul de transport auxiliar (AC = 1), atunci se adaugă 6 la conținutul acumulatorului (adică cele șase cifre lipsă în format hex);
· dacă după aceasta conținutul celei mai înalte tetrade a acumulatorului este mai mare de 9 sau este setat indicatorul C, atunci numărul 6 este adăugat la cea mai înaltă tetradă a acumulatorului.
Comanda de corecție zecimală DA A nu este utilizată după comanda de increment (INC) deoarece comanda de increment nu afectează (modifică) steagurile C și AC.
Comenzi logice:
„ȘI” logic - ANL,
„SAU” logic – ORL,
Comenzile XOR logice - XRL - sunt executate în Acumulator (la fel ca și cele aritmetice), dar este posibil să se execute comenzi logice și în octetul direct (dir). În acest caz, al doilea operand poate fi:
În baterie sau
Operandul imediat al unei comenzi.
Comenzile de rotație (RR A, RL A) și comenzile de rotație prin intermediul steagului CARY (RRC A, RLC A) schimbă ciclic conținutul acumulatorului cu 1 bit. Transferurile operanzilor de biți sunt efectuate numai prin indicatorul C.
Arhitectura familiei MCS-51 este determinată în mare măsură de scopul său - construcția compactȘi ieftin dispozitive digitale. Toate funcțiile microcomputerului sunt implementate folosind un singur microcircuit. Familia MCS-51 include întreaga linie microcircuite de la cele mai simple microcontrolere la cele destul de complexe. Microcontrolerele din familia MCS-51 vă permit să efectuați ambele sarcini de control pentru diferite dispozitive și să implementați componente individuale ale unui circuit analogic. Toate microcircuitele acestei familii funcționează cu același sistem de comandă, majoritatea se desfășoară în cazuri identice cu pinout potrivit(numerotarea picioarelor pentru corp). Acest lucru vă permite să utilizați microcircuite pentru dispozitivul dezvoltat diferite companii- producători (cum ar fi Intel, Dallas, Atmel, Philips etc.) fără reluare diagramă schematică dispozitive și programe.
Figura 1. Schema bloc a controlerului K1830BE751
Schema bloc a controlerului este prezentată în Figura 1. și constă din următoarele unități funcționale principale: unitate de control, unitate aritmetic-logică, unitate cronometru/contor, interfață serială și unitate de întrerupere, contor de programe, memorie de date și memorie de programe. Comunicarea bidirecțională se realizează folosind o magistrală de date internă de 8 biți. Să aruncăm o privire mai atentă asupra scopului fiecărui bloc. Aproape toți membrii familiei MCS-51 sunt construiți conform acestei scheme. Diverse microcircuite ale acestei familii diferă numai în registre speciale (inclusiv numărul de porturi). Sistem de comandă toți controlorii familia MCS-51 conține 111 comenzi de bază cu un format de 1, 2 sau 3 octeți și nu se modifică la trecerea de la un cip la altul. Acest lucru asigură o portabilitate excelentă a programului de la un cip la altul.
Unitate de control și sincronizare
Unitatea de sincronizare și control este proiectată pentru a genera semnale de sincronizare și control care asigură coordonarea colaborare OEVM blochează în toate modurile permise de funcționare a acestuia. Unitatea de control include:
- dispozitiv pentru formarea intervalelor de timp,
- logica de intrare-ieșire,
- registrul de comenzi
- registru de control consumul de energie electrică,
- decodor de comandă, logica de control al computerului.
Dispozitiv pentru formarea intervalelor de timp concepute pentru generarea și emiterea semnalelor interne de ceas de faze, ceasuri și cicluri. Numărul de cicluri ale mașinii determină durata instrucțiunilor. Aproape toate comenzile computerului sunt executate în unul sau două cicluri de mașină, cu excepția instrucțiunilor de înmulțire și împărțire, a căror durată de execuție este de patru cicluri de mașină. Să notăm frecvența oscilatorului principal cu F g. Atunci durata ciclului mașinii este egală cu 12/F g sau este de 12 perioade ale semnalului oscilatorului principal. Logica I/O este concepută pentru a primi și a scoate semnale care asigură schimbul de informații cu dispozitive externe prin porturile de intrare/ieșire P0-P3.
Registrul de comenzi conceput pentru a înregistra și stoca codul de operare pe 8 biți al comenzii care se execută. Codul de operare, cu ajutorul comenzilor și al logicii de control al computerului, este convertit în microprogram pentru executarea comenzii.
Registrul de control al cererii (PCON) vă permite să opriți microcontrolerul pentru a reduce consumul de energie și a reduce nivelul de interferență de la microcontroler. O reducere și mai mare a consumului de energie și a interferențelor poate fi obținută prin oprirea oscilatorului principal al microcontrolerului. Acest lucru poate fi realizat prin comutarea biților din registrul de control al consumului PCON. Pentru opțiunea de producție n-MOS (seria 1816 sau cipuri străine care nu au un „c” în mijlocul numelui lor), registrul de control al consumului PCON conține doar un bit care controlează rata de transmisie a portului serial SMOD și nu există biți de control al consumului de energie.
Împreună cu articolul „Arhitectura microcontrolerelor MCS-51” citiți:
http://site/MCS51/tablms.php
http://site/MCS51/SysInstr.php
http://site/MCS51/port.php
PLANUL DE PRELEGERE
1. Introducere
2. Instructiuni aritmetice si logice
3. Comenzi de transfer de date
4. Operații booleene
5. Instrucțiuni de săritură
1. Introducere
Sistem de comandă MCS-51 acceptă un singur set de instrucțiuni, care este conceput pentru a executa algoritmi de control al actuatorului pe 8 biți. Este posibil de utilizat metode rapide adresarea RAM internă, efectuarea de operații pe biți pe structuri de date mici. Există un sistem extins pentru adresarea variabilelor pe un singur bit ca tip de date independent, care permite utilizarea biților individuali în comenzile logice și de control ale algebrei booleene.
Moduri de adresare : set de comenzi MCS-51 acceptă următoarele moduri de adresare. Adresare directă: Operandul este determinat de adresa de 8 biți din instrucțiune. Adresarea directă este utilizată numai pentru jumătatea inferioară memorie interna date si registre SFR. Adresare indirectă: Instrucțiunea se adresează unui registru care conține adresa operandului. Acest tip adresarea este utilizată pentru RAM externă și internă. Registrele pot fi folosite pentru a specifica adrese pe 8 biți R0Și R1 banca de registre selectată sau indicatorul de stivă SP. Pentru adresarea pe 16 biți, este utilizat doar registrul pointerului de date DPTR.
Înregistrați instrucțiuni : registre R0–R7 Banca de registre curentă poate fi adresată prin instrucțiuni specifice care conțin un câmp de 3 biți care indică numărul de registru din instrucțiunea în sine. În acest caz, câmpul de adresă corespunzător lipsește din comandă. Operații folosind registre speciale: unele instrucțiuni folosesc registre individuale (de exemplu, operațiuni cu acumulatori, DPTR, etc.). În acest caz, adresa operandului nu este deloc specificată în comandă. Este predeterminat de codul de operare.
Constante imediate : constanta poate fi localizată direct în comanda după opcode.
Adresarea la index : Adresarea indexului poate fi utilizată numai pentru a accesa memoria programului și numai în modul de citire. În acest mod, sunt vizualizate tabelele din memoria programului. registru pe 16 biți ( DPTR sau contorul de programe) indică adresa de bază a tabelului dorit, iar acumulatorul indică punctul de intrare în acesta.
Set de comenziare 42 de mnemonice de comandă pentru a specifica cele 33 de funcții ale acestui sistem. Sintaxa majorității instrucțiunilor limbajului de asamblare constă dintr-un mnemonic al funcției urmat de operanzi care indică metodele de adresare și tipurile de date. Tipuri variate modurile de date sau de adresare sunt determinate de operanzii setati, nu de modificari ale mnemotecilor.
Sistemul de comandă poate fi împărțit în cinci grupe: comenzi aritmetice; comenzi logice; comenzi de transfer de date; comenzi ale procesorului de biți; comenzi de transfer de ramificare și control. Notațiile și simbolurile utilizate în sistemul de comandă sunt prezentate mai jos.
Masa. Notații și simboluri utilizate în sistemul de comandă
Denumire, simbol |
Scop |
Baterie |
|
Registrele băncii de registre selectate în prezent |
|
Numărul registrului încărcat specificat în comandă |
|
direct |
Adresă de celulă de date internă de 8 biți, direct adresabilă, care poate fi o celulă RAM de date internă (0–127) sau un registru cu funcții speciale SFR (128–255) |
Celulă RAM de date internă de 8 biți adresabilă indirect |
|
8 biți direct date incluse în codul de operare (OPC) |
|
dateH |
Cei mai semnificativi biți (15–8) ai datelor imediate pe 16 biți |
dateL |
Biți cei mai puțin semnificativi (7–0) de date imediate pe 16 biți |
Adresă de destinație pe 11 biți |
|
addrL |
Biți cei mai puțin semnificativi din adresa de destinație |
Octet offset semnat pe 8 biți |
|
Bit adresabil direct a cărui adresă conține COP-ul situat în RAM-ul de date intern sau registrul de funcții speciale SFR |
|
a15, a14...a0 |
Biți de adresă de destinație |
Conținutul elementului X |
|
Conținut la adresa stocată în elementul X |
|
Bit M al elementului X |
|
|
Operațiuni: |
Funcțiile mnemonice sunt asociate în mod unic cu combinații specifice de metode de adresare și tipuri de date. În total, există 111 astfel de combinații posibile în sistemul de comandă.
2. Instructiuni aritmetice si logice
Cum p exemplu instrucție aritmetică, operația de adăugare poate fi efectuată prin una dintre următoarele comenzi.
ADĂUGAA,7 F 16 – adăugați numărul 7 la conținutul registrului A F 16 și stocați rezultatul în registrul A;
ADĂUGAA,@ R0 – adăugați la conținutul registrului A numărul a cărui adresă (@ – comercial la ) este stocat într-un registru R 0 (adresare indirectă) și stochează rezultatul în registrul A;
ADAUGĂ A,R7– adăugați conținutul registrului A la conținutul registrului R 7 și salvați rezultatul în registrul A;
ADAUGĂ A,#127– adăugați la conținutul registrului A un număr a cărui adresă a celulei de stocare este 127 ( # – simbolul numărului) și salvați rezultatul în registru T- re A.
Toate instrucțiunile aritmetice sunt executate într-un singur ciclu de mașină, cu excepția instrucțiunii INC DPTR(offset indicator de date DPTR la octetul următor), necesitând două cicluri de mașină, precum și operații de înmulțire și împărțire efectuate în 4 cicluri de mașină. Orice octet din memoria internă de date poate fi incrementat și decrementat fără a utiliza o baterie.
Instrucțiuni MUL AB realizează înmulțirea (înmulțirea) datelor din acumulator cu datele din registrul B, plasând produsul în registrele A (jumătatea inferioară) și B (jumătatea superioară).
Instrucțiuni DIV ABîmparte (împarte) conținutul acumulatorului la valoarea din registrul B, lăsând restul în B și câtul în acumulator.
Instrucțiuni DA A este destinat operațiilor aritmetice zecimale binare (operații aritmetice pe numere reprezentate în cod zecimal binar). Nu convertește numărul binar în BCD, dar oferă doar rezultatul corect atunci când adăugați două numere zecimale binare.
Exemplu comanda logică: O operație AND logică poate fi efectuată cu una dintre următoarele comenzi:
ANLA,7 F 16 – înmulțirea logică a conținutului registrului A cu numărul 7 F 16 iar rezultatul este stocat în registrul A;
ANLA,@ R1 – înmulțirea logică a conținutului registrului A cu numărul a cărui adresă este stocată în registru R 1 (adresare indirectă) și stochează rezultatul în registrul A;
ANL A,R6– înmulțirea logică a conținutului registrului A cu conținutul registrului R 6 și salvați rezultatul în registrul A;
ANL A,#53 – multiplicarea logică a conținutului registrului A cu un număr a cărui adresă celulei de stocare este 53 16, iar rezultatul este stocat în registrul A.
Toate operațiunile logice asupra conținutului acumulatorului sunt efectuate într-un ciclu de mașină, restul - în două. Operațiile logice pot fi efectuate pe oricare dintre cei 128 de octeți inferiori ai memoriei interne de date sau pe orice registru SFR (registre cu funcții speciale) în modul de adresare directă fără a utiliza o baterie.
Operațiile de schimbare rotativă RL A, RLC A etc. mută conținutul acumulatorului cu un bit la dreapta sau la stânga. În cazul unei deplasări ciclice la stânga, bitul cel mai puțin semnificativ este mutat în poziția cea mai semnificativă. În cazul unei deplasări ciclice la dreapta se produce opusul.
Operațiune SWAP A schimbă tetradele joase și înalte din baterie.
3. Comenzi de transfer de date
Echipă MOV dest,src vă permite să transferați date între celulele RAM interne sau zonele de registru de funcții speciale SFR fără a folosi o baterie. În acest caz, lucrul cu jumătatea superioară a RAM-ului intern poate fi efectuat numai în modul de adresare indirectă și accesul la registre SFR– numai în modul de adresare directă.
În toate microcircuitele MCS-51 Stiva este plasată direct în memoria de date rezidentă și crește în sus. Instrucțiuni APĂSAŢI mai întâi incrementează valoarea din registrul pointerului stivei SP, apoi scrie un octet de date pe stivă. Echipe APĂSAŢIȘi POP sunt utilizate numai în modul de adresare directă (scrierea sau restaurarea unui octet), dar stiva este întotdeauna accesibilă atunci când se adresează indirect printr-un registru SP. Astfel, stiva poate folosi, de asemenea, primii 128 de octeți ai memoriei de date. Aceleași considerații exclud posibilitatea de a utiliza instrucțiuni de stivă pentru a adresa registre SFR.
Instrucțiunile de transfer de date includ o operațiune de transfer pe 16 biți MOV DPTR,#data16, care este folosit pentru a inițializa registrul pointerului de date DPTR la vizualizarea tabelelor din memoria programului sau pentru a accesa memoria externă de date.
Operațiune XCH A, octet folosit pentru schimbul de date între acumulator și octetul adresat. Echipă XCHD A,@Ri similar cu cel precedent, dar se realizează numai pentru tetradele inferioare implicate în schimbul de operanzi.
Pentru a accesa memoria de date externă, se utilizează numai adresarea indirectă. În cazul adreselor pe un singur octet, se folosesc registre R0 sau R1 banca de registru curentă, iar pentru 16 biți – registru indicator de date DPTR. Cu orice metodă de accesare a memoriei externe de date, bateria joacă rolul de sursă sau receptor de informații.
Pentru a accesa tabelele aflate în memoria programului, utilizați următoarele comenzi:
MOVC A,@A+ DPTR ;
MOVC A,@A+ PC .
Conținutul registrului indicator de date este folosit ca adresă de bază a tabelului DPTR sau PC(contor de programe), iar offset-ul este luat din A. Aceste instrucțiuni sunt folosite exclusiv pentru a citi date din memoria programului, dar nu pentru a scrie în ea.
4. Operații booleene
Microcircuite MCS-51 conține un procesor „boolean”. Memoria RAM internă are 128 de biți adresabili direct. Spațiu de registru cu funcții speciale SFR poate suporta, de asemenea, câmpuri de până la 128 de biți. Instrucțiunile de biți efectuează ramificări condiționate, transferuri, resetări, inversiuni și operațiuni ȘI și SAU. Toți biții specificați sunt disponibili în modul de adresare directă.
Poartă bit CFîn registrul de funcții speciale „cuvânt de stare program” P.S.W." este folosit ca un acumulator de un bit pentru un procesor boolean.
5. Instrucțiuni de săritură
Adresele operațiilor de salt sunt indicate în limbaj de asamblare printr-o etichetă sau printr-o valoare reală în spațiul de memorie al programului. Adresele de ramuri condiționate sunt asamblate într-un decalaj relativ - un octet de semn adăugat la contorul de program PC dacă condiția de tranziție este îndeplinită. Limitele unor astfel de tranziții se află între minus 128 și 127 în raport cu primul octet care urmează instrucțiunii. În registrul de funcții speciale „cuvânt de stare program” P.S.W.„Nu există niciun steag zero, deci instrucțiunile JZȘi JNZ verificați condiția „egal cu zero” ca testând datele din acumulator.
Există trei tipuri de comenzi de sărituri necondiționate: SJMP, LJMPȘi AJMP– adrese de destinație care diferă ca format. Instrucțiuni SJMP codifică adresa ca un offset relativ și ia doi octeți. Distanța de salt este limitată la intervalul de la minus 128 la 127 de octeți în raport cu instrucțiunile următoare SJMP.
În instrucțiuni LJMP Adresa de destinație este utilizată ca o constantă de 16 biți. Lungimea comenzii este de trei octeți. Adresa de destinație poate fi localizată oriunde în memoria programului.
Echipă AJMP folosește o constantă de adresă de 11 biți. Comanda este formată din doi octeți. Când această instrucțiune este executată, cei 11 biți inferiori ai contorului de adrese sunt înlocuiți cu adresa de 11 biți din instrucțiune. Cei mai semnificativi cinci biți ai contorului programului PC ramane neschimbat. Astfel, tranziția se poate face în cadrul unui bloc de 2K octeți în care se află instrucțiunea care urmează instrucțiunii AJMP.
Există două tipuri de apeluri de comandă către o subrutină: LCALLȘi UN APEL. Instrucțiuni LCALL folosește adresa de 16 biți a subrutinei apelate. În acest caz, subprogramul poate fi localizat oriunde în memoria programului. Instrucțiuni UN APEL folosește o adresă de subrutină de 11 biți. În acest caz, rutina apelată trebuie să fie localizată într-un singur bloc de 2K octeți cu instrucțiunea care urmează UN APEL. Ambele versiuni ale instrucțiunii împing adresa următoarei instrucțiuni în stivă și o încarcă în contorul de programe PC noua valoare corespunzătoare.
Subrutina se termină cu instrucțiunea RET, care vă permite să reveniți la instrucțiune după comanda APEL. Această instrucțiune scoate adresa de retur din stivă și o încarcă în contorul de programe. PC . Instrucțiuni RETI folosit pentru a reveni de la rutinele de întrerupere. Singura diferenta RETI din RET este asta RETI informează sistemul că procesarea întreruperii s-a încheiat. Dacă în momentul executării RETI nu există alte întreruperi, atunci este identic RET.
Instrucțiuni DJNZ concepute pentru a controla ciclurile. Pentru a executa o buclă N odată ce trebuie să încărcați un octet cu o valoare în contor N și închideți corpul buclei cu comanda DJNZ, indicând începutul ciclului.
Echipă CJNE compară cei doi operanzi ai săi ca numere întregi fără semn și sare la adresa specificată acolo dacă operanzii comparați nu sunt egali. Dacă primul operand este mai mic decât al doilea, atunci bitul de transport CF este setat la „1”.
Toate instrucțiunile în formă asamblată ocupă 1, 2 sau 3 octeți.
- Comenzi aritmetice;
- comenzi logice;
- comenzi de transfer de date;
- comenzi ale procesorului de biți;
- Comenzi de transfer de ramificare și control.
- Înregistrați adresare
- Adresare directă
- Registrul-adresare indirectă
- Adresare directă
- Adresarea indirectă a registrelor pe baza sumei registrelor de bază și index
Denumire, simbol | Scop |
A | Baterie |
Rn | Registrele băncii de registre selectate în prezent |
r | Numărul registrului încărcat specificat în comandă |
direct | Adresă de celulă internă de date de 8 biți direct adresabilă, care poate fi celulă RAM de date internă (0-127) sau SFR (128-255) |
@Rr | Celulă RAM de date internă de 8 biți adresabilă indirect |
date8 | Datele imediate pe 8 biți ajung la COP |
dateH | Cei mai semnificativi biți (15-8) ai datelor imediate pe 16 biți |
dateL | Biți cei mai puțin semnificativi (7-0) de date imediate pe 16 biți |
adresa11 | Adresă de destinație pe 11 biți |
addrL | Biți cei mai puțin semnificativi din adresa de destinație |
disp8 | Octet offset de 8 biți cu semnul m |
pic | Un bit adresabil direct a cărui adresă conține COP-ul situat în memoria internă de date RAM sau SFR |
a15, a14...a0 | Biți de adresă de destinație |
(X) | Conținutul elementului X |
((X)) | Conținut la adresa stocată în elementul X |
(X)[M] | Bit M al elementului X |
+ - * / ȘI SAU XOR /X | Operații: adunare scădere înmulțire împărțire înmulțire logică (operație AND) adunare logică (operație SAU) adunare modulo 2 (SAU exclusiv) inversare a elementului X |
Funcțiile mnemonice sunt asociate în mod unic cu combinații specifice de metode de adresare și tipuri de date. În total, există 111 astfel de combinații posibile în sistemul de comandă. Tabelul prezintă o listă de comenzi, sortate alfabetic.
Mnemonice | Funcţie | Steaguri |
Comanda ACALL | Apel de subrutină absolut | |
Adăugați o comandă<байт-источник> | Plus | AC, C, OV |
Comanda ADDC A<байт-источник> | Supliment cu transport | AC, C, OV |
Echipa AJMP | Tranziție absolută | |
Echipa ANL<байт-назначения>, <байт-источникa> | „ȘI” logic | |
Echipa ANL C,<байт-источникa> | „ȘI” logic pentru variabile de biți | |
Echipa CJNE<байт-назначения>, <байт-источник>, <смещение> | Comparați și săriți dacă nu sunt egali | C |
Comanda CLR A | Resetarea bateriei | |
Comanda CLR | Resetare bit | C, bit |
Echipa CPL A | Inversarea lui ak umulya ora | |
Echipa CPL | Inversarea biților | C, bit |
Echipa DA A | Corecția acumulatorului zecimal pentru poziție | AC, C |
Echipa DEC<байт> | Decrementează | |
Echipa DIV AB | Divizia | C, OV |
Echipa DJNZ<байт>, <смещение> | Scădeți și săriți dacă nu este egal cu zero | |
Echipa INC<байт> | Creştere | |
Comanda INC DPTR | Creșterea indicatorului de date | |
Echipa JB | Salt dacă bit este setat | |
Echipa JBC | Salt dacă bitul este setat și resetați acel bit | |
Echipa JC | Tranziție dacă transferul este setat | |
Comanda JMP @A+DPTR | Transfer indirect | |
Echipa JNB | Salt dacă bit nu este setat | |
Echipa JNC | Sari dacă transportul nu este setat | |
Echipa JNZ | Salt dacă conținutul acumulatorului nu este zero | |
Echipa JZ | Salt dacă conținutul acumulatorului este 0 | |
Comanda LCALL | Apel lung | |
Echipa LJMP | Trecere lungă | |
Comanda MOV<байт-назначения>, <байт-источника> | Variabila octet înainte | |
Comanda MOV<бит-назначения>, <бит-источника> | Trimiteți bit de date | C |
Comanda MOV DPTR,#data16 | Încărcați un pointer de date cu o constantă de 16 biți | |
Comanda MOVC A,@A+( | Trimite octet din memoria programului | |
Echipa MOVX<байт приемника>, <байт источника> | Trimiteți date în memoria externă (din memoria externă) | |
Echipa MUL AB | Multiplicare | C, OV |
Comanda NOP | Nicio operațiune | PC |
Echipa ORL<байт-назначения>, <байт-источникa> | „SAU” logic pentru octeți variabili | |
Echipa ORL C,<бит источникa> | „SAU” logic pentru variabile de biți | C |
Comanda POP | Citirea din teanc | |
Comanda PUSH | Scriind la teanc | |
Comanda RET | Întoarcerea din subrutină | |
Echipa RETI | Întoarcerea de la întrerupere | |
Echipa RL A | Mutați conținutul acumulatorului la stânga | |
Echipa RLC A | Mutați conținutul acumulatorului la stânga prin intermediul steagului de transport | |
RR O comandă | Mutați conținutul acumulatorului la dreapta | |
Echipa RRC A | Mutați conținutul acumulatorului la dreapta prin intermediul steagului de transport | C |
Comanda SETB | Set bit | C |
Echipa SJMP<метка> | Scurtă tranziție | |
Echipa SUBB A,<байт источника> | Scăderea cu împrumut | AC, C, OV |
SWAP O comandă | Schimb de notebook-uri în interiorul bateriei | |
XCH O comandă,<байт> | Schimbați conținutul acumulatorului cu o variabilă octet | |
Comanda XCHD A,@R1 | Schimb de caiete | |
Echipa XRL<байт-назначения>, <байт-источникa> | „XOR” logic pentru variabilele octet |