Contacte

Microcontrolere mcs 51 diagramă bloc. Microcontrolere din familia mcs51. Modul citire port

Sistemul de comandă OMEVM oferă capabilități excelente de procesare a datelor, asigură implementarea operațiilor logice și aritmetice, precum și control în timp real. Procesarea datelor pe biți, tetradă (4 biți), bytewise (8 biți) și pe 16 biți este implementată.

LSI din familia MCS-51 este un OMEVM pe 8 biți: ROM, RAM, registre speciale, ALU și magistralele externe sunt bazate pe octeți. Datele pe doi octeți sunt utilizate numai de registrul pointerului (DPTR) și de contorul de programe (PC). Trebuie remarcat faptul că registrul indicator de date poate fi utilizat ca un registru de doi octeți DPTR sau ca două registre de un octet cu scop special DPH și DPL. Contorul programului este întotdeauna folosit ca un registru de doi octeți.

Setul de comenzi OMEVM are 42 de mnemonice de comandă pentru a specifica cele 33 de funcții ale acestui sistem.

Sintaxa majorității comenzilor limbajului de asamblare constă dintr-un mnemonic al funcției, urmat de operanzi care indică metodele de adresare și tipurile de date. Diferite tipuri de date sau moduri de adresare sunt determinate de operanzii setați, nu de modificările mnemonice.

Sistemul de comandă poate fi împărțit în cinci grupuri:

Există următoarele tipuri de adresare a operanzilor sursă:

  • Adresarea indirectă a registrelor pe baza sumei registrelor de bază și index

Tabel de notații și simboluri utilizate în sistemul de comandă

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 Date imediate pe 8 biți incluse în CPC
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 semnat pe 8 biți
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țiuni:
plus
scădere
multiplicare
diviziuni
înmulțire logică (operație ȘI)
adăugare logică (operație SAU)
adăugare modulo 2 (SAU exclusiv)
inversarea 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
Plus AC, C, OV
Supliment cu transport AC, C, OV
Echipa AJMP Tranziție absolută
„ȘI” logic
„ȘI” logic pentru variabile de biți C
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 bateriei
Echipa CPL Inversarea biților C, bit
Echipa DA A Corecția acumulatorului zecimal pentru adunare 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
Comandamentul 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ă
Variabila octet înainte
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
Trimiteți date în memoria externă (din memoria externă)

Versiunea de bază MCS–51 Informații scurte. Microcontrolerele moderne de 8 biți (MC) au astfel de resurse de control în timp real, pentru care au fost utilizate anterior dispoziții costisitoare cu mai multe cipuri sub formă de plăci separate pentru microcalculatoare, și anume:

● să aibă o capacitate de memorie suficientă, împărțirea sa fizică și logică în memorie de program și memorie de date (arhitectura Harvard) și un sistem de comandă care vizează executarea algoritmilor de control;

● include toate dispozitivele (procesor, ROM, RAM, porturi de intrare/ieșire, sistem de întrerupere, mijloace de procesare a informațiilor pe biți etc.) necesare implementării unui sistem de control cu ​​microprocesor de configurare minimă. În anii 70 ai secolului trecut compania Intel o familie de microcontrolere MCS-48 pe 8 biți, unite printr-o serie de caracteristici comune (capacitate de biți, sistem de comandă, set de blocuri funcționale principale etc.), a fost dezvoltată și lansată în producția industrială. Versiunea de bază a acestei familii include:

● procesor pe 8 biți;

● memorie internă de program (1/2/4K octeți);

● memorie internă de date (64/128/256 octeți);

● până la 27 de linii I/O interne și 16 externe;

● un timer-contor de 8 biți;

● sistem de întrerupere cu un singur nivel cu două surse de solicitare. În 1980, aceeași companie a dezvoltat o nouă familie de microcontrolere pe opt biți, MCS-51, care este compatibilă cu arhitectura familiei MCS-48, dar are capacități mai mari.

Arhitectura familiei MCS-51 s-a dovedit a fi atât de reușită încât este încă unul dintre standardele pentru MK-urile pe 8 biți. Prin urmare, obiectul de studiu a fost ales să fie microcontrolere din această familie, care sunt utilizate pe scară largă în sistemele de control relativ simple.

Au fost dezvoltate diverse instrumente de pregătire a programelor pentru familia MCS-51 (compilatoare, emulatoare hardware-software etc.) și există un număr mare de biblioteci de rutine standard. Familia include diverse modificări ale microcircuitelor (versiuni cu cip) ale microcontrolerelor. Articolele din această secțiune discută în detaliu versiunea de bază a microcontrolerelor din familia MCS-51 (microcircuitul 8051 corespunde analogului domestic KP1816BE51), cel mai simplu din punct de vedere structural și funcțional și din punct de vedere al înțelegerii.

Serii ulterioare de microcircuite, păstrând compatibilitatea cu versiunea de bază, diferă de aceasta prin tehnologia de producție îmbunătățită, parametrii electrici, hardware suplimentar și funcționalitate. Următoarele articole sunt dedicate caracteristicilor structurale și funcționale ale modificărilor ulterioare ale familiei de microcircuite MCS-51.
Diagrama bloc generalizată a MCS-51. Compoziția MC, a cărei diagramă bloc generalizată este prezentată în Fig. 7.1.1 include:

● Unitate centrală de procesare (CPU) pe 8 biți constând din ALU, dispozitive de control UUși generator de adrese F;

● masca ROM cu o capacitate de 4K bytes pentru stocarea programelor;

● RAM cu o capacitate de 128 bytes pentru stocarea datelor;

● patru porturi programabile P0–P3 pentru intrare/ieșire de informații;

● unitate de interfață serială BPI pentru schimbul de informații cu dispozitive externe prin intermediul unei linii cu două fire;

● blocarea temporizatoarelor/contoarelor BT/C pentru a menține modul în timp real;

● Bloc de întreruperi BP pentru organizarea întreruperilor programelor executabile. Aceste fonduri se formează rezident parte a microcontrolerului situat direct pe cip. MK include un număr mare de registre, care sunt alocate unor blocuri funcționale separate și nu sunt prezentate în diagramă.

De asemenea, diagrama nu prezintă circuite de control. Schimbul bidirecțional de informații între blocuri se realizează prin intermediul intern de 8 biți magistrala de dateШД-8.

Pe 16 biți intern magistrala de adreseША-16 Adresa generată în CPU este transmisă către ROM (12 biți de adresă) și către RAM (8 biți de ordin inferior).

Când se utilizează memorie externă, cei 8 biți cei mai puțin importanți ai adresei sunt scoși la portul P0 și cei 3 sau 8 biți cei mai importanți la portul P2.

Pentru a extinde logic interfața, se folosește combinarea funcțiilor liniilor de port. Ca exemplu în Fig. 7.1.1 linia punctată arată liniile portului P3 care funcționează alternativă funcțiile de transmitere a semnalelor de control, al căror scop va fi discutat mai jos. Pentru a crea un generator de ceas intern, un rezonator cu cuarț și doi condensatori sunt conectați la bornele microcircuitului MK (Fig. 7.1.1). În loc de un generator de ceas intern, pentru sincronizare poate fi folosită o sursă externă de oscilație. Denumirea grafică convențională a microcircuitului MK este prezentată în Fig. 7.1.2, denumirea și scopul știfturilor - în tabel. 7.1.1. Să luăm în considerare blocurile funcționale ale MK și principiul funcționării lor. Dispozitiv logic aritmetic. Dispozitivul logic aritmetic este proiectat pentru a efectua operații aritmetice (inclusiv înmulțirea și împărțirea) și logice pe operanzi de opt biți, precum și operații de deplasare logică, zero, setare etc. Diagrama bloc a ALU este prezentată în Fig. 7.1.3.

ALU include

● paralel de opt biți sumator SM de tip combinațional cu purtare secvențială, efectuând operații aritmetice (adunare și scădere) și logice (adunare, înmulțire, disparitate și identitate);

baterie A, asigurarea funcțiilor registrului aritmetic principal;

Inregistreaza-te B, folosit pentru implementarea operațiunilor de înmulțire și împărțire sau ca registru suplimentar super-operațional, ale cărui funcții sunt determinate de utilizator;

registre(software nu este disponibil) depozitare temporaraРВХ1, РВХ2, destinate primirii și stocării operanzilor pe durata operațiunii;

● ROM constante ROM, care stochează codul de corecție pentru reprezentarea zecimală binară a datelor, codul masca pentru operațiile pe biți și codul pentru constante;

registru de cuvinte de stare a programului PSW, care înregistrează starea ALU după o operațiune finalizată. În tabel 7.1.2 furnizează informații despre alocarea biților biților individuali ai registrului PSW. Dispozitiv de control. Unitatea de control (CU) a procesorului central destinat pentru a coordona munca comună a tuturor nodurilor MC folosind impulsuri de ceas generate și semnale de control. Se compune din (Fig. 7.1.4):

unitate de sincronizare și control Sistemul de control, care generează impulsuri de ceas care definesc ciclurile mașinii și stările lor individuale (S) și fazele (P) și, în funcție de modul de funcționare al microcontrolerului, generează setul necesar de semnale de control. Este nevoie de unul, două sau patru cicluri de mașină pentru a executa o comandă.

Fiecare ciclu de mașină are șase state S1–S6, A include fiecare stare doua faze P1, P2, a căror durată este perioada de oscilație a generatorului de ceas T 0SC.

Durata ciclului mașinii este de 12T 0SC. Toate ciclurile mașinii sunt aceleași, începând cu faza S1P1 și terminând cu faza S6P2.

În plus față de impulsurile de ceas, dispozitivul de sincronizare generează două (uneori unul) semnale de poartă pentru octetul scăzut al adresei ALE în fiecare ciclu de mașină sub forma unui impuls pozitiv în fazele S1P2–S2P1 și S4P2–S5P1. Diagramele de timp din fig. 7.1.5 ilustrează organizarea ciclurilor mașinii;

● registru de comenzi RK, decodor de comenzi DC și PLM, permițând în fiecare ciclu al mașinii să genereze un set de micro-operații în conformitate cu microprogramul comenzii executate;

● Logica de intrare/ieșire LVV pentru recepția și emiterea de semnale care asigură schimbul de informații de la MK cu dispozitive externe prin porturile P0–P3;

● Registrul PCON, care are un singur bit SMOD activat în poziția PCON.7 pentru a dubla rata de date a portului serial. Biții rămași sunt rezervați pentru utilizare ulterioară.
Generator de adrese. Generator de adrese (FA) sau contor de comenzi PC, destinat pentru a forma adresa curentă de 16 biți a memoriei programului și adresa de 8/16 biți a memoriei de date externe. Se compune din (Fig. 7.1.6):

● 16 biți tampon B, care comunică între magistrala de date SD de 8 biți și magistrala internă (IB) de 16 biți a formatorului de adrese;

● Circuit de creștere SI pentru creșterea valorii adresei curente a memoriei programului cu una;

● registru pentru stocarea adresei curente a comenzilor PTA provenite din SI;

● registru indicator de date DPTR , format din două registre de 8 biți DPH și DPL. Acesta servește la stocarea unei adrese de 16 biți a memoriei de date externe și poate fi folosit ca două RON independente accesibile prin software;

● registrul generatorului de adrese XRF pentru stocarea adresei executive de 16 biți a memoriei programului sau a adresei de 8/16 biți a memoriei de date externe. Acest registru este folosit și pentru a transmite date prin portul P0 către dispozitive externe atunci când se execută comenzile MOVX @Rm, A și MOVX @DPRT, A.

Memoria de date. Memoria de date destinat pentru primirea, stocarea și emiterea informațiilor utilizate în timpul execuției programului. Memoria internă (rezidentă) de date (Fig. 7.1.7) constă din RAM cu o capacitate de 128 de octeți, indicator de stivă S.P. registrul de adrese RAM RA și decodor Dsh. Stack pointer SP este un registru de 8 biți conceput pentru a primi și stoca adresa celulei stivei care a fost accesată ultima dată. După resetare, indicatorul stivei este setat la adresa 07H, care corespunde începutului stivei cu adresa 08H. Registrul de adrese PA împreună cu decodorul Dsh permite accesul la celula de memorie necesară care conține un octet sau un bit de informații.

MK oferă capacitatea de a crește capacitatea memoriei de date până la 64 KB prin conectare dispozitive de stocare externe. Ca exemplu în Fig. 7.1.8 arată organizarea paginii memoriei externe de date VPD cu o capacitate de 2K octeți folosind comenzi de tip MOVX @ Rm(m = 0; 1). În acest caz, portul P0 funcționează ca o magistrală de adrese/date multiplexate, trei linii ale portului P2 sunt folosite pentru a adresa o pagină de RAM externă, iar celelalte cinci linii pot fi folosite ca linii de intrare/ieșire.
În fig. 7.1.9 arată diagramele de timp ale ciclurilor de citire și scriere atunci când MK funcționează cu RAM externă. Diagramele indică:

● RSN - octet mare al contorului de comenzi PC;

● DPL, DPH - octeți mici și înalți ai registrului pointerului de date DPTR, care este utilizat ca registru pentru adresarea indirectă în comenzile MOVX @DPTR,A și MOVX A,@DPTR;

● P2 SFR - zăvoare port P2;

● Rm (m = 0, 1) - registre utilizate în instrucțiunile MOVX @Rm, A și MOVX A, @Rm ca registre de adrese indirecte;

● Z - stare de înaltă rezistență;

● D - perioada în care datele de la portul P0 sunt introduse în microcontroler. Memoria programului. Memoria de programe este concepută pentru a stoca programe, are propriul spațiu de adrese (separat de memoria de date) și este doar pentru citire. Include un decodor Dsh și ROM (Fig. 7.1.10). Pentru a adresa memoria programului se folosește un numărător de PC pe 16 biți, astfel încât capacitatea sa maximă este de 64K octeți. Memoria internă a programului constă dintr-un ROM de 4K octeți și un decodor de 12 biți. Memoria externă este conectată conform diagramei din Fig. 7.1.11. Dacă 0 V este aplicat pinului ¯EA al MK (după cum se arată în Fig. 7.1.11), memoria internă a programului este dezactivată. Toate accesările la memorie încep la adresa 0000h. Când pinul ¯EA este conectat la o sursă de alimentare, accesul la memoria internă a programului la adresele 0000h–FFFFh și la memoria externă a programului la adresele 0FFFh–FFFFh are loc automat.

Pentru a citi memoria externă a programelor MK, este generat semnalul ¯PSEN. Când lucrați cu memoria internă, semnalul de citire nu este utilizat. Când accesați memoria externă a programului, se formează întotdeauna o adresă de 16 biți. Octetul mic al adresei este transmis prin portul P0 în prima jumătate a ciclului mașinii și este fixat prin tăierea strobe-ului ALE în registru.În a doua jumătate a ciclului, portul P0 este folosit pentru a introduce un octet de date din memoria externă în MK.

Cel mai semnificativ octet al adresei este transmis prin portul P2 pe parcursul întregului timp de acces la memorie.

Diagramele de timp ale ciclurilor de citire și scriere atunci când MK funcționează cu RAM externă sunt prezentate în Fig. 7.1.12.
Diagramele indică:

● PCL OUT - ieșirea octetului inferior al contorului de programe PC;

● RSN OUT - iesirea octetului inalt al contorului de comenzi PC;

● DPH - octet mare al registrului pointer de date DPTR, care este folosit ca registru pentru adresare indirectă în instrucțiunile MOVX @DPTR,A și MOVX A,@DPTR;

● P2 SFR - zăvoare port P2;

● INS IN - introducerea octetului de instrucţiune (comandă) din memoria programului;

● ADDR OUT - emiterea octetului mic al adresei de memorie de date externe din registrele Rm (m = 0, 1) sau din registrul DPL (registru DPTR low). Porturi I/O. Alocarea portului. Porturi P0, P1, P2, P3 destinat pentru schimbul de informații între MK și dispozitivele externe și, de asemenea, pentru îndeplinirea următoarelor funcții:

● byte-ul inferior al adresei A7…A0 este scos prin portul P0; un octet de date este scos din MK și introdus în MK atunci când se lucrează cu memorie externă de program și memorie externă de date (separată în timp);

● prin portul P2, octetul mare al adresei A15...A8 este scos când se lucrează cu memorie externă de program și memorie externă de date (numai când se utilizează comenzile MOVX A,@DPTR și MOVX @DPTR,A);

● liniile portului P3 pot fi folosite pentru a efectua funcții alternative dacă în zăvorul acestei linii este introdus 1, în caz contrar la ieșirea de linie este fixat 0. Funcțiile alternative ale pinii portului P3 sunt date în Tabel. 7.1.3.

Caracteristicile circuitelor porturi

În fig. 7.1.13 prezintă diagrame pentru un canal al fiecăruia dintre porturile MK, inclusiv:

● zăvor pentru fixarea bitului de date primit;

● amplificator de ieșire cascadă(conducător auto);

● nod conecțiune cu treapta de iesire (cu exceptia P2);

● un circuit pentru transmiterea unui bit de date din partea de ieșire a portului, format din bufferele B2 și B3 (pentru portul P4). Latch-ul este un D-flip-flop, tactat de semnalul intern „Write to latch”. Bitul de date de la ieșirea directă a flip-flop-ului D poate fi citit programatic prin intermediul tamponului B1 folosind semnalul „Read Latch” la linia magistralei de date interne (ID) a MK.

Etapa de ieșire portul P0 este un invertor, ale cărui caracteristici se manifestă prin faptul că tranzistorul de sarcină VT2 se deschide numai la accesarea memoriei externe (la transmiterea adreselor și datelor prin port). În toate celelalte moduri, tranzistorul de sarcină este închis. Prin urmare, pentru a utiliza P0 (Fig. 7.1.13, a) ca port de ieșire de uz general, este necesar să conectați rezistențe externe de sarcină la bornele sale. Când scrieți 1 în blocarea portului, tranzistorul invertorului VT1 este blocat și pinul extern al portului P0.X este comutat la o stare de înaltă rezistență. În acest mod, ieșirea portului P0.X poate servi ca intrare. Dacă portul P0 este utilizat ca port I/O de uz general, fiecare dintre pinii săi P0.X poate funcționa independent ca intrare sau ieșire. Etape de ieșire porturile P1, P2, P3 (Fig. 7.1.13, b, c, d) realizat conform circuitelor invertorului cu o rezistență de sarcină internă, care este folosită ca tranzistor VT2.

Pentru a reduce timpul de comutare atunci când pinii portului trec de la starea 0 la starea 1, a fost introdus un tranzistor suplimentar VT3 în paralel cu tranzistorul de sarcină VT2. Tranzistorul VT3, folosind elemente din circuitul porții, este deblocat pentru un timp egal cu două perioade de oscilație ale oscilatorului de cuarț principal (în timpul fazelor S1P1, S2P2 ale ciclului mașinii). Etape de ieșire porturile P0, P2 (Fig. 7.1.13, A, c) care utilizează multiplexorul MX pot fi conectate fie la latch-uri, fie la magistralele interne „Adresă/date” și „Adresă”. Etapa de ieșire a portului P1 (Fig. 7.1.13, 6) este conectată permanent la zăvor.

Dacă pinul portului P3 este o ieșire și zăvorul său conține 1, atunci treapta sa de ieșire este controlată de semnalul intern hardware „Funcție de ieșire alternativă”, asigurând executarea funcției alternative corespunzătoare, de exemplu. unul dintre semnalele ¯WR, ¯RD sau RxD este generat la pinul extern. Dacă ieșirea portului este utilizată ca intrare, atunci semnalul alternativ care ajunge la ea (TxD, ¯INT0, ¯INT1, T0, T1) este transmis la linia internă „Funcție alternativă de intrare”.

Mod înregistrare port.

Când este executată o comandă de scriere a portului, noua valoare este scrisă în zăvorul din faza S6P2 și este transmisă direct la pinul de ieșire al portului în faza S1P1 a următorului ciclu al mașinii.

Modul citire port

Comenzile de citire porturi citesc informații direct de la pinii externi ai unui port sau de la ieșirile latch. În primul caz, bitul de date de la pinul portului este citit programatic prin intermediul bufferului B2 folosind semnalul „Read Pins” către linia magistralei de date interne (SD) a MK. Rețineți că semnalele „Scrieți în blocare”, „Citiți blocare”, „Citiți pinii” sunt generate în hardware atunci când sunt executate comenzile corespunzătoare.

În cel de-al doilea caz, este implementat așa-numitul mod „Citire-Modificare-Scriere”, în care comanda citește semnalul de stare latch, îl modifică dacă este necesar și apoi îl scrie înapoi în latch. Modul „Read-Modify-Write” este implementat la executarea următoarelor comenzi: ANL, ORL, XRL, JBC; CPL; INC; DEC; DJNC; MOV PX,Y; CLR PX.Y; SETB PX,Y.

Citirea informațiilor de la ieșirile latch-urilor vă permite să eliminați erorile atunci când interpretați nivelul logic la pinul portului. Citiți continuarea articolului.

În prezent, diverse companii produc multe modificări și analogi ale acestei familii, atât de către Intel, cât și de către alți producători, viteza ceasului și capacitatea de memorie au crescut de zece ori și continuă să crească. Setul de module integrate în LSI este, de asemenea, extins; un număr mare de modele moderne au un ADC rezident de mare viteză încorporat cu până la 12, iar acum pot fi mai mulți biți. Dar familia MCS51 se bazează pe Intel LSI 8051, 80С51, 8751, 87С51, 8031, 80С31, ale căror primele mostre au fost lansate în 1980.

Microcontrolerele din familia MCS51 sunt realizate folosind tehnologia n-MOS de înaltă calitate (seria 8ХХХ, analogă - seria 1816 în Rusia și Belarus) și tehnologia k-MOS (seria 8ХСХХ, analogică - seria 1830). Al doilea caracter după 8 înseamnă: 0 – nu există EPROM pe cip, 7 – o EPROM 4K cu ștergere ultravioletă. Al treilea caracter: 3 – on-chip ROM, 5 – dacă nu există ROM, atunci există o mască ROM pe cip.

Și astfel 80С51 este un LSI bazat pe tehnologia k-MOS cu o mască ROM pe cip, 8031 ​​​​este un LSI n-MOS fără memorie de program (ROM, RPOM) pe un cip, 8751 este un LSI n-MOS cu un rezident (situat pe cip) RPOM cu ștergere ultravioletă. Vom lua în considerare în continuare 8751 LSI, făcând, dacă este necesar, rezerve cu privire la diferențele dintre alte circuite, citând acei parametri care au fost publicati pentru primele LSI-uri seriale. Dacă este necesar, puteți găsi informații suplimentare despre toate modificările moderne în directoarele companiei și în documentația tehnică.

A. Caracteristici generale și alocarea pinului

Familia MCS51 se bazează pe cinci modificări ale MK (având caracteristici de bază identice), principala diferență între care este implementarea memoriei programului și consumul de energie (a se vedea tabelul 3.1). Microcontrolerul este pe opt biți, adică are comenzi pentru procesarea cuvintelor de opt biți, are o arhitectură Harvard, frecvența de ceas a mostrelor de bază ale familiei este de 12 MHz.

Tabelul 3.1.

Microcircuite

Memoria internă a programului, octeți

Tipul memoriei programului

Memoria internă de date, octet

Frecvența ceasului, MHz

Consum de curent, mA

MK 8051 și 80C51 conțin o memorie de program ROM programabilă cu mască cu o capacitate de 4096 de octeți în timpul fabricării cipului și sunt proiectate pentru utilizare în producția de masă. MK 8751 conține un RPOM de 4096 de octeți cu ștergere ultravioletă și este convenabil în stadiul de dezvoltare a sistemului atunci când se depanează programe, precum și în timpul producției în loturi mici sau când se creează sisteme care necesită rescriere în timpul funcționării.

reglaj periodic.

MK 8031 ​​​​și 80C31 nu conțin memorie de program încorporată. Ele, ca și modificările descrise anterior, pot folosi până la 64 KB de memorie externă de program și sunt utilizate efectiv în sistemele care necesită un volum semnificativ mai mare (decat 4 KB pe cip) de memorie de program ROM.

Fiecare MK al familiei conține o memorie rezidentă de date cu o capacitate de 128 de octeți, cu capacitatea de a extinde cantitatea totală de date RAM până la 64 KB prin utilizarea circuitelor integrate RAM externe.

    procesor central pe opt biți;

    4 KB memorie program (numai 8751 și 87C51);

    memorie de date de 128 de octeți;

    patru porturi I/O programabile pe opt biți;

    două temporizatoare/contoare multimod de 16 biți;

    sistem de întrerupere auto-vector cu cinci vectori și două niveluri de prioritate controlate de software;

    interfață serială, inclusiv un transceiver duplex universal capabil să funcționeze în patru moduri;

    generator de ceas.

Sistemul de comandă MK conține 111 comenzi de bază cu un format de 1, 2 sau 3 octeți. Microcontrolerul are:

    32 registre de uz general RON, organizate în patru bănci a câte opt registre fiecare cu denumiri R0... R7, alegerea unei bănci sau alta este determinată de program prin setarea biților corespunzători în registrul de stare program PSW;

    128 de steaguri controlate de software (procesor de biți, vezi mai jos);

    un set de registre de funcții speciale care controlează elementele MK. Există următoarele moduri de operare ale microcontrolerului:

1). Resetare generală. 2).Funcționare normală. 3). Modul de consum redus de energie și modul inactiv. 4). Modul de programare pentru RPOM rezident, dacă este disponibil.

Aici ne vom concentra asupra primelor două moduri de funcționare; o descriere detaliată a compoziției și funcționării MK în toate modurile este dată în Anexa P1.

Zona RON și procesorul de biți sunt situate în spațiul de adrese al RAM rezidentă cu adrese de la 0 la 80h.

În zona superioară a adreselor RAM rezidenţiale există registre cu funcţii speciale (SFR, Special Function Registers). Scopul lor este prezentat în tabel. 3.2.

Tabelul 3.2.

Desemnare

Nume

Baterie

Registrul B

Registru de stare program

Indicator de stivă

Indicator de date. 2 octeți:

Octet mic

Octet mare

Întreruperea registrului prioritar

Întreruperea registrului de activare

Înregistrare mod temporizator/contor

Timer/Counter Control Register

Temporizator/contor 0. Octet mare

Temporizator/contor 0. Octet scăzut

Temporizator/contor 1. Octet mare

Temporizator/contor 1. Octet scăzut

Controlul portului serial

Buffer serial

Managementul consumului

* - registre, permițând pe biți adresarea

Să ne uităm pe scurt la funcțiile registrelor SFR prezentate în Tabelul 3.2.

Baterie ACC - registrul acumulatorului. Comenzi concepute pentru a funcționa

tu cu bateria, folosește mnemonicul „A”, de exemplu, MOV A, P2 . Mnemonicul ACC este utilizat, de exemplu, atunci când se adresează pe biți un acumulator. Astfel, numele simbolic al celui de-al cincilea bit al acumulatorului atunci când se utilizează asamblatorul A5M51 va fi următorul: ACC. 5. .

Inregistreaza-te ÎN . Folosit în timpul operațiilor de înmulțire și împărțire. Pentru alte instrucțiuni, registrul B poate fi tratat ca un registru suplimentar în timp real.

Inregistreaza-te stat programe P.S.W. conține informații despre starea programului și se instalează parțial automat pe baza rezultatului operației efectuate și parțial de către utilizator. Desemnarea și scopul biților de registru sunt date în Tabelele 3.3 și, respectiv, 3.4.

Tabelul 3.3.

Desemnare

Tabelul 3.4.

Desemnare

Alocarea biților

Acces la biți

Purtați steagul. Modificări în timpul executării unei serii de instrucțiuni aritmetice și logice.

Hardware sau software

Steagul de transport suplimentar. Setat/șters în hardware în timpul instrucțiunilor de adunare sau scădere pentru a indica o transportare sau împrumut în bitul 3 atunci când este generată cea mai puțin semnificativă picătură a rezultatului (D0-D3).

Hardware sau software

Steagul 0. Steagul definit de utilizator.

Din punct de vedere programatic

Din punct de vedere programatic

Registrul de lucru Index bancar

Din punct de vedere programatic

Banca 0 cu adrese (00Н - 07Н) Banca 1 cu adrese (08Н - 0FН) Banca 2 cu adrese (10Н - 17Н) Banca 3 cu adrese (18Н - 1FН)

Steagul de preaplin. Setat sau șters de hardware în timpul execuției instrucțiunilor aritmetice pentru a indica o condiție de depășire

Hardware sau software

De rezervă. Conține un declanșator care poate fi scris și care poate fi utilizat

Bit de paritate. Hardware resetat sau setat la fiecare ciclu de instrucțiuni pentru a indica un număr par sau impar de biți a bateriei în starea „1”.

Hardware sau software

Indicator grămadă SP - Un registru de 8 biți al cărui conținut este incrementat înainte de a scrie date în stivă atunci când sunt executate instrucțiunile PUSH și CALL. La resetarea inițială, indicatorul stivei este setat la 07H, iar zona stivei din memoria RAM de date începe la adresa 08H. Dacă este necesar, suprascriind indicatorul stivei, zona stivei poate fi localizată oriunde în memoria RAM internă a datelor microcontrolerului.

Indicator date DPTR constă dintr-un octet înalt (DPH) și un octet scăzut

(DPL). Conține o adresă de 16 biți la accesarea memoriei externe. Poate fi folosit

fie un registru de 16 biți sau două registre independente de opt biți.

Port0 - PortZ. Biții separați ai registrelor funcțiilor speciale P0, P1, P2, RZ sunt biții „latch” ai porturilor P0, P1, P2, RZ.

Tampon consistent port SBUF reprezintă două registre separate: bufferul emițătorului și bufferul receptorului. Când datele sunt scrise în SBUF, acestea intră în buffer-ul transmițătorului, iar scrierea unui octet în SBUF inițiază automat transmisia prin portul serial. Când datele sunt citite din SBUF, acestea sunt preluate din buffer-ul receptorului.

Registrele temporizator. Înregistrați perechile (TH0, TL0) și (TH1, TL1) forma 16

registre de numărare de biți pentru cronometru/contor 0 și respectiv cronometru/contor 1.

Registrele management. Registrele funcțiilor speciale IP, IE, TMOD, TCON, SCON și PCON conțin biți de control și biți de stare ai sistemului de întrerupere, timp-

contoare/contoare și port serial. Ele vor fi discutate în detaliu mai jos.

RxD TxD INT0 INT1 T0 T1 WR

P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

RST BQ2 BQ 1 E.A.

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

Când funcționează, MC oferă:

    timpul minim de execuție pentru comenzile de adăugare este de 1 μs;

    multiplicarea și împărțirea hardware cu un timp minim de execuție de 4 μs.

MK oferă capacitatea de a seta frecvența oscilatorului intern folosind cuarț, un lanț LC sau un oscilator extern.

Sistemul de instrucțiuni extins oferă adresare de octeți și biți, aritmetică zecimală binară și binară, indicație de depășire și determinare par/impar și capacitatea de a implementa un procesor logic.

Cea mai importantă și distinctivă caracteristică a arhitecturii familiei MCS51 este că ALU poate manipula date pe un singur bit în plus față de efectuarea operațiunilor pe tipuri de date pe 8 biți. Biții individuali accesibili de software pot fi setați, șterși sau înlocuiți cu complementul lor, pot fi redirecționați, verificați și

Fig.3.2. Știfturi externi

microcontroler

utilizate în calcule logice. Întrucât suport pentru tipuri de date simple (dacă este disponibil)

În timp ce tendința actuală spre lungimi mai mari de cuvinte poate părea un pas înapoi la prima vedere, această calitate face ca familia de microcontrolere MCS51 să fie deosebit de potrivită pentru aplicațiile bazate pe controlere. Algoritmii de operare ai acestuia din urmă presupun prezența variabilelor booleene de intrare și de ieșire, care sunt greu de implementat folosind microprocesoare standard. Toate aceste proprietăți sunt numite colectiv procesor boolean al familiei MCS51. Această ALU puternică face ca familia de microcontrolere MCS51 să fie potrivită atât pentru aplicații de control în timp real, cât și pentru algoritmi mari consumatoare de date.

Schema circuitului microcontrolerului este prezentată în Fig. 3.2. În versiunea de bază, este ambalat într-un pachet DIP cu 40 de pini. Să ne uităm la scopul acelor.

Să începem cu pinii de alimentare «0 ÎN" Și „5 ÎN" , prin care primește hrana de bază. Consumul curent este dat în tabel. 3.1.

Concluzie "RST" - resetarea microcontrolerului. Când un nivel înalt activ este aplicat acestui pin, modul general resetare iar MK efectuează următoarele acțiuni:

Setează la zero contorul de programe PC și toate registrele de funcții speciale, cu excepția zăvoarelor portului P0-P3, pointerului stivei SP și registrului SBUF;

    indicatorul de stivă ia valoarea egală cu 07H;

    dezactivează toate sursele de întrerupere, timer-counter și seriale

    selectează BANK 0 RAM, pregătește porturile P0-RZ pentru primirea datelor și determinarea

partajează pinii ALE și PME ca intrări pentru ceasul extern;

      în registrele de funcții speciale PCON, IP și IE, biții rezervați iau valori aleatorii, iar toți ceilalți biți sunt resetati la zero;

      registrul SBUF este setat la valori aleatorii.

      setează zăvoarele porturilor P0-PZ la „1”.

Stările registrelor microcontrolerului după resetare sunt prezentate în Tabelul 3.5.

Tabelul 3.5.

informație

Incert

0ХХХ0000V pentru k-MOS 0XXXXXXXB pentru n-MOS

Pinul RST are și o funcție alternativă. Alimentarea de rezervă este furnizată prin intermediul acestuia pentru a menține conținutul RAM al microcontrolerului neschimbat atunci când cel principal este îndepărtat.

concluzii BQ1, BQ2 sunt destinate conectării unui rezonator de cuarț care determină frecvența de ceas a MK.

Concluzie EA` (E externă A rochie extern abordare) - conceput pentru a activa modul de citire a codurilor de control din memoria externă a programului atunci când la acest pin este aplicat un nivel scăzut activ. Ieșirea are un scop alternativ (funcție). Este alimentat cu tensiune de programare de la RPOM în modul de programare.

Concluzie PME (P program M emoție E nabil permisiune memorie programe) - este conceput pentru a controla ciclul de citire din memoria programului și este activat automat de către MK în fiecare ciclu al mașinii.

Concluzie ALE (A rochie L lungimea E nabil permisiune Junior adrese) strobozește ieșirea părții de ordin inferioară a adresei prin portul P0. Ieșirea este, de asemenea, utilizată la programarea RPOM, în timp ce îi este furnizat un impuls stroboscopic pentru procesul de programare.

MK conține patru grupuri de porturi: P0, P1, P2 și P3. Aceștia sunt cei 40 de pini rămași ai microcontrolerului. Aceste porturi pot servi pentru intrarea și ieșirea bit-cu-bit de informații, dar în plus, fiecare dintre ele are propria sa specializare. O diagramă funcțională generalizată a portului este prezentată în Fig. 3.3. Portul conține comutatoare de ieșire FET conectate la pin, un comutator de funcție, un dispozitiv de blocare a flip-flop D și logica de control. O unitate sau zero pot fi scrise pe zăvorul de pe magistrala internă a MK. Aceste informații sunt trimise prin comutatorul de funcție către comutatoarele de ieșire și ieșirea MK. Într-o stare, ambele tranzistoare N și N1 sunt închise, dar N2 este deschis. În starea zero N se deschide-

Xia, iar N2 se închide. În momentul în care un port îndeplinește o funcție alternativă pentru care este specializat, starea de blocare a ieșirii este ștearsă. Microcontrolerul poate citi separat starea latch-ului portului și starea ieșirii acestuia, stabilite de un semnal extern. În acest scop, asamblatorul MK conține comenzi speciale care activează liniile corespunzătoare. Pentru a citi starea pinului în zăvorul portului corespunzător,

fi preînregistrat

Din interior

Încuietoare de control

Comutator de funcții

Vcc

Sfârșit de săptămână

unitate. Când este activată linia „read latch”, apare ieșirea celulei „ȘI” la care este conectată această linie.

anvelopele ei MK D Q

Scrieți în blocarea C Q

Citiți zăvorul

Pin port

Starea de blocare este transmisă magistralei interne a MC atunci când este activată

„Ieșire de citire” - starea pinului extern al portului.

Port P0 – port bidirecțional universal

I/O Dincolo de acest port

funcţia de organizare a magistralelor de adrese externe şi

Orez. 3.3. Schema funcțională a portului microcontrolerului

date pentru extinderea memoriei de program și a memoriei de date

microcontroler. Când se accesează memoria externă a programului sau se execută o comandă pentru a accesa memoria externă de date, partea de ordin inferioară a adresei (A0...A7) este setată la pinii portului, care este înălțată la pinul ALE. Apoi, la scrierea datelor în memorie, informațiile înregistrate din magistrala internă a MK sunt trimise la pinii portului P0. În operațiunile de citire, dimpotrivă, informațiile de la pinii portului sunt trimise către magistrala internă. O caracteristică a portului P0 este absența unui tranzistor „pull-up” N2, care oferă putere la ieșire. Când scrieți în blocul portului unității, acesta este pur și simplu transferat la o stare de impedanță ridicată, care este necesară pentru funcționarea normală a magistralei de date. Dacă este necesară alimentarea oricăror dispozitive externe prin ieșire, trebuie furnizate rezistențe externe de la circuitele de alimentare la ieșirea portului.

Port P1 – port I/O bidirecțional universal fără funcții alternative.

Port P2 – un port I/O bidirecțional universal, care, ca funcție alternativă, emite partea superioară a adresei (A8...A15) la accesarea memoriei externe.

Port P3 – un port I/O bidirecțional universal, fiecare bit prevede implementarea diferitelor funcții alternative. În acest caz, funcțiile alternative sunt implementate numai dacă sunt scrise în zăvorul pinii portului; în caz contrar, execuția funcțiilor alternative este blocată. Să le listăm separat pentru fiecare bit:

P3.0 RxD (R ead e X intern D ate, read external data) – intrarea transceiver-ului serial încorporat.

P3.1 TxD (T da e X intern D ate, transmite date externe) – ieșirea transceiver-ului serial încorporat.

P3.2 INT0` (INT eroare, întrerupere) – intrare de întrerupere externă 0.

P3.3 INT1` – intrarea de întrerupere externă 1.

P3.4 С/T0 – zero intrare temporizator/contor încorporată.

P3.5 C/T1 – intrarea primului temporizator/contor încorporat.

P3.6 WR` (W rite, write) – ieșire pentru controlul ciclului de scriere în memoria de date.

P3.7 RD` (R ead, read) – ieșirea de control a ciclului de citire din memoria de date.

Pinii portului P1, P2 și P3 sunt capabili să scoată un curent de aproximativ 0,2 mA pe unitate și să primească un curent de 3 mA la zero; pinii portului P0 sunt mai puternici și sunt capabili să furnizeze un curent de aproximativ 0,8 mA într-o unitate și primind un curent de 5 mA la zero. Informații scurte despre scopul pinii microcontrolerului sunt date în Tabelul 3.6.

Tabelul 3.6.

Desemnare

Scopul ieșirii

Port bidirecțional pe 8 biți P1. Intrarea adresei A0-A7 la verificarea memoriei interne (RPM)

intra in iesire

Semnal de resetare generală. Putere de rezervă RAM de ieșire de la o sursă externă (pentru 1816)

Port P3 bidirecțional pe 8 biți cu funcții suplimentare

intra in iesire

Date seriale receptorului - RxD

Transmițător de date seriale - 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 semnal stroboscopic la scrierea în memoria de date externă: - WR`

Ieșire semnal stroboscopic la citirea din memoria de date externă – RD`

Cabluri pentru conectarea unui rezonator de cuarț.

ieșire din intrare

Concluzie generală

Port bidirecțional pe 8 biți P2. Ieșire adresa A8-A15 în modul memorie externă. În modul de verificare ROM intern, pinii P2.0 - P2.6 sunt utilizați ca intrare a adreselor A8-A14. Pin P2.7 - permisiunea de citire a ROM-ului.

intra in iesire

Rezoluția memoriei programului

Semnal de ieșire de activare a fixării adresei. La programarea semnalului RPOM: PROG

intra in iesire

Blocarea lucrărilor cu memoria internă. La programarea RPOM, este dat semnalul UPR

intra in iesire

Port bidirecțional pe 8 biți P0. Adresă/bus de date pentru lucrul cu memorie externă. Ieșire de date D7-D0 în modul de testare ROM intern (RPM).

intra in iesire

Putere de ieșire de la sursa de tensiune +5V

Arhitectura microcontrollerului

Înțelegerea arhitecturii microcontrolerelor este esențială atunci când învățați limbaje de programare de asamblare. Structura asamblatorului, formatul instrucțiunilor acestuia, adresarea operanzilor etc. sunt complet determinate de arhitectură. Scopul studierii arhitecturii este:

· identificarea setului de registre disponibile pentru programare, funcționalitatea și structura acestora;

· înțelegerea organizării RAM și a ordinii de utilizare a acesteia;

· familiarizarea cu tipurile de date;

· studierea formatului comenzilor mașinii;

· clarificarea organizării gestionării întreruperilor.

Arhitectura familiei MCS-51 este determinată în mare măsură de scopul său - construcția de dispozitive digitale compacte și ieftine. Toate funcțiile MK sunt implementate folosind un singur microcircuit. Familia MCS-51 include o gamă întreagă de microcircuite de la cele mai simple microcontrolere până 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 din această familie funcționează cu același sistem de comandă, cele mai multe dintre ele sunt implementate în aceleași pachete cu același pinout (numerotare pin pentru pachet). Acest lucru vă permite să utilizați microcircuite de la diferiți producători (cum ar fi Intel, Dallas, Atmel, Philips etc.) pentru dispozitivul dezvoltat fără a modifica schema circuitului dispozitivului și programului.

MCS-51 se bazează pe arhitectura Harvard, unde spațiile de adrese ale memoriei de programe și de date sunt separate.

Schema bloc a controlerului este prezentată în Fig. 2.3 și constă din următoarele unități funcționale principale: unitate de control, unitate aritmetic-logică, unitate cronometru/contor, interfață serială și întreruperi, contor de programe (contor de programe), memorie de date și program memorie.

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). Sistemul de comandă al tuturor controlerelor din 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(Timing and Control) este conceput pentru a genera semnale de sincronizare și control care asigură coordonarea funcționării comune a unităților principale de calculator în toate modurile permise de funcționare a acestuia. Unitatea de control include:


  • dispozitiv pentru formarea intervalelor de timp,
  • circuit combinat intrare-ieșire,
  • registrul de comenzi
  • decodor de comenzi.

Intrare și ieșire semnalele unitatii de control si sincronizare:

1 PSEN– rezoluția memoriei programului;

2 ALE– semnal de ieșire a permisului de fixare a adresei;

3 PROG– semnal de programare;

4 E.A.– blocarea lucrărilor cu memoria internă;

5 VPP– tensiune de programare;

6 RST– semnal general de resetare.

Dispozitivul de sincronizare este necesar pentru sincronizarea secvenței stărilor CPU care formează ciclul mașinii, precum și pentru funcționarea corectă a tuturor zăvoarelor interne și a bufferelor de ieșire ale porturilor. Ciclul mașinii constă din șase stări consecutive (stări) de la S1 la S6, fiecare dintre acestea, la rândul său, împărțită în două faze:

faza 1 (Faza 1 - P1) și faza 2 (Faza 2 - P2). Astfel, un ciclu de mașină poate fi definit ca o secvență de intervale de timp S1P1, S1P2, S2P1,...,S6P2. Durata fazei este egală cu perioada impulsurilor de ceas, astfel încât ciclul mașinii durează 12 perioade de ceas.

Numărul de cicluri ale mașinii determină durata instrucțiunilor. Aproape toate instrucțiunile sunt executate în unul sau două cicluri de mașină, cu excepția instrucțiunilor de înmulțire și împărțire, care necesită patru cicluri de mașină pentru a fi executate. Logica I/O este concepută pentru a recepționa și scoate semnale care asigură schimbul de informații cu dispozitivele 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 unui decodor de comandă și al logicii de control al computerului, este convertit în microprogram pentru executarea comenzii.

Figura 2.3. Schema bloc a microcontrolerului Intel 8051 cu un singur cip

(familia MCS-51)

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

  • registre de stocare temporară - TMP1 și TMP2,
  • constante ROM,
  • sumator,
  • registru suplimentar - registrul B,
  • baterie - ACC,
  • registru de cuvinte de stare program (registru de steag) - PSW.

Registrele de stocare temporară TMP1, TMP2- registre de opt biți concepute să primească și să stocheze operanzi în timp ce se efectuează operații asupra acestora. Aceste registre nu sunt accesibile programatic.

ROM constant asigură generarea unui cod de corecție pentru reprezentarea zecimală binară a datelor, a unui cod masca pentru operațiuni pe biți și a unui cod constant.

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

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 tratat ca un registru suplimentar în timp real.

Baterie- un registru de opt biți destinat să primească și să stocheze rezultatul obținut la efectuarea operațiilor aritmetico-logice sau a operațiilor de deplasare.

Registru de stare program PSW (Cuvânt de stare program) conceput pentru a stoca cuvântul de stare al comenzilor executate. Când sunt executate multe instrucțiuni în ALU, sunt generate un număr de atribute de operare (steaguri), care sunt înregistrate în registrul PSW (program status word). În tabel 1 oferă o listă de steaguri PSW, dă numele lor simbolice și descrie condițiile pentru formarea lor.

Bloc de întrerupere și interfață serială - UART (Receptor/Transmițător Universal Asynchronous) conceput pentru a organiza intrarea și ieșirea fluxurilor de informații secvențiale și pentru a organiza un sistem de întrerupere a programului.

Prin definiție, o întrerupere înseamnă oprirea temporară a procesului principal de calcul pentru a efectua o acțiune planificată sau neprogramată cauzată de funcționarea hardware sau software.

Aceste acțiuni pot fi de natură de serviciu, pot fi solicitări din partea programului utilizator de a efectua întreținere sau pot fi un răspuns la situații de urgență.

Starea sistemului de întrerupere este interogata la sfârșitul fiecărui ciclu de mașină în faza S5P2, cu excepția instrucțiunilor RETI și a oricăror instrucțiuni care accesează registrele IE și IP. Din momentul în care cererea de întrerupere este capturată și până când întreruperea este deservită, durează de la 38 la 86 de perioade de frecvență fOSC, în funcție de faza solicitării și de numărul de cicluri de mașină ale instrucțiunii în timpul cărora cererea a fost executată.

La implementarea unei întreruperi în hardware, se execută comanda LCALL addr16, care asigură că starea curentă a contorului programului este stocată pe stivă (stochează adresa de retur) și trecerea la adresa de start addr16 a procedurii de service corespunzătoare. Fiecare sursă de cerere de întrerupere are propriul său asociat

adresa de pornire (vector de întrerupere):

Întreruperea externă INT0.

Timer/contor întrerupere TC0.

Întreruperea externă INT1.

TC1 temporizator/contor întrerupere.

Î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ă este acordată operațiunilor cu biți și transferului de control în funcție de valoarea acestora. Instrucțiunile care efectuează astfel de operațiuni formează un grup mare și, împreună cu hardware-ul corespunzător, formează așa-numitul „procesor boolean” ca parte a arhitecturii MCS-51.

Sistemul de instrucțiuni oferă programatorului capacitatea de a utiliza majoritatea operațiunilor cu o gamă completă de metode de adresare și resurse hardware disponibile de software.

2.7.1. Metode de adresare

Fiecare instrucțiune îi spune procesorului operația de efectuat și cum să-și acceseze operanzii. Codul de comandă are mai multe câmpuri care au o funcționalitate specifică. Cele mai importante câmpuri ale oricărei comenzi sunt codul de operație (OPC), 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 instrucțiuni.

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

Metodele de adresare sunt un set de mecanisme de accesare a operanzilor. Unele sunt simple, rezultând un format de instrucțiuni compact și acces rapid la operanzi, 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ă;

introducerea și execuția necesită mult timp. Setul de metode de adresare din fiecare set de instrucțiuni este o combinație de compromis a mecanismelor de adresare cunoscute, selectate de proiectanții de arhitectură pe baza setului de probleme rezolvate.

Următoarele sunt principalele metode de adresare utilizate în familia de sisteme de comandă MCS-51.

Adresarea implicită. Comanda nu conține instrucțiuni explicite despre adresa operandului implicat în operație sau adresa la care este plasat rezultatul operației, dar această adresă este implicită. Comenzile se adresează cel mai adesea implicit acumulatorului ca destinație pentru rezultatul operației. 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 instrucțiune specificată ocupă un octet în memorie, în timp ce adresa doar acumulatorului (zona 8Eh SFR) conține un octet.

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

Nu adresa operandului este stocată, ci operandul în sine. Adresarea directă este indicată prin caracterul special # înaintea 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ă, adresa 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 are adresare directă, iar acumulatorul are adresare implicită. În funcție de locația operandului adresat, adresarea directă este împărțită în registru direct și absolută.

Adresarea directă a registrului. Câmpul de adresă de comandă specifică adresa directă de registru a băncii de registru 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 comenzii, registrul adresat este desemnat Rn, unde n=0...7. Toate câmpurile de comandă se încadrează într-un octet. Acest tip de adresare se numește adresare scurtă. De exemplu, MOV R4,R1.

Adresare absolută directă vă permite să accesați orice celulă DSEG și zonă SFR. Adresa directă în acest caz ocupă un octet, iar comanda ocupă 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 (celula 80h a zonei SFR). Dacă ambii operanzi au adresare absolută directă, atunci instrucțiunea devine de trei octeți (De exemplu, MOV 80h,15h).

Adresare indirectă. Câmpul de adresă indică adresa celulei de memorie în care se află adresa directă a operandului. În sistemul de comandă, adresarea indirectă este indicată prin simbolul special @. Proprietate

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

Adresarea relativă. În adresarea relativă, adresa directă se formează prin adăugarea adresei de bază la câmpul de adresă al comenzii. Adresa de bază este conținutul contorului programului, iar câmpul pentru adresa de instrucțiune 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. Intervalul prezentării sale este (-128...+127). La determinarea numărului rel, trebuie luat în considerare faptul că contorul programului indică următoarea instrucțiune de executat. Adresarea relativă este utilizată pe scară largă în instrucțiunile de transfer de control, ceea ce permite crearea de module de program relocabile. Comenzile de transfer de control cu ​​adresare relativă vă permit să organizați ramificarea 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 de 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 tip 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 de registru de bază din familia MCS-51 este realizată de registrul indicator de date DPTR sau de contorul de programe PC. Acest tip de adresare este deosebit de convenabil atunci când procesează tabele și matrice de date. În instrucțiunile MOVC A,@A+DPTR și MOVC A,@A+PC, adresa directă de 16 biți este formată ca suma conținutului registrelor DPTR și A sau PC și A.

Adresarea paginii. Când se utilizează adresarea paginilor, memoria este împărțită într-un număr de pagini de lungime egală. Adresarea paginilor este efectuată printr-un registru de pagină separat, iar adresarea celulelor de memorie din cadrul unei pagini este efectuată de adresa conținută în comandă. Adresa directă se formează prin concatenarea (atașarea) adresei paginilor și a adresei celulei de memorie din cadrul paginii. În instrucțiunea MOVX A,@Ri, funcția de registru de pagină este realizată de portul P2 (octetul de adresă mare), iar conținutul registrului Ri (octetul de adresă scăzut) specifică adresa din pagină. În acest caz, memoria este împărțită în 256 de pagini cu 256 de celule în fiecare dintre ele.

Adresarea stivă folosit în comenzile fără adresă și este o combinație de metode de adresare auto-incrementale și auto-decrementale, care funcționează pe principiul LIFO (Last Input - First Output) - „last in, first out”. Stiva este situată în DSEG și crește spre adrese în creștere. Adresa vârfului stivei este conținută în pointerul de stivă SP. Când un octet este scris în stivă, conținutul SP este mai întâi incrementat și apoi se face o scriere la adresa respectivă. Când citește un octet din stivă, mai întâi citește de la adresa indicată de SP și apoi decrește SP. Atunci când utilizați o stivă, este necesar să țineți cont de faptul că adâncimea stivei (numărul maxim de celule de memorie ocupate de stivă) nu este controlată de hardware. Dacă stiva crește excesiv, celulele de memorie care nu sunt destinate acestuia pot fi ocupate, ducând la pierderea informațiilor din ele. Stiva hardware este utilizată pentru a stoca adresa de retur atunci când se întreține o întrerupere.

2.7.2. Sistemul de comandă al familiei MCS-51

Sistemul de comandă este prezentat în tabelele A2.1...A2.6 din Anexa 2. Tabelele indică numele comenzii, mnemonicii acesteia, codul de operare binar, influența comenzii executate 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 comandă. 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ă virgule dacă asamblatorul 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 cu biți și operații de transfer de control.

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

deține comenzile MOV (transfer de date între DSEG și RSEG), MOVC (între CSEG și A), MOVX (între XSEG și A), comenzile de acces la stiva PUSH și POP, precum și două comenzi de schimb XCH și XCHD. Toate instrucțiunile de transfer de date a căror destinație este acumulatorul stabilesc indicatorul de paritate P al acumulatorului, iar instrucțiunile de adresare directă a căror destinație este registrul PSW schimbă toate indicatoarele. 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), imediat (#data, #data16). Al doilea operand al instrucțiunii este sursa, primul este destinația. Există trei metode de adresare (cu excepția directe) pentru a indica receptorul și toate cele patru pentru a indica sursa. Instrucțiunea MOV direct, direct de trei octeți permite transferul între oricare două locații de memorie (DSEG și SFR), inclusiv RSEG. Sunt furnizate formate speciale de doi și un octet pentru schimb cu RSEG:

Comanda specială MOV DPTR,#data16 vă permite să încărcați un pointer DPTR pe 16 biți cu valoarea 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 acumulatorul 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 pentru rezultat. Comanda vă permite să recodați rapid tabele.

Memoria externă este accesată utilizând comanda MOVX. Schimbul se realizează octet cu octet între baterie și XSEG extern. O celulă XSEG poate fi adresată în două moduri: indirect prin pointerul DPTR pe 16 biți și pagina indirect prin pointerul Ri pe 8 biți, i=0,1. În acest din urmă caz, registrul de pagină este registrul P2.

Comenzile PUSH și POP fără adresă asigură transferul de date

între DSEG, RSEG și SFR.

Instrucțiunea de schimb XCH oferă schimb bidirecțional de octeți, iar instrucțiunea XCHD oferă tetrade de ordin scăzut de operanzi de octeți.

Grup de instrucțiuni de operații aritmetice(tabelul A2.2) co-

deține instrucțiunile pentru adunarea ADD, adunarea ADDC, scăderea împrumutului SUBB, creșterea și decrementarea cu un INC și DEC, corecția zecimală a adunării zecimale codificate binar (BCD), înmulțirea MUL și diviziunea DIV. Operațiile sunt efectuate pe numere întregi fără semn. Pe lângă operațiile de adăugare și scădere, primul operand și destinația rezultatului este acumulatorul. Pentru determinarea celui de-al doilea operand se utilizează registrul direct, adresarea absolută directă, imediată și indirectă. 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ția INC se aplică conținutului registrului pointerului DPTR pe 16 biți.

Operațiile de înmulțire a întregului fără semn și de împărțire fără semn implică acumulatorul și registrul B. Înmulțirea înmulțește valoarea de 8 biți a lui A cu valoarea de 8 biți a lui B și scrie rezultatul de 16 biți în perechea BA. În acest caz, registrul B stochează cea mai înaltă parte a produsului. Indicatorul OV este setat dacă produsul este mai mare de 255. Când se împarte valoarea de 8 biți A la valoarea de 8 biți B, coeficientul este scris în A, iar restul în B. Când se încearcă împărțirea la 0, depășirea steag OV este setat.

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

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

Servește fie acumulatorul A, fie o celulă de memorie direct adresabilă. 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 - curățare, CPL - inversare, precum și RL, RLC, RR și RRC - operații ciclice și extinse de schimbare la dreapta și la stânga. Aceasta include, de asemenea, operația de schimb de tetrade în acumulatorul SWAP, care poate fi interpretată ca o deplasare ciclică a unui octet cu patru biți.

Grup de operare pe biți(tabelul A2.6) conține co-

Comenzi SETB – setați un bit la 1, CLR – resetați un bit la 0, CPL – inversați un bit, ANL și ORL – ȘI logic și OR logic al conținutului steagului C și al bitului adresat direct, MOV – transferați un bit .

ÎN În operațiunile cu biți, indicatorul C acționează ca un acumulator boolean. Conținutul steagului C sau bitul direct adresabil al zonei BSEG sunt utilizați ca operanzi. Operațiile ANL și ORL pot folosi conținutul bitului (bit) adresat direct sau inversul conținutului (/bit).

ÎN Acest grup include, de asemenea, comenzi de sărituri condiționate cu relativă 8-bit offset rel. Un salt condiționat poate fi efectuat fie când bitul este setat (comandă JB), fie când bitul este șters (comandă JNB). De remarcat este comanda JBC, care, atunci când bitul este setat, implementează o ramură și în același timp resetează bitul la 0.

Grup de comenzi de transfer de control(tabelele A2.4 și A2.5) co-

deține instrucțiunile de salt necondiționat AJMP, LJMP, SJMP, JMP, salt condiționat JZ, JNZ, CJNE, apel ACALL, LCALL, return RET, RETI și modificare cu salt condiționat DJNZ. O comandă NOP goală este de asemenea inclusă aici.

ÎN Adresarea relativă este utilizată pe scară largă în comenzile de transfer de control, permițând crearea de module de program relocabile. Adresa relativă este Offset-ul de 8 biți rel este un octet cu semn care oferă un salt la (–128... +127) octeți în raport cu poziția curentă a computerului. Pentru a vă deplasa în orice alt punct din spațiul de adrese de 64 KB, poate fi utilizată fie o adresă directă16, fie o adresă indirectă @A+DPTR. În acest din urmă caz, conținutul lui A este interpretat ca un întreg fără semn. Opțiunea scurtă de adresare directă addr11 din pagina curentă de 2 KB este introdusă pentru compatibilitate cu familia MCS-48.

Toate aceste tipuri de adresare sunt utilizate în instrucțiunile de salt. Comenzile de apel utilizează numai metode de adresare direct addr16 și intrapage addr11. Toate instrucțiunile condiționate folosesc numai adresare relativă.

Când microcontrolerul recunoaște o solicitare de întrerupere, emite comanda LCALL addr16, care stochează automat adresa de retur pe stivă. Informațiile despre starea programului (conținutul registrului PSW) nu sunt salvate automat. în care



Ți-a plăcut articolul? Împărtășește-l