PDF de programación - Capítulo 1/2 - Modos de direccionamiento - Curso sobre Microcontroladores

Imágen de pdf Capítulo 1/2 - Modos de direccionamiento - Curso sobre Microcontroladores

Capítulo 1/2 - Modos de direccionamiento - Curso sobre Microcontroladoresgráfica de visualizaciones

Publicado el 31 de Mayo del 2018
527 visualizaciones desde el 31 de Mayo del 2018
245,8 KB
10 paginas
Creado hace 13a (16/10/2010)
Curso sobre Microcontroladores
Familia HC9S08 de Freescale

Por Ing. Daniel Di Lella – EduDevices – www.edudevices.com.ar
e-mail: [email protected]
Responsable Area Educación – ELKO / ARROW – www.elkonet.com
e-mail: [email protected]

Capítulo 1.

Continuación .... (entrega nº 2)

Modos de Direccionamiento.

La familia HC9S08 (CPU HCS08) posee 16 modos de direccionamiento al igual que
la familia HC908. Se han implementado algunas mejoras en la familia HC9S08,
algunas de ellas referidas a la reducción de los ciclos de máquina empleados por cada
una de las instrucciones con respecto a la HC908 y además se han agregados modos
de direccionamiento en las instrucciones LDHX y STHX que ayudan a trabajar con
mejor eficiencia de código cuando se utilizan compiladores de alto nivel como el
lenguaje “C”.

A continuación repasaremos muy brevemente los distintos modos de direccionamiento
disponible en la familia HC9S08 y sobre el final veremos las diferencias entre HC9S08
y HC908.

Modo de direccionamiento Inherente (INH).

Las instrucciones no tienen operando a buscar y no requieren de operando de dirección.
De un byte de longitud y son típicamente “inherentes” al CPU.

Por ejemplo:

CLRX ; Limpio el registro X.

Modo de direccionamiento Inmediato (IMM).

El operando para las instrucciones inmediatas está contenido en el byte inmediato al
código de operaciones (opcode). Las instrucciones inmediatas tienen constantes como
operando.

Por ejemplo:

LDA #$50 ;Carga el acumulador con el valor hexadecimal $50.

Modo de direccionamiento Directo (DIR).

El modo de direccionamiento Directo se utiliza para acceder a operandos en la página
directa (rango de memoria de $0000 a $00FF), o sea en las primeras 256 posiciones del
mapa de memoria. El byte de mayor orden (más pesado) no es incluido en la
instrucción, de esta forma se ahorra un byte y un ciclo de máquina con respecto al
direccionamiento Extendido.

Ejemplo:

LDA $55 ; Carga el acumulador con el contenido de la posición $0055.

Modo de direccionamiento Extendido (EXT).

Las instrucciones de direccionamiento Extendido poseen 3 bytes de longitud y pueden
acceder a operandos en cualquier posición de los 64 Kbytes del mapa de memoria.

Ejemplo:

LDA $1996 ; Carga el acumulador con el contenido de la posición $1996

STA $1044 ; Almacena el contenido del acumulador en la posición $1044

Modo de direccionamiento Relativo (REL).

Todas las instrucciones de saltos condicionales utilizan el modo de direccionamiento
Relativo para evaluar la dirección efectiva. Si la condición del salto se cumple, el CPU
evalúa el salto de destino por medio de la suma de un byte signado al contador de
programa. El rango del salto es –128 a + 127 bytes desde la posición de memoria
después de la instrucción de salto.

Ejemplos:

DBNZA –2 ; Salto negativo, en loop hasta que Acc = 0

BRCLR 1, PORTA, NO_PUSH ; Salto positivo, en loop hasta que PTA1 = 1

JSR DEBOUNCE

NO_PUSH EQU * ;

Modo de direccionamiento Indexado.

Tanto en los HC908, como en los HC9S08 hay 5 modos de direccionamiento
indexados.
Las instrucciones con direccionamiento indexado utilizan el contenido del registro
índice de 16 Bits H:X para acceder a operandos con direccionamiento variable, tales
como variables accedidas por medio de un puntero (tablas).

Indexado sin Offset (IX).

Se accede al contenido de la memoria apuntado por el contenido del índice H:X.

Por ejemplo:

Si H:X = $1000

LDA ,X ; Carga el acumulador con el contenido de la dirección apuntada por el
; índice H:X (posición de memoria $1000).

Indexado, con Offset de 8 Bits no signados (IX1).

Se accede al contenido de la memoria apuntado por el contenido del índice H:X + el
valor no signado de un offset de 8 bits.

Ejemplo:

Si H:X = $1000

LDA $44,X ; Carga el acumulador con contenido de la dirección apuntada por el

; índice H:X + el offset de 8 bits (posición de memoria $1044).

Indexado, con Offset de 16 Bits no signados (IX2).
Se accede al contenido de la memoria apuntado por el contenido del índice H:X + el
valor no signado de un offset de 16 bits.

Ejemplo:

Si H:X = $1000

LDA $1044,X ; Carga acumulador con contenido de la dirección apuntada por el

; índice H:X + el offset de 16 bits (posición de memoria $2044).

Indexado, con Post incremento y sin offset (IX+).

Este direccionamiento es similar al Indexado sin Offset, pero aquí la diferencia es que
cada vez que se ejecuta una instrucción con este modo de direccionamiento,
independientemente del resultado de la operación, se incrementa en 1 (una) posición el
contenido del registro índice H:X en forma totalmente automática.

Ejemplo:

ldhx #Table2 ; H:X con la dirección de czo. de la tabla
chkLoop: cphx #Table2+10
beq stringOK
lda (Table1-Table2),x ;

; fin de la tabla?
; SI Fin de la búsqueda

cbeq x+,chkLoop ; en una sola instrucción comparo, salto y post

; incremento
stringBad nop
.....
.....

stringOK

Indexado, con Post incremento y con offset de 8 bits no signado (IX1+).

Similar al direccionamiento anterior, pero en este caso la dirección efectiva está dada
por la suma del contenido del registro índice H:X + el valor no signado del offset de 8
bits.

Ejemplo:

cbeq $55,x+,rel

Direccionamiento Indexado, usando el Stack Pointer y Offset de 8 bits
(SP1).

8 bit offset no signado + Registro SP no signado = localización memoria

• Registro SP no es afectado.
• 8 bit offset es el byte inmediatamente seguido al byte del opcode.

Ejemplo:

El modo de direccionamiento relativo de puntero de pila (“stack pointer”) (SP),
mejora en eficacia el código C y hay de dos tipos: el modo relativo del “stack pointer”
con un “offset” de 8 bits y el modo relativo del “stack pointer” con un “offset” de
16 bits.

Su trabajo es similar al modo de direccionamiento indexado, pero usan el “stack
pointer” en lugar del registro de índice H:X. Se podría usar el “stack pointer”, como un
registro índice adicional cuando las interrupciones son inválidas (deshabilitadas).
En programas en ensamblador y C, el stack o pila se usa para pasar normalmente los
operandos a las subrutinas. Típicamente la subrutina sacará los operandos del
acumulador tal como los necesita. El direccionamiento relativo del stack permite el fácil
acceso de datos en el stack, proporcionando el acceso directo a los operandos,
eliminando código y el tiempo requerido para almacenar valores en la pila (‘push’) y
recuperar valores de la pila (‘pop’), a y desde el “stack”.

Direccionamiento Indexado, usando el Stack Pointer y Offset de 16
bits.

16 bit offset no signado + registro SP no signado = localización memoria

• Registro SP no es afectado
• 16 bit offset son los dos bytes inmediatamente seguidos al opcode.

Ejemplo:

Direccionamiento “Memoria a Memoria”.

Usado para “mover” información desde una locación a otra.

• No usa / afecta registros del CPU.

– Excepto cuando se usa direccionamiento indexado con post incremento.

• Más eficiente que la combinación Load / Store.

Pueden utilizarse con instrucciones MOV solamente.

Como debería usarse.....

• MOV Dirección Fuente, Dirección Destino

Cuatro variantes:

• Inmediato a Directo
• Directo a Directo
• Indexado a Directo con Post Incremento
• Directo a Indexado con Post Incremento

Tener en cuenta que la dirección de acceso directo que se utilice en cualquiera de las
cuatro variantes debe estar comprendida dentro de la página “cero”, o sea dentro de los
primeras 256 posiciones de memoria. Fuera de estas posiciones ($0100 en adelante)
deben usarse las instrucciones clásicas LOAD / STORE.

Direccionamiento “Memoria a Memoria” - Inmediato a Directo -

La Fuente es un byte de valor inmediato.

El Destino debe estar en los primeros 256 bytes de memoria

Ejemplo de uso:

El modo de movimiento inmediato a directo se usa típicamente para inicializar variables
y registros en la página directa. Eliminando las instrucciones requeridas para guardar el
acumulador, cargar el acumulador con los datos a transferir, guardar el acumulador con
el dato a transferir y además restaurar el acumulador, reduciendo el número de ciclos
de ejecución de nueve a cuatro.

• Inicialización de variables o registros en RAM.

Direccionamiento “Memoria a Memoria” - Directo a Directo –

La Fuente debe estar en los primeros 256 bytes de memoria.

El Destino debe estar en los primeros 256 bytes de memoria.

Ejemplo de uso:

• Movimiento de datos desde una página cero a otro lugar dentro de la

misma página (mover datos dentro de la misma RAM).

En el ejemplo de uso aquí presentado, se está “leyendo” el contenido del puerto “A”
(PORTA) de 8 bits y se transfiere su contenido a una posición de memoria en RAM que
podría ser una variable relacionada con el contenido del puerto.

Direccionamiento “Memoria a Memoria”

- Indexado con Post Incremento a Directo –

La Fuente puede ser cualquier lugar en el mapa de memoria.

El Destino debe estar en los primeros 256 bytes de memoria.

Ejemplo de uso:

El modo de indexado a directo con post - incremento se usa típicamente para transferir
tablas de cualquier parte de los 64K del mapa de memoria a un registro de la
página directa. Por ejemplo, se puede usar este modo para transferir un 'buffer' de la
RAM al transmisor SCI.

• Escritura de Datos a un dispositivo de comunicación desde un buffer en

RAM o FLASH (Transmisión de datos por SCI).

Direccionamiento “Memoria a Memoria”
- Directo a Indexado con Post Incremento -

La Fuente debe estar en los primeros 256 bytes de memoria.

El Destino puede ser cualquier lugar en el mapa de memoria.

Ejemplo de uso:

De un modo similar es el movimiento de directo a indexado con post – incremento.
Este modo se puede usar para
  • Links de descarga
http://lwp-l.com/pdf11461

Comentarios de: Capítulo 1/2 - Modos de direccionamiento - Curso sobre Microcontroladores (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad