Microcontrolere MCS-51: model software, structură, comenzi. Microcontrolere MCS-51

💖 Îți place? Distribuie linkul prietenilor tăi

Baza microcontrolerului (vezi Fig. 1) este o unitate aritmetică-logică (ALU) pe 8 biți. Memoria MK are arhitectură Harvard, adică împărțit logic: în memorie de program - PP (internă sau externă), adresată de un contor de comenzi de 16 biți (SC) și memorie de date - internă (Memoria de date rezidentă - 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ă pe ROM (numai citire), iar memoria de date - pe RAM (datele pot fi scrise și citite).

Recepția și livrarea semnalelor externe se realizează prin 4 porturi de opt biți P0..P3. Când accesați memoria de program externă (EPM) sau memoria de date (EPM), porturile P0 și P2 sunt utilizate ca o adresă externă multiplexată / magistrală de date. Liniile de port P3 pot îndeplini și funcții alternative (vezi Tabelul 1).

Registrul DPTR pe 16 biți formează adresa VFD 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 stocarea operanzilor.

Registrul intern de comandă (RK) de 8 biți primește codul comenzii care se execută; acest cod este decodat de circuitul de control, care generează semnale de control (vezi Fig. 1).

Referirea la registrele de funcții speciale - RSF (SFR - în Fig. 1 sunt încercuite cu o linie punctată) este posibilă numai cu utilizarea adresei directe de octeți în intervalul de adrese de la 128 (80h) și mai mult.


Memoria rezidentă de date (RPM) din primele modele de microcontrolere MCS-51 avea un volum de 128 de octeți. Cei mai mici 32 de octeți ai RPD sunt și registre de uz general - RON (4 bănci de 8 lei). Programul se poate adresa unuia dintre cei 8 RON ai bancii active. Selectarea băncii active de RON se realizează prin programarea a doi biți în registrul de stare a procesorului - PSW.


Tabelul 1 - Scopul pinii MCS-51

PIN nr. Desemnare Programare
1..8 Р1 Port de intrare/ieșire cvasi-bidirecțional pe 8 biți
9 RST

Semnal de resetare (nivel activ - ridicat);

Semnalul RST șterge: PC-ul și majoritatea registrelor de funcții speciale (SFR), dezactivând toate întreruperile și funcționarea temporizatorului; selectează RON Banca 0; scrie „toate” pe porturile P0_P3, pregătindu-le pentru intrare; scrie codul 07H la indicatorul de stivă (SP);

10..17

Port de intrare/ieșire cvasi-bidirecțional de 8 biți; după ce scrie î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 în VPD - ~ WR;

Ieșire stroboscopică. semnal la citirea din VPD - ~ RD;

18, 19 X1, X2 Cabluri pentru conectarea unui rezonator de cuarț sau a unui circuit LC;
20 GND Concluzie generală;
21..28 P2 Port de intrare/ieșire cvasi-bidirecțional de 8 biți; sau ieșirea adresei A în modul de funcționare cu memorie externă (VFP sau VFD);
29 PME Strobeul de citire a Memoriei Externe de Program, se emite numai la accesarea ROM-ului extern;
30 Ale Strobe pentru adrese de memorie externă (VPP sau VPD);
31 EA Oprirea RPP, nivelul „0” la această intrare transferă MC la o selecție de comenzi doar de pe pistă ;
39..32 P0 Port de intrare/ieșire bidirecțional pe 8 biți; la accesarea memoriei externe, emite adresele A (care sunt scrise în registrul extern de semnalul ALE), apoi schimbă un octet sincron cu semnalul ~ PME (pentru comenzi) sau ~ WR, ~ RD (pentru date în VFD). ), 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ă împingeți conținutul de RON al programului principal în stivă atunci când apelați o subrutină (este suficient să treceți la un alt banc activ de RON din subrutină).

Accesul la RPD este posibil folosind adresarea indirectă sau directă pe octeți (adresarea directă pe octeți permite accesarea doar a primilor 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 de funcții speciale (s f r)

Cod mnemo Nume
0E0h * ACC Baterie
0F0h * B Registrul de extindere a bateriei
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 pentru transceiver serial
98h * SCON Controlul portului serial / Registrul de stare
89h TMOD Timer / Counter Mode Register
88h * TCON Timer / control contor / registru de 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 Registrul indicator de date (DPTR) (octet înalt)
82h DPL Registrul indicator de date (DPTR) (octet scăzut)
81h SP Stack pointer register
87h PCON Registrul de control al consumului de energie

2. MODEL DE SOFTWARE MCS – 51


TIPURI DE COMANDĂ MCS – 51

Aproape jumătate din instrucțiuni sunt executate într-un singur ciclu de mașină (MC). Cu o frecvență a oscilatorului cu cristal de 12 MHz, timpul de execuție a unei astfel de comenzi este de 1 μs. Restul comenzilor sunt executate în 2 cicluri de mașină, adică. pentru 2μs. Doar instrucțiunile pentru înmulțire (MUL) și împărțire (DIV) sunt executate în 4 cicluri de mașină.

În timpul unui ciclu de mașină, există două apeluri către memoria programului (internă sau externă) pentru a citi doi octeți de comandă sau un acces la memoria de date externă (EPM).

3. METODE (METODE) DE ADRESAREA MCS-51

1. ADRESAREA REGISTRULUI - operandul de 8 biți este în RON al băncii de registre selectate (active);

2 ADRESARE DIRECTA (notata cu - #) - operandul se afla in al doilea (si pentru un operand de 16 biti si in al treilea) octet al comenzii;

3 ADRESARE INDIRECTA (notata cu - @) - operandul se afla in Memoria de Date (RPD sau VPD), iar adresa celulei de memorie este continuta intr-unul din RON-urile de adresare indirecta (R0 sau R1); în comenzile PUSH și POP, adresa este conținută în pointerul stivei SP; registrul DPTR poate conține o adresă IPT de până la 64K;

4 ADRESARE DIRECT BYTE - (dir) - se folosește pentru accesarea celulelor RPD (adresele 00h… 7Fh) și la registrele funcțiilor speciale SFR (adresele 80h… 0FFh);

ADRESARE DIRECTA DE 5 BITI - (bit) - este folosita pentru a face referire la 128 de biti adresabili separat situati in celulele RPD la adresele 20H ... 2FH si la bitii adresabili separat ai registrelor cu functii speciale (vezi Tabelul 3 si modelul programului);

6 ADRESARE INDIRECTA INDEX (notata cu - @) - simplifică vizualizarea tabelelor în Memoria Programului, adresa PP este determinată de suma registrului de bază (PC sau DPTR) și a registrului index (Acumulator);

7 ADRESARE DE IMPACT (INCORPORAT) - codul de comandă conține o referință implicită (implicit) la unul dintre operanzi (cel mai adesea la Baterie).

4. FORMAT DE CUVINTE DE STARE A PROCESORULUI (PSW)

C - Carry flag (CARY) sau împrumut, servește și ca „acumulator boolean” în instrucțiunile care operează pe biți;

AC - flag de transport auxiliar (suplimentar) - setat la „1” dacă în comanda de adăugare (ADD, ADDC) a existat un transfer de la nibble inferior la cel superior (adică de la al 3-lea bit la al 4-lea bit);

F0 - steag utilizator - setat, șters și verificat programatic;

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 - Selectați banca de înregistrare:

OV - Pavilion de debordare aritmetică; valoarea sa este determinată de operarea „SAU exclusivă” a semnalelor purtătorilor 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 într-un cod de complement a doi este în afara intervalului: –128 ... + 127; la efectuarea unei operații de împărțire, steagul OV este șters, iar în cazul împărțirii la zero, acesta este setat; la înmulțire, steag-ul OV este setat dacă rezultatul este mai mare de 255 (0FFH);

Bit PSW - Rezervat, conține un flip-flop, disponibil pentru scriere sau citire;

P - flag de paritate - este complementul numărului de biți unici din acumulator la par; format dintr-un circuit combinațional (software disponibil numai prin citire).

Nu există niciun steag „Z” în microcontrolerele MCS-51. Dar în instrucțiunile de salt condiționat (JZ, JNZ), conținutul curent (zero sau non-zero) al acumulatorului este verificat de circuitul combinațional.

Toate comenzile pentru transferul și schimbul de operanzi pot fi efectuate prin intermediul bateriei (vezi Fig. 3). Mai mult decât atât, transferurile de la / către Memoria Externă (Memorie de program sau Memoria de date) pot fi efectuate numai prin intermediul bateriei.

Majoritatea transferurilor se pot face și prin intermediul unui octet de adresă directă (dir). Există chiar și dir-dir înainte (vezi Figura 3).

Transferurile lipsă de la RON în RON pot fi implementate ca transferuri de la RON către un director de octeți direct adresabil (ținând cont de faptul că RON-urile se află în zona inițială a memoriei de date rezidente, ale cărei celule pot fi adresate ca dir).

Comenzile de schimb XCH permit transferul de octeți fără a distruge ambii operanzi.

Comenzile aritmetice sunt executate numai în acumulator. Prin urmare, primul operand trebuie mai întâi să fie plasat în Acumulator și apoi să adunăm sau să scadă al doilea operand. Rezultatul este plasat în baterie.


Comanda scădere SUBB este efectuată numai cu împrumut (adică, steag-ul Сary este, de asemenea, scăzut din rezultat). Prin urmare, pentru a executa comanda de scădere fără a împrumuta, trebuie mai întâi să executați comanda pentru a șterge indicatorul C (CLRC).

Instrucțiunea pentru multiplicarea operanzilor pe un singur octet - MULAB - plasează un rezultat de doi octeți (16 biți): octetul scăzut - în baterie, octetul înalt - în registrul B.

Rezultatul executării comenzii de împărțire a operanzilor pe un singur octet - DIVAB - este plasat: coeficient - 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 Correction (DAA) vă ajută să adăugați numere binare-zecimale (numere BCD) fără a le converti în format hexazecimal (format hex). Operanzii originali 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 celui mai mic nibble al 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ă aceea, conținutul de ciugulă înaltă a acumulatorului este mai mare de 9 sau este setat indicatorul C, atunci numărul 6 se adaugă la ciugulirea înaltă a acumulatorului.

Comanda de corecție zecimală DA A nu se aplică după comanda de increment (INC) deoarece comanda de increment nu afectează (modifică) steagurile C și AC.

Comenzi logice:

„ȘI” logic - ANL,

„SAU” logic - ORL,

Comanda logică „SAU EXCLUSIV” - XRL– sunt executate în Acumulator (precum și aritmetica), dar este posibil să se execute comenzi logice și în octetul adresabil direct (dir). În acest caz, al doilea operand poate fi:

În baterie sau

Operandul imediat din comandă.

Comenzile de rotație (RR A, RL A) și comenzile de rotație prin indicatorul CARY (RRC A, RLC A) schimbă ciclic conținutul acumulatorului cu 1 bit. Referențele dispozitivului de biți sunt efectuate numai prin indicatorul C.

Ministerul Educației Generale și Profesionale al Federației Ruse Universitatea Tehnică de Stat Novosibirsk V.N. Veprik, V.A. Afanasiev, A.I. Druzhinin, A.A. Zemskov, A.R. Isaev, O.V. Malyavko MICROCONTROLLERE ALE FAMILIEI MCS-51 Manual pentru cursurile „Sisteme cu microprocesoare” și „Proiectarea sistemelor cu microprocesoare” pentru studenții seniori ai Facultății de Automatizare și Inginerie Calculatoare a tuturor formelor de învățământ Novosibirsk 1997 V.N. Veprik, V.A. Afanasiev, A.I. Druzhinin, A.A. Zemskov, A.R. Isaev, O.V. Malyavko. Familia de microcontrolere MCS-51: Tutorial. - Novosibirsk. Oferit atenției dumneavoastră tutorial conține o descriere generală a arhitecturii, funcționalității și setului de instrucțiuni ale familiei de microcontrolere cu un singur cip (Embedded Microcontrollers) MCS-51, fabricate de INTEL. A doua parte a manualului oferă o descriere a controlerului cu microprocesor educațional UMPK-51, oferit studenților ca obiect de cercetare atunci când efectuează un ciclu de lucru de laborator. Materialul manualului poate fi folosit în proiectarea cursurilor și a diplomelor și poate fi util și pentru inginerii de circuite implicați în dezvoltarea și operarea echipamentelor electronice. Autorii își exprimă profunda recunoștință față de AOZT „New Technologies” - distribuitorul oficial al INTEL pentru furnizarea materialelor pe baza cărora a fost realizată această lucrare. Tabelul 15, fig.25, lista de litere. 12 titluri Recenzători: E.D. Baran, G.G. Matușkin. Lucrarea a fost pregătită la Departamentul de Informatică, Statul Novosibirsk © Universitatea Tehnică 2 INTRODUCERE. Familia MCS-51 de microcontrolere cu un singur cip pe 8 biți a apărut pe piața mondială la începutul anilor optzeci. Primele modificări ale cristalelor (aproximativ 7) au fost făcute folosind tehnologia n-MOS (HMOS) de înaltă calitate și au fost microcalculatoare complete cu un singur cip din arhitectura Harvard, unul dintre principiile principale ale cărora este separarea logică a adresei. spații de memorie și date de program. Odată cu dezvoltarea tehnologiei semiconductoare, versiunile ulterioare ale microcircuitelor MCS-51 au început să fie fabricate folosind o tehnologie CMOS (CHMOS) mai avansată și de putere redusă (în modul activ, consumul de cristale a fost adus la 10-50 mA). Sistemul de comandă MCS-51, axat pe implementarea diverșilor algoritmi de control digital, menținând în același timp o oarecare similitudine externă cu sistemul de comandă al familiei anterioare MCS-48, s-a extins calitativ, în el au apărut inovații fundamentale: operațiuni orientate pe biți și câmpuri de biți adresabile în memoria de date, ceea ce a făcut posibil să vorbim despre implementarea unui procesor de biți pe un cip; Implementarea executării comenzilor de înmulțire, împărțire și scădere; lucru îmbunătățit cu stiva; grupul de comenzi de transfer de control a fost extins; Sistemul de comandă a început să pară mai simetric, adică mai puțin dependent de transferurile de date prin baterie. Funcționalitatea perifericelor de bord a fost, de asemenea, extinsă prin introducerea a: două temporizatoare / contoare pe 16 biți; port serial duplex hardware; sistem de întrerupere pe două niveluri; patru porturi I/O pe 8 biți. Modificările fundamentale ale structurii ciclului de timp al procesorului au condus la accelerarea lucrului cu memoria externă a programelor și datelor, precum și la reacții la întreruperile externe și interne. Dimensiunea totală a spațiului de adrese al programului extern și al memoriei de date a crescut la 128 KB. Registrele Program Counter și Data Pointer pe 16 biți au permis accesul direct la întreaga gamă de adrese, ceea ce a oferit dezvoltatorilor posibilitatea de a implementa algoritmi pentru procesarea rapidă a matricelor mari de date. Toate nodurile accesibile prin software ale microcontrolerului au fost reunite într-o zonă specială a memoriei de date (Registrul de funcții speciale), ceea ce a făcut posibilă accesarea lor aproape în același mod ca în celulele obișnuite ale memoriei RAM rezidente. În modificările ulterioare ale cristalelor, îmbunătățirea a mers pe calea creșterii funcționalității suplimentare, menținând în același timp compatibilitatea completă a software-ului cu mai multe versiuni timpurii ... Caracteristicile celor mai recente modificări ale microcontrolerelor MCS-51 sunt: ​​design complet static; Versiuni cu cristal de 3 și 5 volți; gamă largă de periferice încorporate; frecvența maximă de ceas - 24 MHz; pentru grupuri individuale de cristale - 33 MHz. În prezent, MCS-51 include aproximativ 60 de versiuni de cristale, în plus, există și este disponibilă documentație proprietară detaliată (din păcate, până acum puțin tradusă în rusă). Pentru a pregăti software-ul pentru microcontrolere MCS-51, sunt utilizate în principal limbajele „ASM-51”, „C”, pentru care există o serie de compilatoare bine dovedite, biblioteci de subrutine standard și emulatori de software produse de diverse străine. și firmele autohtone. 3 În ciuda „antichității” suficiente a familiei (mai mult de 15 ani) și a apariției pe piața mondială în ultimii ani a microcontrolerelor cu un singur cip de performanță mai mare și arhitectură îmbunătățită - MCS-51, MCS-251, MCS-96, Controlerele MCS-51 vor fi utilizate pe scară largă în sisteme de control încorporate relativ simple. SISTEMUL 4 1. DENUMIRI DE COMPOZIȚIE FUNCÞIONALÃ A MCS-51 FAMILY Pentru marcarea Microsheme prin INTEL COMPONENTELOR DE INTEL SI, este utilizat un sistem de desemnare a mai multor domenii: 1 2 3 4 ХХ ХХХХХХХХХХХХХХХХ ХХХХХХ Primul câmp conține temperatură prefix-o singură literă Automotive: , versiune auto pentru un domeniu extins de temperatură (-40 / + 125 C) M (militar), versiune conform standardelor militare (-55 / + 125 C) Q sau C (comercial), interval de temperatură „comercial” (0 / + 70 C) ) s (160 8) - antrenament termic dinamic de o oră; L sau E (Extended), interval de temperatură „extins” (-40 / + 85 C) cu (160 8) - ore antrenament termic dinamic; Т (Extins), interval de temperatură „extins” (-40 / + 85 С) fără antrenament termic; I (Industrial), executie conform standardelor industriale. Al doilea câmp conține un prefix de una sau două litere care indică tipul de pachet al microcircuitului (Tipul de pachet). Există câteva zeci de tipuri diferite de pachete de microcircuite astăzi, prin urmare, ca exemplu, vom da doar câteva denumiri: A Ceramic Pin Grid Array, (PGA); Pachet C Ceramic Dual In-Line, (CDIP); Pachet K Ceramic Quad Flatpack, (QFP); Pachet KD Plastic Quad Flatpack, Pas fin, Die Down, (PQFP); Pachet KU Plastic Quad Flatpack, pitch fin, die Up, (PQFP); N suport de așchii cu plumb din plastic, (PLCC); Pachet P Plastic Dual In-Line, (PDIP); Modul de memorie SM Single In-Line Leadless, (SIMM); Pachet dublu în linie din plastic U, înmuiere de contracție, (PDIPS); Pachet Z Zigzag In-Line, (ZIP). Al treilea câmp poate conține până la 15 caractere numerice și alfabetice care indică tipul unui anumit dispozitiv aflat pe cip. Al patrulea câmp poate include până la șase caractere numerice și alfabetice, reflectând diverse caracteristici și versiuni ale microcircuitelor. Informații suplimentare despre tipurile de pachete și designul acestora pot fi găsite în cartea: Numărul de comandă de ambalare 240800. În ceea ce privește microcontrolerele descrise din familia MCS-51, primul caracter al celui de-al treilea câmp este în mod tradițional (pentru Intel) egal cu „8”. Al doilea caracter al celui de-al treilea câmp indică de obicei tipul de ROM încorporat: 0 ROM mascat de programe; cristal fără ROM (pentru versiunile ulterioare de cristale); 1 masca ROM de programe (Cod ROM Standard, Firmware); 3 masca ROM (pentru versiunile ulterioare de cristal), (Cod ROM personalizabil); 7 UVROM sau ROM programabil unic (EPROM sau OTP ROM); 8 EEPROM (Flash - memorie pe cip) În continuare, poate urma o scrisoare, indicând caracteristicile tehnologice ale producției: fără literă tehnologie HMOS, alimentare 5V; Cu tehnologie CHMOS, alimentare 5V; L Tehnologie CHMOS, alimentare 3V; 5 Următoarele caractere ale celui de-al treilea câmp pentru microcontrolerele MCS-51 sunt numerele (de exemplu, 31,32,51,54,58,152) și de la una până la patru litere, care reflectă caracteristicile funcționale ale cristalelor (de exemplu, dimensiunea ROM). , specificul unui grup de cristale, protecția disponibilității sistemului a memoriei programului împotriva accesului neautorizat, capacitatea de a utiliza un algoritm de programare mai avansat „Quick Pulse” și altele asemenea). În documentația tehnică originală a Intel, toate microcontrolerele din familia MCS-51 sunt aranjate în grupuri („Linia de produse”), fiecare dintre acestea unind cele mai strâns legate funcţionalitateși parametrii electrici ai versiunii de cristal. Deoarece numele microcircuitelor unui grup diferă ușor, pentru a desemna fiecare grup individual, se folosește un simbolism generalizat, format din marcarea microcircuitelor specifice, prin înlocuirea caracterelor diferite cu „X”. Astfel, se pot distinge următoarele grupuri de microcontrolere. 1. Grupa 8Х5Х (linia de produse 8051 și linia de produse 8052): 8031АН, 8051АН, 8751Н, 8051АНР, 8751Н-8, 8751ВН, 8032АН2,АН2,. 2. Grupa 8ХС51 (linie de produse 80С51): 80С31ВН, 80С51ВН, 87С51. 3. Grupa 8ХС5Х (8ХС52 / 54/58 Linie de produse): 80С32, 80С52, 87С52, 80С54, 87С54, 80С58, 87С58. 4. Grupa 8XC51FX (8XC51FA / FB / FC Linie de produse): 80C51FA, 83C51FA, 87C51FA, 83C51FB, 87C51FB, 83C51FC, 87C51FC. 5. Grupa 8ХL5X (8XL52 / 54/58 Linie de produse): 80L52, 87L52, 80L54, 87L54, 80L58, 87L58. 6. Grupa 8XL51FX (linie de produse 8XL51FA / FB / FC): 80L51FA, 83L51FA, 87L51FA, 83L51FB, 87L51FB, 83L51FC, 87L51FC. 7. Grupa 8XC51RX (8XC51RA / RB / Linie de produse RC): 80C51RA, 83C51RA, 87C51RA, 83C51RB, 87C51RB, 83C51RC, 87C51RC. 8. Grupa 8XC51GB (linie de produse 8XC51GX): 80C51GB, 83C51GB, 87C51GB. 9. Grupa 8XC152JX (linie de produse 8XC152): 80C152JA, 83C152JA, 80C152JB, 80C152JC, 83C152JC, 80C152JD. 10.Grupul 8XC51SL (linie de produse 8XC51SL): 80C51SL-BG, 81C51SL-BG, 83C51SL-BG, 80C51-AH, 81C51SL-AH, 83C51SL-AH, 87C51SL-AH, 87C51SL-ALC815SLC8,- 87C51SL-ALC815SAL0- 87C51SL-18,- 87C51SL-18,- 87C51SL-A . Primul grup de microcontrolere include modele junior ale familiei, realizate folosind tehnologia n-MOS și nerecomandate pentru utilizare în modele noi, toate celelalte grupuri sunt realizate folosind tehnologia CMOS modernă. Microcircuitele grupului al doilea, al treilea și al patrulea sunt astăzi reprezentanții clasici ai familiei MCS-51. Al cincilea și al șaselea grup includ versiuni de cristale de 3 volți (Low-Voltage). Cristalele din al șaptelea grup sunt echipate cu RAM extinsă (RAM extinsă), al cărei volum este de 512 octeți. Microcircuitele din grupele a opta, a noua și a zecea sunt microcontrolere specifice aplicației (Application Specific). Multe aplicații moderne necesită microcontrolere de control de înaltă performanță care utilizează capacități avansate de adresare, arhitectură de înregistrări, cantități mari de memorie RAM internă și stivă și sprijină eficient programarea în limbaj nivel inalt... Aceste microcontrolere includ microcontrolerele New Architecture MCS-5 și MCS-251, pentru producția cărora Intelînceput în 1995. Compoziţia funcţională şi caracteristici cheie microcontrolerul MCS-51 / MCS-251 sunt date în anexă. 6 2. CARACTERISTICI DE BAZĂ ALE MODELULUI DE BAZĂ AL FAMILIEI DE MICROCONTROLLERE MCS-51. Modelul de bază al familiei de microcontrolere MCS-51 și baza pentru toate modificările ulterioare este microcontrolerul I-8051. Caracteristicile sale principale sunt următoarele: un CPU pe opt biți optimizat pentru funcții de control; generator de ceas încorporat; spațiul de adrese al memoriei programului - 64 K; spațiu de adresă memorie de date - 64 K; memorie internă de program - 4K; memorie internă de date - 128 octeți; caracteristici suplimentare privind efectuarea de operații de algebră booleană (operații pe biți); 32 de linii I/O bidirecționale și adresabile individual; 2 temporizatoare / contoare multifuncționale de șaisprezece biți; transceiver asincron full duplex; sistem de întrerupere vectorială cu două niveluri de prioritate și șase surse de evenimente. Schema bloc a I-8051 este prezentată în Fig. 1, alocarea pinilor microcircuitului este prezentată în Fig. 2. Întreruperi externe Întreruperi 128 octeți T / C 0 contor 4K ROM control RAM T / C 1 intrări CPU BUS 4 I / O Serial control OSC Porturi Port P0 P1 P2 P3 T D R D Adresă / Date Fig. 1. Diagrama bloc I-8051 Întreaga serie MCS-51 are o arhitectură Harvard, adică spații de adrese separate pentru memoria programului și date. Organizarea memoriei este prezentată în Fig. 3. Cantitatea de memorie internă (rezidentă) de program (ROM, EPROM sau OTP ROM) aflată pe cip, în funcție de tipul de microcircuit, poate fi 0 (fără ROM), 4K (motă de bază), 8K, 16K sau 32K. Dacă este necesar, utilizatorul poate extinde memoria programului instalând un ROM extern. Accesul la ROM-ul intern sau extern este determinat de valoarea semnalului la pinul EA (Acces extern): EA = Vcc (tensiune de alimentare) - acces la ROM-ul intern; EA = Vss (potențial de masă) - acces la ROM extern. Pentru cristalele fără ROM (fără ROM), pinul EA trebuie conectat permanent la Vss. Strobeul de citire ROM extern - PS EN (Program Store Enable) este generat la accesarea memoriei externe a programului și este inactiv la accesarea ROM-ului aflat pe cip. 7 Zona adreselor inferioare ale memoriei programului este utilizată de sistemul de întreruperi, arhitectura microcircuitului 8051 oferă suport pentru cinci surse de întreruperi: două întreruperi externe; două întreruperi de la cronometre; întreruperi de la portul serial. P1.0 1 40 Vcc P1.1 2 39 P0.0 (AD0) P1.2 3 38 P0.1 (AD1) P1.3 4 37 P0.2 (AD2) P1.4 5 36 P0.3 (AD3) P1.5 6 35 P0.4 (AD4) P1.6 7 34 P0.5 (AD5) P1.7 8 33 P0.6 (AD6) RESET 9 32 P0.7 (AD7) (RD) P3.0 10 31 EA / Vpp (TD) P3.1 11 30 ALE / PROG (INT0) P3.2 12 29 PSEN (INT1) P3.3 13 28 P2.7 (A15) (T0) P3.4 14 27 P2.6 (A14) ) (T1) P3.5 15 26 P2.5 (A13) (WR) P3.6 16 25 P2.4 (A12) (RD) P3.7 17 24 P2.3 (A11) XTAL2 18 23 P2.2 ( A10) XTAL1 19 22 P2.1 (A9) Vss 20 21 P2.0 (A8) Fig. 2. Alocarea pinului I-8051 Memorie de program (Citire) Memoria de date (Citire / Scriere) FFFFH ROM externă FFFFH Memorie externă @DPTR RD Date PSEN WR @PC MOVC EA = 0 Memoria internă @Date DPTR @PC FFH intern extern superior 128 SFR MOVX ROM ROM 80H EA = 0 0000H EA = 1 inferior 128 00H 0000H PSEN Fig. 3. Organizarea memoriei familiei MCS-51 8 Figura 4 prezintă o hartă a zonei inferioare de memorie a programului. Memoria programului ROM 0033H 002BH Port serial 0023H Vector Timer1 001BH întrerupe EINT1 0013H Timer0 000BH EINT0 0003H Adresă de pornire 0000H (Resetare) Fig. 4. Memorie program Adresele vectorilor de întrerupere sunt localizate la intervale de 8 octeți: - 0003H întrerupere externă 0 (Interrupție externă 0) - pin IN T 0; - 000BH întrerupere de la temporizatorul 0 (prin indicatorul de depășire a temporizatorului - T F 0); - 0013H întrerupere externă 1 - IN T 1 pin; - 001BH întrerupere de la temporizatorul 1 (prin indicatorul de depășire a temporizatorului - T F 1); - 0023H întrerupere de la portul serial (Serial Interrupt = Receive Interrupt sau Transmit Interrupt); etc. Memoria de date este separată de memoria programului. Adresarea RAM externă de 64K este posibilă în această zonă. La accesarea memoriei externe de date, CPU-ul microcontrolerului generează semnalele corespunzătoare de citire (R D) sau scriere (W R), interacțiunea cu memoria internă de date se realizează la nivel de comandă, în timp ce semnalele R D și W R nu sunt generate. Memoria de program externă și memoria de date externă pot fi combinate prin ANDing semnalele R D și PS EN pentru a oferi o memorie externă (program / date) stroboscop. Cei 128 de octeți inferiori ai memoriei interne de date (inferioare 128) sunt prezenți pe toate matrițele MCS-51 și sunt prezentate în Figura 5. Primii 32 de octeți reprezintă 4 bănci (Register Bank) cu 8 registre (R7 ... R0). Registrele R0 și R1 din oricare dintre bănci pot fi folosite ca registre de adrese indirecte. Cei 16 octeți care urmează băncilor de registre formează un bloc de spațiu adresabil pe biți. Setul de instrucțiuni MCS-51 conține o mare varietate de operații pe biți, iar cei 128 de biți din acest bloc sunt adresabili direct, iar adresele variază de la 00H la 7FH. Toți octeții din jumătatea inferioară de 128 de octeți a memoriei pot fi adresați direct sau indirect. Jumătatea superioară de 128 de octeți a memoriei RAM (superioară 128) este absentă în cipul I-8051, dar este disponibilă în versiunile de cristale cu 256 de octeți de RAM. În acest caz, zona „Upper 128” este disponibilă numai pentru adresare indirectă. Zona SFR (Special Function Register) este disponibilă numai cu adresare directă. Dispunerea registrelor de funcții speciale în spațiul SFR este prezentată în Fig. 6. Acestea includ registre de porturi, cronometre, controale periferice și așa mai departe. 9 7FH Zonă RAM adresabilă pe octeți 30H (directă, indirectă) 2FH 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H 2EH 77H 76H 75H 74H 73H 72H 71H 70H Zonă RAM (directă, adresabilă) 71H 70H RAM (directă, adresabilă) 6HH00 0 DHH05 0 DHH00 0 DHH05 04H 03H 02H 01H 00H 1FH RB3 18H 17H RB2 10H 0FH RB1 08H 07H SP după RESET 00H RB0 (R7 + R0) Fig. 5. Partea de jos a 128 de octeți de memorie RAM internă. Adresare pe biți 8 octeți F8H FFH F0H B F7H E8H EFH E0H ACC E7H D8H DFH D0H PSW D7H C8H CFH C0H C7H B8H IP BFH B0H P3 B7H A8H IE AFH A0H P2 A7H PSW D7H C8H CFH C0H C7H B8H IP BFH B0H P3 B7H A8H IE AFH A0H P2 A7H THBUH P2 A7H 98F 8H PH 8H 98F 8H 8H 98F 8H 8H 8H 8 1/9 2 / A 3 / B 4 / C 5 / D 6 / E 7 / F Fig. 6. Amplasarea registrelor cu funcții speciale în spațiul SFR. Pentru 16 adrese din spațiul SFR, este posibilă adresarea atât pe octeți, cât și pe biți. Pentru registrele adresabile pe biți, adresa hexazecimală se termină cu „0H” sau „8H”. Adresele de biți din această zonă variază de la 80H la FFH. Întreaga serie de cristale din familia MCS-51 are un set de bază de SFR, ca în microcircuitul I-8051, situat la aceleași adrese. Cu toate acestea, în cristale, care reprezintă o dezvoltare ulterioară a familiei în regiunea SFR, se adaugă noi registre pentru a extinde 10

Sistemul de comandă OMEVM oferă capabilități excelente de procesare a datelor, asigură implementarea operațiilor logice, aritmetice, precum și control în timp real. Procesarea datelor pe biți, tetradă (4 biți), octet (8 biți) și pe 16 biți sunt implementate. Familia LSI MCS-51 - ОМЭВМ pe 8 biți: ROM, RAM, registre speciale, ALU și magistralele externe au o organizare de octeți. Datele pe doi octeți sunt utilizate numai de Registrul Pointer (DPTR) și Contorul de Comandă (PC). Trebuie remarcat faptul că Registrul Data Pointer poate fi utilizat ca un registru DPTR de doi octeți sau ca două registre cu scop special de un octet DPH și DPL. Contorul de comenzi este întotdeauna folosit ca un registru de doi octeți. Setul de comenzi OMEVM are 42 de denumiri mnemonice de comenzi pentru a concretiza 33 de funcții ale acestui sistem. Sintaxa pentru majoritatea comenzilor limbajului de asamblare constă dintr-un mnemonic al funcției, urmat de operanzi care indică metodele de adresare și tipurile de date. Diferitele tipuri de date sau moduri de adresare sunt determinate de operanzii setați, nu de modificările denumirilor mnemonice. Sistemul de comandă poate fi împărțit condiționat în cinci grupuri:
  • Comenzi aritmetice;
  • comenzi logice;
  • comenzi de transfer de date;
  • comenzi ale procesorului de biți;
  • Comenzi de transfer de ramificare și control.
Există următoarele tipuri de adresare a operanzilor sursă:
  • Înregistrați adresare
  • Adresare directă
  • Adresarea indirectă a registrului
  • Adresare directă
  • Adresarea indirectă a registrelor prin suma registrelor de bază și index
Instrucțiuni aritmetice Setul de instrucțiuni conține următoarele operații aritmetice: adunare, adunare cu indicator de transport, scădere cu împrumut, creștere, decrementare, comparare, corecție zecimală, înmulțire și împărțire. În ALU, operațiunile sunt efectuate pe numere întregi fără semn. În operațiile cu doi operanzi: adunarea (ADD), adunarea și transportul (ADDC) și scăderea și împrumutul (SUBB), acumulatorul este primul operand și primește rezultatul operației. Al doilea operand poate fi un registru de lucru al băncii selectate de registre de lucru, un registru intern de memorie de date cu registru indirect și adresare directă sau un octet de date direct. Aceste operațiuni afectează steagurile: finalizare, transport, transport intermediar și indicatorul de paritate în cuvântul de stare a procesorului (PSW). Utilizarea cifrei de transport permite de multe ori îmbunătățirea preciziei în operațiile de adunare (ADDC) și scădere (SUBB). Adunarea și scăderea bazate pe semne pot fi efectuate prin controlul programatic al indicatorului de depășire (OV) al registrului PSW. Indicatorul de transport intermediar (AC) este utilizat pentru a efectua operații aritmetice în BCD. Operațiile de creștere și decrementare nu afectează steagurile. Operațiunile de comparare nu afectează nici operandul destinație, nici operandul sursă, dar afectează semnalizatoarele de transport. Există trei operații aritmetice care se efectuează numai pe baterie: două comenzi pentru verificarea conținutului bateriei A (JZ, JNZ) și o comandă de corecție zecimală la adăugarea codurilor binare-zecimale. În timpul operației de multiplicare, conținutul acumulatorului A este înmulțit cu conținutul registrului B și rezultatul se plasează astfel: octetul mic este în registrul B, octetul mare este în registrul A. Comenzi logice cu variabile octet Sistemul de comandă vă permite să implementați operații logice: „ȘI”, „SAU”, „SAU EXCLUSIV” pe registrul acumulatorului (A) și octetul sursă. Al doilea operand (octetul sursă) poate fi un registru de lucru din banca de registre de lucru selectată; un registru RAM intern adresat folosind adresarea indirectă a registrului; celule adresabile direct ale memoriei RAM interne și registre speciale; amploare imediată. Aceste operații logice pot fi implementate pe orice registru adresabil direct al RAM intern sau un registru cu scop special folosind conținutul acumulatorului A sau date directe ca al doilea operand. Există operații logice care se efectuează numai pe baterie: resetați și inversați toți cei opt biți ai lui A; schimbare ciclică la stânga și la dreapta; deplasare ciclică la stânga și la dreapta, ținând cont de steagul de transport; schimbând locurile tetradelor senior și junior (nibls) în interiorul bateriei. Comenzi de transfer de date Tabelele de simboluri (coduri) încorporate în ROM-ul programului pot fi selectate folosind comenzi de transfer de date folosind adresare indirectă. Un octet constant poate fi transferat la acumulator dintr-o celulă de memorie de program adresată de suma registrului de bază (PC sau DPTR) și registrului index (conținutul lui A). Aceasta oferă, de exemplu, un mijloc convenabil de implementare a unui algoritm pentru conversia codului ASCII în cod cu șapte segmente. Orice celulă din blocul de 256 de octeți din RAM de date externe poate fi selectată utilizând adresarea indirectă a registrului prin registrele pointerului R0 sau R1 (bancul selectat de registre de lucru). O locație în spațiul de adresă RAM extern de 64 KB poate fi, de asemenea, selectată utilizând adresarea indirectă a registrului prin registrul indicatorului de date DPTR. Comenzile de transfer între registrele direct adresabile vă permit să introduceți o valoare dintr-un port într-o celulă RAM internă fără a utiliza registre de lucru sau o baterie. Într-un procesor logic, orice bit adresabil înainte poate fi plasat într-un bit de transport și invers. Conținutul acumulatorului poate fi schimbat cu conținutul registrelor de lucru (al băncii selectate) și cu conținutul celulelor RAM interne adresate prin adresare indirectă a registrelor, precum și cu conținutul celulelor direct-adresabile. a RAM-ului intern și cu conținutul registrelor cu destinație specială. Niblul minor (biții 3-0) al conținutului acumulatorului poate fi schimbat cu niblul minor al conținutului celulelor RAM interne, selectat folosind adresarea indirectă a registrului. Instrucțiuni procesor de biți Procesorul de biți face parte din familia MCS51 de arhitectură MCU și poate fi văzut ca un procesor de biți independent. Procesorul de biți execută un set de instrucțiuni, are propria RAM adresabilă pe biți și propriul I/O. Instrucțiunile de biți oferă adresare directă a 128 de biți (0-127) în șaisprezece celule ale RAM-ului intern (celule cu adrese 20H-2FH) și adresare directă de biți a registrelor cu scop special ale căror adrese sunt multiple de opt. Fiecare dintre biții adresabili individual pot fi setați la „1”, ștergeți la „0”, inversați, verificați. Tranzițiile pot fi implementate: dacă bitul este setat; dacă bitul nu este setat; ramură, dacă un bit este setat, cu ștergerea acestui bit; bitul poate fi suprascris la (din) bitul de transport. Operațiile logice „ȘI”, „SAU” pot fi efectuate între orice bit adresabil direct și flag-ul de transport, unde rezultatul este introdus în bitul flag-ului de transport. Instrucțiunile de procesare pe biți asigură implementarea funcțiilor complexe ale logicii combinatorii și optimizarea programelor utilizator. Comenzi de ramificare și transfer de control Spațiul de adrese din memoria programului nu are o organizare de paginare, ceea ce vă permite să mutați liber fragmente de program în spațiul de adrese, în timp ce reîncărcarea (modificarea) numărului paginii nu este necesară. Mutarea fragmentelor de program individuale oferă posibilitatea de a utiliza module de program relocabile de către diferite programe. Instrucțiunile de ramificare și apel de subrutină pe 16 biți vă permit să săriți în orice punct din spațiul de adresă al memoriei programului de 64 KB. Salturile de 11 biți și instrucțiunile de apel de subrutine oferă salturi în cadrul unei unități de program de 2 KB. În sistemul de comandă există comenzi pentru sărituri condiționate și necondiționate în raport cu adresa de pornire a următorului program în intervalul de la (РС) -128 la (ЗС) +127. Comenzile pentru verificarea biților individuali permit tranziții condiționate pe starea „0” sau „1” a biților adresați direct. Instrucțiunile pentru verificarea conținutului acumulatorului (pentru zero / nu zero) permit sărituri condiționate asupra conținutului lui A. pentru a accesa cele opt registre de lucru ale băncii de registre de lucru selectate (aceleași registre pot fi selectate folosind adresarea directă și adresarea indirectă a registrului ca celule normale în memoria RAM internă de date). Adresarea de registru este folosită pentru a accesa registrele A, B, AB (registru dublu), DPTR și indicatorul de transport C. Utilizarea adresei de registru vă permite să obțineți echivalentul de doi octeți al instrucțiunilor de adresă directă de trei octeți. Adresare directă Adresarea directă în octet este utilizată pentru a accesa locațiile din memoria internă de date (RAM) (0-127) și registrele speciale. Adresarea biți înainte este folosită pentru a se referi la cei 128 de biți adresabili separat, localizați în locațiile de adrese 20H-2FH și la biții adresabili separat ai registrelor cu scop special. Cel mai semnificativ bit al octetului codului de adresă directă selectează unul dintre cele două grupuri de biți adresabili separat, localizați în RAM sau în registrele speciale. Biții adresabili direct cu adrese 0-127 (00H-7FH) sunt localizați într-un bloc de 16 celule RAM interne cu adrese 20H-2FH. Celulele indicate sunt numerotate secvenţial de la bitul cel mai puţin semnificativ al octetului cel mai puţin semnificativ până la bitul cel mai semnificativ al octetului cel mai semnificativ. Biții adresabili separat din registrele cu scop special sunt numerotați după cum urmează: cei cinci biți cei mai semnificativi ai adresei se potrivesc cu cei cinci biți cei mai semnificativi ai registrului însuși, iar cei trei biți mai puțin semnificativi determină locația ibt-ului individual în registru. Adresarea indirectă a registrului Adresarea indirectă a registrului este utilizată pentru a se referi la celulele memoriei interne de date RAM. Registrele R10, R1 ale băncii de registre selectate sunt utilizate ca registre de indicator. Comenzile PUSH și POP folosesc conținutul indicatorului de stivă (SP). Adresarea indirectă a registrului este, de asemenea, utilizată pentru a accesa memoria de date externă. În acest caz, folosind registrele pointerului R0 și R1 (bancul selectat de registre de lucru), o celulă este selectată dintr-un bloc de 256 de octeți de memorie externă de date. Numărul blocului este presetat de conținutul portului P2. Indicatorul de date pe 16 biți (DPTR) poate fi utilizat pentru a accesa orice locație din spațiul de adrese din memoria de date externă de până la 64KB. Adresare directă Adresarea directă vă permite să selectați constante din spațiul de adrese din memoria programului care sunt specificate în mod explicit în comandă. Adresarea indirectă a registrului prin suma registrelor de bază și index Adresarea indirectă a registrului după sumă: registrul de bază plus registrul index (conținutul acumulatorului A) facilitează vizualizarea tabelelor conectate în memoria programului. Orice octet din tabel poate fi selectat la o adresă determinată de suma conținutului DPTR sau PC și a conținutului A. Tabel de simboluri și simboluri utilizate în sistemul de comandă
Denumire, simbol Programare
A Baterie
Rn Registrele băncii de registre selectate în prezent
r 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 SFR (128-255)
@Rr Celulă de 8 biți adresabilă indirect de memorie RAM internă de date
date8 Date directe pe 8 biți care ajung la CPC
dateH Cei mai semnificativi biți (15-8) de date directe pe 16 biți
dateL Biți cei mai puțin semnificativi (7-0) de date directe pe 16 biți
adresa11 Adresă de destinație pe 11 biți
addrL Cei mai puțin semnificativi biți ai adresei de destinație
disp8 Offset de octeți de 8 biți cu semnul m
pic Bit adresabil direct a cărui adresă conține CPC-ul situat în memoria internă de date RAM sau SFR
a15, a14 ... a0 Biți de adresă de destinație
(NS) Conținutul elementului X
((NS)) Conținut la adresa stocată în elementul X
(X) [M] Descărcarea M a 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. Un total de 111 astfel de combinații sunt posibile în sistemul de comandă. Tabelul oferă o listă de comenzi, sortate alfabetic.

Mnemonice Funcţie Steaguri
Comanda ACALL Apel de subrutină absolut
ADAUGĂ Echipa A,<байт-источник> Plus AC, C, OV
ADDC echipa A,<байт-источник> Purtați pliabil AC, C, OV
Echipa AJMP Tranziție absolută
Echipa ANL<байт-назначения>, <байт-источникa> „ȘI” logic
Echipa ANL C,<байт-источникa> „ȘI” logic pentru biți variabili
Echipa CJNE<байт-назначения>, <байт-источник>, <смещение> Comparați și săriți dacă nu sunt egali C
Comanda CLR A Resetarea bateriei
Comanda CLR Curățind puțin C, un pic
Echipa CPL A Inversarea lui ak umul ora
Echipa CPL inversarea biților C, un pic
Echipa DA A Corecție zecimală acumulator pentru inserare AC, C
Echipa DEC<байт> Decrementează
Echipa DIV AB Divizia C, OV
Echipa DJNZ<байт>, <смещение> Scădere și tranziție dacă nu zero
Echipa INC<байт> Creştere
Echipa INC DPTR Creșterea indicatorului de date
Echipa JB , Salt dacă bit este setat
Echipa JBC , Sari dacă este setat un bit și șterge acel bit
Echipa JC Sari dacă transportul este setat
Comanda JMP @ A + DPTR Tranziție indirectă
Echipa JNB , Salt dacă bit nu este setat
Echipa JNC Sari dacă transportul nu este setat
Echipa JNZ Salt dacă conținutul bateriei este diferit de zero
Echipa JZ Salt dacă conținutul acumulatorului este 0
Comanda LCALL Apel lung
Echipa LJMP Traversare lungă
Comanda MOV<байт-назначения>, <байт-источника> Trimite octet variabil
Comanda MOV<бит-назначения>, <бит-источника> Trimiteți bit de date C
Comanda MOV DPTR, # data16 Încărcați indicatorul de date cu constantă de 16 biți
Comanda MOVC A, @ A + ( ) Trimite octet din memoria programului
Comanda 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 biți variabili C
Comanda POP Citirea din stivă
Comanda PUSH Stivuire
Comanda RET Întoarcerea din subrutină
echipa RETI Întoarcerea de la întrerupere
Echipa RL A Mutați conținutul bateriei la stânga
Echipa RLC A Mutați conținutul bateriei la stânga prin intermediul steagului de transport
Echipa RR A Mutați conținutul bateriei la dreapta
Echipa RRC A Mutați conținutul bateriei la dreapta prin intermediul steagului de transport C
Comanda SETB Set bit C
Echipa SJMP<метка> Săritura scurtă
Echipa SUBB A,<байт источника> Scăderea cu un împrumut AC, C, OV
Schimbați o comandă Schimb de notebook-uri în interiorul bateriei
Echipa XCH A,<байт> Schimbarea conținutului unui acumulator de octeți variabili
XCHD Echipa A, @ R1 Schimbul unui caiet
Comanda XRL<байт-назначения>, <байт-источникa> EXCLUSIV SAU logic pentru octeți variabili

Starea sistemului de întrerupere este interogata la sfârșitul fiecărui ciclu al mașinii în faza S5P2, cu excepția comenzilor RETI și a oricăror comenzi care se referă la registrele IE și IP. Din momentul remedierii cererii de întrerupere și până la deservirea întreruperii, sunt necesare de la 38 la 86 de perioade ale frecvenței fOSC, în funcție de faza solicitării și de numărul de cicluri de mașină ale comenzii în timpul execuției căreia a fost primită cererea. .

Când întreruperea este implementată în hardware, se execută instrucțiunea LCALL addr16, care asigură stocarea în stivă a stării curente a contorului programului (stocarea adresei de retur), și trecerea la adresa de pornire addr16 a procedurii de service corespunzătoare. Fiecare sursă de solicitare de întrerupere are propria sa

adresa de pornire (vector de întrerupere):

Întreruperea externă INT0.

Timer de întrerupere/contor TC0.

Întreruperea externă INT1.

Timer de întrerupere/contor TC1.

Întreruperea portului serial.

2.7. Metode de adresare și sistemul de comandă al familiei MCS-51

Sistemul de comandă al familiei MCS-51 este axat pe organizarea flexibilă a intrării-ieșirii datelor prin porturile universale P0 ... P3 și procesarea informațiilor primare. O atenție deosebită se acordă operațiunilor cu biți și transferului de control prin valoarea lor. Instrucțiunile care efectuează astfel de operațiuni constituie un grup mare și împreună cu hardware-ul corespunzător formează așa-numitul „procesor boolean” în arhitectura MCS-51.

Sistemul de comandă oferă programatorului posibilitatea de a utiliza majoritatea operațiunilor cu Set complet metode de adresare și resurse hardware accesibile software-ului.

2.7.1. Metode de adresare

Fiecare instrucțiune îi spune procesorului operația de efectuat și metodele de accesare a operanzilor. Codul de comandă are mai multe câmpuri care au un scop funcțional specific. Cele mai importante câmpuri ale oricărei comenzi sunt codul de operație (CPC), care determină acțiunea comenzii și partea de adresă. Câmpurile părții de adresă conțin informații despre adresele operanzilor și rezultatul operației și, în unele cazuri, informații despre adresa următoarei comenzi.

Dacă adresa indică numărul celulei de memorie în care se află operandul sau unde este introdus, atunci se numește adresă directă.

Metodele de adresare sunt o colecție de mecanisme de accesare a operanzilor. Unele dintre ele sunt simple, duc la un format de comandă compact și acces rapid la operand, dar au o cantitate limitată de resurse disponibile. Altele vă permit să operați cu toate resursele disponibile în sistem, dar comanda se dovedește a fi lungă, pe

introducerea și execuția necesită timp. Setul de metode de adresare din fiecare set de instrucțiuni este o combinație de compromis a mecanismelor de adresare cunoscute alese de arhitecți pe baza setului de sarcini de rezolvat.

Următoarele sunt principalele metode de adresare utilizate în comenzile familiei MCS-51.

Adresarea implicită... Comanda nu conține instrucțiuni explicite despre adresa operandului care participă la operație sau adresa la care este plasat rezultatul operației, dar această adresă este implicită. În comenzi, acumulatorul este cel mai adesea implicit adresat ca receptor al rezultatului unei operații. De exemplu, rezultatul adunării conținutului acumulatorului (A) și registrului R1 al băncii de date curente cu comanda ADD A, R1 este scris în acumulatorul implicit adresabil. Întreaga comandă specificată ocupă un octet în memorie, în timp ce adresa doar acumulatorului (8Eh din zona SFR) conține un octet.

Adresare directă... Câmpul pentru adresa comenzii conține

Adresa nu este adresa operandului, ci operandul în sine. Adresarea directă este indicată prin caracterul special # în fața numărului. De exemplu, cu comanda MOV A, # 15h, numărul hexazecimal 15 (al doilea octet al comenzii) este încărcat în acumulator. În sistemul de comandă, adresarea directă este desemnată ca #date, unde data este un număr

(date = 00h ... FFh).

Adresare directă... Câmpul de adresă de comandă indică adresa directă a celulei de memorie de date în care se află operandul sau unde este scris. De exemplu, cu comanda MOV A, 15h, conținutul celulei DSEG cu adresa 15h este încărcat în acumulator. Celula de memorie este direct adresabilă, în timp ce acumulatorul este implicit. În funcție de locația operandului adresat, adresarea directă este subdivizată în registru direct și absolută.

Adresarea directă a registrului... Câmpul adresa de comandă conține adresa directă a registrului băncii de registre curente. Există opt registre în fiecare bancă și este necesară o adresă de redirecționare pe trei biți pentru a le adresa. În mnemonica comenzilor, registrul adresabil este desemnat Rn, unde n = 0 ... 7. Toate câmpurile de comandă se încadrează într-un octet. Aceasta se numește adresare scurtă. De exemplu, MOV R4, R1.

Adresare absolută directă vă permite să vă referiți la orice celulă DSEG și zonă SFR. Adresa directă în acest caz este de un octet, iar comanda este de doi octeți. În sistemul de comandă, octetul de adresă directă este desemnat prin cuvântul direct (direct = 00h… FFh). De exemplu, instrucțiunea MOV 80h, R2 (sau MOV P0, R2) încarcă conținutul registrului R2 al băncii de date curente în portul P0 (locația 80h a zonei SFR). Dacă ambii operanzi sunt adresați direct, instrucțiunea devine de trei octeți (de ex. MOV 80h, 15h).

Adresare indirectă... Câmpul de adresă conține adresa celulei de memorie în care se află adresa directă a operandului. În sistemul de comandă, caracterul special @ indică adresarea indirectă. Proprietate

registrele R0 și R1 (@Ri, i = 0,1) ale fiecărei bănci de registre posedă adresa directă. De exemplu, dacă conținutul registrului R1 al băncii curente de registre este de 15h, atunci instrucțiunea MOV A, @ R1 va efectua aceeași acțiune ca instrucțiunea de mai sus MOV A, 15h - va încărca conținutul celulei de memorie DSEG. cu adresa 15h în acumulator. Cu toate acestea, instrucțiunea MOV A, @ R1 este de un singur octet, dar, cel mai important, este posibilă modificarea programatică a adresei prin modificarea conținutului registrului R1.

Adresarea relativă... Cu adresare relativă, adresa directă se formează prin adăugarea adresei de bază cu câmpul de adresă de comandă. Conținutul contorului programului este folosit ca adresă de bază, iar câmpul de adresă de comandă este un rel offset de opt biți (relativ). Numărul rel este interpretat de comandă ca un întreg cu semn, reprezentat în complementul a doi. Gama de prezentare a acestuia este (-128 ... + 127). Când determinați numărul rel, rețineți că contorul programului indică următoarea comandă care urmează să fie executată. Adresarea relativă este utilizată pe scară largă în comenzile de transfer de control, ceea ce vă permite să creați module de program relocabile. Comenzile de transfer de control cu ​​adresare relativă permit organizarea ramificării față de poziția curentă a contorului de programe PC în ambele direcții cu (-128 ... + 127) octeți.

În programele în limbaj de asamblare, puteți specifica eticheta la care să treceți în câmpul offset. Ca urmare a translației, asamblatorul va calcula valoarea offset-ului dacă aceasta nu depășește (-128 ... + 127). În caz contrar, va fi afișat un mesaj de eroare.

Adresarea de bază reprezintă un fel de adresare relativă. Adresa directă în acest caz se formează prin adăugarea adresei specificate în comandă cu conținutul registrului de bază, care stochează adresa de bază. Funcția registrului de bază din familia MCS-51 este registrul indicator de date DPTR sau contorul de programe PC. Acest tip de adresare este util în special atunci când se procesează tabele și matrice de date. În instrucțiunile MOVC A, @ A + DPTR și MOVC A, @ A + PC, adresa de redirecționare pe 16 biți este formată ca suma conținutului DPTR și A sau PC și A.

Adresarea paginii... Când se utilizează paginarea, memoria este împărțită într-o serie de pagini de lungime egală. Paginile sunt adresate de un registru de pagină separat, iar celulele de memorie din cadrul paginii sunt adresate de adresa conținută în comandă. Adresa directă se formează prin concatenarea (adăugarea) adresei paginilor și a adresei celulei de memorie în cadrul paginii. În instrucțiunea MOVX A, @ Ri, portul P2 (adresă octet înalt) îndeplinește funcția registrului de pagină, iar conținutul registrului Ri (adresă octet scăzut) setează adresa în cadrul paginii. În acest caz, memoria este împărțită în 256 de pagini a câte 256 de celule în fiecare dintre ele.

Adresarea stivă Este folosit în comenzile neadresate și este o combinație de metode de adresare auto-incrementale și auto-decrementale, care funcționează pe principiul LIFO (L ast Input - First Output) - „last in - first out”. Stiva este situată în DSEG și crește în direcția creșterii adresei. Adresa vârfului stivei este conținută în pointerul stivei SP. Când un octet este scris în stivă, conținutul SP este incrementat mai întâi și apoi se face o scriere la această adresă. Când citește un octet din stivă, acesta citește mai întâi la adresa indicată de SP și apoi decrește SP. Când utilizați o stivă, rețineți că adâncimea stivei (numărul maxim de celule de memorie ocupate de stivă) nu este controlată de hardware. Cu o creștere excesivă a stivei, celulele de memorie care nu sunt destinate acestuia pot fi ocupate cu pierderea de informații din ele. Stiva hardware este utilizată pentru a stoca adresa de retur atunci când se întreține întrerupere.

2.7.2. Set de comandă pentru familie MCS-51

Sistemul de comandă este prezentat în tabelele A2.1 ... A2.6 din Anexa 2. Tabelele indică numele comenzii, mnemonicul acesteia, codul de operare binar, influența comenzii care se execută asupra steagurilor C, OV , AC și P, lungimea comenzii în octeți (B) și timpul de execuție în cicluri de mașină (C), precum și conținutul transformării efectuate de instrucțiune. O virgulă este folosită ca separator pentru câmpurile de adresă din comenzi. Pentru a îmbunătăți lizibilitatea, puteți adăuga spații după virgulă dacă asamblatorul utilizat le acceptă.

Întregul set de comenzi poate fi împărțit în 5 grupe: operații de transfer de date, operații aritmetice, operații logice, operații pe biți și operații de transfer de control.

Grup de comenzi pentru operațiuni de transfer de date(tabelul A2.1) cu-

deține comenzi de acces MOV (transfer de date între DSEG și RSEG), MOVC (între CSEG și A), MOVX (între XSEG și A), PUSH și POP și două comenzi de schimb XCH și XCHD. Toate comenzile de transfer de date, în care receptorul este bateria, setează indicatorul de paritate P al conținutului bateriei, iar comenzile de adresă directă, în care registrul PSW este receptorul, schimbă toate steagurile. Cea mai încăpătoare este instrucțiunea MOV, care folosește patru metode de adresare: registru direct (A, Rn, DPTR), direct (direct), indirect (@Ri), direct (#data, #data16). Al doilea operand al instrucțiunii este sursa, primul este destinația. Există trei metode de adresare (cu excepția celor directe) pentru a indica destinația și toate cele patru pentru a indica sursa. Comanda directă MOV de trei octeți se transferă între oricare două locații de memorie (DSEG și SFR), inclusiv RSEG. Pentru schimbul cu RSEG, sunt furnizate formate speciale de doi și un octet:

Instrucțiunea specială MOV DPTR, # data16, încarcă pointerul DPTR pe 16 biți cu data16.

Instrucțiunea MOVC vă permite să citiți informații din memoria programului CSEG nu în registrul de comandă al dispozitivului de control, ci în bateria dispozitivului de operare. Comanda folosește două metode de adresare: bazată pe DPTR și relativ la PC. În ambele cazuri, offset-ul întregului fără semn (index) este stocat în acumulator. Bateria servește și ca receptor al rezultatului. Comanda vă permite să efectuați o transcodare rapidă peste tabele.

Memoria externă este accesată utilizând instrucțiunea MOVX. Schimbul se realizează prin octeți între baterie și XSEG extern. Celula XSEG poate fi adresată în două moduri: indirect prin indicatorul DPTR de 16 biți și paginată indirect prin Ri de 8 biți, i = 0,1. În acest din urmă caz, registrul paginilor este registrul P2.

Comenzile PUSH și POP neadresate asigură transferul de date

intre DSEG, RSEG si SFR.

Instrucțiunea de schimb XCH oferă un schimb bidirecțional de octeți, iar instrucțiunea XCHD oferă cele mai puțin semnificative tetrade de operanzi de octeți.

Grup de comandă aritmetică(tabelul A2.2) co-

deține instrucțiuni pentru adunare ADD, adunare cu carry ADDC, scădere cu împrumut SUBB, creștere și decrementare cu un INC și DEC, corecție zecimală de adunare BCD în format pachet, înmulțire MUL și divizare DIV. Operațiile sunt efectuate pe numere întregi fără semn. În operațiile de adunare și scădere, acumulatorul este primul operand și receptor al rezultatului. Registrul direct, absolutul direct, adresarea directă și indirectă sunt utilizate pentru definirea celui de-al doilea operand. Operațiunile INC și DEC se aplică unui acumulator, unui registru direct adresabil sau unei locații de memorie adresabile direct sau indirect. În plus, operațiunea INC se aplică conținutului registrului pointerului DPTR pe 16 biți.

Operațiile de multiplicare și împărțire a întregului fără semn implică acumulatorul și registrul B. În înmulțire, valoarea de 8 biți a lui A este înmulțită cu valoarea de 8 biți a lui B, iar rezultatul de 16 biți este scris în perechea BA. În acest caz, registrul B stochează partea superioară a produsului. Indicatorul OV este setat dacă produsul este mai mare de 255. Când o valoare de 8 biți A este împărțită la o valoare de 8 biți B, coeficientul este scris în A, iar restul este scris în B. O încercare de a împărți la 0 setează indicatorul de depășire OV.

Comanda de corecție zecimală acumulator DA este plasată după comanda de adăugare. Termenii trebuie să fie reprezentați în codul BCD. Corectarea se realizează într-un mod standard.

Grup de comenzi pentru operații logice(tabelul A2.3 ) conține trei operații tipice: ANL - ȘI logic, ORL - SAU logic, XRL - SAU logic exclusiv. Sursa primului operand

fie acumulatorul A, fie celula de memorie direct adresabilă servește. Al doilea operand este specificat de una dintre cele patru metode de bază de adresare. Grupul mai include operații unice peste conținutul acumulatorului: CLR - clear, CPL - inversare și, de asemenea, RL, RLC, RR și RRC - operații de deplasări ciclice și extinse la dreapta și la stânga. Aceasta include și operațiunea de schimb de notebook-uri în acumulatorul SWAP, care poate fi interpretată ca o deplasare ciclică a unui octet cu patru cifre.

Grup de comandă pentru operații pe biți(tabelul A2.6) conține co-

Comenzi SETB - setarea unui bit la 1, CLR - resetarea unui bit la 0, CPL - inversare de biți, ANL și ORL - ȘI logic și OR logic al conținutului steagului C și un bit adresat direct, MOV - transfer de biți.

V operațiuni pe biți, indicatorul C acționează ca un acumulator boolean. Operanzii sunt conținutul steagului C sau bitul direct adresabil al BSEG. Operațiile ANL și ORL pot folosi conținutul unui bit adresabil direct (bit) sau inversarea conținutului (/bit).

V acest grup include și comenzi pentru ramificarea condiționată cu relativă 8-bit offset rel. Un salt condiționat poate fi efectuat atât cu bitul setat (comandă JB) cât și cu bitul șters (comandă JNB). De remarcat este comanda JBC, care, atunci când bitul este setat, implementează ramificare și, în același timp, șterge bitul la 0.

Grup de comandă de transfer de control(tabelele A2.4 și A2.5) cu-

deține comenzile de salt necondiționat AJMP, LJMP, SJMP, JMP, salt condiționat JZ, JNZ, CJNE, apelează ACALL, LCALL, returnează RET, RETI și modifică cu salt condiționat DJNZ. De asemenea, este inclusă o comandă NOP goală.

V Adresarea relativă este utilizată pe scară largă în comenzile de transfer de control, permițându-vă să creați module de program relocabile. Adresa relativă este 8-bit offset rel este un octet cu semn care oferă un salt (–128 ​​​​... +127) octeți în raport cu poziția curentă a computerului. Fie adresa directă16, fie adresa indirectă @ A + DPTR poate fi folosită pentru a sări la orice alt punct din spațiul de adrese de 64K. În acest din urmă caz, conținutul lui A este interpretat ca un întreg fără semn. O variantă a adresei scurte de adresare directă adr11 în pagina curentă de 2KB a fost introdusă pentru compatibilitate cu familia MCS-48.

Toate aceste tipuri de adresare sunt folosite în instrucțiunile de salt. În comenzile de apel, sunt utilizate numai metodele de adresare direct addr16 și in-page addr11. Toate comenzile condiționale folosesc numai adresare relativă.

Când microcontrolerul recunoaște cererea de întrerupere, generează instrucțiunea LCALL addr16, care asigură automat că adresa de retur este stocată în stivă. Informațiile despre starea programului (conținutul registrului PSW) nu sunt salvate automat. în care

UDC 681.5, 681.325.5 (075.8)

BBK 32.973.202-018.2 i 73

A. N. ShcherbinaMașini de calcul, sisteme și rețele. Microcontrolere și microprocesoare în sistemele de control: cheb. indemnizatie / A.N. Shcherbina, P.A. Nechaev- SPb .: De la Politehnică. Universitatea, 2012.-226 p.

Corespunde conținutului standardului educațional de stat al domeniilor de pregătire și specialităților din domeniul managementului în sisteme tehnice, energie electrică și inginerie electrică și conținutul curriculum-ului aproximativ pentru disciplina „Mașini, sisteme și rețele de calcul”.

Problemele fundamentale ale organizării logice a sistemelor cu microprocesoare sunt luate în considerare pe exemplul arhitecturii de bază a familiei de microcontrolere MCS-51 de la Intel. Este descrisă tehnologia de programare a microcontrolerelor în limbaje Assembler și SI.

Poate fi util studenților și profesorilor instituțiilor tehnice superioare, specialiștilor în automatizarea proceselor tehnologice și a echipamentelor de producție, precum și pentru inginerii proiectanți ai sistemelor cu microprocesoare.

Respectă, de asemenea, conținutul standardului educațional de stat al disciplinelor „Microcontrolere și microprocesoare în sisteme de control” și „ Dispozitive electronice automatizare „pregătire de licență, inginerie și master în direcția 140400 „Energie electrică și inginerie electrică”.

Retipărit prin hotărârea Consiliului de redacţie şi edituri

Universitatea Politehnică de Stat din Sankt Petersburg.

© Shcherbina A. N., Nechaev P. A., 2012

© Statul Sankt Petersburg

Universitatea Politehnică, 2012

ISBN 978-5-7422-3553-8


Introducere .. 7

Capitolul 1. Arhitectura familiei MCS51. zece

1.1 Caracteristici generale 10

1.2 Diagrama bloc 11



1.3 Scopul concluziilor microcontrolerului 8051 15

1.4 Organizarea memoriei 17

1.4.1 Memoria programului (ROM) 18

1.4.2 Memoria de date (RAM) 19

1.4.3 Registre de funcții speciale. douăzeci

1.4.4 Registrul de steaguri (PSW) 23

1.5 Dispozitiv de control și sincronizare 26

1.6 Dispunerea porturilor I/O 27

1.6.1 Informații generale. 27

1.6.2 Funcții alternative. 27

1.7. Temporizatoare / Contoare pentru microcontrolere 8051.28

1.7.1. Structura timer-contoare. 28

1.7.2 Moduri de operare a temporizatoarelor-contoare. treizeci

1.8. Port serial 32

1.8.1. Structura portului serial. 32

1.8.2. Controlul transceiver/registru de stare SCON .. 34

1.8.3. Registrul de control al puterii PCON .. 36

1.9. Sistem de întrerupere 37

1.9.1. Întreruperea structurii sistemului. 37

1.9.2 Executarea rutinelor de întrerupere. 40

Capitolul 2. Caracteristicile microcontrolerului 80C51GB .. 42

2.1 Caracteristici 42

2.2 Porturi I/O P0-P5 43

2.2.1 Funcționarea porturilor de intrare-ieșire. 43

2.2.2 Scrierea în port .. 46

2.3 Caracteristicile sistemului de întrerupere 8XC51GB .. 49

Activați/dezactivați întreruperile. 50

Întrerupe gestionarea priorităților. 51

întreruperi externe. 54

2.3. Nodul ADC 56

2.4. Hardware Watchdog 61

2.5. Detectarea defecțiunii ceasului 63

2.6. Matricea contoarelor programabile RSA 64

2.6.1. Structura PCA .. 64

2.6.2. Registrul modului de contor PCA (CMOD) 66

2.6.3. Registrul de control al contorului PCA (CON) 67

2.6.4. Compară / comite module. 68

2.7. Port serial extins 76

2.8. Temporizatoare / Contoare 79

Pinout al grupului de microcontrolere 8XC51GB .. 86

Capitolul 3. Programarea MK 8051GB .. 89

3.1. Modelul de programare 89

3.2 Tipuri de date 93

3.3 Metode de adresare a datelor 93

3.4 Sistemul de comandă 95

3.4.1 Caracteristici generale. 95

3.4.2 Tipuri de comenzi. 96

3.4.3 Tipuri de operanzi. 97

3.4.4 Comenzi pentru transferul datelor microcontrolerului. 98

3.4.5 Comenzi pentru operații aritmetice 8051.101

3.4.6 Comenzile operațiilor logice ale microcontrolerului 8051.104

3.4.7 Comenzi pentru operații cu biți ai microcontrolerului 8051.106

3.5 Programe de depanare 111

Capitolul 4. Limbajul de programare ASM-51. 112

4.2 Scrierea textului programului 113

4.3 Alfabetul limbii. 114

4.4 Identificatori. 115

4.5 Numerele 117

4.6 Directive 118

4.7 Implementarea subrutinelor în limbajul ASM51 122

4.7.1 Structura unei proceduri-subrutine în limbajul ASM51. 122

4.7.2 Transmiterea parametrilor variabili la o subrutină. 123

4.7.3 Implementarea funcţiilor subrutinei în limbajul ASM51. 123

4.7.4 Implementarea rutinelor de gestionare a întreruperilor în limbajul ASM51. 124

4.8 Programare structurată în limbaj de asamblare. 125

4.9 Caracteristici de difuzare a programelor cu mai multe module 126

4.10 Utilizarea segmentelor 128

4.10.1 Împărțirea memoriei MK în segmente .. 128

4.10.2 Segmente de memorie absolută. 129

4.10.2 Segmente de memorie relocabile. 131

Capitolul 5. Limbajul de programare С-51. 134

5.1 Caracteristicile generale ale limbii 134

5.3 Structura programului С-51 136

5.3. Elemente ale limbajului de programare C-51 138

5.3.1. Simboluri .. 138

5.3.2. Unități lexicale, separatoare și utilizarea spațiilor. 141

5.3.3 Identificatori .. 142

5.3.4 Cuvinte cheie. 143

5.3.5 Constante .. 143

5.4. Expresii în operatorii de limbă 146

programare C-51 146

5.5. Priorități pentru operațiuni 148

5.6. Operatorii limbajului de programare C-51 149

5.6.1. Operatori de declarații. 150

5.6.2 Operatori executabili .. 150

5.6.3 Operatorul de atribuire. 151

5.6.4 Operator condiționat. 151

5.6.5 Operator structurat (). 152

5.6.6 Operator buclă pentru. 152

5.6.7 Operator al buclei cu verificarea stării până la corpul buclei while. 153

5.6.8 Operatorul buclei cu o verificare a stării după ce corpul buclei face while. 154

5.6.9 Pauza operatorului. 155

5.6.10 Operatorul continuă. 155

5.6.11 Comutatorul operatorului ales. 155

5.6.12 Operatorul ramurii necondiționate goto. 157

5.6.13 Expresia operator. 158

5.6.14 Operator de retur din subrutine retur. 158

5.6.15 Declarație goală. 158

5.7. Declararea variabilelor în limbajul de programare C-51. 159

5.7.1. Declarație variabilă. 159

5.7.3 Tipuri de date întregi. 161

5.7.4 Numere în virgulă mobilă. 162

5.7.5 Variabile de tip enumerat. 162

5.7.6. Declararea matricelor în limbajul de programare C-51. 164

5.7.7. Structuri .. 165

5.7.8. Combinații (amestecuri) 166

5.8. Folosirea indicatorilor în C-51 167

5.8.1. Declarație de indicatoare. 167

5.8.2. Indicatoare netipizate. 168

5.8.3. Indicatori dependenti de memorie. 169

5.9. Declararea unor noi tipuri de variabile 169

5.10. Inițializarea datelor 170

5.11. Utilizarea subrutinelor în limbajul de programare C-51. 170

5.11.1. Definirea subprogramelor 171

5.11.2. Parametrii subprogramelor 173

5.11.3. Predeclararea subrutinelor 174

5.11.4 Apelarea subrutinelor .. 176

5.11.5 Apel recursiv al subrutinelor 176

5.11.6 Rutine de gestionare a întreruperilor. 177

5.11.7 Domeniile variabilelor și subrutinelor 178

5.12. Programe multimodale 179

Capitolul 6. Pregătirea programelor în mediul de dezvoltare integrat Keil μVision2. 182

6.1 Crearea unui proiect în limbajul ASM-51 182

6.2 Un exemplu de creare a unui proiect în C pentru un controler de antrenament în mediul de dezvoltare integrat Keil μVision2 188

Capitolul 7. Descrierea controlorului de antrenament .. 199

7.1. Structura controlerului 199

7.2. Spatiu de adresa 200

7.2.1. Alocare de memorie. 200

7.2.2 Memorie externă. 201

7.2.3. Memoria internă de date. 202

7.3. Maparea portului I/O 202

7.4. Port serial …………………………… ... 203

7.5. Lucrul cu LCD 205

7.6. Panourile de control ……………………………………………………… 213

ANEXA P2 STRUCTURA RAPORTULUI DE LABORATOR …… ..217

Anexa A3 Codurile de instrucțiuni ale mașinii. 217

Referințe... 224


Introducere

În dezvoltarea specialităților legate de automatizarea proceselor și industriilor tehnologice, studiul microcontrolerelor este una dintre secțiunile importante.

Există o dezvoltare continuă și apariția a tot mai multe microcontrolere și microprocesoare pe 16 și 32 de biți în lume, dar cea mai mare cotă a pieței mondiale a microprocesoarelor rămâne până în prezent cu dispozitivele pe 8 biți. Conform tuturor previziunilor companiilor de analiză pentru viitorul apropiat, poziția de lider a microcontrolerelor pe 8 biți pe piața mondială va rămâne.

În prezent, dintre toate microcontrolerele pe 8 biți, familia MCS-51 este liderul incontestabil în ceea ce privește numărul de soiuri și numărul de companii care produc modificările acestuia. Și-a primit numele de la primul reprezentant al acestei familii - microcontrolerul 8051. Un set de dispozitive periferice de succes, alegerea flexibilă a memoriei de program externă sau internă și prețul rezonabil au asigurat succesul acestui microcontroler pe piață.

Avantajele familiei MCS-51:

· Arhitectura, care este standardul de facto;

· Lărgimea extraordinară a familiei și varietatea posibilităților;

· Disponibilitatea versiunilor de înaltă performanță și extinse de procesoare;

· Un număr semnificativ de dezvoltări software și hardware disponibile gratuit;

· Ușurință în programarea hardware, inclusiv programarea în circuit;

· Cost redus și disponibilitatea cipurilor de bază;

Disponibilitatea unor versiuni specializate de controlere pentru condiții speciale de utilizare

· Disponibilitatea versiunilor de controlere cu un nivel redus de interferență electromagnetică;

· Cunoscut pe scară largă în rândul dezvoltatorilor generației mai vechi, atât în ​​lume, cât și în țările CSI;

· Susținerea arhitecturii de către instituțiile de învățământ de top din lume.

Și, în sfârșit, principalul avantaj: stăpânind cipul de bază al familiei, puteți începe cu ușurință să lucrați cu astfel de „monstri” de calcul precum microcontrolere Cygnal, Dallas Semiconductor, Analog Devices, Texas Instruments.

Familia MCS-51 include o gamă de microcircuite de la cele mai simple microcontrolere până la cele mai complexe. Până în prezent, există peste 200 de modificări ale familiei de microcontrolere 8051, produse de aproape 20 de companii. În fiecare an apar tot mai multe variante de reprezentanți ai acestei familii.

Principalele direcții de dezvoltare sunt:

· Creșterea performanței (creșterea frecvenței ceasului și reproiectarea arhitecturii);

· Reducerea tensiunii de alimentare și a consumului de energie;

· O creștere a cantității de memorie RAM și FLASH pe un cip cu posibilitatea de programare în circuit;

· Introducerea dispozitivelor complexe, cum ar fi sistemele de control al drive-urilor, interfețele CAN și USB etc., în periferia microcontrolerului.

Microcontrolerele din familia MCS-51 vă permit să efectuați ambele sarcini de control diverse dispozitive, și să implementeze noduri individuale ale circuitului analogic. Toate microcircuitele din această familie funcționează cu același set de instrucțiuni. Majoritatea sunt realizate în aceleași carcase cu același pinout (numerotarea picioarelor pentru carcasă). Acest lucru face posibilă utilizarea microcircuitelor de la diferiți producători pentru dispozitivul dezvoltat fără modificări. diagramă schematică dispozitive și programe.

Principalii producători de soiuri din cea de-a 51-a familie din lume sunt Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold Star, Winbond, Silicon Systems și o serie de altele.

Caracteristicile analogilor microcontrolerelor din familia MCS-51 (Intel 8XC51FA, 8XC51GB, 80C152) cu capabilități extinse sunt prezentate în tabel. ÎN 1.

Tabelul B.1

RAM rom PCA ADC WDT T/C Postnaștere. Canale Particularități
Atmel: AT89C2051
- - - - UART Flash 2 Kb
AT89C4051 - - - - UART Flash 4Kb
AT89S4D12 128K - - - UART, SPI Flash 4Kb
DALLAS Semiconductor: DS5000FP
- - - + UART Încărcător bootstrap
DS5001FP - - - + UART Încărcător bootstrap
DS8xC520 16K - - + 2xUART 2 DPTR
SIEMENS: C505C
16K - + + UART, CAN 8 DPTR
C515C 64K - + + UART + SSC + CAN 4 PWM, 8 DPTR
Philips: * 89C51RA +
- + - + UART 2 DPTR, 4 lv. întrerupere, ceas, Flash 8K
P51XAG1x 8K - - + 2 UART
Intel: 8xC51RA
8K - + + UART 4 nivele IRQ, ceas out
8XC196KC 64K 16K - + - UART 3 PWM
80C196KB 64K 8K - + - UART PWM

Capitolul 1. Arhitectura familiei MCS51

Microcontrolerele MCS-51 cu un singur cip pe 8 biți au devenit foarte populare printre designerii de sisteme de control cu ​​microprocesoare datorită arhitecturii lor bine proiectate. Arhitectura microcontrollerului este o colecție de resurse hardware și sisteme de instrucțiuni interne și externe accesibile software-ului. Arhitectura familiei MCS-51 este în mare parte predeterminată de scopul său - construcția de dispozitive digitale compacte și ieftine. Microcontrolerele care îndeplinesc toate funcțiile unui microcalculator folosind un singur microcircuit se numesc computere cu un singur cip (OEVM).

Intel a lansat aproximativ 50 de modele bazate pe nucleul de operare al microcontrolerului Intel 8051. În același timp, multe alte firme, precum Atmel, Philips, au început să-și producă propriile microcontrolere dezvoltate în standardul MCS-51.

Caracteristici generale

Principalele caracteristici ale familiei:

· Unitate centrală de procesare (CPU) pe 8 biți, concentrată pe controlul dispozitivelor executive;

· CPU are un circuit încorporat pentru multiplicarea hardware pe 8 biți și împărțirea numerelor;

· Prezența în setul de instrucțiuni a unui număr mare de operații pentru lucrul cu biți direct adresabili face posibil să vorbim despre un procesor pentru lucrul cu date pe biți (procesor boolean);

· Memoria de program internă (situată pe cip) de tip mascat sau reprogramat, care pentru diverse cristale are un volum de 4 până la 32 Kb, în ​​unele versiuni este absentă;

· Nu mai puțin de 128 de octeți RAM rezidenți de date, care este utilizat pentru organizarea, înregistrarea băncilor, stiva și stocarea datelor utilizatorului;

· Cel puțin 32 de linii de interfață bidirecționale (porturi), configurate individual pentru intrarea sau ieșirea de informații;

· Două contoare / temporizatoare multi-mode de 16 biți utilizate pentru a număra evenimente externe, a organiza întârzieri și a cronometra portul de comunicare;

· Transceiver duplex asincron bidirecțional (UART), conceput pentru a organiza canalele de comunicație între microcontroler și dispozitivele externe cu o gamă largă de rate de transfer de date. Există instrumente pentru integrarea hardware și software a microcontrolerelor într-un sistem conectat;

· Sistem de întreruperi cu prioritate pe două niveluri care suportă cel puțin 5 vectori de întreruperi din 4 surse interne și 2 externe de evenimente;

· Generator de ceas încorporat.

Schema structurala

Schema bloc a controlerului este prezentată în Fig. 1.1 și constă din următoarele unități funcționale principale: unitate de control, unitate logică aritmetică, unitate cronometru/contor, interfață serială și unitate de întrerupere, contor de programe, memorie de date și memorie de programe. Schimbul bidirecțional se realizează folosind o autostradă internă de date de 8 biți. Aproape toți reprezentanții familiei MCS-51 sunt construiți conform acestei scheme. Diverse microcircuite ale acestei familii diferă numai în registre speciale (inclusiv numărul de porturi).

Unitate de cronometrare și control- concepute pentru a genera semnale de sincronizare și control care să asigure coordonarea funcționării în comun a unităților OEVM în toate modurile admise de funcționare a acestuia. Unitatea de control include:

un dispozitiv pentru formarea intervalelor de timp;

logica I/O;

registrul comenzilor;

registrul de control al consumului de energie electrică;

decodor de comenzi, logica de control al computerului.

Orez. 1.1. Schema bloc a controlerului I8051.

Dispozitiv de modelare a intervalului de timp este destinat formării și emiterii semnalelor interne de sincronizare a fazelor, ceasurilor și ciclurilor. Numărul de cicluri de mașină determină durata execuției instrucțiunii. Aproape toate comenzile OEVM sunt executate în unul sau două cicluri de mașină, cu excepția comenzilor de înmulțire și împărțire, a căror durată este de patru cicluri de mașină. Să desemnăm frecvența oscilatorului principal cu F g. Durata ciclului mașinii este de 12 / F g sau 12 perioade ale semnalului oscilatorului principal. Logica de intrare-ieșire este concepută pentru a primi și a emite semnale care asigură schimbul de informații cu dispozitivele externe prin porturile de intrare/ieșire P0-P3.

Registrul de comenzi este destinat pentru înregistrarea și stocarea codului de operare pe 8 biți al comenzii care se execută. Codul de operare, cu ajutorul unui decodor de comandă și al logicii de control al computerului, este convertit într-un microprogram pentru executarea comenzii.

Registrul de control al consumului (PCON) vă permite să opriți microcontrolerul pentru a reduce consumul de energie și a reduce nivelul de zgomot de la microcontroler. Reducerea suplimentară a consumului de energie și reducerea zgomotului pot fi obținute prin oprirea oscilatorului principal al microcontrolerului. Acest lucru poate fi realizat prin răsturnarea puțin în Registrul de control al consumului PCON. Pentru n-MOS (seria 1816 sau microcircuite străine fără „c” în mijloc), 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 puterii.

Unitate aritmetică logică (ALU) este un dispozitiv paralel pe opt biți care efectuează operații aritmetice și logice. ALU este format din:

registre de acumulator, registre de păstrare TMP1 și TMP2;

ROM de constante;

sumator;

registru suplimentar (registru B);

baterie (ACC);

registrul de stare a programului (PSW).

Inregistreaza-te registre de acumulator și de păstrare- registre de opt biți destinate recepționării și stocării operanzilor pe durata operațiunilor asupra acestora. Aceste registre nu sunt accesibile programatic.

constante ROM asigură generarea unui cod de corecție pentru reprezentarea datelor binare-zecimale, a unui cod masca pentru operațiunile pe biți și a unui cod constant.

Adder paralel pe opt biți este un circuit de tip combinație cu purtare secvențială, conceput pentru a efectua operații aritmetice de adunare, scădere și operații logice de adunare, înmulțire, inegale și identice.

Registrul B- un registru de opt biți utilizat în timpul operațiilor de înmulțire și împărțire. Pentru alte instrucțiuni, poate fi privit ca un registru suplimentar super-operator.

Baterie- un registru de opt biti conceput pentru a primi si stoca rezultatul obtinut la efectuarea de operatii aritmetico-logice sau operatii de deplasare

Interfață serială și unitate de întrerupere (PIP) este destinat organizării intrărilor - ieșirii fluxurilor secvențiale de informații și organizării unui sistem de întrerupere a programelor. Blocul include:

tampon PIP;

logica de control;

registru de control;

tampon emițător;

buffer receptor;

transceiver cu port serial;

întreruperea registrului de prioritate;

registru de activare a întreruperii;

logica de procesare a steagului de întrerupere și circuitul de generare a vectorului.

Contor de programe este conceput pentru a forma adresa curentă de 16 biți a memoriei interne de program și adresa de 8/16 biți a memoriei externe de program. Contorul de instrucțiuni include un buffer PC de 16 biți, un registru PC și un circuit de creștere (mărește conținutul cu 1).

memorie de date (RAM) este destinat stocării temporare a informațiilor utilizate în procesul de execuție a programului.

Porturi P0, P1, P2, P3 sunt porturi de intrare-ieșire cvasi-bidirecționale și sunt concepute pentru a asigura schimbul de informații între computer și dispozitivele externe, formând 32 de linii de intrare-ieșire.

Registru de stare program (PSW) destinat stocării de informații despre starea ALU în timpul execuției programului.

Memoria programului (EPROM) este destinat pentru stocarea programelor și este o memorie read-only (ROM). Diferite microcircuite folosesc masca, sters UV sau FLASH ROM.

Registrul indicatorului de date (DPTR) este conceput pentru a stoca o adresă de 16 biți a memoriei de date externe.

Stack Pointer (SP) este un registru de opt biți conceput pentru a organiza o zonă specială de memorie de date (stivă), în care orice celulă de memorie poate fi stocată temporar.

1.3 Scopul concluziilor microcontrolerului 8051(fig. 1.2)

· U ss - potenţialul firului comun („masa”);

· U cc - tensiunea principală de alimentare +5 V;

· X1, X2 - cabluri pentru conectarea unui rezonator de cuarț;

RST - intrare de resetare generală a microcontrolerului;

PSEN - permisiunea memoriei externe a programului, eliberată numai la accesarea ROM-ului extern;

· ALE - stroboscop al adresei memoriei externe;

· ЕА - dezactivează memoria programului intern; nivelul 0 la această intrare forțează microcontrolerul să execute programul doar din ROM-ul extern; ignorarea celui intern (dacă acesta din urmă este disponibil);

Orez. 1.2. Atribuirea pinului 8051.

· P1 - port de intrare/ieșire cvasi-bidirecțional de opt biți, fiecare bit al portului poate fi programat atât pentru intrarea cât și pentru ieșirea informațiilor, indiferent de starea celorlalți biți;

· P2 - un port cvasi-bidirecțional de opt biți, similar cu P1, pinii acestui port sunt folosiți pentru a emite informații de adresă la accesarea programului extern sau a memoriei de date (dacă aceasta din urmă este adresare pe 16 biți). În plus, pinii portului sunt utilizați în timpul programării pentru a introduce biții de ordin înalt ai adresei în microcontroler;

РЗ - un port cvasi-bidirecțional de opt biți, similar cu P1, pinii acestui port pot îndeplini o serie de funcții alternative care sunt utilizate la operarea temporizatoarelor, un port serial de intrare-ieșire, un controler de întrerupere și un program și date externe. memorie;

· P0 - portul de intrare-ieșire a informațiilor bidirecționale multiplexate de opt biți, prin acest port în momente diferite, octetul inferior al adresei și al datelor sunt ieșiți.

Organizarea memoriei

Întreaga serie MCS-51 are o arhitectură Harvard, adică spații de adrese separate pentru memoria programului și date. Structura memoriei este prezentată în fig. 1.3.

Cantitatea de memorie internă (rezidentă) de program (ROM, EPROM sau OTP ROM) aflată pe cip, în funcție de tipul de microcircuit, poate fi 0 (fără ROM), 4K (motă de bază), 8K, 16K sau 32K. Dacă este necesar, utilizatorul poate extinde memoria programului instalând un ROM extern. Accesul la ROM-ul intern sau extern este determinat de valoarea semnalului la pinul EA (Acces extern):

EA = V cc (tensiune de alimentare) - acces la ROM-ul intern;

EA = V ss (potențial de masă) - acces la ROM extern.

Pentru cristalele fără ROM (fără ROM), pinul EA trebuie conectat permanent la V ss.

Orez. 1.3. Organizarea memoriei familiei MCS-51

Strobe de citire ROM extern - (Program Store Enable) este generat la accesarea memoriei externe a programului și este inactiv în timpul accesului la ROM-ul situat pe cip. Zona adreselor inferioare ale memoriei programului este utilizată de sistemul de întrerupere. Arhitectura cipului de bază 8051 oferă suport pentru cinci surse de întrerupere:

· Două întreruperi externe;

· Două întreruperi de la cronometre;

· Întreruperi de la portul serial.

În fig. 1.4 arată o hartă a zonei inferioare a memoriei programului.

Orez. 1.4. Harta memoriei programului inferior

Memoria programului (ROM)

În microcontrolerele din familia 8051, memoria programului și memoria datelor sunt independente și independente unele de celelalte dispozitive, adresate prin diverse comenzi și semnale de control.

Memoria de program încorporată situată pe cipul microcontrolerului 8051 este de 4 KB (în familie până la 32). La accesarea memoriei externe a programelor, toate microcontrolerele din familia 8051 folosesc întotdeauna o adresă de 16 biți, care le oferă acces la 64 KB de ROM. Microcontrolerul accesează memoria programului atunci când citește opcode și operanzi (folosind contorul de instrucțiuni al computerului), precum și atunci când execută instrucțiuni pentru a copia un octet din memoria programului în baterie. Când se execută comenzile de copiere a datelor, adresarea celulei de memorie a programului din care vor fi citite datele poate fi efectuată folosind atât contorul PC, cât și registrul special de indicatori de date DPTR pe doi octeți.

memorie de date (RAM)

Memoria de date pe cip este de 128 de octeți. Memoria de date externă poate fi de până la 64KB. Primii 32 de octeți sunt organizați în patru bănci de registre de uz general, desemnate respectiv banca 0 - banca 3. Fiecare dintre ele este format din opt registre R0 – R7. În orice moment, programul este disponibil, cu adresare de registre, doar o singură bancă de registre, al căror număr este conținut în al treilea și al patrulea biți din cuvântul de stare al programului PSW.

8051 adrese de biți de memorie ale microcontrolerului

Tabelul 1.1

Adresă octet (hexadecimal) Adrese pe biți
D7 D6 D5 D4 D3 D2 D1 D0
2F 7F 7E 7D 7C 7B 7A
2E
2D 6F 6E 6D 6C 6B 6A
2C
2B 5F 5E 5D 5C 5B 5A
2A
4F 4E 4D 4C 4B 4A
3F 3E 3D 3C 3B 3A
2F 2E 2D 2C 2B 2A
1F 1E 1D 1C 1B 1A
0F 0E 0D 0C 0B 0A
20h

Spațiul de adrese rămas poate fi configurat de dezvoltator la discreția sa: poate găzdui stiva, sistem și zonele de date ale utilizatorului. Celulele de memorie de date pot fi accesate în două moduri. Prima modalitate este adresarea directă a unei celule de memorie. În acest caz, adresa celulei este operandul instrucțiunii corespunzătoare. A doua metodă este adresarea indirectă folosind registrele pointerului R0 sau R1: înainte de a executa comanda corespunzătoare, adresa celulei care trebuie adresată trebuie introdusă într-unul dintre ele.

Pentru a accesa memoria de date externă, se utilizează numai adresarea indirectă folosind registrele R0 și R1 sau folosind registrul pointer DPTR pe 16 biți.

O parte a memoriei de date este o zonă de biți, în care este posibil, cu ajutorul instrucțiunilor speciale de biți, să se adreseze fiecare bit al celulelor de memorie. Adresa biților direct adresabili poate fi scrisă și ca (ByteAddress). (Bit). Corespondența acestor două metode de adresare poate fi determinată din tabel. 1.1.