micros1_2011
Post on 09-Jul-2015
881 Views
Preview:
TRANSCRIPT
MICROPROCESADORES Y MICROCONTROLADORES UNA RAPSODIAM.I Eduardo Ramrez Snchez
ERS
1
Universidad Nacional Autnoma de MxicoFacultad de IngenieraMicroprocesadores y Microcontroladores Familias y CPU: HCS12M.I. Eduardo Ramrez Snchez Departamento de ElectrnicaERS 2
Qu es un Microprocesador?
ERS
3
Dispositivo Digital Programable
CPU
ERS
4
Aplicaciones de los microprocesadores y microcontroladores
ERS
5
ERS
6
ERS
7
ERS
8
ERS
9
ERS
10
Quin los invento?
ERS
11
ERS
12
Breve Historia de los MicroprocesadoresFecha 1971 1972 1974 1975 1975 1976 1977 1978 1978 1979 1979 1979 1979 1981 1981 Microprocesador Intel 4004 Intel 8008 Intel 8080 Motorola 6800 IBM MOS Technology 6502 Motorola 6802 Motorola 6801 Intel 8086/8088 Motorola Motorola Motorola Motorola 68000 68701 6805 6809 nicamente 5V (1 Mhz) Primer microprocesador RISC Usado en Apple II, PET, Atari 128-byte de memoria interna Microcomputadora en un chip 40,000 Transistores (datos 16-bit) 68,000 Transistores MCU_EPROM-I/O Microcontrolador de bajo costo Usado en la TRS-80 Microprocesador RISC Comentarios Primer microprocesador (4 bits) Primer microprocesador (8 bits)
IBM PC, usa Intel 8088 Stanford University
ERS
13
ERS
14
Intel 4004
source: Computer Museum
ERS
15
Enero 1975 portada de Popular Electronics
ERS
16
http://www.blinkenlights.com/pc.shtml
ERS
17
ERS
18
Computadora Macintoshus el microprocesador 68000
ERS
19
Microprocesador (MPU) Un circuito integrado que contiene el CPU CPU (unidad central de proceso) Controla la transferencia de datos Ejecuta las instrucciones
ERS
20
HardwareCules son los bloques bsicos que conforman a un microprocesador?
ERS
21
Estructura Interna de un Microprocesador
A S M
ALU
REGISTROS
ERS
22
Estructura Interna de un Microprocesador
A S M
ALU
REGISTROS
ERS
23
Estructura Interna de un MicroprocesadorBus de Datos
A S M
ALU
REGISTROS
Bus de Direcciones
Bus de ControlERS
24
Estructura Interna de un MicroprocesadorBus de Datos
A S MClock
ALU
REGISTROS
Bus de Direcciones
ERS
Bus de Control
25
Bit 0 Bit 1 Bit 2 8 = Bit 3 Bit 4 Bit 5 Bit 6 Bit 7
ERS
26
ERS
27
Estructura interna del CPU HCS12ALUA D X Y SP PC SXHINZVC B
ASM
CPU 12ERS 28
Sistema Bsico de una ComputadoraDispositivo Paralelo E/S Datos Paralelos Dispositivo Serial E/S Datos Seriales
CPU
MEMORIA (PROGRAMA+DATOS)
INTERFAZ E/S
BUS DE DATOS
BUS DE DIRECCIONES
BUS DE CONTROL
ERS
29
ERS
30
Microcontrolador (MCU) Un circuito integrado usado para controlar otros dispositivos Contienes un CPU, memoria y circuitos de E/S Dispositivo de propsito general disponible para una gran variedad de aplicaciones Tpicamente, un MCU debe responder a entradas en un corto tiempo para producir salidas apropiadas Un MCU es un tipo de controlador embebidoERS 31
Microcontrolador (MCU)Un microcontrolador (MCU) es un circuito integrado que contiene muchas de las funciones encontradas en una computadora tpica. Un microcontrolador usa un MICROPROCESADOR como su Unidad de Proceso Central (CPU) e incorpora caractersticas tales como memoria, referencias de tiempo y perifricos de entrada y salida, todo en el mismo circuito.ERS 32
Microcontrolador (MCU)Un MCU es empaquetado en un solo circuito el cual puede ser programado 'por el usuario' con una serie de instrucciones que se encuentran cargadas en su memoria. El desarrollo de una nueva aplicacin para un microcontrolador esta limitada nicamente por la destreza e imaginacin del usuario. Puesto que los elementos de un sistema microcontrolador son fcilmente ensamblados, las aplicaciones de los microcontroladores generalmente hacen mas simples y poderosos los procesos de control, frecuentemente proveen nuevas funciones y reducen costos.ERS 33
E/S
Perifricos
MEMORIA Ncleo del Procesador (CPU)
ERS
34
ERS
35
ERS
36
ERS
37
Al convertidor A/D del HS12
Microprocesador
8
ERS
38
ERS
39
ERS
40
Motorola introduce el 68HC12 (en 1997) y el HCS12 (en 2002)RAM CPU12 EEPROM FLASH EEPROM
68HC12/HCS12TIMER PARALLEL I/O SPI SCI A/D
Interfaz adicional PWM y CANERS 41
ERS
42
ERS
43
ERS
44
ERS
45
ERS
46
ERS
47
ERS
48
ERS
49
ERS
50
ERS
51
ERS
52
ERS
53
ERS
54
ERS
55
ERS
56
ERS
57
Memoria
Un lugar para almacenar informacin, la cual puede ser datos o programas
ERS
58
Direccionamiento de Memoria La memoria consiste en una secuencia de localidades directamente direccionables. Una localidad es referida como una unidad de informacin Una localidad de memoria puede utilizarse para almacenar datos, instrucciones y el estado de los dispositivos perifricos Una localidad de memoria tiene dos componentes: una direccin y su contenido
ERS
59
Direccin donde 2 Bytes = 1 palabra
Byte Alto15 14 13 12 11 10 9 8 7 6 5
Byte Bajo4 3 2 1 0
Direccin Posicin del Bit Se muestra en Binario Bit A
0
0
1
0
1
0
1
0
0
1
1
1
0
0
1
1
Memoria Direccin $2A70 $2A71 $2A72 Direccin de Memoria $2A73 $2A73 $2A74 $2A75 $2A76 $2A77 $2A78 Datos $5E $6E $00 $17 $8C $5F $34 $80 $FF %00010111 = $17 Dato
ERS
60
Direccionamiento de Memoria La transferencia de datos entre el CPU y la memoria se efecta en los buses comunes: el bus de direccionamiento y el bus de datos El ancho del bus de datos es el nmero de bits que se pueden transferir en el bus de datos
Notaciones: m[addr] representa el contenido de una localidad de memoria. Por ejemplo, m[$20] se refiere al contenido de la localidad de memoria en $20 [reg] se refiere al contenido de un registro. [A] se refiere al contenido del acumulador A. ERS 61
Tamao de Memoria El tamao de la memoria se mide en bytes 1 byte = 8 bits 1 nibble = 4 bits 1 palabra = 16 bits o 2 bytes 1K=2^10 =1024 1M= K2= 2^20=1048576 1G= K3= 2^30= 1073741824
El MC68HC12 tiene un bus de direccionamiento de 16 bits y un bus de datos de 16 bits Algunos miembros de la familia del 68HC12 (68HC912DG128) utilizan tcnicas de paginado e incorporan hardware para sostener el direccionamiento en una memoria de espacio mayor que 64KB.ERS 62
Principales tipos de Memoria ROM read only memory
RAM random access memory
EPROM eraseable programmable ROM
EEPROM electrically EPROM, byte writeable Tambin llamada flash cuando los sectores son escribibles ERS 63
Programando un EPROMComputadora Programador del EPROM
Software para programar el EPROM
Chip Personal
EPROM (Ranura objetivo)
Disco
Archivo Binario o Hexa
Programando un EPROM ERS
64
Bus de Direcciones
16
Bus de Datos
8
ROM
LECTURA
ERS
65
Bus de Direcciones
Bus de Datos
RAM
ESCRITURA LECTURA
ERS
66
Nomenclatura para los Diagramas de TiempoSmbolo EntradaLa entrada debe ser vlida
SalidaLa salida debe ser vlida
Si la entrada debe bajar
Entonces la salida bajar
Si la entrada debe subir
Entonces la salida subir
Sin importancia, trabajar independientemente
El valor de la salida no est determinado Alta impedancia, tres estados, HiZ, sin impulso, flotante, 67
Sin sentido ERS
Ciclo de Escritura
Reloj del CPU Estado del reloj (ref.)
Reloj del Bus
Direccin
Direccin del CPU vlido
Lectura/Escritura
Escritura
Datos
Datos del CPU vlido
ERS
68
Ciclo de Escritura
Ciclo de Lectura
Reloj del CPU Estado del reloj (ref.)
Reloj del Bus
Direccin
Direccin del CPU vlido
Lectura/Escritura
Lectura
Datos
Datos del CPU vlido
ERS
69
Ciclo de Lectura
Memorias Comerciales EEPROM
ERS
70
Memorias Comerciales SRAM
ERS
71
Decodificacin de direccin: Concepto BsicoOTROS
Timer
HC12
ROM
RAM
Puertos de E/S
Para transferir datos correctamente y proteger a la computadora de daos, solo un dispositivo a la vez deber permitrsele actuar sobre el bus de datos. El decodificador de direccin selecciona y habilita un y solo un dispositivo para que transfiera datos al CPU. ERS 72
Mapa de Memoria$0000
TIMER, OTROS Y E/S$03FF $0800 $0FFF
RAM
$8000
ROM$C000
$FF00 $FFFF
Vectores
ERS
73
Monochip
16 lneas de entrada: A0, , A15 Selecciona 1 lnea de salida
. . .
16
ERS
74
4 lneas de entrada: A0, A1, A9, A15 Selecciona nicamente 1 lnea de salida
16
ERS
75
Bus de Datos
ASeal de interferencia
MPUSeal deseada
BConfiguracin sin BufferERS 76
ERS
77
ERS
78
Mapa de Memoria$0000 $03FF $0800 $0FFF
$8000
$C000
$FF00 $FFFF
Vectores
ERS
79
Monochip
$0000 1K Byte Espacio de Registros $03FF
Registros de control para Entrada/Salida
NADA$0800 2K Byte RAM $0FFF NADA $8000
RAM usada para el almacenamiento de datos y como Stack
32K Byte Flash
Cdigo de programa y almacenamiento de datos constantes
$FF00 Vectores $FFFF
Vectores de Interrupcin ERS 80
ERS
81
ERS
82
DIRECCIONA PC=$8000
DECODIFICA $86 LDAA PC+1=$8001
EJECUTA
DIR PC=$8001
DEC $86 PC+1=$8002
EJE $86 A
DIR PC=$8002
DEC $D6 LDAB PC+1=$8003
EJE
DIR PC=$8003
DEC $08 PC+1=$8004
EJE
DIR PC=$8004
DEC $00 PC+1=$8005 $0800 PC $8005
EJE
DIR PC=$0800
DEC $14 B
EJE $14
$8005 PC
FANTASMA
ERS
83
DIR PC=$8005
DEC $18 PC+1=$8006
EJE
DIR PC=$8006
DEC $06 ABA PC+1=$8007
EJE A B A +
DIR PC=$8007
DEC $5A STAA PC+1=$8008
EJE
DIR PC=$8008
DEC $08 PC+1=$8009
EJE
DIR PC=$8009
DEC $01 ABA PC+1=$800A
EJE $0801 PC
DIR PC=$0801
DEC
EJE $0801 A
PC $800A $0801
FANTASMA
ERS
84
ERS
85
ERS
86
RAM y ROM usados en una Aplicacin embebida
Tipo de Memoria1. 2.
UsoTodo el cdigo del programa. Constantes tales como mensajes y tablas de bsqueda. Cualquier otra informacin que no cambia. Variables y datos del programa. Almacenamiento de datos en la pila (stack).
Flash3.
RAM
1. 2.
ERS
87
ERS
88
ERS
89
ERS
90
CISC vs. RISCCISCInstrucciones de Mquina
RISCInstrucciones de Mquina
Microcdigo de conversin
Microinstrucciones Ejecucin de microinstrucciones
Ejecucin de instrucciones
Complex Instruction Set ComputerComputadora con un Conjunto de Instrucciones ComplejasERS
Reduce Instruction Set ComputerComputadora con un Conjunto de Instrucciones Reducidas91
ERS
92
ERS
93
ERS
94
Familia de microcontroladores con CPU12
ERS
95
ERS
96
ERS
97
ERS
98
ERS
99
ERS
100
ERS
102
Miembros de la Familia HCS12 y Herramientas de Hardware y Software para el Desarrollo
ERS
103
Miembros de la Familia HCS12 Es un diseo nuevo de la familia 68HC12. La familia 68HC12 es una actualizacin de la popular familia de microcontroladores de 8 bits 68HC11. El 68HC12 tiene un bus con reloj de 8 MHz. La familia HCS12 tiene un bus con frecuencia de reloj ms alto, hasta de 32 MHz. La numeracin del sistema se muestra en la siguiente Figura.
ERS
104
Miembros de la Familia HCS12 En un inicio, el HCS12 fue diseado para automotores y procesos de control. El HCS12 tiene diseadas muchas caractersticas para ciertos objetivos, tales como: Puertos paralelos Funciones del Temporizador: entradas de captura, salidas de comparacin, acumulacin de pulsos, interrupciones en tiempo real, modulacin por ancho de pulso. Interfaz de Comunicacin Serial (SCI) Interfaz Serial con perifericos (SPI) Circuito de interface Inter-integrada (I2C) Modulo de comunicaciones de enlace de byte de datos (BDLC) Controlador de Red de area(CAN)
Freescale incluye en cada uno de los miembros del HCS12 un mdulo de depuracin (BDM) para facilitar las actividades de depuracin del software. Freescale tambin incluye caractersticas especiales con objetivo en algunas aplicaciones como: Controlador Ethernet: el MC9S12NE64 tiene un controlador de Ethernet para facilitar el acceso a Internet. Controlador de USB: el MC9S12UF32 tiene un chip controlador de USB para facilitar la interaccin con el bus USB.ERS 105
Herramientas de Desarrollo Herramientas para el desarrollo de Software Editor de texto, terminal de programacin, ensamblador cruzado, compilador cruzado, simulador, depurador a nivel fuente, ambiente integrado de desarrollo (IDE)
Hardware como herramienta de desarrollo Osciloscopio, generador de funciones, emulador de circuitos, analizador lgico, tarjeta de demostracin Solo se discutirn la tarjeta de demostracin que se 106 utilizar en el curso ERS
Herramientas para el Desarrollo de Software El editor de textos permite que el usuario pueda entrar y editar un programa. El ensamblador cruzado permite al usuario ensamblar sus programas en assembly. El compilador cruzado permite que el usuario compile sus programas escritos en lenguajes de alto nivel. El simulador permite que el usuario corra el programa de aplicacin sin la necesidad de tener presente el hardware. Una terminal de programacin permite que la PC se comunique con la tarjeta de demostracin. El depurador a nivel-de-fuente permite al usuario establecer puntos de interrupcin en sus programas, rastrear la ejecucin del programa, observar los valores de las variables del programa despus de la ejecucin, y mucho ms. El IDE combina todos los programas anteriores en un paquete para que el usuario pueda utilizar todas las actividades de depuracin del software en un solo ambiente sin la necesidad de salir de ningn programa. Se recomienda usar el software CODEWARRIOR tanto para desarrollar programas en assembly como en CERS 107
Tarjetas de Demostracin Estn disponibles muchas tarjetas de demostracin basadas en el HCS12 para aprender y poder depurar los programas de aplicacin del HCS12. Una tarjeta de demostracin tiene un MCU HCS12 y muchos chips de perifricos para ayudar a probar los programas del HCS12. Una tarjeta de demostracin tambin tiene un programa monitor para comunicarse con la PC o una estacin de trabajo donde cada usuario puede desarrollar programas de aplicacin. El programa monitor permite al usuario mostrar el contenido de los registros y las localidades de memoria, programar el contenido de los registros y de las localidades de memoria, programar puntos de interrupcin, localizar la ejecucin de una instruccin, y descargar programas dentro de la tarjeta de demostracin para ejecutarlos. La PC o la estacin de trabajo se comunica con la tarjeta de demostracin.ERS 108
Tarjeta de Demostracin Despliega los valores de los registros y de las localidades de memoria Establece los valores de los registros y de las localidades de memoria Establece puntos de ruptura Ejecuta programa de rastreo Se puede ingresar programas ensambladores directamente a la tarjeta de demostracin Desensambla el cdigo de mquina Programa el chip incluido EPROM, EEPROM y/o memoria flash. Ejecuta el programa descargado en la tarjetaERS 109
Tarjeta 9S12GC32La tarjeta de desarrollo est basada en un microcontrolador Freescale 9S12GC32. El microcontrolador cuenta con 2 KBytes de memoria RAM, 512 Bytes de memoria EEPROM, 32 KBytes de memoria Flash.
ERS
110
Puentes:1. Alimentacin de voltaje externa. Este puente alimenta a la tarjeta con la fuente externa conectada a 13. Este puente no debe estar colocado cuando la tarjeta este conectada al puerto USB de una PC. 2. Modo Monitor o modo usuario. Este puente selecciona entre la ejecucin al reset del programa de usuario cargado en flash o del programa monitor para depurar. Conectado selecciona el programa de usuario y desconectado al monitor. 3. Conector BDM. Se utiliza para programar al microcontrolador con un programador externo o utilizar el modo de background debug. 4. Conector USB. Se utiliza para conectar a la tarjeta con la PC por medio de un cable USB-B. 5. Conector del puerto serie. Estos puentes (TX, RX) conectan al convertidor USB de la tarjeta con el puerto SCI del 9S12GC32. Deben estar instalados para usar las herramientas de depuracin, como el CodeWarrior o el UBug12. Una vez programado el microcontrolador con la aplicacin de usuario, si esta utiliza el SCI, esos puentes se deben retirar. Pueden quedar instalados si el SCI no es utilizado por la aplicacin. 6. Conector de puertos P, T, B, y E.ERS 111
7. Conector de puertos AD, A y E. 8. Conector de puertos S, J, M y P. 9. Interruptor de RESET (normalmente abierto. Oprimiendo se genera RESET) 10. Led indicador de comunicacin USB. Este led muestra la comunicacin entre la herramienta de depuracin (CodeWarrior, U-Bug12) y el microcontrolador. Al descargar o depurar programas este led destellar mostrando la comunicacin entre la tarjeta y la PC. 11. Led de encendido. Este led es el indicador de encendido de la tarjeta. Enciende al conectarla a la PC con un cable USB o conectando una fuente externa en 13. 12. Conectores de 5 volts. La tarjeta puede energizar otro circuito conectndolo a cualquiera de estos puntos. El voltaje proporcionado es de 5 volts a un mximo de 100 mA si la tarjeta esta conectada al puerto USB. Si la tarjeta esta conectada con una fuente externa a 13, puede proporcionar hasta 500 mA. 13. Conexin de fuente externa. Si la tarjeta va a ser usada por una aplicacin permanente, se debe alimentar con una fuente externa con un voltaje de 8 a 12 volts. La fuente debe proporcionar al menos 150 mA.ERS 112
Instalacin de la Aplicacin y DriversInstale primero los drivers del convertidor USB de la tarjeta.IMPORTANTE Desconctese de internet antes de conectar la tarjeta por primera vez, ya que windows tratar de conectarse a windows update e instalar drivers genricos que no funcionarn con esta tarjeta. Una vez instalados los drivers, puede reconectarse nuevamente a internet
Conecte la tarjeta a un puerto USB con un cable como se muestra en la figura:
ERS
113
El Asistente para instalar nuevo hardware aparecer. Utilice la opcin de instalacin asistida para continuar.
ERS
114
Indique la ruta de los Drivers
ERS
115
ERS
116
Una vez instalado el convertidor USB se instalar el puerto com Virtual. Siga el mismo procedimiento descrito anteriormente. Una vez instalado el puerto , abra:Mi PC Panel de Control Sistema Hardware Administrador de dispositivos
Y anote en que puerto quedo el convertidor USB a Serial, ya que ser necesario para la configuracin del CodeWarrior o el U-Bug12. Observe la siguiente figura:ERS 117
ERS
118
Instalando la AplicacinCodeWarrior: Instale el CodeWarrior y posteriormente instale el service pack. Se le notificar que una versin anterior del Processor Expert est instalada. Indique que se actualice a la nueva versin. Cree un nuevo proyecto. File New Project Wizard
Asgnele un nombre y una ruta para ser guardado.ERS 119
ERS
120
Seleccione el procesador 9S12GC32 de la lista
ERS
121
Seleccione como herramienta de desarrollo nicamente al lenguaje ensamblador:
ERS
122
Seleccione ensamblado absoluto
ERS
123
Por ultimo seleccione como herramientas de depuracin al simulador de metrowerks y tambin al Monitor serial de motorola.
ERS
124
Se abrir la pantalla general de proyecto. En la parte izquierda, haga clic en la carpeta Sources y el archivo main.asm ser visible.
ERS
125
Haga doble clic en main.asm y se abrir la plantilla predeterminada en la parte derecha de la pantalla. Esta pantalla contiene un ejemplo de cmo generar archivos en ensamblador. Se puede eliminar todo el contenido de esta pantalla y crear un archivo propio. Conserve la directiva ABSENTRY apuntando a su origen para que el ensamblador apunte su vector de reset a esa etiqueta.
ERS
126
ERS
127
Un programa modificado quedara como sigue:
ERS
128
Asegrese que en la herramienta de depuracin del proyecto se muestre: Monitor. Para ensamblar el programa ejecute la accin COMPILE ( CTRL + F7) , que equivale a ensamblar. Se mostrar el resultado o los errores de la ejecucin. Para simular o depurar, ejecute la accin MAKE ( F7). Si el simulador esta activo, se abrir la pantalla del simulador. Si el monitor est activo, se abrir la ventana de depuracin. Al abrir la ventana de depuracin por primera vez se le pedir que indique el puerto por el cual se establecer la conexin. Ese puerto es el que anot en el administrador de dispositivos.ERS 129
Una vez que se le indique el puerto, procesa a depurar el ERS 130 proyecto:
ERS
131
El CPU12 y sus Registros
Estructura interna del CPU HCS12ALUA D X Y SP PC SXHINZVC B
ASM
CPU 12
Registros Un registro es un localidad de almacenamiento en el CPU. Es utilizado para mantener un dato o una direccin de memoria durante la ejecucin de una instruccin. El nmero de registros vara dependiendo de la computadora. Registros del 68HC12: Registros del CPU: realizan nicamente operaciones de propsito general (aritmticas, lgicas, control de flujo). No ocupan el espacio de memoria
Registros de entrada/salida: Se utilizan principalmente para configurar las funciones perifricas, para mantener datos transferidos de entrada/salida dentro del subsistema perifrico, y para registrar el estado de las operaciones de entrada/salida. Datos, direccin de datos, control, estado de los registros Son tratados como localidades de memoria
HC12/HCS12 RegistrosMotorola HC12/HCS12 Registros
7 15 15 15 15 15
Acumulador A
0
7
Acumulador B
0 0 0 0 0 0
8-Bit Acumuladores A y B 16-bit Doble Acumulador D Registro de ndice X Registro de ndice Y Contador de Programa Apuntador de Pila Registro de cdigo de condicin
Acumulador D X Y PC SP S X H I N Z V
C
CCRRegistro de Cdigo de condicin (Estado) Banderas S X H I N Z V C
Bits del CCR modificados por instrucciones Acarreo Bandera C V Z N H Condiciones para levantarlas Acarreo o prstamo Sobreflujo de complemento a 2s Resultado Cero MSB (signo) es 1 Si el bit 3 resulta en un acarreo o prstamo Sobreflujo Cero Negativo Interrupt Mask Medio acarreo X interrupt bit Stop disable bit
CCR Bits de ControlS X H I N Z V C
CCR Bits usados para control de operacin del HC12 Bit (Mscara) I X S
Mascara de Interrupcin Bit de interrupcin X
Uso Mscara de interrupcin Mscara de interrupcin X Deshabilitacin de alto
Alto
Acumuladores Los acumuladores A y B son registros de propsito general de 8-bit que contienen operandos y resultados de clculos aritmticos o de manipulacin de datos. El acumulador D es la concatenacin de los acumuladores A y B. Algunas instrucciones tratan a la combinacin de estos dos acumuladores de 8-bit como un acumulador doble de 16-bit .
Registros de ndice X y YEstos son usados por el modo de direccionamiento indicado. El direccionamiento indicado suma el valor de un registro de ndice a una constante o el valor de un acumulador para formar la direccin efectiva del operando. Los registros de ndice X y Y tambin pueden servir como localidades temporales de almacenamiento de datos con alguna capacidad combinacional.
Apuntador de Stack o Pila El apuntador de stack (SP) contiene la ltima direccin usada y almacenada en el stack. El CPU12 suporta un programa automtico de stack que es usado para guardar el contexto del sistema durante un llamado a subrutina o un llamado a una interrupcin. El apuntador de stack tambin puede servir como una localidad de almacenamiento temporal o como un registro de ndice.
Contador de Programa El contador de programa contiene la direccin de la siguiente instruccin que va a ser ejecutada. El contador de programa tambin sirve como registro de ndice en todos los modos de direccionamiento indicados excepto en autoincremento y autodecremento.
Registro de Cdigo de Condicin(Banderas) S Bit de Deshabilitacin de Stop Activando el bit S deshabilita la instruccin de STOP. X Bit de Mascara de Interrupcin XIRQ El bit X activa la peticin de interrupcin proveniente del pin XIRQ.
H Bandera de Medio-Acarreo La bandera H es usada solo por operaciones aritmticas en BCD. Se pone en uno cuando una instruccin ABA, ADD, o ADC produce un acarreo desde el bit 3 del acumulador A. La instruccin DAA usa la bandera H y la bandera C para ajustar el resultado correcto al formato BCD. I Bit de Interrupcin Enmascarada Activando el bit I deshabilita la fuente de interrupcin enmascarada. N Bandera Negativa La Bandera N es puesta en uno cuando el resultado de una operacin es menor que 0.
Z Bandera Cero La bandera Z se pone en uno cuando el resultado de una operacin es todo cero. V Bandera de sobreflujo en complemento a dos La Bandera V se pone en uno cuando ocurre un sobreflujo en complemento a dos. C Bandera de Acarreo/Prstamo La bandera C se pone en uno cuando una operacin de suma o resta produce un acarreo o prstamo.
El bit de AcarreoSuma de dos nmeros no signados 10110101 y 01101100 Acarreo 1111100 10110101 01101100 100100001
H=1; C = 1; S = 0; V=1; Z= 0
Suma de dos nmeros signados (Complemento a 2s ) 10110101 y 01101100 Carry 1111100 10110101 01101100 100100001
H=1; C = 1; S = 0; V=1; Z= 0
Sobreflujo (Overflow)BIT de sobreflujo para lgica de nmeros en complemento a 2sMSB de A 0 0 0 0 1 1 1 1 MSB de B 0 0 1 1 0 0 1 1 Acarreo in MSB (Ci) 0 1 0 1 0 1 0 1 Acarreo Out MSB (Co) 0 0 0 1 0 1 1 1 Suma 0 1 1 0 1 0 0 1 Bit V 0 1 0 0 0 0 1 0 Comentarios No sobreflujo Sobreflujo No sobreflujo No sobreflujo No sobreflujo No sobreflujo Sobreflujo No sobreflujo
V =1 cuando Ci = Co o V = 1 cuando (Ci xor Co)
BMS +3 = = = = 0 0 0 0
(Signo del Bit)
bms 0 0 0 1 1 1 0 1 1 0 0 0 -3 -26 -40 -102 = = = =
BMS 1 1 1 1
(Signo del Bit)
bms 1 1 0 0 0 1 0 1 1 0 0 0
0 0 0 1
0 0 1 1
0 1 0 0
0 1 1 0
1 1 1 0
1 1 0 0
1 0 1 1
1 0 1 1
(a)
+26 +40 +102
Nmero en complemento a dos
Estado del BMS 0 1
Estado de la Bandera N 0 1
(b)
Nmero Positivo Nmero Negativo
a) Ejemplos de nmeros positivos y negativos en complemento a dos. b) Sumario del estado de la bandera N.Nota: BMS=Bit Ms Significativo bms=bit menos significativo
Modos de Direccionamiento
Modos de DireccionamientoDe qu manera tiene acceso el CPU a las localidades de memoria? Una instruccin del 68HC12, consiste en un cdigo de operacin (1 o 2 bytes) y un operando (0 a 5 bytes) que direcciona la informacin Los bytes del cdigo de operacin, especifican la operacin que realizar el CPU. El primer byte de un cdigo de operacin de dos bytes, es siempre $18 Los modos de direccionamiento determinan la manera en que el CPU accede a las localidades de memoria sobre las que actuar. Direccionamiento efectivo: direccin de memoria afectada por la instruccin
Modo de Direccionamiento Casi todas las instrucciones del HC12 operan sobre la memoria. La direccin del dato sobre el que la instruccin opera es llamado la direccin efectiva de esa instruccin. Cada instruccin contiene informacin que le indica al HC12 la direccin del dato en memoria sobre el que opera. El modo de direccionamiento de la instruccin indica al HC12 cmo calcular la direccin efectiva para esa instruccin.
Modo de Direccionamiento Cada instruccin del HC12 consiste en uno o dos bytes de cdigo de operacin el cual le indica al HC12 qu hacer y qu modo de direccionamiento utilizar, seguido, cuando es necesario de uno o ms bytes que le indican al HC12, cmo determinar la direccin efectiva. Todos los cdigos de operacin de dos bytes comienzan con $18. Por ejemplo, la instruccin LDAA tiene cuatro diferentes cdigos de operacin, uno por cada uno de los 4 diferentes modos de direccionamiento.
LDAAOperacin
(Load A = Cargar A)
(M) => A o imm => A Carga A con cualquier valor en M o un valor inmediato
CCR Efectos N: Se guarda si se pone el resultado de MSB, de otro modo se borra Z: Se guarda si el resultado es $00; de otro modo se borra V: Se borra
Cdigo y Ciclos de Mquina
Modos de Direccionamiento del MC68HC12
Modos de Direccionamiento del MC68HC12
Modo de Direccionamiento Inherente (INH)Las instrucciones que utilizan este modo no utilizan bytes extra para especificar operandos porque las instrucciones tampoco necesitan operandos o bien, todos los operandos estn en los registros del CPU. El cdigo de operacin involucra a los operandos por ejemplo: NOP INX DECA
Modo de Direccionamiento Inherente (INH)Instrucciones que funcionan nicamente con los registros que estn dentro del CPU
El HC12 no puede ingresar en la memoria No hay direccin efectiva
Modo de Direccionamiento Inmediato (IMM) Los operandos para instrucciones que utilizan modo inmediato, se incluyen en la instruccin. El CPU no tiene acceso a la memoria por medio de operandos. Por ejemplo: LDAA #$55 LDX #$0800
Modo de Direccionamiento Inmediato (IMM) El valor que se utiliza es parte de la instruccin
La direccin efectiva es la direccin que sigue al cdigo de operacin
Modo de Direccionamiento Directo (DIR) Este modo nicamente puede especificar localidades de memoria en el rango de 0-255 Este modo utiliza nicamente un byte para especificar la direccin de operando Ejemplos: LDAA $20 LDAB $40
Modo de Direccionamiento Directo (DIR) Instrucciones que dan 8 LSB para direccin (8 MSB todas o 0)
8 LSB de direccin efectiva est especificada por el siguiente byte del cdigo de operacin.
Modo de Direccionamiento Extendido (EXT) En este modo, la instruccin proporciona la direccin completa de 16 bits. Ejemplo: LDAA $9000 LDAB $FE60
Modo de Direccionamiento Extendido (EXT) Instrucciones que tienen los 16 bits de direccin para poder ingresar a ellas.
La direccin efectiva est especificada por los dos bytes que suceden al cdigo de operacin.
Modo de Direccionamiento Relativo (REL)El modo de direccionamiento relativo se utiliza solo en instrucciones de bifurcacin o de bifurcacin larga. Las instrucciones de bifurcacin condicionales cortas y largas, utilizan exclusivamente modo relativo Instrucciones de bifurcacin: Consiste en un cdigo de operacin de 8 bits y un desplazamiento signado de 8 bits, en el que el byte siguiente del cdigo de operacin, especifica el largo de la bifurcacin El modo relativo corto puede especificar un rango de -128 ~ +127. Trate el offset como un numero signado; agregue al offset en la direccin que sigue a la instruccin actual para obtener la direccin de la instruccin a ramificar como sigue:
Modo de Direccionamiento Relativo (REL)Instruccin de bifurcacin larga: Dos bytes siguiendo el cdigo de operacin especifican que tan lejos llega la bifurcacin, que consiste en un cdigo de operacin de 8 bits y un desplazamiento signado de 16 bits. El rango del modo relativo largo comprende entre -32768 ~ +32767. Trate el desplazamiento como un nmero no signado; agregue el offset a la direccin que sigue a la instruccin actual para obtener la direccin de la instruccin a bifurcar como sigue: Cuando escriba un programa en lenguaje assembly, no tiene que calcular el desplazamiento. Indique a que direccin es a la que quiere ir y entonces el ensamblador calcula el desplazamiento.
Las instrucciones de bifurcacin son de 2 o 4 bytes de longitud. Todas las bifurcaciones son tomadas desde la direccin de la siguiente instruccin. El destino de la bifurcacin es calculada sumando un byte signado de desplazamiento a la OCL +2 o +4.
Modo de Direccionamiento Relativo (REL)
Modo de Direccionamiento Indexado(No incluyen modos indirectos)
Modo de Direccionamiento Indexado (IDX) Este modo utiliza la suma de un registro de ndice (X, Y, PC, o SP) y un desplazamiento para especificar la direccin de un operando. El desplazamiento puede ser un valor signado de 5 bits, 9 bits, 16 bits, o el valor en el acumulador A, B, o D. Tambin son opciones el incremento automtico previo o posterior, o el decremento automtico previo o posterior, de entre -8 y +8 bits. Puede utilizarse el PC como registro de ndice para cualquier modo de auto-incremento o auto-decremento. Se puede soportar un indexado indirecto con un desplazamiento de 16 bits o aceptar como desplazamiento al contenido del acumulador D.
Modo de Direccionamiento Indexado (IDX)Direccionamiento Indexado con Desplazamiento Constante de 5 bits. La base del registro ndice puede ser X, Y, SP, o PC El rango del desplazamiento es de -16 a +15 Ejemplo: ldaa stab $6,X -$8,Y
Direccionamiento Indexado con Desplazamiento Constante de 9 bits La base del registro ndice puede ser X, Y, SP, o PC El rango del desplazamiento es de -256 a +255 Ejemplo: ldaa stab $FF,X -$20,Y
Modo de Direccionamiento Indexado (IDX)Direccionamiento Indexado con Desplazamiento Constante de 16 bits La base del registro ndice puede ser X, Y, SP, o PC Este modo permite el acceso a cualquier localidad en el rango de 64K Ejemplos: ldaa stab 2000,X 4000,Y
Modo de Direccionamiento Indexado (IDX)Direccionamiento Indexado Auto Pre/Post incremento/decremento El registro de ndice base puede ser X, Y, SP. El registro ndice puede incrementarse o decrementarse con un valor entero inclusive antes o despus que tenga lugar el indexado. El registro ndice mantiene el valor cambiado despus del indexado. El valor incrementa o disminuye en un rango de -8 hasta -1 o de 1 hasta 8. El valor debe estar relacionado al tamao del operando a la instruccin actual. Ejemplos: staa ldx 1,-SP 2,SP+
Modo de Direccionamiento Indexado (IDX)Direccionamiento Indexado con desplazamiento por Acumulador La direccin efectiva del operando es la suma del acumulador y del registro de ndice base. El registro base puede ser X, Y, SP o PC. El acumulador puede ser el A o el B de 8 bits o el acumulador D de 16 bits. Ejemplo: ldaa stab ldaa B,X B,Y D,X
Modo de Direccionamiento Indexado (IDX)Direccionamiento Indirecto Indexado por Acumulador D El valor en D se suma al valor en el registro de ndice base para formar la direccin de la localidad de memoria que contenga la direccin de la localidad de memoria afectada por la instruccin. Los corchetes distinguen este modo de direccionamiento del acumulador D con desplazamiento indexado. Por ejemplo: LDAA [D,X]
Resumen de Modos de Direccionamiento
Algunas instrucciones tienen dos direcciones efectivas: MOVB $2000, $3000 Mueve el byte de la direccin $2000 a la $ 3000 MOVW 0, X, 0, Y Mueve la palabra de la direccin apuntada por X a la direccin apuntada por Y
Tipos de Datos El 68HC12 soporta: Bits Enteros signados de 5 bits Enteros signados y no signados de 8 bits Enteros signados de 9 bits Nmeros BCD de dos dgitos, 8 bits Enteros signados y no signados de 16 bits Direccionamiento efectivo de 16 bits Enteros signados y no signados de 32 bits
Un entero con mltiples bytes se almacena en la memoria desde el byte ms significativo al byte menos significativo, comenzando desde una direccin menor a una mayor. Un nmero puede representarse en formato binario, octal, decimal o hexadecimal.
CONJUNTO DE INSTRUCCIONES
Instrucciones por CategoraMovimiento de datos Modificacin de datos Carga en registros Almacena en registros Transferencia entre registros Movimiento de memoria a memoria Decremento/Incremento Limpia/Coloca Corrimiento/Rotacin Aritmtica Lgica Cdigo de condicin Prueba de datos Bifurcacines condicionadas Lazos primitivos Bifurcaciones por bit Salto/Bifurcacin Interrupcin Difusas Miscelneas
Toma de decisin
Control de flujo Otras
Instruccin ldaa y staa
Instrucciones de Carga
Instrucciones de Almacenamiento
Instrucciones de Transferencia
Instrucciones de Intercambio
Instrucciones de Movimiento
Instrucciones de Suma
Instrucciones de Resta
Un ejemplo de Aritmtica Simple con las instrucciones vistas anteriormenteEscriba un programa que sume los valores de las localidades de memoria siguientes $0800, $0801, y $0802, y guarde el resultado en $0810. Solucin: Paso 1 A m[$0800] Paso 2 A A + m[$0801] Paso 3 A A + m[$0802] Paso 4 $0810 A ldaa adda adda staa $0800 $0801 $0802 $0810
EjemploEscriba un programa que sume dos nmeros de 16 bits, que estn almacenados en $0800-$0801 y $0802-$0803, y guarde la suma en $0900-$0901. Solucin: org ldd addd std end La Bandera de Acarreo - Corresponde al bit 0 del registro CCR. - Se pone en 1 cuando el resultado de la suma produce un acarreo de 1. - Se pone en 1 cuando el resultado de la resta produce un prestado de 1. - Habilita al usuario para implementar aritmtica de multiprecisin. $A000 $0800 $0802 $0900
EjemploEscriba un programa que sume dos nmeros de 4 bytes almacenados en $0800$0803 y en $0804-$0807, guardar el resultado en $0810-$0813. Solucin: La adicin comienza con el bit menos significativo y contina hasta el bit ms significativo.org ldd addd std ldaa adca staa ldaa adca staa end $B000 $0802 ; sumar y guardar los dos bytes menos significativos $0806 ; $0812 ; $0801 ; sumar y guardar los segundos bytes ms significativos $0805 ; $0811 ; $0800 ; sumar y guardar los bytes ms significativos $0804 ; $0810 ;
EjemploEscriba un programa que reste el nmero hexadecimal almacenado en $0804$0807 al nmero hexadecimal almacenado en $0800-$0803, guardar el resultado en $0800-$0803. Solucin: La resta inicia en el bit ms significativo y contina hacia el bit ms significativo.org ldd subd std ldaa sbca staa ldaa sbca staa end $C000 $0802 $0806 $0802 $0801 $0805 $0801 $0800 $0804 $0800 ; restar y guardar los dos bytes menos significativos ; ; ; restar y guardar la diferencia de los segundos bytes ; ms significativos ; ; restar y guardar la diferencia de los bytes ms significativos ; ;
EjemploEscriba un programa que sume dos nmeros de 4 bytes almacenados en $0800$0803 y en $0804-$0807, guardar el resultado en $0810-$0813. Solucin: La adicin comienza con el byte menos significativo y contina hasta el byte ms significativo.org ldd addd std ldaa adca staa ldaa adca staa end $B000 $0802 ; sumar y guardar los dos bytes menos significativos $0806 ; $0812 ; $0801 ; sumar y guardar los segundos bytes ms significativos $0805 ; $0811 ; $0800 ; sumar y guardar los bytes ms significativos $0804 ; $0810 ;
Instrucciones de Decremento
Instrucciones de Incremento
Instrucciones de Comparacin
Instrucciones de Prueba
Instrucciones Lgicas
Operaciones Lgicas
Instrucciones de Borrado, Complemento y Negacin
Instrucciones de Manipulacin y Prueba de Bits
Instrucciones de Cambio y Rotacin
Instrucciones de Cambio y Rotacin
Operaciones de Desplazamiento
Instrucciones de Bifurcacin(Cortas)
Instrucciones de Bifurcacin(Cortas)
Instrucciones de Bifurcacin(Largas)
Instrucciones de Bifurcacin(Largas)
Ejercicio Escribir un cdigo en el lenguaje assembly para sumar un arreglo de N nmeros y escribir el resultado en las localidades de memoria $0800 y $0801 Asignacin de espacio para variables y resultados Inicializar Programa Datos
EjemploN sum i equ org rmb rmb org ldaa staa staa staa loop ldab cmpb beq ldx abx ldab ldy aby sty inc bra bra db 10 $0800 2 1 $8000 #0 i sum sum + 1 i #N fin #data 0,x sum sum i loop fin 1,2,3,4,5,6,8,7,10,9 ; inicializa el valor de N, equ=igual ; definicin del origen para resultados y variables ; rmb=Bytes de Reserva de Memoria.
; origen del programa ; Inicializa la variable i y la suma a 0
; etiqueta loop ; compara el nmero de veces que se retoma loop ; data- direccin de inicio de los nmeros que sern ; sumados ; Modo de direccionamiento Indexado
fin data
; bifurcacin incondicional ; interrupcin de software ; db- define byte. Se definen 10 valores de datos ; los valores son almacenados al final del programa
Instrucciones de Prueba de Bits para Bifurcacin
Bifurcacin corta Usar BRSET, PORTA, #$0F, FINISH Este comando resulta en una operacin de bifurcacin si alguno de los bits entre el 3 y el 0 de la variable PORTA est en 1. El objetivo de la operacin bifurcacin es la etiqueta FINISH. #$0F define la mscara utilizada en la variable PORTA. Esta operacin permite que el objetivo de la bifurcacin est entre -128 a +127 bytes desde la instruccin que sigue de la BRSET.
El Bit de Condicin de las Instrucciones de bifurcacin[] brclr (opr),(msk),(rel) [] [] brset (opr),(msk),(rel) []Donde opr especifica la localidad de memoria a comprobar y debe ser especificado si el modo de direccionamiento es directo, extendido o indexado. msk es una mscara de 8 bits que especifica los bits de la localidad de memoria que sern comprobados. Los bits del byte de memoria que sern comprobados corresponden a la posicin de los 1s en la mscara. rel es el desplazamiento de la bifurcacin y se especifica en el modo relativo de 8 bits. Por ejemplo, en la secuencia loop inc count brclr $66,$E0,loop la rama ser elegida si los tres bits ms significativos de $66 son unos.
Pila o STACK Es un grupo de localidades de memoria en el que los datos son almacenados temporalmente. Subrutinas, interrupciones.
Los datos en el stack pueden accederse en una sola direccin (de la direccin ms alta a la ms baja en el caso del HC12). El apuntador del stack (SP) rastrea la direccin ms alta del stack. Se debe tener suficiente espacio disponible, asignado para el stack, para prevenir que los datos o programas se corrompan. Se debe meter para almacenar datos en el stack. Se debe sacar para remover los datos del stack. El nmero de operaciones meter y sacar, debe estar balanceado.
Instrucciones de Pila
Instrucciones de Pila
La operacin PULL trabaja exactamente opuesta a PUSH. En el HCS12GC32 la RAM termina en la localidad $0FFF. Poner el SP en $1000 es usualmente una buena opcin, puesto que el Stack crece hacia abajo
Instrucciones de Salto y Subrutinas
Ejemplos de la pila antes y despus de la ejecucin de instrucciones
Ejemplos de la pila antes y despus de la ejecucin de instrucciones
Ejemplo$0000 $03FF $0800 $0FFF
$8000
$C000
$FF00 $FFFF
Vectores
Monochip
EjemploLDAA #$02 STAA DDRA TOP LDAA PORTA ANDA #$01 BEQ TOP JSR DELAY BSET PORTA,$02 LDAA #$25 DLY JSR DELAY DECA BNE DLY BCLR PORTA,$02 CERRADO BRSET PORTA,$00,CERRADO JSR DELAY BRA TOP INIC
Instrucciones de Multiplicacin y Divisin
Multiplicacin y DivisinEjemplo Escribir una secuencia de instrucciones para multiplicar los nmeros de 16 bits almacenados en $0800-$0801 y en $0802-$0803, y guardar el producto en $0900$0903. Solucin: ldd ldy emul sty std $0800 $0802 $0900 $0902
Ejemplo Escribir una secuencia de instrucciones para dividir el nmero de 16 bits almacenado en $0820-$0821 entre el nmero de 16 bits almacenado en $1005-$1006, y guardar el cociente y el residuo en $0900 y $0902, respectivamente. Solucin: ldd ldx idiv stx std $0805 $0820 $0900 $0902 ; guardar el cociente ; guardar el residuo
Instrucciones de adicin para BCD
Nmeros y Adiciones en BCD Cada dgito est codificado por 4 bits. Dos dgitos estn empaquetados en un byte. La suma de dos nmeros BCD se realiza mediante una suma binaria y una operacin de ajuste usando la instruccin DAA. La instruccin DAA puede ser aplicada despus de una operacin ADDA, ADCA, y ABA. Simplifica la conversin de E/S. Por ejemplo, la secuencia de instruccionesLDAA $1000 ADDA $1001 DAA STAA $1002 Suma los nmeros BCD almacenados en $1000 y $1001 y guarda el resultado en $1002.
Conjunto de Instrucciones y su tiempo de ejecucin (1 de 35)
(2 de 35)
(3 de 35)
(4 de 35)
(5 de 35)
(6 de 35)
(7 de 35)
(8 de 35)
(9 de 35)
(10 de 35)
(11 de 35)
(12 de 35)
(13 de 35)
(14 de 35)
(15 de 35)
(16 de 35)
(17 de 35)
(18 de 35)
(19 de 35)
(20 de 35)
(21 de 35)
(22 de 35)
(23 de 35)
(24 de 35)
(25 de 35)
(26 de 35)
(27 de 35)
(28 de 35)
(29 de 35)
(30 de 35)
(31 de 35)
(32 de 35)
(33 de 35)
(34 de 35)
(35 de 35)
Tiempo de Ejecucin de un Programa El HCS12 utiliza como referencia de tiempo al reloj E. La frecuencia del reloj E es la mitad de la del oscilador de cristal. Hay muchas aplicaciones que requieren la generacin de retardos de tiempo. La creacin de retardos de tiempo implica dos pasos: Seleccionar una secuencia de instrucciones que toman cierta cantidad de tiempo para llevarse a cabo. La repeticin, por una cantidad de tiempo apropiado, de las instrucciones seleccionadas. Por ejemplo, la secuencia de instrucciones de la siguiente diapositiva tarda 40 ciclos del reloj E para ejecutarse. Debido a la repeticin de las instrucciones, el retardo de tiempo se puede crear en cualquier momento.
Asumir que el HCS12 trabaja con el oscilador de cristal con una frecuencia de 6 MHz, entonces la frecuancia E es de 8 MHz, por lo tanto su periodo de reloj es de 125 ns. Por esta razn la secuencia de instrucciones de la siguiente diapositiva tardara 5 ms para ejecutarse.
Tiempo de Ejecucin de un Programaloop psha pula psha pula psha pula psha pula psha pula psha pula psha pula nop nop dbne x,loop ; 2 ciclos E ; 3 ciclos E
; 1 ciclo E ; 1 ciclo E ; 3 ciclo E
Ejemplo Escribir un programa de bucle para crear retardos de 100 ms. Solucin: Un retardo de 100 ms se puede crear repitiendo el bucle previo 20,000 tiempos. La siguiente secuencia de instrucciones crea un retardo de 100 ms. ldx #20000 loop psha ; 2 ciclos E pula ; 3 ciclos E psha pula psha pula psha pula psha pula psha pula psha pula nop ; 1 ciclo E nop ; 1 ciclo E dbne x,loop ; 3 ciclos E
Ejemplo Escribir una secuencia de instrucciones para crear un tiempo de retardo de 10 segundos. Solucin: Repitiendo durante 100 tiempos la secuencia de instrucciones previa, se podr crear un retardo de 10 segundos.ldab out_loop ldx in_loop psha pula psha pula psha pula psha pula psha pula psha pula psha pula nop nop dbne dbne #100 #20000 ; 2 ciclos E ; 3 ciclos E
x,in_loop b,out_loop
; 1 ciclo E ; 1 ciclo E ; 3 ciclo E ; 3 ciclo E
Programando en Assembly el HCS12
ERS
270
Las Tres Secciones de un Programa en Assembly HCS12/MC9S12I.- Directivas del Ensamblador Definen datos y smbolos Reservan e Inicializan localidades de memoria Fijan condiciones de ensamblado y liga Especifican formato de salida Especifican el final del Programa
II.- Instrucciones de Lenguaje Assembly Instrucciones HCS12/MC9S12
III.- Comentarios Explican la funcin de una sola o un grupo de ERS 271 instrucciones
ERS
272
Identificar los 4 Campos de una InstruccinEjemploloop ADDA #$40 ; smale 40 al acumulador A ; es una etiqueta ; es el mnemotcnico de la instruccin ; es operando ; es un comentario ; copiar de memoria a memoria (1) loop (2) ADDA (3) #$40 (4) smale 40 al acumulador A movb 0,X,0,Y
(1) No hay etiqueta (b) movb; es el mnemotcnico de la instruccin (c) 0,X,0,Y; es el campo del operador (d) ; copiar de memoria a memoria; es un comentario
ERS
273
Directivas del Ensamblador END (End Assembly) Indica al ensamblador el Final del Programa para que pueda ser procesado. Cualquier declaracin que se haga despus de END es ignorada.
ORG (Set program counter to Origin) El ensamblador usa un contador para indicar la localidad de memoria donde el prximo cdigo de mquina deber ser colocado. Esta directiva asigna un nuevo valor al contador del ensamblador. La secuencia:
ORG $1000 LDAB #$FF pone el byte del cdigo de operacin para la instruccin LDAB #$FF en la localidad de memoria $1000ERS 274
EQU (Equate a Symbol to a Value) - Con esta directiva le asignamos un valor a una etiqueta. - Al utilizar esta directiva logramos que el programa sea ms entendible al leerlo. - Ejemplos: arr_cnt EQU 100 oc_cnt EQU 50
ERS
275
DS (Define Storage): La directiva DS reserva localidades de memoria contiguas por medio del incremento del contador de localidades del ensamblador por el nmero de bytes especificado en la expresin . El bloque de memoria reservado no es inicializado con ningn valor. DS $5 ;reserva $5 bytes en memoria RAMERS 276
DC (Define Constant): La directiva DC reserva localidades de memoria e inicializa valores a estas. Se pueden definir constantes de diferentes tamaos DC.B $25 ;Define un byte DC.W $1234 ;Define una palabra DC.L $12345678 ;Define cuatro bytes
array
org $800 DC.B $11,$22,$33,$44
msg
DC.B Por favor ingrese 1, 2 o 3: ERS
277
Macro-
Inicia un macro definido por el usuario
Nombre que se le asigna a un grupo de instrucciones. Se utiliza MACRO y ENDM para delimitar el macro. Ejemplo de macro: sumOf3 ldaa adda adda endm macro arg1 arg2 arg3 arg1,arg2,arg3
-
Para invocar un macro anteriormente declarado: escriba debajo del nombre y de los argumentos del macro. sumOf3 $1000,$1001,$1002 se reemplaza por ldaa $1000 adda $1001 adda $1002ERS 278
ABSENTRY. (Application Entry Point). Especifica el punto de entrada en un programa en assembly absoluto ABSENTRY
ERS
279
Diseo de Software de Arriba a AbajoLenguaje de alto nivel
Cdigo Assembly
Cdigo de mquinaERS 280
Proceso del Desarrollo de Software Definicin del Problema: Identificar que deber hacer. Desarrollar un Algoritmo. Un Algoritmo es el plan general que tenemos a la mano para resolver problemas. Un Algoritmo tambin puede ser expresado con el siguiente formato: Step 1 Step 2
Otra forma de expresar el plan general es utilizando un Diagrama de Flujo o un pseudo cdigo.
Programando. Convertir el Algoritmo o Diagrama de Flujo en un programa. Pruebas del programa. Mantenimiento del programa.ERS 281
Diseo Codificacin Pruebas del mdulo Pruebas del Sistema DocumentacinERS 282
Entender el problema Cmo es que funciona el teclado? Dnde quedan las entradas y las salidas provenientes del teclado? Cul es el algoritmo a utilizar? Dnde se almacenar la salida?Interfaz del teclado
Primero Pensar, Despus ProgramarPreprocesamiento Identificacin de la tecla Post-proceso
Disear en Niveles Simplificar el problema (Diseo Jerrquico)
Almacenar el valor
Identificar si alguna tecla est o no presionada Verificar si hay teclas presionadas Retraso para quitar rebote Qu tecla est presionada? Almacenar y grabar el valor una sola vez ERS
283
Asegurarse de que cada nivel est correctoPreprocesamiento
Interfaz del teclado
Identificacin de la tecla
Post-proceso
Posponer detallesAlmacenar el valor
Redefinir el diseo
ERS
284
Diseo de Software de Abajo a Arriba Programacin estructurada Cualquier programa puede construirse utilizando tres estructuras bsicas: Una secuencia Una decisin Una repeticin
PseudocdigosPseudo cdigo secuencia Comienza A ... Termina A Comienza B ... Termina B Comienza C ... Termina C Pseudo cdigo decisin Si X entonces Comienza A Termina A de otro modo Comienza B Termina B fin Si XERS
Pseudo cdigo repeticin Mientras X Hacer Comienza A Termina A tambin Comienza B Termina B Modifica X Fin Mientras X285
Smbolo de un Diagrama de FlujoInicio A
Proceso Entrada o salida si A Conector en pginaERS
Subrutina
B Conector fuera de Pgina
Decisin no
286
ERS
287
ERS
288
Cuando escriba un programa use una buena estructura no un espagueti
ERS
289
Lenguaje de programacin assembly estructurado Los programas son frecuentemente diseados usando un pseudocdigo como herramienta de diseo. Despus de completar el diseo se deber escribir el cdigo en lenguaje assembly. Existen dos partes del cdigo en lenguaje assembly para hacer un programa estructurado. La primera es un comentario. Esto puede tomarse normalmente del documento en donde se encuentra el diseo en pseudocdigo. La segunda parte es el cdigo que implementa el comentario.
ERS
290
ERS
291
Veamos tres elementos de la programacin estructurada que pueden aparecer en el lenguaje assembly
ERS
292
Secuencia La secuencia es directa. Deber haber un bloque de comentarios describiendo que es lo que hace la siguiente seccin del cdigo en assembly. Recuerde que el flujo del programa entra en la parte superior y sale en la parte inferior. No se debe entrar o salir del cdigo entre has A y termina A, excepto si hay un llamado y retorno de una subrutina o una interrupcin. No salte hacia dentro o hacia fuera dentro del bloque de una secuencia.
ERS
293
Ejemplo (secuencia)Escriba un programa para restar el contenido de la localidad de memoria $1005 a la suma realizada entre las localidades de memoria $1000 y $1002, almacenar la diferencia en $1010.
Solucin:
*******************************************; Programa para restar el contenido de ;la localidad de memoria $1005 a la suma ;realizada entre las localidades de memoria $1000 ; y $1002, almacenar la diferencia en $1010 **********************************************************
org ldaa adda suba staaERS
$8000 $1000 $1002 $1005 $1010294
end
Ilustracin de una Multiplicacin de 32 bits por 32 bits Dos nmeros de 32 bits M y N son divididos en dos mitades de 16 bits. M = MHML N = NHNL
ERS
295
Ejemplo Escribir un programa que multiplique dos nmeros no signados de 32 bits almacenados en M~M+3 y N~N+3, respectivamente. Guardar el producto en P~P+7. Solucin: org M ds.b N ds.b P ds.b org ldd ldy emul sty std ldd ldy emul sty std ldd ldy emul
$1000 4 4 8 $1500 M+2 N+2 ; calcular MLNL P+4 P+6 M N ; calcular MHNH P P+2 M N+2 ; calcular MHNLERS 296
; sumar MHNL a la localidad de memoria P+2~P+5 addd P+4 std P+4 tfr Y,D adcb P+3 stab P+3 adca P+2 staa P+2 ; enviar el acarreo al byte ms significativo ldaa P+1 adca #0 ; sumar el acarreo a la localidad P+1 staa P+1 ; ldaa P ; sumar el acarreo a la localidad P adca #0 ; staa P ; ; calcular MLNH ldd M+2 ldy N emulERS 297
; sumar MLNH a la localidad de memoria P+2 ~ P+5 addd P+4 std P+4 tfr Y,D adcb P+3 stab P+3 adca P+2 staa P+2 ; enviar el acarreo al byte ms significativo clra adca P+1 staa P+1 ldaa P adca #0 staa P end
ERS
298
Ejemplo Escribe un programa que convierta al formato BCD el nmero de 16 bits almacenado en $1000-$1001, guardar el resultado en $1010-$1014. Convertir cada dgito BCD en cdigo ASCII y guardarlo en un byte. Solucin: -Un nmero binario puede ser convertido al formato BCD usando repetidamente la divisin entre 10. - El nmero binario de 16 bits ms largo es 65535 el cual tiene cinco dgitos decimales. - La primera divisin entre 10 genera el dgito menos significativo, la segunda divisin entre 10 obtiene el segundo dgito menos significativo, y as sucesivamente.data result org dc.w org ds.b org ldd ldy ldx idiv addb stab xgdx ldx $1000 12345 $1010 5 $1500 data #result #10 #$30 4,Y #10 ERS 299 ; convertir el dgito en cdigo ASCII ; guardar el dgito menos significativo ; se realiza una prueba al dato ; bytes reservados para guardar el resultado
idiv adcb stab xgdx ldx idiv addb stab xgdx ldx idiv addb stab xgdx addb stab end
#$30 3,Y #10 #$30 2,Y #10 #$30 1,Y #$30 0,Y
; guardar el segundo digito menos significativo
; guardar el dgito medio
; guardar el segundo dgito ms significativo
; guardar el dgito ms significativo
ERS
300
La construccin decisin y su Pseudocdigo
Construccin IF
if(G2){ /es Mayor();/ }
ERS
301
Ejemplo de Construccin IF
Lenguaje C if (G2>0){ G2=G2; }
Ensamblador tst G2 bmi sig com G2 sig
ERS
302
Construccin IF - ELSE
ERS
if(c){ /*P1*/ } else{ /*P2*/ }
303
Termostato Simple Usando IF - ELSE
Lenguaje C if(TEM > Tset) { APAGAR(); } else { ENCENDER(); }ERS
Ensamblador inicio Idaa TEM cmpa #Tset ble pren jsr apag bra cont jsr adel pren jsr ene
304
Programas con Lazos(repeticin) Los tipos de programas con lazos son: finitos e infinitos. Mecanismos para hacer Lazos: do sentencia S forever For i = n1 to n2 do sentencia S o For i = n2 downto n1 do sentencia S While C do sentencia S Repeat sentencia S until C Los programas con lazo se implementan usando instrucciones de bifurcacin no condicionadas o condicionadas, y la ejecucin de stas instrucciones dependen del contenido en el registro CCR.ERS 305
Registro de Cdigo de Condicin
Hay cuatro tipos de instrucciones de bifurcacin: Bifurcacin incondicional: siempre se ejecuta. Bifurcaciones Simples: Se elige esta instruccin cuando un bit especfico del registro CCR se encuentra especficamente en un estado. Bifurcacin no signada: Esta instruccin es elegida cuando la comparacin de dos nmeros sin signo da como resultado una combinacin especfica de bits en el registro CCR. Bifurcacin signada: Se elige esta bifurcacin cuando la comparacin entre cantidades con signo da como resultado una combinacin especfica de bits en el registro CCR. Existen dos categoras de Instrucciones de Bifurcacin: Bifurcaciones Cortas: dentro del rango de -128 ~ +127 bytes. Bifurcaciones Largas: dentro del rango de 64KB.ERS 306
Instrucciones de Comparacin y Prueba Las banderas del registro CCR necesitan ser reestablecidas antes que de que una instruccin de bifurcacin condicional sea ejecutada. El HCS12 proporciona un grupo de instrucciones para probar las banderas de condicin.
ERS
307
Instrucciones de Lazo Primitivas El HCS12 proporciona un grupo de instrucciones para que con cada incremento o decremento en el contador del lazo se pueda determinar si el lazo debe continuar. El rango de la rama se encuentra entre $80 (-128) a $7F (+127).
ERS
308
ERS
309
ERS
310
Ejemplo Escribir un programa que sume un arreglo de N nmeros de 8 bits y guarde el resultado en las localidades de memoria $0800~$0801. Usar la estructura de lazo For i = n1 to n2 do. Solucin:N sum i equ org rmb rmb org ldaa staa staa staa ldab cmpb beq ldx abx ldab ldy aby sty inc bra swi dc.b end 20 $0800 2 1 $8000 #0 i sum sum+1 i #N done #array 0,X sum sum i loop
; sum 0 ; ; is i = N?
loop
; sum sum + array[i] ; ; ; ; incrementar el contador de lazo en 1
done Array
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
ERS
311
Ejemplo Escribir un programa para encontrar el mximo elemento de un arreglo de N elementos de 8 bits, usar la estructura de lazo: repeat S until C Solucin:
ERS
312
equ org max_val ds.b org ldaa staa ldx ldab loop ldaa cmpa bge ldaa staa chk_end dex dbne forever bra array db db end
N
20 $0800 1 $8000 array max_val #array+N-1 #N-1 max_val 0,x chk_end 0,x max_val
; establecer a array[0] temporalmente como el max ; ; comenzar en el final del array ; establecer el contador de lazo en N - 1
b,loop ; termino toda la comparacin? forever 1,3,5,6,19,41,53,28,13,42,76,14 20,54,64,74,29,33,41,45
ERS
313
La construccin de repeticin y su pseudocdigo
Construccin DO - WILE
do{ /*Pro*/ } while (G);
ERS
314
Caracter de Entrada Usando DO - WHILELenguaje C do{ datrec=leecar(); a[i]=datrec; i++ } while (datrec != \r);
Ensamblador loop jsr leecar stab 1,x+ cmpb #CR bne loop adelERS 315
Lazo WILE
while(c){ /*pro*/ }
ERS
316
Ejemplo de Lazo WHILELenguaje C datrec=leecar(); while(datrec != \r){ a[i]=datrec; i++; datrec=leecar(); }
leecar
leecar
almacena car car = CR? si ade no
Ensamblador start jsr leecar loop cmpb #CR beq ade stab 1,x+ jsr leecar bra loop ade ---
ERS
317
El Lazo FOR
ERS
for(S1;C;S2){ /*P*/ }
318
Lazo Usando la Construccin FORLenguaje C for(x=100;x!=;a--){ Proc() }
Ensamblador inicio ldab #100 lazo cmpb #0 beq adel jsr Proc decb bra lazo adel --ERS 319
La Construccin CASEswitch(c){ case G1: /*PROC1*/ break; case G2: /*PROC*/ /*PROC2*/ break; default: /*PROC3*/ }
ERS
320
Comando Analizador de Letras Usando la Construccin CASELenguaje C switch(leecar()){ case A: comA(); break: case B: comB(); break; default: Dcom(); }
Ensamblador inicio jsr leecar cmpb #A bne caseb jsr comA bra adel caseb cmpb #B bne dcom jsr comB bra adel Dcom jsr Dcom adel --321
ERS
Ms ejemplos de programacin del HCS12ERS 322
Subrutinas Una secuencia de instrucciones pueden ser llamadas desde diferentes partes del programa. Permiten que una misma operacin se ejecute con diferentes parmetros. Simplifica el diseo de un programa complejo utilizando el enfoque de divide y venceras. Instrucciones relacionadas con las llamadas a subrutinas:[] [] [] [] bsr jsr rts call rtc [] [] [] [] ; bifurcacin a una subrutina ; salta a una subrutina ; regresa a la subrutina ; para usar con la memoria expandida ; regresa de CALL
donde es el desplazamiento a la subrutina es la direccn de la subrutina y se especifican con los modos de direccionamiento ERS DIR, EXT, o INDexado.
323
Consideraciones de Diseo para una Subrutina Independencia del programa principal Cdigo correctamente estructurado Cmo pasan los datos entre la subrutina y el programa principal? Modifica y restaura los registros? Qu debe instalar el programa principal? Dnde coloca la subrutina a sus variables locales? ERS 324
Diseo Modular El diseo jerrquico y estructurado es la base del diseo modular. Funciones y Subrutinas. Mdulo de una sola funcin. Mdulo de acoplamiento. Control de acoplamiento Acoplamiento de datosERS 325
Estructura de un Programa
ERS
326
El Proceso de una Subrutina
ERS
327
Comunicacin Entre Procesos Comunicacin entre procesos. Pase de parametros Transferencia de registros Informacin en reas Globales de Datos Informacin en reas Locales de Datos Informacin en la Pila o Stack Uso de direcciones en vez de valores Uso de bits CCRERS 328
Temas relacionados con el llamado a Subrutinas Pase de Parmetros Usar registros Usar pilas Usar la memoria global Asignacin de Variables Locales Asignadas por el solicitante El modo ms eficiente para asignar las variables locales es usando las siguientes instrucciones leas -n,sp ; Asignar n bytes en la pila para las variables locales Desasignacin de Variables locales Ejecutado por la subrutina El modo ms eficiente es unsando la siguiente instruccion leas n,sp ; Desasignar n bytes de la pila.329
Retorno de Resultados Usar registros Usar la pila (el solicitante crea una localidad en donde se colocar el resultado) Usar la memoria global
ERS
Trama de Pila La regin de la pila que almacena los parmetros entrantes, la direccin de retorno de la subrutina, las variables locales, y los registros guardados se refieren a la trama de pila. La trama de pila tambin es tambin llamada registro de activacin.
ERS
330
Trama de PilaEjemplo Dibujar una trama de pila para el siguiente segmento de programa despus de la ejecucin de la instruccin leas 10,sp:ldd #$1234 pshd ldx #$4000 pshx jsr sub_xyz sub_xyz pshd pshx pshy leas -10,sp Solucin: La trama de pila se muestra en la Figura.
ERS
331
Programa PrincipalORG VAL ORG LDS LDAA JSR FCB SWI $A00 FCB $800 #$BFF VAL ROTLFT 4BACK
SubrutinaROTLFT ORG $900 PSHX PSHB TSX LDX 3,X LDAB 0,X TSTB BEQ AHEAD DECB ASLA ADCA #0 BRA BACK TSX INC 4,X BNE RET INC 3,X PULB PULX RTS 332
$0A
AHEAD
RET
ERS
Programa PrincipalORG $B00 LENGTH FCB 4 ORG RMB $B10 1
SubrutinaORG $900 ; Save registers ZROCNT PSHA PSHB PSHX ;Get table length TSX LDX 4,X LDX 2,X LDAA 0,X ; Get table address TSX LDX 4,X LDX 0,X ; Initialize zero counter CLRB ; At end of table? AGAIN TSTA BEQ RET ; Is table entry zero? TST 0,X BNE AHEAD ERS
Subrutina (cont); Increment counter INCB ; Decrement loop counter and branch AHEAD DECA INX BRA AGAIN ; Send result to main program RET TSX LDX 4,X LDX 4,X STAB 0,X ; Adjust return address TSX LDD 4,X ADDD #6 STD 4,X ; Restore registers PULX PULB PULA RTS
ANS
ORG $800 ; Initialize stack and call subroutine LDS #$BFF JSR ZROCNT ; Addresses of parameters ; Call by reference TABLE FDB TABLE FDB LENGTH FDB ANS SWI
333
Ejemplos de Subrutinas Algoritmo para encontrar el mximo comn divisor de los enteros m y n Paso 1If m = n then gcd m; return;
Paso 2If n < m then intercambia m y n.
Paso 3gcd 1. If m = 1 or n = 1 then retorna.
Paso 4p = n % m;
Paso 5if (p == 0) then m es el mcd. else n m; m p; goto Step 4.ERS 334
Ejemplo Escribir una subrutina para calcular el mximo comn divisor de dos nmeros enteros de 16 bits sin signo. Solucin: los dos parmetros entrantes de 16 bits son pasados al registro de ndice X y al doble acumulador D. La trama de pila de esta subrutina se muestra a continuacin.
ERS
335
m n m_local n_local
equ equ equ equ org gcd ds.w org lds ldd pshd ldd pshd jsr std leas swi find_gcd pshx gcd_loop ldd ldx idiv cpd beq
3575 2925 6 4 $0800 1 $8000 #$1000 #m #n find_gcd gcd 4,sp
; reajustar el SP de la pila para la variable local m ; reajustar el SP de la pila para la variable local n ; mantener el mcd de m y n ; establecer el apuntador a pila ; poner en la pila a m ; ingresar a m en la pila ; ; poner en la pila a n ; ingresar a n en la pila ;
; desasignar el espacio utilizado por los parmetros
n_local,sp m_local,sp #0 don
; calcular p = n % m ; " ; "
ERS
336
done
movw std bra ldd pulx rts end
m_local,sp,n_local,sp m_local,sp gcd_loop m_local,sp
;nm ;mp ; recuperar mcd ; almacenar X
ERS
337
ExcepcionesUna manera de introducir asincrona para mejorar tiempos de respuesta.
ERS
338
Excepciones y Resets
ERS
339
Excepciones Las excepciones son eventos que requiren procesamiento fuera del flujo normal de la ejecucin de un programa tal como una interrupcin. Las excepciones en el CPU12 incluyen resets, una trampa de cdigo de operacin no implementado, una interrupcin por software, interrupciones X-bit , e interrupciones I-bit (externas). Cada excepcin tiene asociada un vector de16-bit el cual apunta a la localidad de memoria donde la rutina que maneja la excepcin esta localizada. Los vectores estan almacenados en los 128 bytes superiores del mapa de ERS memoria de 64-Kbyte. 340
Cada excepcin tiene asociada un vector de 16-bit el cual apunta a la localidad de memoria donde la rutina que maneja la excepcin esta localizada. Los vectores estan almacenados en los 128 bytes superiores del mapa de memoria de 64-Kbyte.ERS 341
Conceptos Bsicos de InterrupcionesQu es una Interrupcin? Evento especial que requiere que el CPU detenga un programa de ejecucin normal y atienda un servico relacionado a dicho evento. Algunos ejemplos de Interrupciones son atender complementos de E/S, fin de cuenta en contadores , cdigos de operacin ilegales, aritmtica con desbordamiento (overflow), divisin entre 0 (divideby-0), etc.
ERS
342
Funciones de la Interupciones . - Coordinar actividades de E/S as como prevenir que el CPU no se sature de trabajo. - Proveer una forma exitosa para salir de los errores. - Recordar al CPU sobre sus Tareas de rutina. Interrupcin Enmascarada - Interrupciones que pueden ser ignoradas por el CPU. - Una interrupcin enmascarada debe ser habilitada antes de que el CPU pueda ser interrumpido. - Una interrupcin es habilitada esribiendo un 1 en la bandera de Habilitacin. - Las interrupciones que NO pueden ser ignoradas por el CPU se llaman Interrupciones No Enmascaradas.ERS 343
Prioridad en las Interrupciones. Permitir mltiples solicitudes de Interrupciones en espera. Clasificar servicios de las mltiples interrupciones en espera.
Servicio de Interrupcin. El CPU ejecuta programas que son llamados por la rutina del servicio de interrupcin. El ciclo completo de un Servicio de Interrupcin incluye: Guardar el valor asignado al contador de pograma en una pila (stack). Guardar el estado del CPU (incluyendo el registro de estado del CPU y otros registros) en una pila. Identificar las causas de la Interrupcin. Resolver la direccin de inicio que corresponde a la rutina del Servicio de Interrupcin. Ejecutar la rutina del Servicio de Interrupcin. Restaurar el estado del CPU y del contador de programa almacenados en la pila. Reiniciar el programa interrumpido.ERS 344
Vector de Interrupcin. Iniciar la direccin de la rutina del Servicio de Interrupcin.
Tabla de Vectores de Interrupcin. Es una tabla donde se almacenan todos los vectores de interrupcin.
Mtodos para determinar los Vectores de Interrupcin. Localidades Predefinidas (Microchip PIC18, variantes del 8051). Buscar el vector de una localidad de memoria predefinida (HCS12). Ejecutar e interrumpir un ciclo de bsqueda conocido del vector con el fin de localizar el Vector de Interrupcin (familias 68000 y x86).
Pasos para programar una Interrupcin. Paso 1. Inicializar la Tabla de Vectores de Interrupcin. Paso 2. Escribir la Rutina del Servicio de Interrupcin. Paso 3. Habilitar la Interrupcin.ERS 345
Generalidades de las Interrupciones Guardar y Reestablecer el estado del CPU y el de otros registros (HCS12 necesita salvar el estado de todos los registros). Ejecutar temporalmente instrucciones de la rutina del Servicio de Interrupcin. Al ejecutar la instruccin RTI se restauraran todos los registros del CPU.
ERS
346
Reset Los valores iniciales de algunos registros del CPU, los flip-flops y los registros de control de los registros de E/S deben ser establecidas correctamente para el buen funcionamiento de la computadora. Los mecanismos de Reset establecen las condiciones iniciales para sistemas computacionales. Existen al menos 2 tipos de Resets: el reset de encendido y el reset manual. El reset de encendido establece los valores iniciales de los registros y de los registros de control para E/S. El reset manual permite a la computadora salir de la mayora de las condiciones de error si el hardware no falla y siempre y cuando est encendida.
El reset es No Enmascarado. ERS
347
Excepciones del HCS12 Interrupciones Enmascaradas: Incluyen el pin IRQ y todas las Funciones de Interrupcin Perifricas. Interrupciones No Enmascaradas: Incluyen el pin XIRQ, la Interrupcin SWI, y la trampa del cdigo de operacin no implementada. Resets: Incluyendo el reset de encendido, el pin de reset, el reset manual, el reset COP (operacion apropiada de la computadora), y el reset del reloj del monitor. Interrupciones Enmascaradas. Los diferentes miembros del HCS12 implementan diferentes cantidades y tipos de funciones perifricas, y pueden llegar a haber diferencias en las Instrucciones Enmascaradas. Alguna de las Interrupciones Enmascaradas puede ascender a una prioridad mayor entre un grupo de Interrupciones Enmascaradas y ser atendida rapidamente. Esto es posible si se programa el registro HPRIO.
ERS
348
Excepciones del HCS12 La prioridad y el vector de direcciones de todas las excepciones del HCS12 estan enlistadas en la Tabla que se encuentra en las siguientes lminas. Para cambiar la prioridad de una Fuente de Interrupcin Enmascarada a un nivel alto, escribir el bit bajo del vector de direcciones de la Interrupcin en el registro HPRIO. En la Tabla mencionada, las excepciones de prioridades altas son aquellas cuyo vector de direcciones es mayor. No todas las excepciones se encuentran disponibles en las difentes familias del HCS12. Pin de Interrupcin IRQ. La nica Interrupcin Enmascarada externa del HCS12. La Interrupcin IRQ puede ser disparada por borde o por nivel. La Interrupcin IRQ tiene un habilitador local en el registro IRQCR. La interrupcin IRQ se configura programando el registro IRQCR. Los contenidos del Registro IRQCR se muestran en la siguiente figura. ERS 349
7 IRQE reset: 0
6IRQEN
5 0 0
4 0 0
3 0 0
2 0 0
1 0 0
0 0 0
1
IRQE -- IRQ edge sensitive only bit IRQE can be written once in normal mode. In special modes, it can be written any time, but the first write is ignored. 1 = IRQ pin responds only to falling edge 0 = IRQ pin responds to low level. IRQEN -- IRQ enable bit IRQEN bit can be written any time in all modes. The IRQ pin has an internal pullup. 1 = IRQ pin interrupt enabled 0 = IRQ pin interrupt disabled Figure 6.2 Interrupt control register (IRQCR)
ERS
350
ERS
351
ERS
352
ERS
353
ERS
354
ERS
355
Los seis vectores mas altos son usados para resets e interrupcin no enmascarada. El resto de los vectores son usados para interrupciones enmascaradas. Todos los vectores son programados para que apunten a la direccin de la rutina apropiada de servicio. ERS 356
Haciendo IRQ sensitiva a Nivel Pros Mltiples fuentes de Interrupciones pueden hacer que el pin se confunda.
Contras Es necesario estar seguro que la seal de IRQ se desactiv despus de que se complete la rutina del Servico IRQ, solo si hay en espera una solicitud de interrupcin.ERS 357
Haciendo IRQ sensitiva a borde Pros: No es necesario controlar el tiempo de duracin del pulso IRQ.
Contras: No es adecuado para un ambiente ruidoso porque cuando hay una cada de orden por causa del ruido, sta se reconoce como una Interrupcin.ERS 358
Cundo reconoce el MCU una Solicitud de Interrupcin? El MCU reconoce una solicitud de interrupcin cuando una instruccin actual a completado su ejecucin, a menos que sta sea una instruccin de lgica difusa. Cuando hay una Instruccin de Lgica Difusa el HCS12 reconoce las Interrupciones inmediatamente.ERS 359
La organizacin de una pila a la entrada de una interrupcin. . Cuando hay una interrupcin el HCS12 salva todos los registros del CPU. La forma de guardar los registros del CPU se muestran a continuacin.
La Instruccin RTI. RTI se utiliza para finalizar rutinas de Servicios de Interrupcin. RTI restaurar los registros del CPU desde la pila. El HCS12 continuar ejecutando el programa interrumpido a menos que haya otra solicitud de interrupcin.ERS 360
Interrupciones No Enmascaradas Pin de Inrrupcin XIRQ. La Interrupcin XIRQ es deshabilitada al reiniciar el sistema y al entrar a la rutina de otro servicio de Interrupcin. Despus de la inicializacin mnima del sistema, el software puede limpiar el bit X del registro CCR para habilitar (usando la instruccin andcc #$BF ) la interrupcin XIRQ. El Software no puede modificar el bit X una vez que est habilitado. Cuando se reconoce una Interrupcin no enmascarada, tanto el bit X como el bit I son habilitados despus de salvar los registros del CPU. Cuando se ejecuta una Interrupcin RTI al finalizar una rutina del servicio XIRQ se restaurarn los bits X e I al estado que presentaban antes de la solicitud de interrupcin.
La trampa del Cdigo e Operacin no implementado. Hay 202 cdigos de operacin no implementados (16-bit pcode). Estos cdigos de operacin no implementados comparten el mismo vector $FFF8:$FFF9.
Interrupcin por software (SWI) La ejecucin de la Instruccion SWI causa una interrupcin sin la necesidad de una solicitud de Interrupcin. La instruccin SWI se utiliza comunmente en monitoreo de errores (debug monitor) para implementar puntos de interrupcin y transferir el control a un programa de usuario de depuracin de errores. Un punto de interrupcin en un programa de usuario es una localidad de memoria donde queremos que sea detenido un programa en ejecucin y que se nos muestre ERS 361 la informacin (de acuerdo al contenido de los registros).
Estableciendo el Vector de Interrupcin La etiqueta (o nombre) de la rutina del servicio de interrupcin IRQ es IRQISR. En lenguaje assembly.movw #IRQISR,UserIRQ ; almacena el vector en la direccin asignada
En lenguaje C. Incluir las siguientes declaraciones al inicio del programa: #define INTERRUPT __attribute__((interrupt)) Inluir los archivos de cabezera vectors12.h usando la declaracin: #include c:\egnu091\include\vectors12.h Declarar el prototipo de los servicios de rutina de la siguiente forma: #define INTERRUPT IRQISR(void); Almacenar el nombre de la rutina del servicio IRQ en la direccin destinada: UserIRQ = (unsigned short)&IRQISR;ERS 362
Estableciendo el Vector de Interrupcin Ejemplo El pin IRQ del HCS12GC32 se conecta a una seal digital de frecuencia igual a 1Hz y el puerto B se conecta a 8 LEDs. Escribir un programa para configurar al puerto B como salida, que habilite la Interrupcin IRQ y adems escribir la rutina de servicio para la interrupcin IRQ. La rutina de Servicio para la interrupci IRQ simplemente incrementa el contador y las salidas del puerto B.
Solucin Las versiones del programa en Ensamblador y Lenguaje C se muestran a continuacin.ERS 363
#include org $1000 count ds.b 1 org $1500 lds #$1500 movw #IRQISR,UserIRQ clr count movb #$FF,DDRB bset DDRJ,$02 bclr PTJ,$02 movb count,PTB movb #$C0,IRQCRcli
; reserva un byte para count ; establece el apuntador a pila ; establece el vector de interrupcin en SRAM ; configura como salida al Puerto B ; configura el pin PJ1 para salida ; habilita los LEDs para encender ; muestra el valor de count en los LEDs ; habilita pin de interrupcin IRQ, selecciona disparador de borde; "
forever
nop bra forever ; espera por el pin de interrupcin IRQ ; **************************************************************************** ; Esta es la rutina de servicio IRQ. ; **************************************************************************** IRQISR inc count ; incrementa count movb count,PTB ; muestra el valor de count en LEDs rti endERS 364
#include "c:\egnu091\include\hcs12.h" #include "c:\egnu091\include\vectors12.h" #define INTERRUPT __attribute__((interrupt)) void INTERRUPT IRQISR(void); unsigned char cnt; int main(void) { UserIRQ = (unsigned short)&IRQISR; DDRB = 0xFF; cnt = 0; DDRJ |= BIT1; /* configura el pin PJ1 como salida */ PTJ &= ~BIT1; /* habilita LEDs para encender */ IRQCR = 0xC0; /* habilita la interrupcion IRQ al caer el borde */ asm("cli"); /* habilita la interrupcion global */ while(1); /* siempre espera por una interrupcin */ return 0; } void INTERRUPT IRQISR(void) { cnt++; PTB = cnt; }ERS 365
Sistema de Generacin de Reloj y de Reset (CRG) CRG genera las seales de reloj requeridas para que se ejecuten las instrucciones del HCS12 y todas las operaciones de los perifricos. La seal de reloj tiene la forma de onda de una seal cuadrada. A menudo se usan osciladores con cristal para generar seales de reloj. La salida de un oscilador con cristal es una onda senoidal y debe cambiarse a una seal cuadrada antes de poder ser utilizada. El HCS12 tiene un circuito interno que realiza la operacin de convertir de onda senoidal a onda cuadrada. El bloque CRG tambin cuenta con un circuito PLL capaz de multiplicar la frecuencia de la seal de reloj. El diagrama a Bloques se muestra en la siguiente lamina. El CRG tambin es capaz de recibir directamente una onda cuadrada. La seal XCLKS debe ser amarrada a tierra para poder usar la seal externa de reloj.ERS 366
Bloque de Generacin de Reloj y de Reset (CRG)
ERS
367
Eligiendo la Fuente de Reloj El usuario puede decidir entre utilizar el cristal externo o un oscilador que genere la seal de reloj. El cristal externo es conectado entre los pines EXTAL y XTAL, y necesita un oscilador en el chip para cambiar a onda cuadrada. La fuente de reloj externa que provee el oscilador se conecta al pin EXTAL y tiene un Voltaje pico a pico de 2.5V. La seal XCLKS debe ser enviada a tierra para seleccionar la seal de reloj externo. La salida del mdulo OSC puede desviarse o pasar a travs del circuito PLL. El circuito PLL tiene la capacidad de multiplicar seales de entrada y estabilizar la frecuencia de su seal de salida. Tanto la OSCCLK como la PLLCLK pueden ser elejidas como el SYSCLK que ser dividido entre 2 y derivar en el reloj del bus para controlar la ejecin de las instrucciones y el control de las operaciones perifricas. El circuito de generacin de reloj del HCS12 se muestra en la siguiente lmina.ERS 368
Eligiendo la Fuente de Reloj
ERS
369
Malla de Fase Encadenada (PLL) La frecuencia del PLLCLK es controlada por los registros SYNR y REFDY usando la siguiente ecuacin:(SYNR + 1) PLLCLK = 2 OSCCLK ----------------------(REFDV + 1)7 0 reset: 0 6 0 0 5 SYN5 0 4 SYN4 0 3 SYN3 0 2 SYN2 0 1 SYN1 0
(6.1)
0 SYN0 0
Figure 6.8 The CRG synthesizer register (SYNR)
7 0 reset: 0
6 0 0
5 0 0
4 0 0
3 0
2 0
1 0
0 0
REFDV3 REFDV2 REFDV1 REFDV0
Figure 6.9 The CRG reference divider register (REFDV)
ERS
370
Malla de Fase Encadenada (PLL)
La seleccin del PLL para la generacin del reloj est controlada por el registro CRGSEL.
ERS
371
Malla de Fase Encadenada(PLL)7 CME reset: 0 6 PLLON 0 5 AUTO 0 4 ACQ 0 3 0 0 2 PRE 0 1 PCE 0 0 SCME 0
El circuito PLL tambin es controlado por el registro PLLCTL.
CME: clock monitor enable bit 0 = clock monitor is disabled 1 = clock monitor is enabled. Slow or stopped clocks will cause a clock monitor reset sequence or self clock mode PLLON: phase lock loop on bit 0 = PLL is turned off 1 = PLL is turned on. If AUTO bit is set, the PLL will lock automatically. AUTO: automatic bandwidth control bit 0 = automatic mode control is disabled and the PLL is under software control, using ACQ bit. 1 = high bandwidth filter is selected ACQ: acquisition bit (if AUTO bit = 1, this bit has no effect) 0 = low bandwidth filter is selected 1 = high bandwidth filter is selected PRE: RTI enable during pseudo stop bit 0 = RTI stops running during pseudo stop mode 1 = RTI continues running during pseudo stop mode PCE: COP enable during pseudo stop bit 0 = COP stops running during pseudo stop mode 1 = COP continues running during pseudo stop mode. SCME: self clock mode enable bit 0 = detection of crystal clock failure causes clock monitor reset 1 = detection of crystal clock failure forces the MCU in self clock mode Figure 6.14 The CRG PLL control register (PLLCTL)
ERS
372
Malla de Fase Encadenada (PLL) Ejemplo Hay un sistema que deriva su reloj de bus desde el circuito PLL y un reloj externo, de 8 MHz, es seleccionado. El reloj del bus que se espera es de 24 MHz. Escriba una secuencia de instrucciones para obtener la configuracin deseada. Solucin La frecuencia de SYSCLK es de 48 MHz. La frecuencia de OSCCLK es de 8 MHz. 48 MHz = 2 8 MHz [SYNR + 1] /[REFDV + 1] Una solucin es asignar 2 y 0 a SYNR y REFDV, respectivamente.movb #2,SYNR movb #0,REFDV movb #$80,CRGSEL ; asignar 2 a SYNR ; asignar 0 a REFDV ; habilita el PLL, manten en modo de espera a SYSCLK ; manten a RTI, COP, PLL y el funcionaminto bsicamente en; modo de espera ; deshabilita el monitor de reloj, hablilita el PLL, contol de ancho ; de banda en automtico, desabilita RTI & COP ; aparentemente parado
movb #$60,PLLCTL
Adems, el pin XCLKS debe estar a tierra para seleccionar al oscilador como fuente de reloj.ERS 373
Malla de Fase Encadenada (PLL) Ejemplo Hay un sistema que usa un cristal oscilador a 4 MHz y se desea que derive en un bus de reloj de 24 MHz. Escribe una secuencia de instrucciones para obtener la configuracin deseada. Solucin: Las frecuencias de OSCCLK y PLLCLK son de 4 MHz y 48 MHz, respectivamente. 48 MHz = 2 4 MHz [SYNR + 1] /[REFDV + 1] Una solucin es asignar 5 y 0 a SYNR y REFDV, respectivamente.movb movb movb #5,SYNR #0,REFDV #$80,CRGSEL ; asigna 5 a SYNR ; asigna 0 a REFDV ; habilita el PLL, manten en modo de espera a SYSCLK ; manten a RTI, COP, PLL y el funcionamiento bsico; en tiempo de espera ; deshabilita el monitorde reloj, hablilita el PLL, contol de ; ancho de banda en automtico, desabilita RTI & COP ; aparentemente parado
movb
#$60,PLLCTL
El pin XCLKS debe estar en alto para poder seleccionar al crystal externo como generador de la seal de reloj. ERS 374
Monitor de reloj El monitor de reloj esta basado en un circuito RC. Si no se detectan bordes de OSCCLK con el tiempo de retraso del RC, el monitor de reloj quiza de un reset al MCU si el bit CME del registro PLLCTL se habilita en 1. El bit SCME del registro PLLCTL debe ser puesto a 0 para que el monitor de reloj trabaje.
ERS
375
Interrupcin en Tiempo Real (RTI) La funcin principal es generar una interrupcin al MCU peridicamente. El RTI es habilitada por el registro CRGINT (se muestra en la siguiente lmina). El intervalo de interrupcin del RTI es seleccionado por el registro RTICTL (se muestra en la siguiente figura). Los periodos de interrupcin disponible actualmente para la RTI se encuentran enlistados en la Tabla 6.4. ERS 376
Interrupcin en Tiempo Real (RTI)
ERS
377
Interrupcin en Tiempo Real (RTI)
ERS
378
Circuito de Operacin Apropiada de la Computadora (Perro de Guardia / COP) Permite que el usuario determine si el software de aplicacin trabaja apropiadamente. El Perro de Guardia es un circuito temporizador que se pondr en tiempo fuera si no se rearma en un lmite de tiempo preestablecido. El Perro de Guardia dar un reset al MCU cuando haya un tiempo fuera y el usuario sabr que el software no trabaja apropiadamente. El software de aplicacin deber incluir una secuencia de instruccin que prevenga un tiempo fuera del Perro de Guardia. Para prevenir al Perro de Guardia de un tiempo fuera, escribir $55 y luego $AA en el registro ARMCOP. El registro COPCTL controla el periodo de tiempo fuera del Perro de Guardia. Los contenidos de COPCTL se muestran en la lmina siguiente.ERS 379
Circuito de Operacin Apropiada de la Computadora (Perro de Guardia / COP)
ERS
380
Modo de Baja Potencia Se desea minimizar el consumo de energa cuando el MCU no est ocupado en ejecutar funciones de operaciones tiles. La ejecucin de la funcin WAI coloca al HCS12 en modo de espera y reduce significativamente el consumo de energa. En el modo de espera, el reloj del CPU se detiene pero las seales de reloj para funciones perifricas siguen corriendo. El CPU deja el modo de espera cuando ocurre uno o ms de los siguientes eventos: No estn deshabilitadas las interrupciones enmascaradas. Interrupciones No enmascaradas. Resets. El Reset no es la mejor forma de salir del modo de espera porque se reiniciar todo y toma ms tiempo para reanudar el funcionamiento normal. ERS 381
Modo en Alto El modo en alto entra cuando el MCU ejecuta la instruccin STOP. Cuando esta instruccin se ejecuta el MCU entra en un modo de inactividad. La instruccin STOP no tiene ningn efecto si la bandera S del registro CCR es 1.
En el modo de alto, todas las seales de reloj en el MCU se detienen. Al activar un RESET, IRQ, o la seal XIRQ se termina el modo de inactividad.ERS 382
Resets Hay cuatro tipos de reset: El reset de encendido (POR) y el reset detector de bajo voltaje (LVD). La terminal RESET El reset COP Monitor de Reloj de reset
ERS
383
Reset de Encendido El HCS12 tiene un circuito para activar un reset cuando el suministro de VDD ha llegado a un cierto nivel. El mdulo CRG realiza un control de calidad en las seales de reloj entrantes tan pronto como se dispara el reset de encendido. El mdulo CRG liberar la seal de reset cuando se cumpla el control de calidad.ERS 384
Reset Externo La terminal de RESET permite que el usuario realice un reset al MCU. El MCU puede diferenciar entre un reset externo y una seal interna de reset. Cuando el suministro de energa baja de cierto nivel, puede corromper a la EEPROM. Es aconsejable tener un circuito que pu
top related