Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
UNIVERSITAT DE GIRONA
ESCOLA POLITÈCNICA SUPERIOR
CURS 2004-2005
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
CAPÍTOL 2
INTRODUCCIÓ BÀSICA ALS PROCESSADORS I AL
MICROCONTROLADOR 8051
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALBASES NUMÈRIQUES USADES
EN PROGRAMACIÓ
• Hexadecimal• Octal• Binari• Decimal• BCD
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
HEXADECIMAL (BASE 16)• Dígits Hexadecimals:
1 2 3 4 5 6 7 8 9 A B C D E FA=10B=11C=12D=13E=14F=15
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
NÚMEROS DECIMALS, BINARIS, BCD, i
HEXADECIMALS
(43)10= (0100 0011)BCD= ( 0010 1011 )2 =
( 2 B )16
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
CONCEPTES PREVIS
BIT, BYTE, NIBLE, WORD,...
PORTES LÒGIQUES: AND, OR, NOR, NAND, NOT, XOR
BIESTABLES, MONOESTABLES,...
BUFFERS, LATCH, MULTIPLEXORS, BLOCS FUNCIONALS,...
MEMÒRIES: ROM, RAM, FLASH, E2PROM,...
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALEL BIT I EL BYTE
BIT, MINIMA UNITAT D’INFORMACIÓ, 1 ó 0
BYTE, 8 BITSMSB LSB
128 64 32 16 8 4 2 1
NIBBLE ALT NIBBLE BAIX
CODI PONDERAT
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
PROCESSADORCERCA EXECUCIÓ CERCA EXECUCIÓ CERCA
REGISTRES
ALU
UNITAT DE
CONTROL
ACUM.
RI
BUS
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
REGISTRESSP
A
B
R0
R1
R3
R4
R2
R5
R7
R6
DPH DPL
PC
DPTR
PC
Alguns Registres del 8051 de 16-bits
Alguns registres de 8-bits del 8051
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
MAPA DE MEMÒRIA EN EL 8051
• Mapa de memòria ROM interna de la família 8051
0000H
0FFFH
0000H
1FFFH8751
AT89C51 8752AT89C52
4k 8k
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
• Espai de memòria RAM el el 80517FH
30H
2FH
20H
1FH
17H10H
0FH
07H
08H
18H
00H
Scratch pad RAM
Adressables bit a bit
Banc de registres 3
Banc de registres 2
Banc de registres 1 (stack)
Banc de registres 0
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Modes d’Adreçament del 8051• Registre• Directe • Registre Indirecte• Immediat• Relatiu• Absolut• Long• Indexat
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
ASSEMBLADORLlenguatge simbolic per programar amb microprocesadors, varia segons el processador.
ORG 8000H ; DIRECTIVA DE ASSEMBLADOR; NO GENERA CODI
ETIQUETA:CODI_OPER DESTI, FONT ;COMENTARI
; MES COMENTARIS
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
EXEMPLE ASSEMBLADOR
ORG 8000H 8BITSMOV A,#30H 7FFEHMOV R0,#25H 8000H MOV A
. 8001H #30H
. 8002H MOV R08003H #25H
.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Mode d’Adreçament de Registre
MOV Rn, A ;n=0,..,7ADD A, RnMOV DPL, R6
MOV DPTR, AMOV Rm, Rn
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Mode d’Adreçament Directe
Tots els 128 bytes de RAM es poden accedir en mode directe, sovint s’utilitzen com posicions de RAM les posicions de la 30H fins la 7FH.
MOV R0, 40HMOV 56H, AMOV A, 4 ; ≡ MOV A, R4MOV 6, 2 ; copy R2 to R6
; MOV R6,R2 no és vàlid !
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALMode d’Adreçament Registre
Indirecte• En aquest mode, el registre s’utilitza d’apuntador a les dades
data.
MOV A,@Ri; mou el contingut de la posició de memoria RAM, l’adreça de la qual esta guardada en el registre Ri, al registre A ( i=0 or 1 )
MOV @R1,B
;El contingut dels registres R0 or R1 son font o destí a les instruccions MOV, ADD i SUBB.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Mode d’Adreçament Immediat
MOV A,#65H
MOV R6,#65H
MOV DPTR,#2343H
MOV P1,#65H
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Adreçaments Relatiu, Absolut, i Llarg
Son usats només amb les instruccions jump i call:
SJMP
ACALL,AJMP
LCALL,LJMP
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Mode d’Adreçament Indexat • Aquest mode es molt usat en l'accés a dades a l’espai de
codi (ROM) del 8051
MOVC A,@A+DPTR(A,@A+PC)
A= contingut de l’adreça (A +DPTR) de la ROM Nota:
Cal fixar-se que les dades que recollim amb aquest mode d’adreçament estan a la memòria de codi (code) de la ROM del 8051, i utilitza la instrucció MOVC en lloc de MOV.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALAlgunes Instruccions Simples
MOV desti,font ; desti <<<= fontMOV A,#72H ;A=72HMOV R4,#62H ;R4=62HMOV B,0F9H ;B=the content of F9’th byte of RAM
MOV DPTR,#7634HMOV DPL,#34HMOV DPH,#76H
MOV P1,A ;mov A to port 1
Nota 1:MOV A,#72H ≠ MOV A,72HDesprés de la instrucció “MOV A,72H ” el contingut de la posició de memòria RAM 72H es reemplaçada per l’Acumulador.
Nota 2:MOV A,R3 ≡ MOV A,3
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
LA SUMA I LA RESTAADD A, Font ;A=A+Font
ADD A,#6 ;A=A+6
ADD A,R6 ;A=A+R6
ADD A,6 ;A=A+[6] or A=A+R6
ADD A,0F3H ;A=A+[0F3H]
SUBB A, Font ;A=A-Font-C
SUBB A,#6 ;A=A-6
SUBB A,R6 ;A=A+R6
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALMULTIPLICACIÓ i DIVISIÓ
MUL AB ;B|A = A*BMOV A,#25HMOV B,#65HMUL AB ;25H*65H=0E99
;B=0EH, A=99H
DIV AB ;A = A/B, B = A mod BMOV A,#25MOV B,#10DIV AB ;A=2, B=5
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALOPERACIONS DE BIT
SETBbit ; bit=1CLR bit ; bit=0
SETB C ; CY=1SETB P0.0 ;bit 0 from port 0 =1SETB P3.7 ;bit 7 from port 3 =1SETB ACC.2 ;bit 2 from ACCUMULATOR =1SETB 05 ;set high D5 of RAM loc. 20h
Note:La instrucció CLR es semblant a SETBi.e.:
CLR C ;CY=0
Aquesta instrucció es nomes per posar a 0, CLR:CLR A ;A=0
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
INCREMENT I DECREMENT
DEC byte ;byte=byte-1INC byte ;byte=byte+1
INC R7DEC ADEC 40H ; [40]=[40]-1
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
ROTACIÓ DE BITSRR – RL – RRC – RLC AEXEMPLE: RR A
RR:
RRC:
RL:
RLC:
C
C
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALOPERACIONS LÒGIQUES
ANL - ORL – XRLOperacions lògiques de Bit:AND, OR, XOREXEMPLE: MOV R5,#89H
ANL R5,#08H
CPL A ;complement a 1EXEMPLE: MOV A,#55H ;A=01010101 B
L01: CPL AMOV P1,AACALL DELAYSJMP L01
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALEL STACK EN EL 8051
• El Stack es una zona de memòria que utilitza la CPU per guardar alguns valors i que també podem utilitzar per guardar valors temporalment. Treballa com una memoria LIFO.
• El registre apuntador que s’utilitza per accedir al stack l’anomenem registre SP (stack pointer).
• El stack pointer en el 8051 es només de 8 bits, i només podràprendre valors entre 00 to FFH. Quan el 8051 es alimentat, el registre SP conté el valor 07.
7FH
30H
2FH
20H1FH
17H10H0FH
07H08H
18H
00H Register Bank 0
(Stack) Register Bank 1
Register Bank 2
Register Bank 3
Bit-Addressable RAM
Scratch pad RAM
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
FUNCIONAMENT DE L’STACKExemple:
MOV R6,#25HMOV R1,#12HMOV R4,#0F3HPUSH 6PUSH 1PUSH 4
0BH
0AH
09H
08H
Start SP=07H
25
0BH
0AH
09H
08H
SP=08H
12
25
0BH
0AH
09H
08H
SP=09H
F3
12
25
0BH
0AH
09H
08H
SP=08H
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
INTRUCCIONS DE LOOP i JUMP Jumps condicionals:
JZ Jump if A=0
JNZ Jump if A/=0
DJNZ Decrement and jump if A/=0
CJNE A,byte Jump if A/=byte
CJNE reg,#data Jump if byte/=#data
JC Jump if CY=1
JNC Jump if CY=0
JB Jump if bit=1
JNB Jump if bit=0
JBC Jump if bit=1 and clear bit
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALLA INSTRUCCIÓ DJNZ
DJNZ:
Escriu un programa per esborrar l’Acumulador (Acc, o A), i suma 3 a l’Acumulador 10 vegades.
Solució:MOV A,#0MOV R2,#10
AGAIN: ADD A,#03DJNZ R2,AGAIN ;repetir fins R2=0 (10 vegades)MOV R5,A
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALINSTRUCCIONS DE SALT INCONDICIONAL
LJMP(long jump)(salt llarg)LJMP es un salt incondicional. Es una instrucció de tres bytes, salta a una posició de memòria entre 0000 i FFFFH.
AJMP(absolute jump)(salt absolut)En aquesta instrucció de 2-bytes, es permet saltar a qualsevol posició de memòria dintre del primer bloc de 2k block ofprogram memory.
SJMP(short jump)(salt curt)(relatiu al PC)En aquesta instrucció de 2-bytes. L’adreça relativa es un valor de 8 bits entre 00 i FFH que el dividim en salts endavant fins +127 i salts enrera fins -128, bytes de memòria relativa al PC.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALINSTRUCCIONS DE CRIDA A
SUBRUTINA (CALL)Una altra instrucció de ruptura de seqüència es la instrucció CALL, i s’utilitza per cridar subrutines.
• LCALL(long call)Instrucció de 3-bytes que s’utilitza per cridar subrutines a qualsevol lloc dels 64K de l’espai d’adreçament del 8051.
• ACALL (absolute call)ACALL es una instrucció de 2-bytes. El destí es dintre dels 2K.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALEXEMPLE DE PROGRAMACIÓ
Exemple:Escriu un programa per copiar un bloc de 10 bytes de la RAM a partir de la posició 37h I ho posi a partir de la posició 59h.
Solució:MOV R0,#37h ; source pointer (apuntador font)MOV R1,#59h ; dest pointer (apuntador destí)MOV R2,#10; comptador
L1:MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R2,L1
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALDecimal Addition (suma decimal)
• 156 + 248
. 100's 10's 1's
. 1 5 6
+ 2 4 8
= 4 0 4
SUMA DE16 Bits
• 1A44 + 22DB = 3D1F
. 256's 16’s 1's
. 1 A 4 4
+ 2 2 D B
= 3 D 1 F
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
FENT UNA SUMA AMB EL 8051
. 65536's 256's 1's
. R6 R7
+ R4 R5
= R1 R2 R3
1.Suma els nibles baixos de R7 i R5, i deixa la resposta a R3.
2.Suma els nibles alts de R6 i R4, suma-hi el bit de carry del pas anterior, i deixar la resposta a R2.
3.Posar el carry del pas 2, al bit de mes pes de R1.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
Passos 1, 2, 3MOV A,R7 ;Mou el byte baix al accumulator
ADD A,R5 ;suma el segon byte baix a l’accumulator
MOV R3,A ;Mou el resultat de la suma del byte baix al registre resultat
MOV A,R6 ;Mou el byte alt a l’accumulator
ADDC A,R4 ;suma el segon byte a l’acumulador, mes el carry.
MOV R2,A ;Mou el resultat suma dels bytes alts als registre resultat.
MOV A,#00h ;Per defecte, el byte mes alt està a 0
ADDC A,#00h ;sumar zero, mes el carry del pas 2.
MOV R1,A ;guarda el resultat de la part mes alta al registre corresponent.
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIALINSTRUCCIONS DEL 8051
JC: Jump if Carry Set
JMP: Jump to Address
JNB: Jump if Bit Not Set
JNC: Jump if Carry Not Set
JNZ: Jump if Acc. Not Zero
JZ: Jump if Accumulator Zero
LCALL: Long Call
LJMP: Long Jump
MOV: Move Memory
MOVC: Move Code Memory
MOVX: Move Extended Memory
MUL: Multiply Accumulator by B
NOP: No Operation
ORL: Bitwise OR
POP: Pop Value From Stack
PUSH: Push Value Onto Stack
RET: Return From Subroutine
RETI: Return From Interrupt
RL: Rotate Accumulator Left
RLC: Rotate Acc. Left Through Carry
RR: Rotate Accumulator Right
RRC: Rotate Acc. Right Through Carry
SETB: Set Bit
SJMP: Short Jump
SUBB: Sub. From Acc. With Borrow
SWAP: Swap Accumulator Nibbles
XCH: Exchange Bytes
XCHD: Exchange Digits
XRL: Bitwise Exclusive OR
Undefined: Undefined Instruction
ACALL: Absolute Call
ADD, ADDC: Add Acc. (With Carry)
AJMP: Absolute Jump
ANL: Bitwise AND
CJNE: Compare & Jump if Not Equal
CLR: Clear Register
CPL: Complement Register
DA: Decimal Adjust
DEC: Decrement Register
DIV: Divide Accumulator by B
DJNZ: Dec. Reg. & Jump if Not Zero
INC: Increment Register
JB: Jump if Bit Set
JBC: Jump if Bit Set and Clear Bit
Universitat de Girona - ESCOLA POLITÈCNICA SUPERIOR Antoni Martorano i Gomis
INFORMÀTICA INDUSTRIAL
FI
Top Related