El procesador HCS08 - MC Jorge Eduardo Ibarra Esquer

Anuncio
Universidad Autónoma de Baja California
Facultad de Ingeniería Mexicali
El procesador HCS08
M.C. Jorge Eduardo Ibarra Esquer
Semestre 2011-1
Características del procesador
•  Todos los microcontroladores de la familia
HCS08 utilizan al CPU HCS08, junto con
elementos de memoria y diversos
periféricos.
•  Ofrece alta velocidad y bajo consumo de
energía.
Características del procesador
•  Frecuencia del CPU
máxima de 40MHz
•  Espacio de memoria
de 64KB
•  16 modos de
direccionamiento
•  Transferencia de
datos de memoria a
memoria
•  Compatibilidad de
código con la familia
M68HC05
•  Instrucciones para
operaciones BCD
•  Operación de
multiplicación de 8x8
bits y división de 16/8
Modelo de programación
El acumulador A
•  Registro de propósito general de 8 bits
•  El CPU lo usa para colocar operandos y
resultados de operaciones
Registro índice H:X
•  Permite direccionar el espacio de
memoria de 64KB
•  Se utiliza en los modos de
direccionamiento indexado
Apuntador de la pila
•  Contiene la dirección de la siguiente
posición en la pila
•  La dirección se decrementa con las
operaciones push y se incrementa con las
operaciones pull
Contador de programa
•  Contiene la dirección de la siguiente
instrucción u operando que se leerá
Registro de código de condiciones
•  Contiene la máscara de interrupción y
algunas banderas que indican el estado
de la operación anterior
Mapa de memoria
Mapa de memoria
Programación del
microcontrolador
Sintaxis de ensamblador
Un programa fuente en ensamblador
consiste en una secuencia de sentencias.
Cada sentencia se codifica en una línea de
texto y puede ser:
–  Un comentario
–  Una línea de código
Comentarios
Un comentario puede ocupar una línea
completa con el propósito de explicar el
funcionamiento de un bloque de código
Un comentario se indica con un punto y
coma, después del cual sigue el texto del
comentario
; Esta línea es un comentario
Código
Cada línea de código incluye uno o más de
los siguientes campos:
–  Una etiqueta
–  Un campo de operación
–  Uno o más operandos
–  Un comentario
Etiquetas
La etiqueta es el primer campo en una línea de
código. Una etiqueta es un símbolo seguido por
dos puntos ‘:’. Las etiquetas están formadas por:
–  Letras
–  Números
–  Puntos
–  Guión de subrayado
Las etiquetas no pueden empezar con un número.
Etiquetas
Por lo general, el ensamblador considera
que cualquier identificador que inicie a
partir de la primer columna de una línea,
es una etiqueta, incluso aunque no esté
terminado con dos puntos.
Etiquetas
Las etiquetas son obligatorias en las
directivas de ensamblador que definen el
valor de un símbolo (SET o EQU). En estos
casos, la etiqueta toma el valor
correspondiente a la expresión en el campo
del operando.
Etiquetas
A las etiquetas que se especifiquen en
cualquier otra directiva, instrucción o
comentario, se le asigna el valor de la
localidad de memoria en la que se definan.
Campo de operación
Este campo es el que sigue después de la etiqueta
y se separa de ella con un espacio en blanco
El campo de operación no debe empezar en la
primer columna
El campo de operación contiene alguno de los
siguientes elementos:
–  Una instrucción
–  Una directiva
–  El nombre de una macro
Campo de operación
•  Instrucción
–  Las instrucciones están definidas en el
manual de referencia del CPU HCS08.
•  Directivas
–  Son indicadores para el ensamblador que
permiten definir secciones, constantes, etc.
•  Macros
–  Al incluir el nombre de una macro, el código
que éste representa se incluye en esa parte
del programa.
Campo del operando
Cuando se incluye el operando, este sigue al
campo de la operación, separado por un espacio
en blanco. Si hay dos o más operandos, éstos se
separan con comas.
Para que el ensamblador, y en su momento el
procesador, identifiquen de dónde se tomarán los
datos, se utilizan diferentes modos de
direccionamiento.
Modos de direccionamiento
El CPU HCS08 incluye 16 modos de
direccionamiento:
•  Inherente
•  Inmediato
•  Directo
•  Extendido
•  Indexado
•  sin offset
•  offset de 8 bits
•  offset de 16 bits
•  Relativo
•  Apuntador de la pila
• offset de 8 bits
• offset de 16 bits
•  Memoria a memoria
•  Inmediato a directo
•  Directo a directo
•  Indexado a directo con post
incremento
•  Directo a indexado con
post incremento
•  Indexado
•  con post incremento
•  offset de 8 bits con post incremento
Direccionamiento inherente
•  Las instrucciones que utilizan este
direccionamientos no tienen que buscar un
operando sobre el cual actuar.
•  Algunas de estas instrucciones actúan sobre
los datos que se encuentran en los registros.
–  DIV
–  CLRA
–  PSHX
¨ CLI
¨ MUL
¨ LSLA
¨ NEGA
¨ NOP
¨ TAX
Direccionamiento inmediato
•  El operando en instrucciones con
direccionamiento inmediato se encuentra en los
bytes que siguen al código de operación.
•  Estos bytes son el valor del operando que
utilizará la instrucción.
•  Para indicar que se utilizará direccionamiento
inmediato, se utiliza el símbolo #
•  El operando está limitado a uno o dos bytes,
dependiendo del registro involucrado.
Direccionamiento inmediato
•  Algunos ejemplos de uso de este
direccionamiento son:
–  CPHX #$FFFF
–  LDA #100
–  LDHX #etiqueta
–  SUB #$A0
•  Otras instrucciones que lo utilizan:
–  ADC, ADD, AND, CPX, EOR, ORA, SBC
Direccionamiento directo
•  La mayoría de las instrucciones que lo
utilizan pueden acceder a los primeros
256 bytes de la memoria con solo 2
bytes:
–  1 byte para el código de operación
–  1 byte para la parte baja de la dirección
efectiva
•  El byte más significativo de la dirección
efectiva se toma siempre como $00
Direccionamiento directo
•  El uso de este modo de direccionamiento
está limitado a operandos en la página
directa o página 0 (direcciones $0000 a
$00FF)
•  En la página 0 se encuentra parte de la
memoria RAM del microcontrolador
($0040 a $023F), así como la mayoría de
los registros de E/S ($0000 a $003F)
Direccionamiento directo
•  Algunos ejemplos de uso de este modo de
direccionamiento son:
–  STA $03 ;A à Puerto D
–  LDX $00 ;Puerto A à X
–  CPX $E0 ;Compara X con el contenido de
$00E0
Direccionamiento extendido
•  Utilizando este modo de direccionamiento,
las instrucciones pueden acceder a
cualquier dirección en un mapa de
memoria de 64Kbytes
•  Todas las instrucciones extendidas
utilizan 3 bytes:
–  1 byte para el código de operación
–  Los otros dos son el MSB y LSB de la
dirección del operando
Direccionamiento extendido
•  Se utiliza cuando es necesario utilizar
memoria por encima de la página 0
•  Algunos ejemplos de uso de este modo de
direccionamiento son:
–  ADC $5006
–  AND $0100
–  LDX $FE04
Direccionamiento indexado, sin
offset
•  Este modo se utiliza para tener acceso a
datos con direcciones variables. X
contiene la parte baja de la dirección,
mientras que H contiene la parte alta
•  Estas instrucciones pueden mover un
apuntador a través de una tabla o
almacenar la dirección de una localidad
de RAM o E/S que se utilice
frecuentemente
Direccionamiento indexado, sin
offset
•  Algunos ejemplos de uso de este modo de
direccionamiento son:
–  JMP ,X
–  STA ,X
–  ADC ,X
–  NEG ,X
Direccionamiento indexado,
con offset de 8 bits
•  En estas instrucciones, el CPU suma los
bytes sin signo en H:X al byte sin signo
que sigue al código de operación. La
suma es la dirección efectiva del
operando
•  Estas instrucciones son útiles para
seleccionar el k-ésimo elemento en una
tabla de n elementos
Direccionamiento indexado,
con offset de 8 bits
•  Algunos ejemplos de uso de este modo de
direccionamiento son:
–  JMP $FF,X
–  STA 18,X
–  LDA 7,X
–  NEG $10,X
Direccionamiento indexado,
con offset de 16 bits
•  En estas instrucciones, el CPU suma los
bytes sin signo en H:X a la palabra sin
signo formada por los dos bytes que
siguen al código de operación. La suma es
la dirección efectiva del operando
•  Estas instrucciones son útiles para
seleccionar el k-ésimo elemento en una
tabla de n elementos
Direccionamiento indexado,
con offset de 16 bits
•  Algunos ejemplos de uso de este modo de
direccionamiento son:
–  JMP $20FF,X
–  STA $A018,X
–  LDA $FF00,X
–  JSR $1000,X
Direccionamiento con el apuntador de
la pila, con offset de 8 y 16 bits
•  Estos modos de direccionamiento son
similares a los indexados con offset, sólo
que utilizan el apuntador de la pila en
lugar del registro índice
•  Estas instrucciones son útiles para
acceder de una manera sencilla a los
datos en la pila
Direccionamiento con el apuntador de
la pila, con offset de 8 y 16 bits
•  Algunos ejemplos de uso de estos modos
de direccionamiento son:
–  STA $10,SP
–  TST $25,SP
–  LDA $FF00,SP
–  STX $0500,SP
Direccionamientos de memoria a
memoria
•  El CPU HCS08 incorpora la capacidad de
realizar transferencia de datos directa
entre localidades de memoria.
•  Se utiliza la instrucción MOV.
•  Se cuenta con cuatro modos de
direccionamiento de memoria a memoria.
Memoria a memoria: Inmediato a
Directo
•  Generalmente se utiliza para inicializar
variables y registros en la página directa
•  El operando en el byte que sigue al
código de operación se almacena en la
localidad de la página directa indicada
por el segundo byte
•  La instrucción MOV asociada a este modo
no altera el contenido del acumulador
Memoria a memoria: Inmediato a
Directo
"PSHA" " ; Respalda el valor de A
"LDA "#$27 " ; A=$27
"STA "$A0" ; Se almacena #$27 en $00A0
"PULA" " ; Se restaura el valor de A
El código anterior se puede cambiar por el siguiente:
"MOV"#$27,$A0
Memoria a memoria: Directo a
Directo
•  Generalmente se utiliza para intercambiar datos
entre registros en la página directa.
•  El operando en la localidad de la página directa
indicada por el byte que sigue al código de
operación se almacena en la localidad de la
página directa indicada por el segundo byte.
•  La instrucción MOV asociada a este modo no
altera el contenido del acumulador.
Memoria a memoria: Directo a
Directo
"PSHA" " ; Respalda el valor de A
"LDA "$04 " ; A=Contenido de la dir. $0004
"STA "$05 " ; $0005=$0004
"PULA" " ; Se restaura el valor de A
El código anterior se puede cambiar por el siguiente:
"MOV"$04,$05
Memoria a memoria: Indexado a
Directo con Post Incremento
•  Generalmente se utiliza para transferir tablas
direccionadas por el registro índice a un
registro en la página directa.
•  El operando direccionado por H:X se almacena
en la localidad de la página directa indicada por
el byte que le sigue al código de operación. H:X
se incrementa al terminar.
•  La instrucción MOV asociada a este modo no
altera el contenido del acumulador.
Memoria a memoria: Indexado a
Directo con Post Incremento
Si quisiéramos escribir el contenido de la
dirección a la que apunta H:X en el puerto B, se
haría lo siguiente:
"
"
"MOV "X+,$01
Una vez que se ha movido el dato, H:X incrementa
su valor en 1, apuntando así a la siguiente
dirección.
"
Memoria a memoria: Directo a
Indexado con Post Incremento
•  Generalmente se utiliza para llenar tablas
desde registros en la página directa.
•  El operando en la localidad de la página directa
indicada por el byte que le sigue al código de
operación, se almacena en la localidad
direccionada por H:X. H:X se incrementa al
terminar.
•  La instrucción MOV asociada a este modo no
altera el contenido del acumulador.
Memoria a memoria: Directo a
Indexado con Post Incremento
Si quisiéramos escribir el contenido del puerto D
en la dirección a la que apunta H:X, se haría lo
siguiente:
"
"
"MOV "$03,X+
Una vez que se ha movido el dato, H:X incrementa
su valor en 1, apuntando así a la siguiente
dirección.
"
Direccionamiento relativo
•  Todas las instrucciones de salto condicional
utilizan el direccionamiento relativo para
calcular la dirección efectiva resultante.
•  Si la condición es verdadera, la dirección
efectiva se carga en el PC. Si es falsa, avanza
a la siguiente instrucción.
Direccionamiento relativo
•  El desplazamiento es un byte en complemento a
2 que permite un rango de salto de -128 a 127
bytes desde la dirección que sigue a la del
salto.
Inicio: LDA #1
CMP #-2
BLT Inicio
; Salta si A es < -2
Fin:
BRA Fin
Direccionamiento relativo
"Inicio: "LDA #1
""CMP #-2
""BLT "Inicio "; Salta si A es < -2
"Fin: "BRA"Fin
Direccionamiento indexado con post
incremento, sin offset y con offset de
8 bits
•  Este modo de direccionamiento es útil para
búsquedas en tablas.
•  Una vez direccionado el operando, H:X se
incrementa.
•  Sólo se utiliza con la instrucción CBEQ
(Compare and Branch if Equal)
Direccionamientos indexados con
post incremento
"
"LDA
STA
MOV
CLRX
ciclo:
CBEQ
BRA
iguales: CLRX
ciclo2:
CBEQ
BRA
iguales2: BRA
#$FF
$10
$10,$60
X+,Iguales
Ciclo
; Sin offset
$50,X,Iguales
Ciclo2
Iguales2
; Offset de 8 bits
Directivas
Declaración de secciones
•  Secciones absolutas: Directiva ORG
–  Permite definir secciones de datos, de constantes y
de código
Var1:
Var2:
ORG
DS.B
DS.B
$50
1
1
;Esta es una sección de datos
;Igual a RMB
Cnst1:
Cnst2:
ORG
DC.B
DC.B
$B000
$35
$A8
;Sección de constantes
;Igual a FCB
ORG
CLI
CLRA
…
$B100
;Sección de código
Inicio:
La directiva EQU
•  Esta directiva asigna el valor de la expresión en
el campo del operando a la etiqueta indicada:
PTOA:
EQU $0000
RAM:
EQU $0040
DDRA:
EQU $0004
EEPROM: EQU $B000
Tarea
•  Investigar las directivas que se pueden
utilizar para programar el procesador
HCS08.
Un programa de ejemplo
$include ‘M9S08LC60.inc’
; Incluir las etiquetas definidas en este archivo
RAM
ROM
VECT
inicio:
fin:
EQU
EQU
EQU
$0040
$B000
$FFDC
; Inicio del segmento de RAM
; Inicio del segmento de EEPROM
; Inicio del vector de interrupciones
ORG
LDA
ADD
STA
BRA
ROM
#$18
#$A0
RAM
fin
; Sección de EEPROM
ORG
DC.W
VECT+$22
inicio
; Vector del Reset
Descargar