micros1_2011

711
 ERS 1  MICROPROCESADORES MICROPROCESADORES Y Y MICROCONTROLADORES MICROCONTROLADORES UNA RAPSODIA UNA RAPSODIA M.I M.I Eduardo Ram Eduardo Ramí írez S rez Sá ánchez nchez

Upload: ariel-perez

Post on 09-Jul-2015

881 views

Category:

Documents


0 download

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