Cercetare privind dezvoltarea și aplicarea dispozitivelor electronice de putere și a tehnologiei de conversie a frecvențelor

Jun 09, 2021

Lăsaţi un mesaj

Și ARM (sau chiar x86) MCU /CPU cu structura von Neumann, spațiul său de adrese este unificat și continuu, înregistrările de memorie de cod / RAM / CPU și chiar memoria video a PC-ului sunt toate abordate uniform. Doar că memoria cu funcții diferite ocupă diferite blocuri de adrese și își fac propriile lucruri.


Bine, să ne întoarcem la MCS-51.


Pentru memoria programului, există două părți: on-chip și off-chip. Și indiferent de memoria programului on-chip sau de memoria programului off-chip, adresele lor sunt partajate. Dacă există 4k ROM on-chip, adresa este 0x0000-0x0FFF, iar 0x1000-0xFFFF este spațiul de adrese al ROM-ului extern. Dacă se utilizează partea 0x0000-0x0FFF a ROM-ului extern, aceasta depinde de valoarea de nivel a pinului EA al microcontrolerului. Când EA=1, se utilizează această parte a ROM-ului intern, iar această parte a ROM-ului extern este irosită și nu utilizată; când EA=0, se utilizează această parte a ROM-ului extern, iar ROM-ul intern este irosit și nu utilizat. Pentru a citi date din segmentul CODE, utilizați instrucțiunea MOVC asamblată. Microcomputerul cu un singur cip va determina automat din ce memorie să preia date în conformitate cu instrucțiunea MOVC, starea EA și valoarea adresei de citit


Pentru memoria de date, este împărțită în două părți: memorie de date internă (IDATA / RAM) și memorie de date externe (XDATA), dar aceste două amintiri nu partajează spațiul de adrese, ar fi memoria de cod. Cipul general 8051, memoria RAM internă este de numai 128B, de la 0x00-0x7F, iar din 0x80-0xFF este zona SFR (registrele de lucru cpu și diverse registre periferice sunt aici). Pentru 8052, memoria RAM internă are 256B, deci 0x80-0xFF este memoria RAM ridicată de 128B în uz. Dar nu este această parte dedicată SFR? Este dedicat SFR, dar rețineți că accesul SFR poate utiliza doar "adresare directă" (implementată folosind instrucțiuni specifice de asamblare), diferența este aici. Numai adresa accesată prin adresare directă este SFR, altfel este RAM obișnuită. În ceea ce privește memoria RAM extinsă (XDATA), adresa este, de asemenea, de la 0x0000-0xFFFF, iar 0x0000 aici este diferită de 0x00 RAM-ului intern și sunt complet independente de două spații. Metodele lor de acces sunt, de asemenea, diferite. MCS-51 utilizează instrucțiuni MOVX pentru a citi și scrie zona XDATA. În plus, accesul la zona XDATA necesită asistența registrului DPTR. Deoarece numai DPTR poate păstra următoarea adresă XDATA pe 16 biți.


Deci, MCS-51 are cea mai rapidă viteză de citire și scriere a zonei IDATA și cele mai multe metode de acces. Viteza de accesare a zonei XDATA este relativ lentă. Stiva de MCS-51 trebuie dezvoltată mai întâi în zona IDATA, iar stiva deschisă în zona IDATA poate fi controlată de registrul indicatorului de stivă SP. Dacă stiva este într-adevăr prea mare și poate fi deschisă numai în zona XDATA, atunci registrul SP al procesorului va fi dificil de împrumutat și putem construi doar structura stivei și indicatorul stivei de unul singur. Deoarece spațiul de program extern și spațiu de date sunt atât 0-64K (0x0000-0xFFFF), atunci pot salva de fapt, probleme / programe convenabil rescrie și alte motive, codul extern și datele pot partaja o memorie reinscriptibilă (cum ar fi diverse Ce RAM pot fi șterse și inscriptibile). De exemplu, sistemul are o memorie externă de 64K. 32K mai mici este utilizat pentru a salva codul, și microcontroler poate citi și rula programul în acest 32K, și mai mare 32K este folosit ca loc de stocare pentru datele utilizatorului. Dar, în acest moment, codul inițial complet independent și spațiul de date, deoarece o memorie este partajată pe cipul hardware, acestea se pot afecta reciproc, iar programul poate rescrie programul de la sine. De exemplu, 0x0020 este o instrucțiune și rescriu 0x0020 prin MOVX, apoi folosesc MOVC pentru a citi 0x0020, iar datele sunt diferite de cele originale.


Esența confuziei este că spațiul de stocare al microcalculatorului cu un singur cip este un concept logic, care este două spații separate care sunt împărțite artificial. Cipul MEMORY de pe circuitul hardware este un concept în realitate. Spațiul de stocare al microcalculatorului cu un singur cip va fi implementat în cele din urmă pe cip la nivel de circuit, astfel încât spațiul de stocare logic se va suprapune datorită conexiunii circuitului fizic. Dar la nivel logic, aceste două spații sunt încă complet independente.


Atașament: Definiția diferitelor nume de spații de stocare:


Date: se referă fix la cele 128 de RAM-uri ale 0x00-0x7f din față, care pot fi citite și scrise direct de un registru, cel mai rapid și cel mai mic cod generat.


Idata: se referă fix la cele 256 de RAM-uri ale 0x00-0xff din față, dintre care primele 128 sunt exact aceleași cu cele 128 de date, doar din cauza diferitelor metode de acces. idata este accesat utilizând un indicator similar cu C. Instrucțiunea din ansamblu este: mov ACC,@Rx. (supliment nu este important: idata în c are un efect bun de acces pointer) xdata: RAM extins extern, se referă în general la spațiul extern 0x0000-0xffff, care este accesat de DPTR. pdata: cei 256 octeți mai mici ai memoriei RAM extinse externe, citiți și scrieți atunci când adresa apare pe A0-A7, utilizați movx ACC, @Rx pentru a citi și a scrie. Acest lucru este destul de special, iar C51 pare să aibă acest bug, se recomandă să utilizați mai puțin. Dar există și avantajele lui. Utilizarea specifică este o problemă intermediară, nu știu să o folosesc, așa că nu o voi menționa aici.