Sunteți pe pagina 1din 32

1.

MICROCONTROLERE COMPATIBILE INTEL 8051

1.1. Caracteristici generale

Variante

- Intel 8051 clasic


- 8051 „extins”: Philips 80C51MX, Dallas 390 etc,
- Intel / Atmel WM 251

„SoC” – Sistem pe un singur cip

Oct 18, 2022 Microcontrolere 1


Schema bloc

- CPU
- Oscilator cu cuarţ
- 4 kB ROM
- 128 B RAM
- 4 porturi I/O pe câte 1 B
- 1 port serial
- 2 numărătoare (timer) pe 16 b
- Controler de întreruperi

Oct 18, 2022 Microcontrolere 2


1.2. Organizarea memoriei

Memoria de program şi date sunt fizic separate („Harvard”)

a) Memoria de program
- Este de tip ROM sau EPROM
- Harta memoriei are 64 kB
- Pe cip se află, de regulă, 4 kB, 8 kB sau 16kB. Restul memoriei este externă
- Există şi variante cu toată memoria de program externă
- Validarea cu PSEN (Program Store Enable)
- După RESET, (PC) ← 0000H
- Locaţii de memorie rezervate :
Iniţializare programe: 0000H ÷ 0002H
vector de întrerupere tip 0: 0003H ÷ 000AH
timer 0: 000BH
vector de întrerupere tip 1: 0013H ÷ 001AH
timer 1: 001BH
Oct 18, 2022 Microcontrolere 3
b) Memoria de date
- Memoria externă are 64 kB
- Memoria externă e accesată cu magistrala de date şi adrese prin intermediul
Port 0 şi eventual Port 2
- Validarea se face cu RD, WR
- Magistrala de adrese poate avea numai 1 B sau 2 B

- Memoria internă este accesată cu adrese pe 1B


- Sunt 3 blocuri de câte 128 B:
“Lower 128”,
“Upper 128”,
“SFR Space”.

Oct 18, 2022 Microcontrolere 4


- “Upper 128” şi SFR Space sunt fizic separate şi adresate cu moduri de adresare diferite;
-“Upper 128” este adresabilă indirect;
- SFR este adresabilă direct;
- “Lower 128”:
4 bancuri de câte 8 registre R0 ÷ R7;
16 B – un bloc de memorie adresabil pe bit;
restul – memorie de date;
este adresabilă direct şi indirect.
Oct 18, 2022 Microcontrolere 5
1.3. Registre
- 32 de registre fizice
- 8 registre logice – setul de lucru: R0, R1,…, R7
- SFR – setul de registre speciale:
Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7 Byte 8
F8 FF
F0 B F7
E8 EF
E0 ACC E7
D8 DF
D0 PSW D7
C8 T2CON RCAP2L RCAP2H TL2 TH2 CF
C0 C7
B8 IP BF
B0 P3 B7
A8 IE AF
A0 P2 A7
98 SCON SBUF 9F
90 P1 97
88 TCON TMOD TL0 TL1 TH0 TH1 8F
80 P0 SP DPL DPH PCON 87

Adresabile şi pe bit
Disponibile numai pentru 8052

Oct 18, 2022 Microcontrolere 6


ACC Acumulator
B Registrul extensie acumulator
PSW „Program Status Word”
SP Indicator de stivă
DPTR Pointer date
DPL
DPH

Oct 18, 2022 Microcontrolere 7


P0 Port 0
P1 Port 1
P2 Port 2
P3 Port 3
IP Control prioritati întreruperi
IE Control validare întreruperi
TMOD Control mod timer / counter
TCON Control timer / counter
T2CON Control 2 timer / counter
TH0 timer / counter 0 high byte
TL0 \timer / counter 0 low byte
TH1 timer / counter 1 high byte
TL1 timer / counter 1 low byte
TH2 timer / counter 2 high byte
TL2 timer / counter 2 low byte
RCAP2H timer / counter 2 registru captura high byte
RCAP2L timer / counter 2 registru captura high byte
SCON Control serial
SBUF Buffer date seriale
PCON Control alimentare

Oct 18, 2022 Microcontrolere 8


PSW „Program Status Word”:

CY transport
AC transport auxiliar
F0 disponibil utilizator
RS1 selecţie set de lucru registre
RS0 selecţie set de lucru registre
OV depăşire
- definibil de către utilizator
P paritate (în acumulator)

CY AC F0 RS1 RS0 OV - P

Oct 18, 2022 Microcontrolere 9


1.4. Moduri de adresare

Adresare directă:
- Adresa completă are 8 b în formatul instrucţiunii curente.
- Se poate utiliza pentru memoria de date internă („Lower 128 ”).
- Se poate utiliza pentru SFR.

Adresare indirectă:
- Poate fi pe 8 b sau pe 16 b.
- Se pot accesa 256 B de memorie internă de date („Lower 128” şi „Upper 128”)
sau 64 kB de memorie externă.
- Pentru adresele pe 8 b se pot folosi R0, R1 sau SP.
- Pentru adresele pe 16 b se poate folosi doar DPTR – pentru memoria externă.

Adresare implicită (în registru):


- Datele sunt accesate în unul dintre cel 8 registre din setul de lucru R0,…, R7.
- Selecţia registrului vizat se face cu 3 biţi în chiar codul instrucţiunii.
- Anumite instrucţiuni se referă la anumite registre (acumulator, pointer de date
etc.) Selecţia registrului se face în chiar codul instrucţiunii.

Oct 18, 2022 Microcontrolere 10


Adresare imediată:
- O constantă care se află în formatul instrucţiunii curente, imediat după cod.
- Constanta poate fi pe 8 b sau 16 b.

Adresare indexată:
- Se foloseşte doar pentru memoria de program!
- Pentru tabele de translatare cu DPTR sau PC ca bază şi ACC intrare în tabelă.
- Pentru salturi – ACC conţine deplasamentul.

Adresare relativă:
- Se foloseşte doar pentru memoria de program!
- Aria de memorie pentru salt este de la -128B la + 127B relativ la primul octet
după instrucţiune.

Oct 18, 2022 Microcontrolere 11


1.5. Setul de instrucţiuni

1) Instrucţiuni aritmetice:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
ADD A, s (ACC) ¬ (ACC) + (s) ü ü ü ü
ADDC A, s (ACC) ¬ (ACC) + (s) + (CY) ü ü ü ü
SUBB A, s (ACC) ¬ (ACC) - (s) - (CY) ü ü ü ü
INC A (ACC) ¬ (ACC) + 1
INC s (s) ¬ (s) + 1 ü ü ü
INC DPTR (DPTR) ¬ (DPTR) + 1
DEC A (ACC) ¬ (ACC) - 1
DEC s (s) ¬ (s) - 1 ü ü ü
MUL AB (B) ­ (A) ¬ (B) * (A)
DIV AB (A) ¬ (A) div (B), (B) ¬ (A) mod (B)
DA A Ajustare zecimală

Oct 18, 2022 Microcontrolere 12


2) Instrucţiuni logice:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
ANL A, s (ACC) ¬ (ACC) & (s) ü ü ü ü
ANL s, A (s) ¬ (s) & (ACC) ü
ANL s, #data (s) ¬ (s) & ((PC)+1) ü
ORL A, s (ACC) ¬ (ACC) " (s) ü ü ü ü
ORL s, A (s) ¬ (s) " (ACC) ü
ORL s, #data (s) ¬ (s) " ((PC)+1) ü
XRL A, s (ACC) ¬ (ACC) Å (s) ü ü ü ü
XRL s, A (s) ¬ (s) Å (ACC) ü
XRL s, #data (s) ¬ (s) Å ((PC)+1) ü
CRL A (ACC) ¬ 00H
CPL A (ACC) ¬ not (ACC)
RL A Roteşte ACC stânga cu 1 bit
RLC A Roteşte ACC cu CY stânga cu 1 bit
RR A Roteşte ACC dreapta cu 1 bit
RRC A Roteşte ACC cu CY dreapta 1 bit
SWAP A (ACC)h « (ACC)l

Oct 18, 2022 Microcontrolere 13


3) Transferuri de date:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
MOV A, s (ACC) ¬ (s) ü ü ü ü
MOV s, A (s) ¬ (ACC) ü ü ü
MOV d, s (d) ¬ (s) ü ü ü ü
MOV DPTR, #data16 (DPTR) ¬ ((PC)+2) ­ ((PC)+1) ü
PUSH s (SP) ¬ (SP) + 1, ((SP)) ¬ (s) ü
POP d (d) ¬ ((SP)), (SP) ¬ (SP) - 1 ü
XCH A, s (ACC) « (s) ü ü ü
XCHD A, @Ri (ACC)l « (Ri)l ü

Oct 18, 2022 Microcontrolere 14


Observaţii

- Memoria externă este accesată cu MOVX


- Stiva creşte în sus!
PUSH s ; (SP) ¬ (SP) + 1
; ((SP)) ¬ (s)

POP d ; (d) ¬ ((SP))


; (SP) ¬ (SP) – 1

- Cum accesarea stivei se face de fapt cu adresare indirectă prin (SP),


rezultă că stiva poate ajunge în „Upper 128” (şi, desigur, în “Lower 128”)
şi NU în SFR.

Oct 18, 2022 Microcontrolere 15


4) Transferuri de date cu memoria externă:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
MOVX A, @Ri (ACC) ¬ ((R0)) sau (ACC) ¬ ((R1)) ü
MOVX @Ri, A ((R0)) ¬ (ACC) sau ((R1)) ¬ (ACC) ü
MOVX A, @DPTR (ACC) ¬ ((DPTR)) ü
MOVX @DPTR, A ((DPTR)) ¬ (ACC) ü

Observaţii
- Acumulatorul este folosit întotdeauna.
- Folosirea lui DPTR impune utilizarea tuturor celor 8 biţi ai Port 2 ca magistrală de adrese.

5) Citire din tabele de translatare în memoria de program („lookup tables”):

Moduri de adresare
Sintaxă Semantică Dir. Indexată Reg. Im.
MOVC A, @A+DPTR (ACC) ¬ ((ACC)+(DPTR)) ü
MOVC A, @A+PC (ACC) ¬ ((ACC)+(PC)) ü

Oct 18, 2022 Microcontrolere 16


6) Instrucţiuni pe bit:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
ANL C, bit (CY) ¬ (CY) & bit ü
ANL C, /bit (CY) ¬ (CY) & not bit ü
ORL C, bit (CY) ¬ (CY) " bit ü
ORL C, /bit (CY) ¬ (CY) " not bit ü
MOV C, bit (CY) ¬ bit ü
MOV bit, C bit ¬ (CY) ü
CLR C (CY) ¬ 0 ü
CLR bit bit ¬ 0 ü
SETB C (CY) ¬ 1 ü
SETB bit bit ¬ 1 ü
CPL C (CY) ¬ not (CY) ü
CPL bit bit ¬ not bit ü
JC disp (PC) ¬ (PC)+disp dacă (CY) = 1 ü
JNC disp (PC) ¬ (PC)+disp dacă (CY) = 0 ü
JB bit, disp (PC) ¬ (PC)+disp dacă bit = 1 ü
JNB bit, disp (PC) ¬ (PC)+disp dacă bit = 0 ü
JBC bit, disp (PC) ¬ (PC)+disp dacă bit = 1; bit ¬ 0 ü

Oct 18, 2022 Microcontrolere 17


7) Salturi:

Moduri de adresare
Sintaxă Semantică Dir. Ind. Reg. Im.
JMP adr (PC) ¬ adr ü
JMP @a+DPTR (PC) ¬ ((A)+(DPTR)) ü
CALL adr (SP) ¬ (SP) + 1, ((SP)) ¬ (PC) ü
(PC) ¬ adr
RET (PC) ¬ ((SP)), (SP) ¬ (SP) - 1 ü
RETI (PC) ¬ ((SP)), (SP) ¬ (SP) - 1 ü
NOP
JZ disp (PC) ¬ (PC)+disp dacă (ACC) = 0
JNZ disp (PC) ¬ (PC)+disp dacă (ACC) ¹ 0
DJNZ s, disp (s) ¬ (s) – 1; dacă (s) ¹ 0 ü ü
(PC) ¬ (PC)+disp
CJNE A, s, disp (PC) ¬ (PC)+disp dacă (ACC) ¹ (s) ü ü
CJNE s,#data,disp (PC) ¬ (PC)+disp dacă ü ü
(s) ¹ ((PC)+1)

Oct 18, 2022 Microcontrolere 18


Observaţii

- JMP este un mnemonic general pentru:


SJMP salt cu adresare relativă – format 2B.
LJMP salt cu adresare directă – format 3B.
AJMP salt cu adresare directă cu constantă pe 11b – format 2B.

- Identic pentru CALL.

- Toate salturile condiţionate folosesc adresare relativă.

- DJNZ este ciclu cu contor; s se foloseşte drept contor.

Oct 18, 2022 Microcontrolere 19


Observaţii

- Biţii sunt adresaţi în „Lower 128” şi în SFR.


- CY face parte din PSW.
- Salturile se fac cu adresare relativă –128 la +127 B în memoria de program faţă de poziţia
instrucţiunii curente.

Oct 18, 2022 Microcontrolere 20


1.6. Desfăşurarea în timp a instrucţiunilor

- Un ciclu maşină are 6 stări S1,…, S6.

- Fiecare stare are 2 perioade tact

- Aşadar, fiecare ciclu maşină are 12 perioade de tact

- În general, instrucţiunile durează 1 ciclu maşină.

- Se face „fetch” în S1 şi în S4.

- MOVX necesită 2 cicluri maşină.


În acest caz nu există „fetch” în cadrul celui de-al 2-lea ciclu maşină.

Oct 18, 2022 Microcontrolere 21


1.7. Detalii Memorie Internă – Lower 128

Q1 La ce adresă va fi salvată valoarea fanionului


Carry în urma execuției următoarei instrucțiuni?

MOV 0x3F, C

Q2 Ce adresă va avea registrul R4 din setul 3?

Memoria “Lower 128”

Oct 18, 2022 Microcontrolere 22


1.8 Exemplu tabelă de căutare
Exemplu look-up table cu 2 operanzi (s1 și s2):
l Operația pe care o înlocuiește are doi parametri de intrare (operanzi) și unul de ieșire (rezultat).
l S1: 7 valori posibile, S2: 16 valori posibile.
l Adresarea în tabelă se face concatenând codurile binare ale celor doi operanzi (s1 ↑ s2).

Q: Adresa de început a unei tabele de căutare (look-up table) aflate la finalul memoriei de program a controlerului
8051 este 0xF800.
Primul parametru de intrare (s1) are 16 valori posibile, iar al doiea (s2) are 128.
Care este adresa la care se găsește rezultatul corespunzător codurilor s1 = 0x8 și s2 = 0x7A?

Oct 18, 2022 Microcontrolere 23


1.9 Exemple intrucțiuni

- Care va fi valoarea din acumulator după execuția următoarelor instrucțiuni?

MOV A, #0x28 MOV A, #0x30


SETB C MOV R1, 0x30
ADD A, #0x90 ADD A, R1

- Care este efectul următoarelor instrucțiuni?

ANL A, #0x20 ORL PSW #0x18 MOV A, #23H


SWAP A

MOV A, #0xC1
MOV R1, #40h MOV R1, #5Eh MOV A, #C3H
SETB C INC R1 SETB C
SUBB A, R1 INC @R1 RLC A

Oct 18, 2022 Microcontrolere 24


Pentru un microcontroler tip „8051”:
• Să se descrie formal semantica instrucţiunii: PUSH s
• Ce mod de adresare poate fi folosit pentru operandul s şi unde se află acesta?
• Unde se poate forma stiva?

• Să se descrie formal semantica instrucţiunii: POP d

• Ce mod de adresare poate fi folosit pentru operandul d şi unde se află acesta?


• Unde se poate forma stiva?

• Să se descrie formal semantica instrucţiunii: XRL A, s

• Ce mod de adresare poate fi folosit pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la
punctul precedent?
• Ce reprezintă şi unde se găseşte primul operand (A) ?

Oct 18, 2022 Microcontrolere 25


• Să se descrie formal semantica instrucţiunii: XRL s, A

• Ce mod de adresare poate fi folosit pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la
punctul precedent?
• Ce reprezintă şi unde se găseşte cel de-al doilea operand (A)?

• Să se descrie formal semantica instrucţiunii: DEC s

• Ce mod de adresare poate fi folosit pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la
punctul precedent?

• Să se descrie formal semantica instrucţiunii: INC s

• Ce mod de adresare poate fi folosit pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la
punctul precedent?

Oct 8, 2022 Microcontrolere 26


• Să se descrie formal semantica instrucţiunii: MOV DPTR, #s

• Ce mod de adresare poate fi folosit pentru operandul s?


• În ce zonă de memorie se află operandul s?
• Ce reprezintă şi unde se găseşte primul operand (DPTR) ?

• Să se descrie formal semantica instrucţiunii: ANL s, #data

• Ce moduri de adresare pot fi folosite pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la punctul
precedent?
• Ce reprezintă şi unde se găseşte cel de-al doilea operand (data) ?

Oct 18, 2022 Microcontrolere 27


• Să se descrie formal semantica instrucţiunii: MOVX A, @DPTR

• Ce mod de adresare poate fi folosit pentru sursa acestui transfer?


• În ce zonă de memorie se află sursa acestui transfer?
• Ce reprezintă şi unde se găseşte primul operand (A)?
• Ce reprezintă şi unde se găseşte DPTR?

• Să se descrie formal semantica instrucţiunii: CJNE s, #data, disp

• Ce moduri de adresare pot fi folosite pentru operandul s?


• În ce zonă de memorie se află operandul s în cazul fiecărui mod de adresare indicat la punctul
precedent?
• Ce reprezintă şi unde se găseşte cel de-al doilea operand (data)?

Oct 18, 2022 Microcontrolere 28


1.10. Sistemul de întreruperi

- Întrerupere = Producerea unui eveniment care cauzează suspendarea temporară a


programului, până când o condiție este îndeplinită de un alt (sub)program

- Conferă sistemului o modalitate de a răspunde asincron la un eveniment

- (Sub) programul care se apelează în momentul declanșării unei întreruperi poartă


numele de “Rutină de deservire a întreruperii” (ISR)

- Vectori de întrerupere – adrese fixe în memoria de program

- Orice întrerupere se termină cu instrucțiunea RETI

Oct 18, 2022 Microcontrolere 29


Procesarea întreruperilor

Oct 18, 2022 Microcontrolere 30


Organizarea întreruperilor

l Modelul C8051F040 suporta 20 de surse de întrerupere

l 2 externe (INT0, INT1)


l 5 declanșate de numărătoare (T0 – T4)
l 2 declanșate de interfața serială (UART0, UART1)
l …

l Fiecare sursă de întrerupere are asociată unul sau mai multe fanioane, localizate în SFR

l Setarea fanilonului = declanșarea întreruperii.

l Toate întreruperile sunt dezactivate la reset și pot fi activate independent de către urilizator

l Întreruperile sunt organizate pe 2 niveluri programabile de prioritate.

l Latența întreruperilor : 5 cicluri de ceas minim.

Oct 18, 2022 Microcontrolere 31


Oct 18, 2022 Microcontrolere 32

S-ar putea să vă placă și