Modos de Direccionamiento Modos de Direccionamiento

Anuncio
Modos
Modos de
de Direccionamiento
Direccionamiento
Modos
de direccionamiento del 8051
La CPU tiene la habilidad de accesar los datos de varias formas
Se podría especificar el dato directamente en la instrucción
Para datos en la memoria de código y la memoria de datos se usa diferentes
modos de direccionamiento
Tiene cinco modos
– Immediato
– Registro
– Directo
–Indirecto por Registro
– Indexado
Modo de direccionamiento Inmediato
El Operando (dato) está directamente especificado en la
instrucción (opcode)
El código de operación va seguido de un segundo byte (el operando)
que representa una constante.
El Operando es una constante, conocida durante el ensamblado
El dato Inmediato tiene que ser especificado precediéndolo del signo
“#”
Ejemplo:
MOV A, #25H
MOV DPTR, #1FFFH
TEMP EQU 40
MOV R1, # TEMP
; R1
28H (40 decimal)
Memoria de programa
MOV A,#20H
Instrucción
Instrucción
Dato
Dato inmediato
inmediato
Modo de direccionamiento por Registro
El (o los) operando(s) son valores contenidos en los
registros a que se hace referencia.
Ejemplos: Poner en A el contenido del registro R0.
MOV A, R0
Poner en R2 el contenido de A
MOV R2, A
Suma el contenido de R1 y A y el resultado cargarlo en A
ADD A, R1
Los registros fuente y destino deben concordar en tamaño
No todas las transferencias entre registro son válidas. Por ejemplo:
MOV R4, R7 ; invalido
Modo de Direccionamiento Directo
Uno de los operandos de la instrucción es una dirección sobre la cual
se va a actuar.
Este direccionamiento es el único modo de acceder a los registros
con función especial (SFR).
Además de los SFR, este direccionamiento permite acceder a los
128 bytes inferiores de la RAM.
Ejemplo: Poner en A el dato contenido en la dirección 80H.
MOV A,80H
La dirección del operando está especificada directamente en la
instrucción.
– MOV A, 40H ; copia el dato en la memoria [40H] al A
Direccionamiento de Registros como Direccionamiento directo
– MOV A, 4H ; 4H es la dirección de R4
– MOV A, R4 ; Lo mismo que el anterior . Ambos hacen lo mismo;
pero pueden tener diferentes códigos de operación
El Stack en el 8051 solamente usa modos de direccionamiento
directo.
Register Indirect Addressing Mode
A register is used as a pointer
– Register stores the address of the data
Only R0, R1 and DPTR can be used for this purpose in 8051
R0 and R1 can be used for internal memory (256 bytes incl. SFRs)
or from 00H to FFH of external memory
– mov A, @R0 ;copy internal_mem[R0] to A
– mov @R1, A ;copy A to internal_mem[R1]
– movx A, @R0 ; copy external_mem[R0] to A
DPTR can be used for external data memory
– movx A, @DPTR ;copy ext_data_mem[DPTR] to A
– movx @DPTR, A ;vice versa
Indexed Addressing Mode
Use a register for storing the pointer and another register for an offset
Effective address is the sum base+offset
– Move code byte relative to DPTR to A. Effective address is
DPTR + A
movc A, @A+DPTR
– Move code byte relative to PC to A. Effective address is PC + A
movc A, @A+PC
Widely used for implementing look-up tables, data arrays, character
generators etc in code memory
(ROM)
Common Devices
UV erasable EPROM
– Approx street price = $5 for 256-15 part
– 27C128, 27C256, 27C512-15
– C – CMOS, 128 = 128 kilo bits = 128/8 = 16Kilo bytes, organized as 16Kx8
– Last two digits is speed grade
15 = 150ns access time
EEPROMs
– 28C64, 28C256-15
– Approx street price = $10 for 256-15 part
Flash
– 28F256, 28F010 (1024 kbits, 128Kx8)
– Approx street price = $7 for 010-15 part
SRAM
– 6264, 62256-10
– Approx street price = $4 for 256-12 part
Indexed Addressing Mode - Example
Program to read a value x from P1 and send x2 to P2
ORG 0
mov DPTR, #LUT
; 300H is the LUT address
mov A, #0FFH
mov P1, A
; program the port P1 to input data
mov A, P1
; read x
back:
movc A, @A+DPTR ; get x2 from LUT
mov P2, A
; output x2 to P2
sjmp back
; for (1) loop
ORG 300H
LUT:
DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
Program Control Instructions
Unconditional Branch
– ajmp addr11
; absolute jump
– ljmp addr16
; long jump
– sjmp rel
; short jump to relative address
– jmp @A+DPTR ; jump indirect
Conditional branch
– jz, jnz rel
; short conditional jump to rel. addr
– djnz rel
; decrement and jump if not zero
– cjne rel
; compare and jump if not equal
Subroutine Call
– acall addr11 ; absolute subroutine call
– lcall addr16 ; long subroutine call
– ret
; return from subroutine call
– reti
; return from ISV
Machine Cycle
Number of clock cycles used to perform one instruction
Varies with instruction
Usually the lowest is quoted as the machine cycle
For 8051, 12 clock cycles are minimum needed per instruction
Time per machine cycle
– Tmc = Clocks per machine cycle / Clock frequency
– For 8051 clocked at 11.0592MHz,
Tmc = 12 / 11.0592M = 1.085 micro seconds
Time spent executing an instruction
– Tinstr = machine cycles for the instruction * Tmc
– For the nop instruction, machine cycles = 1. So
Tinstr = 1 * 1.085 = 1.085 micro seconds
Simple delay loops
Find the time delay for the subroutine
DELAY: mov R3, #200 ; 1 machine cycle
HERE: djnz R3, HERE ; 2 machine cycles
RET
; 1 machine cycle
Calculation
– Total machine cycles = 200*2 + 1 + 1 = 402
– Time = 402 * 1.085us (assuming 11.0592 MHz clk)
= 436.17us
Similarly any delay can be obtained by loop within loop
technique
For much longer delays, use timers
8051 I/O Ports
32 pins are allotted for 4 eight bit I/O ports
– P0, P1, P2, P3
Al energizar todos los puertos por default son salidas
Para configurar cualquier puerto como entrada, escribir puros 1´s (0xFF) al
puerto en cuestión
Ports can be read and written to like normal registers
mov A, #55H
; can use A
mov P0, A
; write A to P0
mov P1, A
mov P2, #0AAH ; can use immediate mode
xlr P1, #0FFH
; read-modify-write (ex-or)
mov P0, #0FFH ; configure P0 for input
Ports can be bit manipulated (single bit addressable) using cpl and setb
instructions
8051 I/O Programming
Simple read and write 8bits at a time
mov A, #0FFH ; configure P1 for input
mov P1, A
;
mov A, P1
; read from P1
mov P0, A
; write that to P0
Bit manipulation
cpl P1.2
; complement bit 2 of Port1
setb P1.3
; set bit 3 for Port1 to 1
clr P0.0
; clear bit 0 of Port0
Descargar