Sei sulla pagina 1di 711

MICROPROCESADORES Y MICROCONTROLADORES UNA RAPSODIA

M.I Eduardo Ramrez Snchez

ERS

Universidad Nacional Autnoma de Mxico


Facultad de Ingeniera
Microprocesadores y Microcontroladores Familias y CPU: HCS12
M.I. Eduardo Ramrez Snchez Departamento de Electrnica
ERS 2

Qu es un Microprocesador?

ERS

Dispositivo Digital Programable

CPU

ERS

Aplicaciones de los microprocesadores y microcontroladores

ERS

ERS

ERS

ERS

ERS

ERS

10

Quin los invento?

ERS

11

ERS

12

Breve Historia de los Microprocesadores


Fecha 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 Macintosh
us 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

Hardware
Cules 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 Microprocesador


Bus de Datos

A S M

ALU

REGISTROS

Bus de Direcciones

Bus de Control
ERS

24

Estructura Interna de un Microprocesador


Bus de Datos

A S M
Clock

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 HCS12


ALU
A D X Y SP PC SXHINZVC B

ASM

CPU 12
ERS 28

Sistema Bsico de una Computadora


Dispositivo 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 embebido
ERS 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

ERS

38

ERS

39

ERS

40

Motorola introduce el 68HC12 (en 1997) y el HCS12 (en 2002)


RAM CPU12 EEPROM FLASH EEPROM

68HC12/HCS12
TIMER PARALLEL I/O SPI SCI A/D

Interfaz adicional PWM y CAN


ERS 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 Alto
15 14 13 12 11 10 9 8 7 6 5

Byte Bajo
4 3 2 1 0

Direccin Posicin del Bit Se muestra en Binario Bit A

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 EPROM
Computadora 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

ROM

LECTURA

ERS

65

Bus de Direcciones

Bus de Datos

RAM

ESCRITURA LECTURA

ERS

66

Nomenclatura para los Diagramas de Tiempo


Smbolo Entrada
La entrada debe ser vlida

Salida
La 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 Bsico


OTROS

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

A
Seal de interferencia

MPU
Seal deseada

B
Configuracin sin Buffer
ERS 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 Memoria
1. 2.

Uso
Todo 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).

Flash
3.

RAM

1. 2.

ERS

87

ERS

88

ERS

89

ERS

90

CISC vs. RISC


CISC
Instrucciones de Mquina

RISC
Instrucciones de Mquina

Microcdigo de conversin

Microinstrucciones Ejecucin de microinstrucciones

Ejecucin de instrucciones

Complex Instruction Set Computer


Computadora con un Conjunto de Instrucciones Complejas
ERS

Reduce Instruction Set Computer


Computadora con un Conjunto de Instrucciones Reducidas
91

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 C
ERS 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 tarjeta
ERS 109

Tarjeta 9S12GC32
La 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 Drivers


Instale 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 Aplicacin
CodeWarrior: 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 HCS12


ALU
A 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 Registros
Motorola HC12/HCS12 Registros

7 15 15 15 15 15

Acumulador A

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

CCR
Registro 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 Control


S 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 Y
Estos 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 Acarreo
Suma 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 2s
MSB 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 Direccionamiento
De 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.

LDAA
Operacin

(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 Categora


Movimiento 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 anteriormente


Escriba 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

Ejemplo
Escriba 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

Ejemplo
Escriba 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 ;

Ejemplo
Escriba 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 ; ;

Ejemplo
Escriba 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

Ejemplo
N 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


[<label>] brclr (opr),(msk),(rel) [<comment>] [<label>] brset (opr),(msk),(rel) [<comment>]
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

Ejemplo
LDAA #$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 Divisin
Ejemplo 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 instrucciones
LDAA $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 Programa


loop 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/MC9S12


I.- 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 Instruccin


Ejemplo
loop 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 $1000
ERS 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 RAM
ERS 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 $1002
ERS 278

ABSENTRY. (Application Entry Point). Especifica el punto de entrada en un programa en assembly absoluto ABSENTRY <etiqueta>

ERS

279

Diseo de Software de Arriba a Abajo


Lenguaje de alto nivel

Cdigo Assembly

Cdigo de mquina
ERS 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 Documentacin


ERS 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 Programar


Preprocesamiento 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 correcto


Preprocesamiento

Interfaz del teclado

Identificacin de la tecla

Post-proceso

Posponer detalles
Almacenar 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

Pseudocdigos
Pseudo 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 X
ERS

Pseudo cdigo repeticin Mientras X Hacer Comienza A Termina A tambin Comienza B Termina B Modifica X Fin Mientras X
285

Smbolo de un Diagrama de Flujo


Inicio A

Proceso Entrada o salida si A Conector en pgina


ERS

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 staa


ERS

$8000 $1000 $1002 $1005 $1010


294

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 MHNL
ERS 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 emul
ERS 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

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 - WHILE


Lenguaje C do{ datrec=leecar(); a[i]=datrec; i++ } while (datrec != \r);

Ensamblador loop jsr leecar stab 1,x+ cmpb #CR bne loop adel
ERS 315

Lazo WILE

while(c){ /*pro*/ }

ERS

316

Ejemplo de Lazo WHILE


Lenguaje 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 FOR


Lenguaje 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 CASE
switch(c){ case G1: /*PROC1*/ break; case G2: /*PROC*/ /*PROC2*/ break; default: /*PROC3*/ }

ERS

320

Comando Analizador de Letras Usando la Construccin CASE


Lenguaje 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 HCS12


ERS 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:
[<label>] [<label>] [<label>] [<label>] bsr jsr rts call rtc <rel> <opr> <opr> [<comment>] [<comment>] [<comment>] [<comment>] ; bifurcacin a una subrutina ; salta a una subrutina ; regresa a la subrutina ; para usar con la memoria expandida ; regresa de CALL

donde <rel> es el desplazamiento a la subrutina <opr> 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 datos
ERS 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 CCR
ERS 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 Pila
Ejemplo 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 Principal
ORG VAL ORG LDS LDAA JSR FCB SWI $A00 FCB $800 #$BFF VAL ROTLFT 4
BACK

Subrutina
ROTLFT 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 Principal
ORG $B00 LENGTH FCB 4 ORG RMB $B10 1

Subrutina
ORG $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 1
If m = n then gcd m; return;

Paso 2
If n < m then intercambia m y n.

Paso 3
gcd 1. If m = 1 or n = 1 then retorna.

Paso 4
p = n % m;

Paso 5
if (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

Excepciones
Una 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 Interrupciones


Qu 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

6
IRQEN

5 0 0

4 0 0

3 0 0

2 0 0

1 0 0

0 0 0

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 <hc9S12GC32.h> 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,IRQCR
cli

; 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 end
ERS 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 pueda detectar esta situacin y que active el reset del MCU.

El chip de Motorola MC34064 puede detectar el voltaje bajo en el suministro de energa y dar un reset al CPU. Incorporando un circuito MC34064 de reset externo se ERS muestra en la Figura.

385

Modos de Operacin del HCS12


El HCS12 puede trabajar en ocho modos de operacin diferentes (se muestran en la Tabla). Los estados de las terminales MODC, MODB y MODA estan almacenados para determinar el modo de operacin del MCU. El modo expandido permite que el usuario tenga acceso a memoria externa mientras los modos monochip no lo hacen. En el modo expandido, los Puertos A y B se convierten buses de direcciones y datos conmutados.

ERS

386

Puertos Paralelo de Entrada/Salida


ERS 387

Conceptos Bsicos de Entrada Salida (E/S)


Los dispositivos de E/S son llamados tambin dispositivos perifricos. Los dispositivos de E/S son equipos que sirven para intercambiar datos con la computadora.
Algunos ejemplos son los switches, LEDs, Monitores de tubos de rayos catdicos, impresoras, mdems, teclados, y unidades de disco. ERS 388

Esquemas de E/S
Esquema Aislado de E/S
El microprocesador tiene instrucciones dedicadas para operaciones de E/S. El microprocesador separa un espacio de direcciones para dispositivos de E/S.

Esquema del mapa de memoria de los registros de E/S


El microprocesador utiliza el mismo set de instrucciones para realizar accesos a memoria y operaciones de E/S. Los dispositivos de E/S y los componentes de memoria estn alojados en el mismo espacio de memoria.
ERS 389

Descripcin de los Puertos Paralelos del HCS12


Los miembros del HCS12 tienen de 48 a 144 pines de E/S ordenados en puertos de 3 a 12 y empaquetados en un paquete cuadrado plano (QFP) o paquete cuadrado plano de bajo perfil (LQFP). Todos los pines de E/S sirven a mltiples propsitos. Cuando se habilita una funcin perifrica, los pines asociados a esta no podrn usarse como pines de E/S. Cada puerto de E/S tiene varios registros para apoyar su funcionamiento. A los registros relacionados con puertos de E/S se les asignan nombres mnemotcnicos para que el usuario pueda usar estos nombres para referirse a ellos:
movb #$FF,PTA
ERS

; enva $FF al Puerto A


390

ERS

391

ERS

392

Mapa de Memoria

ERS

393

ERS

394

Mapa de Registros
(1 de 37)

ERS

395

(2 de 37)

ERS

396

(3 de 37)

ERS

397

(4 de 37)

ERS

398

(5 de 37)

ERS

399

(6 de 37)

ERS

400

(7 de 37)

ERS

401

(8 de 37)

ERS

402

(9 de 37)

ERS

403

(10 de 37)

ERS

404

(11 de 37)

ERS

405

(12 de 37)

ERS

406

(13 de 37)

ERS

407

(14 de 37)

ERS

408

(15 de 37)

ERS

409

(16 de 37)

ERS

410

(17 de 37)

ERS

411

(18 de 37)

ERS

412

(19 de 37)

ERS

413

(20 de 37)

ERS

414

(21 de 37)

ERS

415

(22 de 37)

ERS

416

(23 de 37)

ERS

417

(24 de 37)

ERS

418

(25 de 37)

ERS

419

(26 de 37)

ERS

420

(27 de 37)

ERS

421

(28 de 37)

ERS

422

(29 de 37)

ERS

423

(30 de 37)

ERS

424

(31 de 37)

ERS

425

(32 de 37)

ERS

426

(33 de 37)

ERS

427

(34 de 37)

ERS

428

(35 de 37)

ERS

429

(36 de 37)

ERS

430

(37 de 37)

ERS

431

Puertos en el HCS12
Cmo sacar los datos al exterior del microcontrolador? Un PUERTO en el HCS12 es el dispositivo que el HCS12 utiliza para controlar algn hardware . Muchos de los puertos del HCS12 se utilizan para comunicar al HCS12 con hardware al exterior de ste. El HCS12 se comunica con sus puertos leyendo y escribiendo en las localidades de memoria $0000 a $03FF. Dos de los puertos ms simples para utilizar, son el PORTA y el PORTB
ERS 432

ERS

433

Puertos en el HC12
Se puede hacer que uno o todos los bits de los PORTA y PORTB sean salidas, escribiendo 1 en los bits correspondientes a sus Registros de Direccin de Datos. El registro de Direccin de Datos del PORTA (DDRA) se localiza en la direccin de memoria $0002. Para hacer que todos los bits del PORTA sean salidas, se escribe $FF en el DDRA. Para hacer que los cuatro bits ms bajos del PORTA sean salidas y los cuatro bits ms altos sean entradas, escribir $0F en el DDRA. El registro de Direccin de Datos del PORTB (DDRB) se localiza en la direccin de memoria $0003. Para hacer que todos los bits del PORTB sean salidas, se escribe $FF en el DDRB. Cuando se enciende o reinicia el HCS12, ambos puertos A y B son puertos de entrada. ERS 434

Concepto bsico de un puerto de E/S y su registro de direccin de dato

ERS

435

Memoria y Circuito de Entrada/Salida

ERS

436

ERS

437

ERS

438

Puertos de Entrada Y Salida


Cmo meter datos dentro del computador desde fuera?
Puerto de Entrada Simplificado

ERS

439

Puertos de Entrada Y Salida


Cmo sacar los datos al exterior del microcontrolador?
Puerto de Salida Simplificado

ERS

440

Usando el Puerto A del HCS12


Para hacer que un bit del PORTA sea un puerto de salida, escribir 1 en el bit correspondiente del DDRA (direccin 0x0002). Para hacer que un bit del PORTA sea un puerto de entrada, escribir 0 en el bit correspondiente del DDRA. Cuando se restablece el HC12, el DDRA se inicializa como $00, tal que PORTA es un puerto de entrada:

ERS

441

Usando el Puerto A del HCS12


Por ejemplo, para hacer que los bits 3-0 del PORTA sean entradas y los bits 7-4 sean salidas, se debe escribir 0xf0 en el DDRA. Para mandar los datos a los pines de salida, escribir en el PORTA (direccin 0x0000). Cuando se lea desde el PORTA los pines de entrada regresarn el valor de las seales en ellos (0=> 0V, 1 => 5V); los pines de salida regresarn el valor escrito en ellos.

El PORTB funciona de la misma manera, excepto que DDRB est en la direccin 0x0003 y el PORTB est en la direccin 0x0001.
ERS 442

Usando el Puerto A del HCS12


Un simple programa para hacer que PORTA y PORTB sean entradas, luego que lea las seales en PORTB y que escriba estos valores en PORTA:

ERS

443

Usando el Puerto A del HCS12

Se puede hacer que el PORTA sea una salida y el PORTB una entrada con una sola instruccin:

ERS

444

Transferencia Paralela de Datos


Suponga que necesita transferir datos desde un HCS12 a otro. Cmo puede hacer esto? Puede conectar el PORTA del microcontrolador emisor (establecido como puerto de salida) al PORTA del microcontrolador receptor (establecido como puerto de entrada) El microcontrolador emisor pone los datos en su PORTA, un byte a la vez. El microcontrolador receptor lee los datos en su PORTA. Por ejemplo, se quiere enviar 5 bytes correspondiente a los 5 caracteres de hello:
ERS 445

Comunicaciones Paralelas

ERS

446

Transferencia Paralela de Datos


El microcontrolador emisor necesita decirle al microcontrolador receptor cundo leer los datos. Puede hacer esto usando otra lnea como lnea de reloj. A este mtodo se le llama medio saludo En el lmite de elevacin de la lnea de reloj, el microcontrolador receptor debe leer los datos:
ERS 447

Comunicaciones Paralelas

ERS

448

Transferencia Paralela de Datos


Cmo puede el microcontrolador emisor saber que el microcontrolador receptor ha ledo los datos? Con el medio saludo no lo puede saber Puede utilizar el mtodo llamado saludo completo
el microcontrolador emisor utiliza una lnea de Dato Vlido para decirle al microcontrolador receptor que los datos en la lnea de datos son vlidos. el microcontrolador receptor usa una lnea de Datos Recibidos para decir al microcontrolador emisor que ya ha ledo el byte de datos actual.
ERS 449

Comunicaciones Paralelas

ERS

450

Comunicaciones Paralelas
En la figura anterior, el microcontrolador emisor pone los datos en las lneas de datos y proporciona un DV bajo para indicar que hay nuevos datos disponibles. Cuando el microcontrolador receptor ve los nuevos datos disponibles, los lee de las lneas de datos, entonces proporciona un DR bajo para indicar que ha ledo los datos. Cuando el microcontrolador emisor ha visto el DR bajo, proporciona un DV alto. Cuando el microcontrolador receptor ve el DV alto, proporciona un DR alto. Ambas microcontroladores estn ahora listas para la siguiente transferencia de datos.
ERS 451

Puerto A y Puerto B
En forma general, El Puerto A lleva la parte alta de la seal de Direcciones y Datos A15/D15A8/D8 en tiempo multiplexado. En forma general, El Puerto B lleva la parte baja de la seal de Direcciones y Datos A7/D7A0/D0 en tiempo multiplexado. En modo monochip, estos dos puertos son utilizados para propsitos generales de E/S.
ERS 452

ERS

453

Conexin con Dispositivos LED


La Figura sugiere tres mtodos para realizar conexiones con LEDs. El Circuito (a) y (b) son recomendados solo para LEDs que necesiten una corriente pequea para iluminar. El Circuito (c) es recomendado para LEDs que necesiten una corriente elevada para iluminar.

ERS

454

Ejemplo Utilice el Puerto B para operar ocho LEDs usando el circuito

mostrado en la Figura. Encender cada LED a su vez por medio segundo y repetir, asumiendo que el HCS12 tiene un reloj de 24-MHz E.

- Para activar un LED a la vez por medio segundo, debemos sacar los valores de $80, $40, $20, $10, $08, $04, $02 y $01 y permanecer por medio segundo en ese valor.
ERS 455

El programa en assembly que realiza esta operacin es el siguiente:


#include org movb bset bclr ldaa ldx movb ldy jsr dbne bra dc.b dc.b #include end <hcs12gc32.inc> $8000 #$FF,DDRB ; configura puerto B como salida DDRJ,$02 ; configura el pin PJ1 como salida PTJ,$02 ; habilita los LEDs para encender #16 ; inicializa el bucle contador a 8 #led_tab ; usa X como apuntador a tabla patrn de LEDs 1,x+,PTB ; un LED a la vez #5 ; espera por medio segundo delayby100ms ; " a,led_lp ; lleg al final de la tabla? forever ; inicia desde el comienzo $80,$40,$20,$10,$08,$04,$02,$01 $01,$02,$04,$08,$10,$20,$40,$80 delay.asm"

forever led_lp

led_tab

ERS

456

Tcnicas de Hardware para quitar Rebote


Latch SR

Compuertas CMOS No-Invertidas

Integrador
ERS 457

Tcnicas de Software para quitar Rebote


El mtodo ms simple y popular utilizado actualmente es el de espera y encuesta.
En ste mtodo el software simplemente espera 10 ms y vuelve a revisar la misma tecla para comprobar si an est presionada.

ERS

458

Ejemplo
$0000 $03FF $0800 $0FFF

$8000

$C000

$FF00 $FFFF

Vectores

ERS

459

Monochip

Ejemplo
LDAA #$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
ERS 460

INIC

Consideraciones de las caractersticas Elctricas para la Interfaz de E/S


Cuando conectamos los dispositivos de E/S y el MCU, necesitamos considerar la compatibilidad elctrica.
Hay dos cuestiones de compatibilidad elctrica:
Compatibilidad del Nivel de Voltaje Capacidad de Corriente

Hay muchas tecnologas de Circuitos Integrados (CI) en uso. Algunas son Bipolares, as como otras son Unipolares (principalmente CMOS y BICMOS). Parmetros de Voltaje relacionados con la compatibilidad elctrica.
Voltaje de Entrada Alto (VIH) Voltaje de Entrada Bajo (VIL) Voltaje de Salida Alto (VOH) Voltaje de Salida Bajo (VOL)

ERS

461

Transmisin del Dispositivo X al Dispositivo Y


El Voltaje de Salida Alto del dispositivo X (VOHX) debe ser ms alto que el Voltaje de Entrada Alto del dispositivo Y (VIHY). El voltaje de Salida Bajo del dispositivo X (VOLX) debe ser ms bajo que el Voltaje de Entrada Bajo del dispositivo Y (VILY). Los niveles de voltaje de Entrada y Salida de las familias lgicas ms populares se muestran en la Tabla de la siguiente lamina. Con el mismo nivel de alimentacin de energa, los dispositivos CMOS no tienen problema de transmitir a dispositivos Bipolares y CMOS. Los dispositivos Bipolares tiene problemas al transmitir a dispositivos CMOS. El HCS12 no puede ser controlado por dispositivos Bipolares. Los dispositivos Bipolares tienen problemas al transmitir a dispositivos CMOS (incluyendo el HCS12).
ERS 462

ERS

463

Capacidad de Corriente
El dispositivo que transmitir a otro dispositivo debe tener suficiente abastecimiento (suministro de corriente) y capacidad de sinking (absorber corriente). La corriente fluye hacia afuera del dispositivo transmisor, cuando el voltaje de transmisin es alto. La corriente fluye hacia adentro del dispositivo transmisor cuando el voltaje de transmisin es bajo. El dispositivo transmisor debe ser capaz de abastecer (o quitar) la suficiente corriente que se necesite para que ambos dispositivos comiencen a transmitir y trabajar adecuadamente. Si un dispositivo no puede suministrar o quitar suficiente corriente es comn utilizar buffers para solucionar el problema. Las capacidades de corriente de un dispositivo lgico estn determinadas por las siguientes corrientes:
Corriente de Entrada Alta (IIH) Corriente de Entrada Baja (IIL) Corriente de Salida Alta (IOH) Corriente de Salida Baja (IOL)

Las capacidades de corriente que tienen diversas familias de chips lgicos se muestran en la Tabla siguiente.
ERS 464

1.

La IOH de un pin de salida debe ser igual o ms elevada que la corriente total que fluye en todos los pines perifricos que estn conectados a ese pin. La IOL de un pin de salida debe ser igual o ms elevada que la corriente total que fluye afuera de todos los pines perifricos que estn conectados a ese pin.

2.

ERS

465

Compatibilidad de Acoplamiento
No hay problemas de acoplamiento cuando est activado un pin del perifrico y ste no contiene latches o flip-flops. Cuando se controlan latches o unidades de flip-flop, necesitamos estar seguros que le tiempo de arranque de datos (data set up time (tSU)) y el tiempo de mantener datos (data hold time (tHD)) estn, ambos, satisfechos. Los requisitos de el tiempo de arranque de datos y el tiempo de amarre de datos estn ilustrados en la Figura siguiente.

ERS

466

Puerto E
Los pines del Puerto E son usados para el bus de control y las seales de solicitudes del servicio de interrupciones. Cuando un pin del Puerto E no se usa como seal de control o de interrupcin, se puede usar como un pin de propsitos general de E/S.
ERS 467

Registros del Puerto E


Registro asignador del Puerto E (PEAR)
En forma general, el registro PEAR asigna a cada pin del puerto E una funcin. El registro establece el modo de operacin y otras funciones diversas.

Registro de control Pull-up (PUCR)


Este registro secciona las resistencia pull-up de los pines asociados a los puertos principales. Los Puertos A, B, E, y K estn en la parte principal.

Registro de Reduccin de Corriente (RDRIV)


Este registro de Reduccin de Corriente selecciona los pines asociados a los puertos principales. Esto reduce el consumo de energa y RFI con un ligero aumento en el tiempo de transmisin.

Registro de control de Interfaz de bus externo (EBICTL)


Solo se aplica el bit 0 (ESTR). El bit ESTR habilita/deshabilita el periodo de reloj del puerto E. ERS
468

ERS

469

ERS

470

ERS

471

ERS

472

Puerto T
El puerto T esta conformado por el registro de datos (PTT), registro de direcciones de datos del Puerto T (DDRT), Registro de Puerto de salida (PTIT), Registro de Reduccin de Corriente (RDRT), Registro del dispositivo pull habilitador (PERT), y el Registro de seleccin de polaridad del puerto (PPST).
El registro PTIT permite al usuario leer el status de los pines del Puerto T. El registro RDRT puede configurar la unidad de potencia (salida de corriente) de cada uno de los pines del puerto, como carga completa o reducida. El registro PERT se utiliza para habilitar el pin de entrada del Puerto T si hay un dispositivo de pull-up o pull-down. El registro PPST indica si un dispositivo de pull-up o pull-down est conectado a una terminal.

Los pines del Puerto T tambin se utilizan como pines de comparacin y captura.
ERS 473

ERS

474

Puerto S
Los pines del Puerto S se utilizan para propsito general de E/S, interfaz de comunicacin serial y pines de interfaz serial con perifricos. El Puerto S tiene un registro PortS en modo de or alambrado (WOMS) adicionalmente a todos los registros asociados al Puerto T.

ERS

475

Puerto M
El Puerto M tiene todos los registros equivalentes a los que tiene el Puerto S y tambin un registro de mdulo de enrutamiento (MODRR).
El MODRR configura el cambio de rutas de CAN0, CAN4, SPI0, SPI1, y SPI2 en los pines definidos del puerto.
ERS 476

ERS

477

Ejemplo Indica una instruccin para configurar el registro MODRR para lograr
el siguiente enrutamiento del puerto:
1. CAN0: usar pins PM1 y PM0 2. CAN1: usar pins PM3 y PM2 3. CAN2: usar pins PM5 y PM4 4. CAN3: usar pins PM7 y PM6 5. I2C: usar PJ7 y PJ6 6. SPI0: usar pins PS7~PS4 7. SPI1: usar pins PH3~PH0 8. SPI2: usar pins PH7~PH4

Solucin: Este requisito de enrutamiento se puede lograr al prevenir a CAN4 de usar cualquier pin del puerto y mantener el valor por defecto de enrutamiento despus del RESET.
-La siguiente instruccin satisface este requisito. movb #$60,MODRR ; CAN4 debe ser deshabilitado

ERS

478

Ejemplo Indique una instruccin para configurar el registro MODRR para lograr el siguiente enrutamiento del puerto:
1. CAN0: usar pins PM1 y PM0 2. CAN1: usar pins PM3 y PM2 3. CAN2: deshabilitado 4. CAN3: deshabilitado 5. I2C: usar PJ7 y PJ6 6. SPI0: use pins PS7~PS4 7. SPI1: use pins PP3~PP0 8. SPI2: use pins PH7~PH4

Solucin: Este requisito de enrutamiento puede satisfacerse con la siguiente instruccin:


movb #$40,MODRR ; CAN2~CAN4 deben ser deshabilitados

ERS

479

Puertos J y P
Estos tres Puertos de E/S tiene el mismo grupo de registros:
Registro del puerto de E/S ( PTJ, PTP) Registro del puerto de Entrada (PTIJ, PTIP) Registro de Direcciones de Datos del Puerto ( DDRJ, DDRP) Registro de Carga Reducida del puerto (RDRJ, RDRP) Registro Habilitador de dispositivo Pull del puerto (PERJ, PERP) Registro de Seleccin de Polaridad del puerto (PPSJ, PPSP) Registro de Habilitacin de Interrupciones del puerto (PIEJ, PIEP) Registro de la Bandera de Interrupcin del puerto (PIFJ, PIFP)

Estos puertos tienen la capacidad de interrupcin disparada por Borde en la modalidad de OR alambrada. Lo bordes de Interrupciones pueden ser de bajada o de subida y se programan a travs del Registro Habilitador del Dispositivo del puerto y del Registro de Seleccin de Polaridad del puerto. El Registro de Interrupcin del Puerto permite que el usuario habilite las interrupciones en los tres puerto. ERS 480

Puerto AD0
Diverso dispositivos del HCS12 tienen convertidores A/D de 8-canales (AD0 y AD1). Cada dispositivo tiene solo un modulo de 8-canales al que se le hace referencia como AD. Cuando la funcin A/D est deshabilitada, estos dos puertos pueden utilizarse para propsitos generales de Entrada. Estos dos puertos no cuentan con Registros de Direcciones de Datos. Cada mdulo cuenta con un Registro Habilitador de Entradas Digitales. Con el fin de utilizar el pin A/D como una entrada digital, se necesitan establecer los bit asociados al registro.

ERS

481

Operando un Display de Siete Segmentos


Un display de siete segmentos de ctodo comn es operado por el CI 74HC244 por medio de resistencias. El voltaje de salida alto del 74HC244 est cerca de 5V utilizando una fuente de 5V. El patrn de segmentos para visualizar del 0 a 9 se muestran en la Tabla .

ERS

482

Operando ms de un Display de Siete Segmentos


Las tcnicas de conmutacin en tiempo tambin son utilizadas para operar varios displays con el fin de ahorrar pines de E/S. Un puerto paralelo es utilizado para operar el patrn de segmentos y el otro puerto se convierte en un display al mismo tiempo. Cada display se enciende y se apaga muchas veces en un segundo. La persistencia de la visin nos hace sentir que todos los displays estn encendidos simultneamente.

ERS

483

Ejemplo Escribir una secuencia de instrucciones para mostrar 4 en el display de siete segmentos #4 de la Figure anterior Solucin: Para mostrar el dgito 4 en el display #4, necesitamos:
Sacar el valor hexadecimal $33 al Puerto B Poner el pin PK4 en 1 Poner los pines PK5 al PK3...P0 en 0
four #include <hcs12.inc> equ $33 movb #$3F,DDRK movb #$FF,DDRB bset PTK,$10 bclr PTK,$2F movb #four,PTB ; patrn de siete segmentos para dgito 4 ; configurar el PUERTO K como salida ; configurar PUERTO B como salida ; encender el display de siete segmentos #4 ; apagar los displays de siete segmentos #5, #3#0 ; sacar el patrn de siete segmentos por Puerto P

En lenguaje C: DDRK DDRB PTK PTB

= 0x3F; = 0xFF; = 0x10; = 0x33;

ERS

484

Ejemplo Escribe un programa que muestre 123456 en los seis displays de siete segmentos que se muestran en la Figura anterior. Solucin: Muestra 123456 en los display #5, #4, #3, #2, #1 y #0, respectivamente. Los valores que saldrn por el Puerto B y el Puerto K para mostrar un dgito a la vez se muestran en la Tabla.

- La lgica del programa se muestra en el diagrama de flujo siguiente.


ERS 485

ERS

486

#include pat_port equ pat_dir equ sel_port equ sel_dir equ org movb movb forever ldx loop movb movb ldy jsr cpx bne bra #include disp_tab dc.b dc.b dc.b dc.b dc.b dc.b end

mc68hcs12gc32.inc" PTB ; Puerto que opera el patrn de segmentos DDRB ; registro de direcciones del patrn de segmentos PTK ; Puerto seleccionador del digito DDRK ; Registro de direcciones de datos del puerto seleccionador del dgito $1500 #$FF,pat_dir ; configura el puerto de patrn como salida #$3F,sel_dir ; configura el puerto seleccionador de dgito como salida #disp_tab ; usa X como apuntador 1,x+,pat_port ; saca el patrn del dgito y mueve el apuntador 1,x+,sel_port ; saca el valor del dgito seleccionado y mueve el apuntador #1 ; espera por 1 ms delayby1ms ; #disp_tab+12 ; encuentra el final de la tabla loop forever "delay.asm" $30,$20 ; tabla del display de siete segmentos $6D,$10 $79,$08 $33,$04 $5B,$02 $5F,$01
ERS 487

#include <mc9hcs12gc32.inc> #include delay.c #define pat_port PTB /* puerto del patrn de siete segmentos */ #define pat_dir DDRB /* registro de direcciones de datos del puerto del patrn */ #define sel_port PTK /* puerto seleccionador de dgito */ #define sel_dir DDRK /* registro de direcciones del puerto seleccionador de dgito */ main (void) { char disp_tab[6][2] = {{0x30,0x20},{0x6D,0x10},{0x79,0x08}, {0x33,0x04},{0x5B,0x02},{0x5F,0x01}}; char i; pat_dir = 0xFF; /* configura pat_port como salida */ sel_dir = 0x3F; /* configura sel_port como salida */ while (1) { for (i = 0; i < 6; i++) { pat_port = disp_tab[i][0]; /* saca el patrn del segmento*/ sel_port = disp_tab[i][1]; /* enciende el display */ delaybyms(1); /* espera un 1 ms */ } } return 0; }
ERS 488

Display de Cristal Liquido (LCD)


Los componentes bsicos que conforman un LCD se muestra en la Figura de la lmina siguiente. Los tipos de LCD ms comunes permiten que la luz atraviese cuando est activado. El segmento de un LCD esta activado cuando se le aplica una seal bipolar de baja frecuencia dentro del rango de 30 Hz a 1KHz. El LCD puede desplegar caracteres y grficos. Los LCDs son vendidos a menudo con un mdulo interno controlador de la unidad. El LCD ms popular utilizado en la actualidad es el Hitachi HD44780.
ERS 489

Display de Cristal Liquido (LCD)

ERS

490

Kit del LCD para la Base HD44780


Capacidad del Display: 4 x 20 Usa como controlador el HD44780 como se muestra en la Figura. Los pins DB7~DB0 se utilizan para intercambiar datos con el CPU. La entrada E debe ser conectada a un pin de E/S para el medio saludo. La seal RS selecciona el registro de instrucciones (0) o el registro de datos (1). La seal VEE permite al usuario ajustar el contraste del LCD. El HD44780 puede ser configurado para desplegar 1-lnea, 2-lneas, y 4-lneas de informacin. La asignacin de pines del mdulo LCD base de caracteres con menos de y ms de 80 caracteres se muestra en las 2 Tablas siguientes.

ERS

491

Kit del LCD para la Base HD44780

ERS

492

Kit del LCD para la Base HD44780

ERS

493

Comandos del HD44780

ERS

494

Comandos del HD44780

ERS

495

Comandos del HD44780


El HD44780 tiene una RAM de datos desplegables (DDRAM) para almacenar los datos que se mostraran en el LCD. El rango de direcciones del DDRAM para 1-lnea, 2-lneas, y 4-lneas de los LCDs se muestran en las Tabla siguientes. El HD44780 tiene un generador ROM de caracteres que puede generar patrones de caracteres de 5 8 o 5 10 con un cdigo de 8-bits. El usuario puede reescribir patrones de caracteres en el generador RAM de caracteres (CGRAM). Pueden ser programadas hasta ocho patrones de 5 8 o cuatro patrones de 5 10.

ERS

496

Comandos del HD44780

ERS

497

Registros del HD44780


El HD44780 tiene 2 registros de usuario accesibles de 8-bits: registro de instrucciones (IR) y registro de datos (DR). Para escribir informacin en la RAM de datos desplegables o en el generador RAM de caracteres, el MCU escribe en el registro DR. La direccin de la RAM de datos debe ser inicializada con una instruccin previa. Cuando los datos provienen del DDRAM o del CGRAM, el registro DR tamin es utilizado para almacenar datos. La seleccin de Registros se muestra en la Tabla. El HD44780 tiene una bandera ocupada que es la salida del pin DB7. El HD44780 usa un contador de direcciones de 7 bits para mantener un seguimiento de las direcciones de las prximas localidades de la DDRAM o de la CGRAM a las que se tendr acceso.

ERS

498

Instrucciones del HD44780


Limpiar pantalla
Escribe 0x20 (espacios de caracter) en todas las localidades del DDRAM. Poner en 0 el contador de direccin (regresa el cursor a la esquina superior izquierda del LCD). Lo pone en modo de incremento.

Regresar a Home
Poner las direcciones del contador en 0 El contenido del DDRAM no tiene cambios.

Programar el modo de entrada


Incrementa o Disminuye las direcciones del DDRAM. Controla los cambios de desplazamiento (shifts if S bit = 1) del display

Control de Encendido/Apagado del Display


Poner el display en encendido o apagado Poner el cursor en encendido o apagado Poner el cursor parpadeante en encendido o apagado ERS

499

Instrucciones del HD44780


Desplazamiento del Cursor o del Display Esta funcin cambia la posicin del cursos a la derecha o a la izquierda sin escribir ni leer datos en el display. Este cambio esta controlado por dos bits que se muestran en la Tabla.

Conjunto de Instrucciones Establece la longitud de la interfaz (bit DL) para ser de 4 u 8 bits Selecciona el nmero de lneas (bit N) para ser de una o dos lneas Selecciona las fuentes de los caracteres (bit F) para ser de 5 8 o 5 10
ERS 500

Instrucciones del HD44780


Programar la direccin CGRAM
Este comando contiene las direcciones que se escribirn en el contador de direcciones.

Programar la direccin DDRAM


Este comando permite al usuario establecer la direccin de inicio para desplegar informacin.

Lectura de la bandera de ocupado y de direccin


Este comando lee las banderas ocupadas y el contador de direcciones. El usuario puede utilizar este comando para determinar que el controlador del LCD est listo para aceptar otro comando. El usuario puede utilizar este comando para indicar donde comenzar a desplegarse la informacin.
ERS 501

Conectando el HD44780 con el HCS12


Hay quienes utilizan el kit del LCD como un dispositivo de E/S y usan el puerto de E/S y muchos otros pines de E/S como seales de control. La conexin puede ser de 4 u 8 bits. Para leer y escribir con xito en el LCD, se deben satisfacer los requisitos de sincronizacin del LCD. Los diagramas de sincronizacin para leer o escribir se muestran en las Figuras de la siguiente lamina.

ERS

502

ERS

503

Procedimiento para enviar un comando al registro IR:


Paso 1
Cambiar las seales RS y E a un nivel bajo.

Paso 2
Cambiar la seal R/W a un nivel bajo.

Paso 3
Cambia la seal E a un nivel alto.

Paso 4
Enviar los datos por el Puerto de Salida que est conectado al bus de datos del LCD. Necesitamos configurar el puerto de E/S como salida antes de escribir los datos en el kit del LCD.

Paso 5
ERS Poner la seal E en nivel bajo y asegurarse que la operacin se complet. 504

Procedimiento para escribir un byte en el registro de datos del LCD


Paso 1
Poner la seal Rs en nivel alto.

Paso 2
Poner la seal R/W en nivel bajo.

Paso 3
Poner la seal E en nivel alto.

Paso 4
Enviar datos por el puerto de E/S que est conectado al bus de datos del LCD.

Paso 5
Poner la seal E en bajo y asegurarse que la operacin interna se completo.

Este procedimiento necesita repetirse una vez cuando se utilizan LCDs con interfaz de 4 bits.
ERS 505

Escribe una funcin que enve comandos al LCD:


La mayora de los comandos del LCD se completan en 40 ms. Si la funcin espera ms de 40 ms despus de la ejecucin de la operacin, entonces la mayora de los comandos se completarn cuando regrese la funcin. El cdigo en assembly para la interfaz de 8 bits es el siguiente:
lcdPort equ PTH ; puerto de datos del LCD lcdCtl equ PTK ; puerto de control del LCD lcdE equ $80 ; (PK7) terminal de la seal E lcdRW equ $20 ; (PK5) terminal de la seal R/W lcdRS equ $10 ; (PK4) terminal de la seal RS ; El comando est contenido en A cmd2lcd bclr lcdCtl,lcdRS+lcdRW ; selecciona registro de instruccin y escribe bset lcdCtl,lcdE ; pon la seal E en nivel alto staa lcdPort ; enva el comando a travs de las seales RS y E nop nop bclr lcdCtl,lcdE ; pon la seal E en nivel bajo bset lcdCtl,lcdRW ; pon la seal R/W en nivel alto ldy #1 ; agregar este retardo completar la operacin jsr delayby50us ; interna de la mayora de las instrucciones rts ERS 506

La funcin para configurar el LCD enva cuatro comandos al kit del LCD
Entry mode set Display on/off Function set Clear display
DDRH DDRK #$FF,lcdDIR lcdCtlDir,$B0 #5 delayby100ms #$38 cmd2lcd #$0F cmd2lcd #$06 cmd2lcd #$01 cmd2lcd #2 delayby1ms

lcdDIR equ lcdCtlDIR equ openlcd movb bset ldy jsr ldaa jsr ldaa jsr ldaa jsr ldaa jsr ldy jsr rts

; configura puerto H como salida ; configura los pines de control como salidas ; espera al LCD para completar configuracin ; interna ; establece datos de 8 bits, display de 2 lneas, fuente de 5x8 ; " ; enciende el display y el cursor parpadeante ; " ; mover cursor a la derecha (modo de entrada: set de instrucciones) ; " ; limpia pantalla del LCD y regresa a posicin original ; " ; espera hasta que la instruccin "clear display se complete ; "
ERS 507

Funcin para mostrar un caracter en el LCD El caracter que se mostrar esta almacenado en el acumulador A.
putc2lcd bset bclr bset staa nop nop bclr bset ldy jsr rts lcdCtl,lcdRS lcdCtl,lcdRW lcdCtl,lcdE lcdPort ; selecciona el registro de Datos del LCD ; habilita escritura del LCD ; Pon la seal E en un nivel alto ; enva los datos al LCD ; proveer a la seal E de suficiente longitud ; " ; pon la seal E en un nivel bajo ; pon la seal R/W en alto para completar el ciclo de escritura ; espera hasta que la operacin de escritura ; finalice

lcdCtl,lcdE lcdCtl,lcdRW #1 delayby50us

ERS

508

Funcin para mostrar una cadena que termina con un caracter NULO
La cadena que se va a enviar es apuntada por el ndice del registro X.
puts2lcd ldaa beq jsr bra done_puts rts 1,x+ done_puts putc2lcd puts2lcd ; obtn un caracter de la cadena ; encuentra algn caracter NULO?

Ejemplo Escribe un programa en assembly que pruebe las rutinas anteriores mostrando en el display el siguiente mensaje en dos lneas.
hello world! I am ready!
ERS 509

#include lcdPort lcdDIR lcdCtl lcdCtlDir lcdE lcdRW lcdRS

"hcs12.inc" equ PTH ; (PH7~PH0) pines de datos del LCD equ DDRH ; puerto de direcciones de datos del LCD equ PTK ; puerto de control del LCD equ DDRK ; puerto de direcciones de control del LCD equ $80 ; terminal de la seal E equ $20 ; terminal de la seal R/W equ $10 ; terminal de la seal RS org $1500 lds #$1500 ; establece el apuntador a pila jsr openlcd ; inicializa el LCD ldx #msg1lcd jsr puts2lcd ldaa #$C0 ; muvete a la siguiente fila jsr cmd2lcd ; " ldx #msg2lcd jsr puts2lcd swi msg1lcd fcc "hello world!" dc.b 0 msg2lcd fcc "I am ready!" dc.b 0 #include delay.asm" ; incluye aqu las rutinas de retraso ; incluir las cuatro funciones anteriores del LCD
ERS 510

Conexiones con interruptores DIP


A menudo los interruptores estn agrupados juntos. Lo ms comn es encontrar cuatro u ocho interruptores en un paquete DIP. Los interruptores DIP se utilizan a menudo para proporcionar informacin de configuracin para el microcontrolador. Despus de cortar la corriente, el microcontrolador interpreta la colocacin de los interruptores DIP y en consecuencia ejecuta dicha configuracin.

ERS

511

Conectando un teclado

ERS

512

Conectando un Teclado
Un Teclado est organizado como un conjunto de interruptores que puede ser mecnico, de membrana, de capacitores, o efecto Hall. Los interruptores mecnicos para Teclados son los ms populares.
Los interruptores mecnicos tienen un problema llamado el rebote de contacto. Al cerrar un interruptor mecnico se generan una serie de pulsos porque el contacto de los interruptores no se interrumpe inmediatamente. Adems, un humano no es capaz de teclear ms de 50 teclas en un segundo. Leer el teclado ms de 50 veces en un segundo es leer el mismo golpe de tecla muchas veces.

La entrada de un Teclado se divide en tres pasos:


Escanear el Teclado para descubrir cual tecla fue presionada. Quitar el rebote del Teclado para determinar si una tecla fue oprimida. Se puede usar tanto el hardware como el software para quitar el rebote de las teclas. Buscar en la Tabla ASCII para encontrar el cdigo ASCII de la tecla ERS 513 presionada.

ERS

514

Bsqueda en la Tabla del Cdigo ASCII


El cdigo ASCII de cada tecla puede ser almacenada en una tabla para facilitar su bsqueda.

ERS

515

Conectando el HCS12 con el Teclado


Un Teclado comnmente consta de 12 a 24 teclas y es adecuado para muchas aplicaciones. Un Teclado tambin necesita una tcnica para quitar el rebote como una tecla. Un Teclado de 16 teclas puede ser conectado fcilmente a uno de los puertos paralelos del HCS12. El circuito de un Teclado de 16 teclas se muestra en la Figura . En esta Figura los pines PA7..PA4 controlan 4 teclas cada uno.

ERS

516

Ejemplo. Escribe un programa que realice la exploracin de un teclado, quite el rebote, y regrese el cdigo ASCII al Acumulador A para el quien lo requiera. Solucin
Pines PA4..PA7 controlan una fila de 4 teclas cada uno. El escaneo se realiza al poner uno de los pines PA7..PA4 en bajo, los otros tres pines en alto y comprobando las teclas al mismo tiempo.
#include hcs12.inc" keyboard equ PTA get_char scan_r0 scan_k0 scan_k1 scan_k2 scan_k3 key0 key1 movb movb brclr brclr brclr brclr bra jmp jmp #$F0,DDRA #$EF,keyboard keyboard,$01,key0 keyboard,$02,key1 keyboard,$04,key2 keyboard,$08,key3 scan_r1 db_key0 db_key1 ; pon PA7~PA4 como salida, PA3~PA0 como entrada ; escanea la fila que contenga la teclas 0123 ; la tecla 0 est presionada? ; la tecla 1 est presionada? ; la tecla 2 est presionada? ; la tecla 3 est presionada?

ERS

517

key2 key3 scan_r1 scan_k4 scan_k5 scan_k6 scan_k7 key4 key5 key6 key7 scan_r2 scan_k8 scan_k9 scan_kA scan_kB key8 key9

jmp jmp movb brclr brclr brclr brclr bra jmp jmp jmp jmp movb bclr brclr brclr brclr brclr bra jmp jmp

db_key2 db_key3 #$DF,keyboard keyboard,$01,key4 keyboard,$02,key5 keyboard,$04,key6 keyboard,$08,key7 scan_r2 db_key4 db_key5 db_key6 db_key7 #$BF,keyboard keyboard,$40 keyboard,$01,key8 keyboard,$02,key9 keyboard,$04,keyA keyboard,$08,keyB scan_r3 db_key8 db_key9

; escanea la fila que contenga las teclas 4567 ; la tecla 4 est presionada? ; la tecla 5 est presionada? ; la tecla 6 est presionada? ; la tecla 7 est presionada?

; escanea la fila que contenga las teclas 89AB ; ; la tecla 8 est presionada? ; la tecla 9 est presionada? ; la tecla A est presionada? ; la tecla B est presionada?

ERS

518

jmp jmp movb brclr brclr brclr brclr jmp keyC jmp keyD jmp keyE jmp keyF jmp ; debounce key 0 db_key0 jsr brclr jmp getc0 ldaa rts ; debounce key 1

keyA keyB scan_r3 scan_kC scan_kD scan_kE scan_kF

db_keyA db_keyB #$7F,keyboard keyboard,$01,keyC keyboard,$02,keyD keyboard,$04,keyE keyboard,$08,keyF scan_r0 db_keyC db_keyD db_keyE db_keyF

; escanea la fila que contenga las teclas CDEF ; la tecla C est presionada? ; la tecla D est presionada? ; la tecla E est presionada? ; la tecla F est presionada?

delay10ms keyboard,$01,getc0 scan_k1 #$30 ; regresa el cdigo ASCII de 0

ERS

519

db_key1 jsr brclr jmp getc1 ldaa rts db_key2 jsr brclr jmp getc2 ldaa rts db_key3 jsr brclr jmp getc3 ldaa rts db_key4 jsr brclr

delay10ms keyboard,$02,getc1 scan_k2 #$31 delay10ms keyboard,$04,getc2 scan_k3 #$32 delay10ms keyboard,$08,getc3 scan_r1 #$33 delay10ms keyboard,$01,getc4

; regresa el cdigo ASCII de 1

; regresa el cdigo ASCII de 2

; regresa el cdigo ASCII de 3

ERS

520

jmp getc4 ldaa rts db_key5 jsr brclr jmp getc5 ldaa rts db_key6 jsr brclr jmp getc6 ldaa rts db_key7 jsr brclr jmp

scan_k5 #$34

; regresa el cdigo ASCII de 4

delay10ms keyboard,$02,getc5 scan_k6 #$35 ; regresa el cdigo ASCII de 5 delay10ms keyboard,$04,getc6 scan_k7 #$36 ; regresa el cdigo ASCII de 6 delay10ms keyboard,$08,getc7 scan_r2

ERS

521

getc7 db_key8

getc8 db_key9

getc9 db_keyA

getcA db_keyB

getcB

ldaa rts jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts

#$37 delay10ms keyboard,$01,getc8 scan_k9 #$38 delay10ms keyboard,$02,getc9 scan_kA #$39

; regresa el cdigo ASCII de 7

; regresa el cdigo ASCII de 8

; regresa el cdigo ASCII de 9

delay10ms keyboard,$04,getcA scan_kB #$41 ; obtener el cdigo ASCII de A delay10ms keyboard,$08,getcB scan_r3 #$42 ; obtener el cdigo ASCII de B
ERS 522

db_keyC

getcC db_keyD

getcD db_keyE

jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts jsr brclr jmp ldaa rts

delay10ms keyboard,$01,getcC scan_kD #$43 ; obtener el cdigo ASCII de C delay10ms keyboard,$02,getcD scan_kE #$44 ; obtener el cdigo ASCII de D delay10ms keyboard,$04,getcE scan_kF #$45 ; obtener el cdigo ASCII de E delay10ms keyboard,$08,getcF scan_r0 #$46 ; obtener el cdigo ASCII de F

getcE db_keyF

getcF

ERS

523

delay10ms movb movb movb ldd addd std wait_lp2 brclr rts

#$90,TSCR1 #$06,TSCR2 #$01,TIOS TCNT #3750 TC0 TFLG1,$01,wait_lp2

; habilita TCNT y limpia rpido las banderas ; configura el factor de preescala a 64 ; habilita OC0 ; inicia y enva la operacin de comparacin ; con un retraso de 10 ms

ERS

524

El Convertidor D/A AD7302


Un convertidor D/A de dos canales hecho por Analog Devices. El AD7302 convierte un valor digital de 8 bits a un voltaje analgico. El Diagrama a Bloques se muestra en la Figura 7de la siguiente lmina. El AD7302 est diseado como un dispositivo de memoria mapeada. La seal CS debe estar en un nivel bajo para que el chip trabaje. El AD7302 necesita un voltaje de referencia para operar. El voltaje de referencia puede ser uno externo (del pin REFIN) o del VDD interno. Cada conversin toma alrededor de 2 ms para completarse. ERS 525

El Convertidor D/A AD7302

- La salida de cada DAC esta dada por: VOUTA/B = 2 VREF (N/256) donde: N es el valor digital aERS convertir.
526

Usando el AD7302 para Generar una Onda de Dientes de Sierra


Configurar a PB7PB0, PJ0PJ1 para salida. Sacar el valor digital de 0 a 255 y repetir. Para cada valor, pon el PJ0 en bajo y a continuacin en alto, as los valores en las terminales PB7..PB0 pueden ser transferidos al AD7302. Pon la seal PJ1 en bajo durante el proceso.

ERS

527

Ejemplo Escribe un programa que genere una onda de dientes de sierra en el pin VOUTA. El programa en assembly es como sigue: #include "hcs12.inc" org $1500 movb #$FF,DDRB ; configura al PORTB para salida bset DDRJ,$03 ; configura a PJ1~PJ0 para salida bclr PTJ,$02 ; selecciona la salida VOUTA loop inc PORTB ; incrementar la salida por un paso bclr PTJ,$01 ; generar un aumento de borde el el pin PJ0 bset PTJ,$01 ; " bset PTJ,$01 ; aumenta 9 instrucciones bset ms para proporcionar 2 ms bset PTJ,$01 ; para completar la conversin D/A bset PTJ,$01 ; " bset PTJ,$01 ; bset PTJ,$01 ; bset PTJ,$01 ; " bset PTJ,$01 ; bset PTJ,$01 ; bset PTJ,$01 ; bra loop ; para completar la conversin D/A end La versin del programa en lenguaje C est en la siguiente pgina.
ERS 528

Teclas Activadoras (Wakeups Key)


Muchos productos embebidos son energizados por batera. Para alargar la vida de las bateras, la mayora de los microcontroladores tiene incorporado modos de ahorro de energa como lo son los modos de PARO y ESPERA. Todos los miembros del HCS12 tiene incorporados las Teclas Activadoras que tienen la caracterstica de activar al CPU cuando estas teclas son presionadas y estn conectadas en ciertos puertos de entrada. Despus de entrar en modo de alto o espera el MCU ser interrumpido cuando uno de estos pines sea presionado. Los puertos J, y P del HCS12 tienen implementadas funciones de teclas activadoras. Los usuarios seleccionan el borde activo para activar, programando el registro del puerto del dispositivo habilitado y el registro del selector de polaridad del puerto. Tanto el registro habilitador del puerto interrumpido y el registro de la bandera interrumpida permiten que el usuario active el MCU.
ERS 529

Inicializacin de las Teclas Activadoras


Paso 1
Pon los bits de entrada de la direccin de la tecla activadora escribiendo ceros en el registro de direcciones de datos.

Paso 2
Selecciona borde de subida o de bajada del pin activador para interrumpir el MCU programando los registros relacionados.

Paso 3
Escribe la rutina de servicio para la interrupcin de la tecla activadora e inicializa el vector de interrupcin de la tecla activadora.

Paso 4
Limpia todas las banderas que hayan sido activadas en el registro de banderas de las Teclas Activadoras.

Paso 5
Habilita la funcin de teclas activadoras poniendo el bit correspondiente en el registro habilitador de interrupciones activadoras.

Paso 6
Limpia la mascara global de interrupcin (el bit I del registro CCR ).
ERS 530

Consideraciones para la Aplicacin de Llaves Activadoras


Muchas aplicaciones son diseadas con un lazo de espera que esperan por solicitudes del servicio hechas por los usuario. Cuando se realiza una solicitud, la aplicacin manda llamar a la rutina apropiada que provea el servicio. Despus de que se cumpli con el servicio, la rutina regresa al lazo de espera. Si el usuario ingresa otro comando antes que el temporizador termine, el software de aplicacin da un reset al temporizador y responde a la solicitud del usuario. Si el Temporizador termina antes que el usuario realice otra solicitud de servicio, el software de aplicacin pone al microcontrolador en modo de potencia baja para ahorrar energa. Siempre que el usuario presione una tecla, se genera una interrupcin para activar el microcontrolador. La rutina del servicio para la tecla de interrupcin simplemente limpia la bandera de la tecla activadora y regresa al bucle de espera. Puesto que podemos elegir borde de subida o de bajas para interrumpir al CPU, esta eleccin se basa en si hay un dispositivo con pull-up o pull-down dentro del chip. Si el MCU tiene un dispositivo pull-dow interno entonces se elige el borde de subida como borde activo. De lo contrario elige borde de bajada como borde ERS 531 activo.

ERS

532

Ejemplo Escriba una secuencia de instrucciones para configurar a los cuatro pines superiores del Puerto P con la caracterstica activadora. Programa el Puerto P para que las terminales PP7...PP4 generen una interrupcin siempre que haya una bajada de borde aplicado a cualquiera de las terminales. Solucin:
#include hcs12.inc bclr DDRP,$F0 bset PERP,$F0 bclr PPSP,$F0 movb #$FF,PIFP bset PIEP,$F0 cli

; configura las terminales PP<7:4> para entrada ; habilita las terminales PP7~PP4 del dispositivo pull ; elige el dispositivo pull-up ; limpia bandera de teclas activadoras del Puerto P ; habilita la interrupcin del Puerto P ; habilita la interrupcin global de teclas activadoras
ERS 533

Convertidor Analgico/Digital

Entrada: Temperatura, Presin, Luz, Peso, Flujo, Humedad, etc.

Entrada

Transductor transductor

Acondicionador de seal

Convertidor Convertidor A/D

micro micro

Conceptos Bsicos de Conversin A/D


Muchos sistemas embebidos necesitan lidiar con cantidades no elctricas como: altura, humedad, presin, peso, masa, flujo de aire, temperatura, intensidad de la luz y velocidad. Estas cantidades no elctricas son valores analgicos por naturaleza. Las cantidades analgicas deben ser convertidas a un formato digital para que puedan ser procesadas por una computadora. Un convertidor A/D solo puede trabajar con voltaje elctrico.

Conceptos Bsicos de Conversin A/D


Cualquier cantidad no elctrica debe ser convertida a una cantidad elctrica utilizando un determinado tipo de transductor. Un transductor convierte las cantidades noelctricas a cantidades elctricas. La salida de un transductor puede no estar en un rango aceptable para la conversin A/D. Se necesita un circuito de acondicionamiento de seales para escalar y desplazar la salida del transductor en un rango aceptable para la conversin A/D.

Caractersticas del Voltaje Analgico y el Cdigo Digital


Un convertidor A/D ideal debe tener caractersticas como las que se muestran. Un convertidor A/D con estas caractersticas necesita un nmero infinito de bits para representar los resultados de la conversin A/D.

Caractersticas del Voltaje Analgico y el Cdigo Digital


Una conversin A/D de n-bits tendr 2n posibles valores de cdigo de salida. A continuacin se muestran las caractersticas de la salida de una conversin A/D ideal de n-bits. El rea que se encuentra por encima y por debajo de la lnea punteada es llamada error de cuantizacin. Utilizar n-bits para representar un conversin A/D tiene un promedio de error de 2n+1. La salida real de una conversin A/D puede no tener linealidad y errores no monotnicos.

Algoritmos de Conversin A/D


Conversin A/D Paralela (Flash)
Se utilizan 2n comparadores La primera entrada de cada comparador es el voltaje que se desea convertir. La segunda entrada de cada comparador es el voltaje que representa una de las 2n combinaciones. La salida del comparador puede ser alta si la entrada analgica es ms alta que el voltaje que representa una de las 2n combinaciones. El valor ms alto de n-bits hace que la salida del comparador se convierta en verdadera al estar seleccionada como conversin A/D. La velocidad de la conversin es muy rpida. El costo es un inconveniente. Las principales aplicaciones son aquellas que requieren de alta velocidad pero baja resolucin.

Convertidores A/D de Pendiente y doble Pendiente


Utiliza capacitores con comportamiento de carga y descarga para llevar a cabo la conversin A/D. Requiere un hardware simple y es muy popular en aplicaciones de baja velocidad. Se ha usado en microcontroladores de la familia Microchip PIC14400.

Convertidores A/D Sigma-Delta


Utiliza tcnicas sobre-muestreo para llevar a cabo la conversin A/D. Tiene buena inmunidad al ruido y puede lograr una resolucin alta. Es popular en aplicaciones de alta resolucin. Su rendimiento es aceptable en la tecnologa CMOS.

Mtodo de Aproximaciones Sucesivas


Se aproximan a las seales analgicas en n pasos. El primer paso es inicializar el registro SAR en 0. Ejecuta una serie de pasos supuestos que comienzan por el bit ms significativo y terminan en el bit menos significativo. Por cada bit en el registro SAR suponer que sea 1. Convierte el valor del registro SAR en un voltaje analgico. Compara las salidas D/A con las entradas analgicas y limpia el bit 0 si la salida D/A es muy larga.

Mtodo de Aproximaciones Sucesivas

Mtodo de Aproximaciones Sucesivas

Rango Optimo de Voltajes para la Conversin A/D


Necesitamos un voltaje de referencia bajo (VRL) y un voltaje de referencia alto (VRH) para llevar a cabo la conversin A/D. VRL generalmente se establece como Tierra. VRH generalmente se establece como VDD. La mayora de los convertidores A/D son mtricos proporcionales Una entrada analgica de 0 V (o VRL) es convertida a un 0 digital. Una entrada analgica de VDD (o VRH) es convertida a un cdigo digital igual a 2n 1. Una entrada k-V ser convertida a un cdigo digital igual a k (2n 1) VDD. El resultado de la conversin A/D ser ms exacto si el valor de la seal analgica abarca todo el rango del voltaje desde VRL a VRH. El resultado k de la conversin A/D puede ser regresada a un voltaje analgico VK utilizando la siguiente ecuacin:

VK = VRL + (range k) (2n 1)

Ejemplo. Suponer que hay un convertidor A/D de 10 bits con VRL = 1 V y VRH = 4V. Encontrar para los resultados 25, 80, 240, 500, 720, 800, y 900 el voltaje correspondiente de la conversin A/D. Solucin: rango = VRH VRL = 4V 1V = 3V
V(25) V(80) V(240) V(500) V(720) V(800) V(900) = 1 V + (3 25) (210 1) = 1.07 V = 1 V + (3 80) (210 1) = 1.23 V = 1 V + (3 240) (210 1) = 1.70 V = 1 V + (3 500) (210 1) = 2.47 V = 1 V + (3 720) (210 1) = 3.11 V = 1 V + (3 800) (210 1) = 3.35 V = 1 V + (3 900) (210 1) = 3.64 V

Circuito Escalador
Algunos transductores tienen un voltaje de salida dentro del rango de 0 ~ VZ, donde VZ < VDD. VZ puede ser mucho ms pequeo que VDD. Cuando VZ es mucho ms pequeo que VDD, no puede ser exacto el resultado de la conversin A/D. La solucin a este problema es utilizar un circuito escalador para amplificar la salida del transductor y poder cubrir todo el rango de voltajes: 0 V VRH a VDD.

AV = VOUT VIN = (R1 + R2) R1 = 1 + R2/R1

Ejemplo. Elegir los valores apropiados para R1 y R2 de la Figura para escalar el voltaje dentro del rango de 0~200mV a 0~5V. Solucin: AV = 1 + R2/R1 = 5V / 200mV = 25 R2/R1 = 24 Para lograr el rango deseado elegir R1 = 10 K y R2 = 240 K .

Circuito de Traslacin de Voltaje


Algunos transductores tienen un voltaje de salida en el rango de V1 a V2 (V2 > V1). La precisin de la conversin A/D ser ms exacta si se puede escalar el voltaje y desplazndolo de 0 ~ VDD. El circuito que se muestra puede desplazar y escalar el voltaje de V1 a V2 en el rango de 0~VDD.

Ejemplo. Elegir una resistencia apropiada para ajustar el voltaje en el circuito que se muestra en la figura anterior y as poder desplazar el voltaje del rango de 1.2 V ~ 3.0 V al rango de 0V ~ 5V. Solucin: Aplicando la ecuacin 12.5:
0 = -1.2 (Rf/R1) (Rf/R2) V1 5 = 3.0 (Rf/R1) (Rf/R2) V1

- Para trasladar y escalar al voltaje deseado es necesario elegir los valores de R0 = R1 = 10 K, R2 = 50 K , Rf = 12 KW, y V1 = -5V.

El Convertidor A/D del HCS12


Los miembros del HCS12 pueden tener uno o dos canales de 8 terminales y convertidores A/D de 10 bits. La conversin de reloj ms alta es de 2 MHz. Para completar una conversin de 8 o 10 bits de resolucin con un reloj de 2 MHz, el muestreo puede tardar de 6 a 7 ms. Una conversin A/D puede comenzar al escribir en el registro de control o por un disparo externo. Para ejecutar la conversin se usa el mtodo de aproximaciones sucesivas. El resultado de la conversin puede ser sin signo justificado a la derecha, con signo justificado a la izquierda y sin signo justificado a la izquierda.

Terminales Relacionadas a las Seales del Convertidor A/D


El mdulo AD tiene las terminales de entradas analgicas AN0 ~ AN7. La terminal AN7 del mdulo AD puede ser utilizada opcionalmente como la entrada del disparador. VRH y VRL son las entradas del voltaje de referencia alto y bajo. VDDA y VSSA son las terminales de entrada al convertidor A/D y son la fuente de alimentacin y la tierra.

Registros Relacionados al Convertidor A/D


El mdulo A/D tiene asociado los siguientes registros:
6 Registros de Control: ATDCTL0 ~ ATDCTL5. (ATDCTL0 y ATDCTL1 son usados solo para pruebas de fbrica). 2 Registros de Estado: ATDSTAT0 y ATDSTAT1. 2 Registros de Prueba: ATDTEST0 y ATDTEST1. 1 Registro Habilitador de Entrada: ATDDIEN. 1 Registro del Puerto de Datos: PTAD. 8 Registros de Resultados de 16 bits: ATDDR0~ATDDR7.

Registro de Control 2 ATD (ATDCTL2)

Disparador Externo A/D


El disparo externo A/D puede ser un disparo por borde o un disparo por nivel. La eleccin del disparo externo es controlado por el registro ATDCTL2.

Registro de Control 3 ATD (ATDCTL3)


Este registro establece la longitud de la secuencia de conversin, habilita/deshabilita el modo FIFO para el registro de resultados, y controla el comportamiento del ATD en el modo congelado (modo BDM). Si el bit del FIFO es 0, el resultado de la primera conversin aparece en el primer registro de resultados, la segunda conversin aparece en el segundo registro de resultados y as sucesivamente. Si el bit del FIFO es 1, entonces el resultado de la primera conversin aparece en el registro de resultados especificado por el contador de la conversin.

Registro de Control 3 ATD (ATDCTL3)

Registro de Control 4 ATD (ATDCTL4)


Este registro establece la frecuencia del reloj de conversin, la longitud de la segunda fase del tiempo de muestreo y la resolucin de la conversin A/D. Escribir en el registro equivale a abortar la conversin actual. Hay dos etapas en el tiempo de muestreo. La primera etapa se fija en dos periodos del reloj de conversin. La segunda etapa es seleccionada por los bits SMP1 y SMP2 del registro.

Registro de Control 4 ATD (ATDCTL4)

Registro de Control 5 ATD


Selecciona el tipo de secuencia de conversin y los canales de entrada analgica que sern muestreados. Al escribir en el registro se interrumpir la conversin actual. Selecciona el canal que se convertir de la Tabla 1. La Tabla 2 resume el formato disponible del resultado y la forma en que se crean utilizando los bits de control. La Tabla 3 ilustra la diferencia entre resultados con signo y sin signo, los cdigos de salida justificados a la izquierda y a la derecha para una seal de entrada con un rango entre 0 y 5.12V.

ATDCTL5

Registro de Control 5 ATD

Registro de Control 5 ATD

Registro de Estado ATD (ATDSTAT0)


Cada bandera de estado se puede limpiar escribindole un 0 un 1.

Registro de Pruebas 1 ATD (ATD1TEST1)


El bit SC se usa para habilitar un canal especial de conversin.

Registro de Estado 1 ATD (ATDSTAT1)


La bandera puede ser limpiada con cualquiera de las siguientes opciones: Escribir en el registro ATDCTL5. Si AFFC = 0 y se lee ATDSTAT1 seguida de una lectura del registro de resultados ATDDRx. Si AFFC = 1 y se lee del registro de resultados ATDDRx

Registro Habilitador de Entradas (ATDDIEN)


El registro permite que el usuario habilite las terminales del Puerto ADx como entradas digitales.

Registro del Puerto de Datos (PTAD)

Las terminales del puerto son compartidas con las entradas analgicas AN0~AN7 y AN8~AN15.

Registros de Resultados de Conversin ATD (ATDDRx, x = 0~7)


Cada registro de resultados es de 16 bits y pueden dividirse en registros de 8 bits ATDDRHx y ATDDRLx. El resultado de la conversin A/D puede almacenarse con justificacin a la derecha o justificacin a la izquierda.

Mdulo del Reloj ATD


El rango de frecuencias del reloj de conversin A/D es de 500 KHz a 2 MHz. Para derivar la seal de reloj ATD, el usuario puede establecer una preescala del bus del reloj.

Etapa de Muestreo y Reten


Como se muestra en la Figura de la lmina siguiente, la etapa de muestreo y reten acepta seales analgicas a la entrada del multiplexor y las almacena como la carga del capacitor de muestreo. El proceso de muestreo tiene dos etapas. La primera etapa del proceso de muestreo toma dos ciclos del reloj A/D para cargar el capacitor. La segunda etapa almacena la carga en el nodo de almacenamiento para los ciclos programables 2, 4, 8, 16. El tiempo de conversin del muestreo se obtiene con la siguiente ecuacin:
(no. of bits in resolution + no. of programmed sample clocks + 2) conversion time = ATD clock frequency

El Tiempo de la Conversin A/D


El tiempo de la conversin A/D es la suma del tiempo convertido y del tiempo de muestreo. La conversin de los tiempos para 500KHz y 2 MHz se muestran en la Tabla.

Lazo de Retorno para el Canal de Entrada


En el caso de mltiples secuencias de canales de conversin, cuando el selector de entrada pasa por el canal AN7, se ejecuta un lazo de retorno al canal AN0.

Ejemplo. Asumiendo que S8C~S1C (ATD0TL3)


estn establecidos como 0101 y los CC~CA (ATD0CTL5) estn establecidos como 110, Cul es la secuencia de conversin para sta configuracin?

Solucin:
El primer canal a convertir es AN6. Hay 5 canales que sern convertidos. La secuencia de conversin es la siguinete: AN6, AN7, AN0, AN1 y AN2.

El Modo FIFO
Los 8 registros de resultados de 16 bits estn organizados en un anillo circular. El contador de la conversin en el registro ATDSTAT0 especifica los registros de resultados que retendrn la conversin actual. En el modo FIFO, cuando una nueva secuencia comienza no se da un reset a 0 a la conversin. En el modo FIFO, el primer resultado de la conversin no podr ser almacenado en ATDDR0.

Ejemplo. Asumir que la siguiente configuracin fue programada antes de que comience una nueva conversin: El valor del contador de la conversin en el registro ATDSTAT0 es 5. El cdigo del canal seleccionado en el registro ATDCTL5 es 6. El lmite de la secuencia de conversin en el registro ATDCTL3 se establece en 5. El bit MULT del registro ATDCTL5 se establece en 1. Cmo debern ser almacenados los resultados cuando se seleccione o no se seleccione el modo FIFO? Solucin: El contador de la conversin especifica los registro de resultados que retendrn el resultado de la primera conversin. El cdigo del canal seleccionado especifica el primer canal que ser convertido. El lmite de la secuencia de conversin especifica el nmero de canales que sern convertidos.

Procedimiento para Ejecutar una Conversin A/D


Paso 1 Conectar correctamente el hardware: VDDA: se conecta a VDD (5 V). VSSA: se conecta a GND. VRH: se conecta a VDD (5 V). VRL: se conecta a GND. Paso 2 Si el transductor no est en el rango apropiado, usar un circuito acondicionador de seales para desplazarlo y escalarlo entre el VRL y VRH. Paso 3 Seleccionar el canal o los canales y los modos de operacin programando el registro de control 5 ATD. Escribiendo en el registro ATDCTL5 se inicia la secuencia de conversin A/D. Paso 4 Esperar a que la bandera SCF del registro de estados ATDSTAT0 se active, despus recolectar los resultados de la conversin A/D y guardarlos en la memoria.

Ejemplo Escribir una subrutina para inicializar el convertidor AD del MC9SGC32 y comenzar la conversin con la siguiente configuracin: Modo No Exploratorio Seleccionar el canal 7 (modo de canal nico) Limpieza rpida de la bandera del ATD Detener el AD en modo de espera Deshabilitar interrupciones Ejecutar 4 conversiones en una secuencia Deshabilitar modo FIFO Terminar la conversin actual y al activarse el BDM congelarlo. Usar para la segunda etapa del tiempo de muestreo Operaciones de 10 bits y 2 periodos del reloj A/D. Elegir una frecuencia de conversin de 2 MHz para el reloj del bus de 24 MHz. El resultado debe ser sin signo y justificado a la derecha. Solucin: La configuracin del ATD0CTL2 Habilitar AD0 Seleccionar la limpieza rpida de banderas (establecer el bit 6 en 1) Detener a AD0 cuando est en modo de espera (establecer el bit 5 en 1) Deshabilitar el disparador externo del canal 7 (establecer los bits 4, 3 y 2 en 0) Deshabilitar la interrupcin del AD0 (establecer el bit 1 en 0) Escribir en ATD0CTL2 el valor 0xE0.

La configuracin de ATDCTL3:
Ejecutar cuatro conversiones. Deshabilitar el modo FIFO. Completar la conversin actual cuando se active el BDM y despus bloquearlo. Escribir en el registro de control el valor 0x22.

La configuracin de ATD0CTL4:
Seleccionar operaciones de 10 bits (establecer el bit 7 en 0). 2 periodos de reloj A/D para tiempo de muestreo (establecer los bits 6 y 5 en 00). Establecer el valor de PRS4~PRS0 en 00101. Escribir en el registro de control el valor 0x05.

La configuracin de ATD0CTL5:
Justificacin a la derecha en el registro de resultados (establecer el bit 7 en 1). El resultado sin signo (establecer el 6 en 0). Modo sin escaneo (establecer el bit 5 en 0). Modo de canal unitario (establecer el bit 4 en 0). Seleccionar el canal 7 (seleccionar los bits de 2..0 en 111). Escribir en el registro de control el valor 0x87.

Subrutina en Assembly para Ejecutar la Inicializacin del AD


INCLUDE mc9s12gc32.inc" openATD0 movb #$E0,ATD0CTL2 ldy #2 jsr delayby10us ; esperar 20 us movb #$22,ATD0CTL3 movb #$05,ATD0CTL4 rts #include delay.asm

Ejemplo Escribe un programa que ejecute la conversin A/D de la seal analgica conectada a la terminal AN7. recoger 20 resultados de conversiones A/D y almacenarlos en las localidades de memoria comenzando en $1000. Usar la mima configuracin del Ejemplo anterior. Solucin: - En el Ejemplo anterior se configuran 4 secuencias de conversiones AD0 en el canal AN7. - Es necesario escribir 5 ocasiones en ATD0CTL5 para recolectar las 20 muestras.

#include "hc12.inc" org $1500 lds #$1500 ldx #$1000 ; usar el registro X como apuntador al buffer jsr openAD0 ; inicializar la conversin ATD0 ldy #5 loop5 movb #$87,ATD0CTL5 ; iniciar la secuencia de conversin A/D brclr ATD0STAT0,SCF,* movw ATD0DR0,2,x+ ; recolectar y guardar los resultados de la conversin movw ATD0DR1,2,x+ ; fijar el incremento del apuntador en 2 movw ATD0DR2,2,x+ ; movw ATD0DR3,2,x+ ; dbne y,loop5 swi ; incluir AQUI la subrutina openAD0 end

El Sensor de Temperatura TC1047A


Tiene 3 terminales con voltajes de salida directamente proporcionales a la temperatura ambiente. Puede medir temperaturas dentro del rango de -40C a 125C con un suministro de 2.7~5.5V. Los voltajes de salida en -40C, 0C, 25C y 125C corresponden a 100mV, 500mV, 750mV, 1.75V.

Circuito de Conexin entre el TC1047A y el HCS12

Ejemplo Convertir la temperatura y mostrarla en con tres dgitos enteros y un dgito fraccionario utilizando el LCD. Mostrar todo el rango de la temperatura del TC1047A. Actualizar el valor 5 veces por segundo. El reloj E es de 24 MHz. Solucin: - El rango completo de la temperatura es de 165oC. - Para traducir el resultado de la conversin A/D a temperatura dividir el resultado entre 6.2, se puede realizar primero multiplicando el resultado por 10 y dividiendo el producto entre 62.

#include "hcs12.inc" period equ $2E degree equ 223 org $1000 quo ds.b 1 rem ds.b 1 sign ds.b 1 fract ds.b 1 buf ds.b 8 org $1500 lds #$1500 ldy #2 jsr delayby100ms jsr openlcd ldaa #$80 jsr cmd2lcd ldx #msg1 jsr puts2lcd jsr openAD0 forever movb #$20,buf movb #$20,buf+1 movb #$30,buf+2

; cdigo ASCII del caracter de periodo ; cdigo ASCII del caracter de grados

; mantener la cadena que se mostrar en el LCD ; activar el apuntador a pila ; esperar a que el LCD est listo ; configuracin interna ; configurar el LCD ; colocar el cursor del LCD en la esquina ; superior izquierda ; mostrar "Temperature = " ; " ; configurar el mdulo ATD0 ; inicializar el contenido del buffer en 0.0oC ; " ; "

movb movb movb movb movb movb movb movb brclr ldd ldy emul ldx ediv stab tfr subb bhs negb stab movb

#period,buf+3 #$30,buf+4 #degree,buf+5 #$43,buf+6 #0,buf+7 #$87,ATD0CTL5 #0,sign #$30,fract ATD0STAT0,SCF,* ATD0DR0 #10 #62 rem y,d #40 save_quo quo #1,sign

; " ; " ; caracter de grados ; letra 'C' ; caracter nulo ; iniciar la secuencia de conversin ATD ; inicializar el signo positivo ; inicializar el dgito fraccional en 0 ; esperar a que termine la conversin ; leer el resultado de la conversin ; calcular resultado x 10 / 62 ; " ; " ; " ; guardar el resto ; transferir el cociente a B ; restar la temperatura de compensacin ; no usar el resto si es no negativo ; calcular el complemento a 2 del cociente ; la temperatura es negativa

ldab beq ldab subb stab bra save_quo stab cal_fract ldab beq ldaa mul ldx idiv cmpb blt inx cpx bne inc bra no_round tfr addb stab

rem convert #62 rem rem cal_fract quo rem convert #10 #62 #31 no_round #10 no_round quo convert x,d #$30 fract

; si el resto es 0, omitir algunas instrucciones ; ; calcular 62 - rem ; " ; " ; guardar la actualizacin del cociente ; cuando es positivo venir a esta instruccin ; calcular dgitos fraccionales ; " ; " ; " ; redondear los dgitos fraccionales ; " ; " ; " ; " ; " ; preparar la separacin de dgitos enteros ; convertir los dgitos fraccionales en cdigo ASCII ; " ; "

convert

add_fra

ldab clra ldx idiv addb stab tfr tstb beq ldx idiv addb stab tfr tstb beq movb movb ldaa beq movb

quo #10 #$30 buf+2 x,d add_fra #10 #$30 buf+1 x,d add_fra #$31,buf fract,buf+4 sign out_it #$2D,buf ; " ; dividir las repeticiones entre 10 por separado ; dgitos enteros ; " ; salvar los dgitos de unidades ; transferir el cociente a D ; el cociente es igual a cero? ; si la parte entera es 0, sumarle un dgito fraccional ; separar los dgitos de decenas ; convertir y guardar los dgitos de decenas ; " ; comprobar si hay dgitos de centenas ; el cociente es igual a 0? ; si hay dgitos de centenas, solo es 1 ; insertar dgitos fraccionales ; comprobar el signo ; agregar el caracter de menos cuando el signo es menos

out_it

ldaa #$C0 ; colocar el cursor en la segunda fila jsr cmd2lcd ; " ldx #spaces ; limpiar el 2do rengln del LCD jsr puts2lcd ; " ldaa #$C5 ; establecer la posicin del Cursor del LCD jsr cmd2lcd ; " ldx #buf ; mostrar la cadena de la temperatura jsr puts2lcd ; " ldy #2 ; esperar 200 ms jsr delayby100ms ; " jmp forever ; continuar ; ******************************************************************************************** ; La siguiente funcin ejecuta la configuracin del AD0. ; ******************************************************************************************** openAD0 movb #$E0,ATD0CTL2 ; habilita el AD0, limpieza rpida de la bandera ATD, ; detener en modo de espera ldy #2 jsr delayby10us ; esperar mientras se estabiliza AD0 movb #$0A,ATD0CTL3 ; ejecutar una conversin A/D movb #$25,ATD0CTL4 ; tiempo de muestreo de 4 ciclos, poner la preescala en 12 rts

El Temporizador

ERS

595

Porqu sontanimportanteslasFuncionesde Tiempo?


Esmuydifcileimposibleimplementarlassiguientesaplicaciones sinlasfuncionesdeTiempo:
CreacinyMedicindeTiempodeRetardo MedicindelPeriodoyelanchodepulso MedicindelaFrecuencia ContadordeEventos Comparacindeltiempodellegada SeguimientodelaFechaylaHora Generacindeinterrupcionesperidicas GeneracindeFormasdeOnda
ERS 596

ERS

597

Sistema de reloj y Reset del MC9GC12

ERS

598

ERS

599

Cadena de reloj para el COP

ERS

600

Pins del Temporizador


PORTT: Cada pin del puerto puede ser usado como pin de propsito general de E/S. Especial: El pin 7 puede ser usado como entrada de captura, salida de comparacin y entrada al acumulador de pulsos. Cuando un pin del PORTT es usado como E/S de propsito general este es configurado por el registro DDRT.
ERS 601

SistemaTemporizadordelHCS12
ElHCS12tieneunmdulodetiempoestndar(TIM)queconsisteen:
8canalesdeentradasdecapturasconmutadascon8canalesdesalidasdecomparacin. UnacumuladordepulsosAde16bit. UncontadorTemporizadorde16bits. EldiagramaabloquesdelTIMsemuestraenlaFiguradelalminasiguiente.

EnlafamiliadeautomotoreslosdispositivoHCS12tienenimplementadosun mdulodeTemporizadordeCapturaAumentado(ECT).ElmduloECTesta compuestode:


TodaslascaractersticasquecontieneelmduloTIM. Unregistrobufferde16bitsporcadacanaldeentradasdecapturas. Cuatroacumuladoresdepulsosde8bits. UnMdulodecuentadescendentede16bitsconunprescalador de4bits. 4contadoresderetrasoseleccionablesporelusuarioparaaumentarlainmunidadal ruidodeentrada.

ElTIM(yelECTtambin)compartenlasterminalesdelosochoPuertosT (IOC0IOC7).
ERS

602

ERS

603

RegistroContadordelTemporizador (TCNT)
Requeridoporlasentradasdecapturaysalidasde comparacin. Debeseraccedidoenunaoperacinde16bitsconel findeobtenerelvalorcorrecto. Otrostresregistrosrelacionadosconlaoperacindel TCNTson:TSCR1,TSCR2,TFLG2.
ERS 604

ERS

605

El contador temporizador

ERS

606

RegistrodeControl1delSistemaTemporizador (TSCR1)

LoscontenidosdelTSCR1se muestraenlaFigura. Escribiendo1y0enelbit 7del TSCR1iniciar ydetendr lacuenta delTCNT. Escribirun1enelbit 4habilitar la funcindelimpiarrpidamentela banderadeltemporizador.Siste bit est encero,elusuariodeber escribirun1enlabanderadel temporizadorconelfinde

ERS

607

RegistrodeControl2delSistema Temporizador(TSCR2)
ElBit 7eselbit quehabilitalainterrupcindesobreflujo del TCNT. ElTCNTpuedeserreiniciadoa0cuandoelTCNTigualaaTC7 escribiendoununoelbit 3delTSCR2. ElrelojdeentradaalTCNTpuedeserpreescalado porunfactor, seleccionandolostresbitsmenossignificativosdelTSCR2. LoscomponentesdelTSCR2semuestranenlasiguienteFigura.

ERS

608

Registrodecontrol2delTemporizador (TSCR2)

ERS

609

RegistrodeBanderas2delTemporizador (TFLG2)

Soloestaimplementadoelbit 7(TOF)ysepondr a1siempre quehayaunsobreflujo enelTCNT.

ERS

610

Funcines deEntradasdeCaptura
Eltiempofsicotambinesrepresentadoporloscontenidosdeltemporizador principal. Laocurrenciadeuneventoestarepresentadoporelbordedeuna seal (bordedesubidaobajada). Eltiempocuandoocurreuneventopuedeserregistradoalalmacenarla cuentadelTemporizadorprincipal,cuandollegaelbordedeunasealcomo semuestraenlaFigura. ElHCS12tieneochocanalesdeentradasdecaptura.Cadacanaltieneun registrodecapturade16bits,unpindeentrada,undetectorlgicodeborde yungeneradorlgicodeinterrupcin. Loscanalesdeentradasdecapturacompartenlamayoradeloscircuitoscon lasfuncionesdesalidasdecomparacin.Porestarazn,nopuedenser habilitadossimultneamente.

ERS

611

Entradas de captura
Contador Subida de borde Bajada de borde Captura de Entrada1

Registro Bandera1

Registro Mscara1

Modo de Captura

ERS

612

Entradas de Captura

ERS

613

FuncionesdeEntradadeCaptura
Laseleccinentreentradasdecapturaysalidasdecomparacinsonrealizadas programandoelregistroTIOS. LoscontenidosdelregistroTIOSsemuestranenlaFigura.Alescribirun1seselecciona lafuncindecomparacindesalida.Encasocontrario,lasfuncionesdeentradasde capturaestarnseleccionadas.

Lasiguienteinstruccinhabilitar loscanales74desalidasdecomparacinylos canales30deentradasdecaptura


ERS 614

TerminalesdelPuertoT
Cadaterminaldelpuertopuedeserutilizadacomoterminalde E/SdepropsitogeneralcuandolafuncindelTemporizadorno est seleccionada. Laterminal7puedeserutilizadacomoentradadecaptura7, accindesalidadecomparacin7,yacumuladordepulsode entrada. Cuandounaterminaldelpuertodeltemporizadorseutilizacomo terminaldepropsitogeneralesdeE/S,sudireccines configuradaporelregistroDDRT.
ERS 615

RegistrodeControl3y4delTemporizador
Elbordequese detectaes seleccionadoporel TCTL3yelTCTL4. Elbordedetectadoes seleccionadopor2 bits.Elusuariopuede elegirdetectarel bordedesubida,el bordedebajadao ambosbordes.

ERS

616

RegistroHabilitadordeInterrupcionesdel Temporizador(TIE)
Opcionalmentelallegadadeunbordedeunaseal puedegenerarunainterrupcinalCPU. ElhabilitadordeInterrupcionesescontroladoporel Registrohabilitadordeinterrupcionesdel Temporizador.

ERS

617

RegistrodeBanderasdeInterrupcindel Temporizador(TFLG1)
Siemprequellegueunbordedeunaseal,labadera asociadadeinterrupcindeltemporizadorsepondr a 1.

ERS

618

ComolimpiarelBit delaBanderadel Temporizador


Enformageneral,escribeun1enelbit delabanderaqueselimpiara. Mtodo1
UtilicelainstruccinBCLRconun0enlaposicinoposicionesdelbit correspondientealabandera(s)queselimpiar.Porejemplo, BSETTFLG1,$01 quelimpiar labanderaC0F.

Mtodo2
Utilicelainstruccinmovb conun1enlaposicinoposicionesdelbit correspondientealabandera(s)queselimpiar.Porejemplo, movb #$01,TFLG1
ERS 619

quelimpiar labanderaC0F.

AplicacionesdelaFuncindeEntradade Captura
Registrodelahoradelallegadade unevento. Periododemedicin:necesita capturarlosvaloresdel temporizadorprincipalque correspondanados levantamientosodosbajadasde bordeconsecutivas.

Medicindepulso:necesitacapturarbordedesubidaybordedebajada.

ERS

620

EntradadeCaptura
GeneracindeInterrupciones:Cadaentradadecapturapuedeutilizarsecomounafuentede interrupcinsensitivaaunborde. Contandoeventos:Cuentaelnmerodebordesdelassealesquelleganduranteunperiodo.

TiempodeReferencia:Tambinutilizadoenconjuntoconlafuncindesalidade comparacin.

ERS

621

MedicindelCiclodeTrabajo

ERS

622

MedicindelaDiferenciadeFase

ERS

623

MedicindePerodo
Ejemplo:UtilicelaIC0paramedirelperododeunasealdesconocida.El perodoesconocidoporserinferiora128ms.Asumirquelafrecuenciadel relojEesde24MHz.Utiliceelnmerodeciclosderelojcomolaunidaddel perodo. Solucin: Dadoqueelregistrodeentradadecapturaesde16bits,elperodomslargo delasealpuedesermedidopreescalando elTCNT.
216 24MHz =2.73ms.

Paramedirunperodoqueesiguala128ms,tenemos2opciones:
Ponera1elfactordepreescala yllevarunregistrodelnmerodevecesqueel contadordeltemporizadordetectasobreflujos. Ponera64elfactordepreescala ynollevarunregistrodelnmerodevecesque elcontadordeltemporizadordetectasobreflujos.

Pondremosa64elfactordepreescala delTCNT.Eldiagramadeflujodela medicindelperiododelasealsemuestraenlasiguientelmina.


ERS 624

MedicindelPerodo

ERS

625

ProgramaenAssembly paralaMedicindel Perodo


#include 9s12.inc" org edge1 ds.b period ds.b org movb bclr movb movb movb brclr ldd std brclr ldd subd std $1000 2 ;memoriaparamantenerelprimerborde 2 ;memoriaparaalmacenarelperiodo $1500 #$90,TSCR1 ;habilitacontadordeltemporizadoryhabilitacontadorde ;limpiezarpidadebanderas TIOS,IOS0 ;habilitaentradadecaptura0 #$06,TSCR2 ;deshabilitalainterrupcindesobreflujo delTCNT,poner ;a64preescala #$01,TCTL4 ;capturadebordedesubidadelasealPT0 #C0F,TFLG1 ;limpiarbanderaC0F TFLG1,C0F,* ;esperaporlallegadadelprimerborde TC0 ;guardaelprimerbordeylimpialabanderaC0F edge1 TFLG1,C0F,* ;esperaporllegadadelsegundoborde TC0 edge1 ;calcularperodo period

ERS

626

ProgramaenCparaMedicindePerodo
#include "hcs12.h" void main(void) { unsigned int edge1,period; TSCR1 =0x90; /*habilitatemporizador,habilitalimpiezadebanderarpida*/ TIOS &=~IOS0; /*habilitaentradadecaptura0*/ TSCR2 =0x06; /*deshabilitainterrupcindesobreflujo delTCNT,ponera64lapreescala */ TCTL4 =0x01; /*capturaelbordedesubidadeterminalPT0*/ TFLG1 =C0F; /*limpiarlabanderaC0F*/ while (!(TFLG1&C0F)); /*esperaporprimerbordedesubida*/ edge1 =TC0; /*guardacapturadeprimerbordeylimpialabanderaC0F*/ while (!(TFLG1&C0F)); /*esperaporllegadadelsegundoborde*/ period =TC0 edge1; asm ("swi"); }

ERS

627

Ejemplo Escribeunprogramaquemidaelanchodelperododelasealconectadaa laterminalPT0.LafrecuenciadelrelojEesde24MHz. Solucin:


Ponerlapreescala delTCNTa32.Utiliceelcicloderelojcomounidaddemedida. Elanchodelpulsopuedesermslargoque216ciclosdereloj.Necesitamosllevarunregistro delnmerodevecesqueeltemporizadorTCNTdetectasobreflujos.Dejar:
ovcnt diff edge1 edge2 =clculodesobreflujo delcontadorTCNT =ladiferenciadedosbordesconsecutivos =eltiempodecapturadelprimerborde =eltiempodecapturadelsegundoborde

Elanchodelpulsopuedesercalculadoconlassiguientesecuaciones: Caso 1 borde2 borde1 ancho_de_pulso = ovcnt 216 + diff Caso 2 borde2 < borde 1 ancho_de_pulso = (ovcnt 1) 216 + diff
ERS 628

ERS

629

"hcs12.inc" org $1000 edge1 ds.b 2 overflow ds.b 2 pulse_width ds.b 2 org $1500 movw #tov_isr,UserTimerOvf ;establecevectordeinterrupcionesdesobreflujo delTCNT lds #$1500 ;estableceapuntadorapila movw #0,overflow movb #$90,TSCR1 ;habilitalimpiezarpidadebanderadeltemporizadorTCNT movb #$05,TSCR2 ;deshabilitainterrupcindelTCNT,ponerpreescala a32 bclr TIOS,IOS0 ;seleccionaIC0 movb #$01,TCTL4 ;capturabordedesubida movb #C0F,TFLG1 ;limpiabanderaC0F wait1 brclr TFLG1,C0F,wait1 ;esperaporprimerborde movw TC0,edge1 ;guardaprimerbordeylimpiabanderaC0F movb #TOF,TFLG2 ;limpiabanderaTOF bset TSCR2,$80 ;habilitainterrupcindesobreflujo delTCNT cli ;" movb #$02,TCTL4 ;capturabordedebajadaenelpinPT0 wait2 brclr TFLG1,C0F,wait2 ;esperaporllegadadebordedebajada ldd TC0 subd edge1
ERS 630

#include

next tov_isr

std bcc ldx dex stx swi movb ldx inx stx rti end

pulse_width next overflow overflow

;elsegundobordeesmspequeo? ;elsegundobordeesmspequeo,entoncesdecrementa ;clculodesobreflujo en1 ;"

#TOF,TFLG2 overflow overflow

;limpiarbanderaTOF

ERS

631

ProgramaenCparalaMedicindelAncho dePulso
#include <hcs12.h> #include <vectors12.h> #define INTERRUPT__attribute__((interrupt)) unsigned diff,edge1,overflow; unsigned longpulse_width; void INTERRUPTtovisr(void); void main(void) { UserTimerOvf =(unsigned short)&tovisr; overflow =0; TSCR1 =0x90; /*habilitatemporizadorylimpiezadebanderarpida*/ TSCR2 =0x05; /*Ponerlapreescala en32,nohayinterrupcindesobreflujo del temporizador*/ TIOS &=~IOS0; /*seleccionarentradadecaptura0*/ TCTL4 =0x01; /*preprateparacapturarelbordedesubida*/ TFLG1 =C0F; /*limpiabanderaC0F*/ while(!(TFLG1&C0F)); /*esperaporllegadadelbordedesubida*/ TFLG2 =TOF; /*limpiabanderaTOF*/
ERS 632

TSCR2 |=0x80; /*habilitainterrupcindesobreflujo delTCNT*/ asm("cli"); edge1 =TC0; /*guardaelprimerborde*/ TCTL4 =0x02; /*preprateparacapturarelbordedebajada*/ while (!(TFLG1&C0F)); /*esperaporllegadadelbordedebajada*/ diff =TC0 edge1; if (TC0<edge1) overflow =1; pulse_width =overflow *65536u+diff; asm ("swi"); } void INTERRUPTtovisr(void) { TFLG2 =TOF; overflow =overflow +1; }

/*limpiabanderaTOF*/

ERS

633

FuncindeSalidadeComparacin
ElHCS12tieneochofuncionesdesalidadecomparacin. Cadacanaldesalidadecomparacinconsisteen
Uncomparadorde16bits. UnregistroTCx decomparacinde16bits(tambinseutilizacomo registrodecapturadeentradasalida). Unaterminaldesalidadeaccin(PTx,puedeseralta,bajaosubeybaja). UncircuitodesolicituddeInterrupcin. Unafuncindecomparacinforzada(CFOCx). UnalgicadeControl.

ERS

634

FuncionamientodelaFuncindeSalidade Comparacin
Unadelasaplicacionesdelafuncindesalidadecomparacines dispararunaaccinenunmomentoespecficoenelfututo. Parautilizarlafuncindesalidadecomparacin,elusuario necesita:
HacerunacopiadeloscontenidosactualesdelregistroTCNT. Sumaraestacopiaunvalorigualalretardodeseado. Almacenarlasumaenelregistrodesalidadecomparacin(TCx,x= 0..7).

ERS

635

Salidas de Comparacin

ERS

636

SalidasdeComparacin

ERS

637

FuncionamientodelaFuncindeSalidade Comparacin
Lasaccionesquepuedenseractivadasenlaterminaldesalidadecomparacinincluyen
Salidaenalto Salidaenbajo SubeyBaja

Laaccinest determinadaporelRegistrodeControl1y2delTemporizador(TCTL1&TCTL2):

ERS

638

FuncionamientodelaFuncindeSalidade Comparacin
Unacomparacinexitosaestablecer elbit delabanderacorrespondienteen elregistroTFLG1. Unainterrupcinpuedesersolicitadaopcionalmentesielbit dela interrupcinasociadasehabilitaenelregistroTIE. Ejemplo:Generarunaformadeondadigitalde1KHz activaaltoconunciclo detrabajodel30%delaterminalPT0.Utiliceelmtododeencuestapara comprobarelxitodelaoperacindesalidadecomparacin.Lafrecuencia delrelojEesde24MHz. Solucin:Unaformadeondade1KHz activaaltoconunciclodetrabajodel 30%semuestraenFigura.EldiagramadeFlujodeesteproblemasemuestra enlminasiguiente.
Establecerlapreescala delTCNTen8,entonceselperododelasealderelojser de1/3ms.Elnmerodevecesenquelasealdelcicloderelojesaltaybajason 900y2100respectivamente.
ERS 639

FuncionamientodelaFuncindeSalidade Comparacin

ERS

640

#include hi_time lo_time

repeat low

high

"hcs12.inc" equ 900 equ 2100 org $1500 movb #$90,TSCR1 movb #$03,TSCR2 bset TIOS,OC0 movb #$03,TCTL2 ldd TCNT addd #lo_time std TC0 brclr TFLG1,C0F,low movb #$02,TCTL2 ldd TC0 addd #hi_time std TC0 brclr TFLG1,C0F,high movb #$03,TCTL2 ldd TC0 bra repeat end

;habilitaTCNTconlimpiezadebanderarpidadeltemporizador ;deshabilitainterrupcindelTCNT,establecepreescala en8 ;habilitaOC0 ;seleccionaaltocomoaccindelaterminal ;inicialaoperacinOC0con700us comoretardo ;" ;" ;esperahastaquelaterminalOC0sepongaenalto ;seleccionaenbajocomolaaccindelaterminal ;inicialaoperacinOCcon300us comoretardo ;" ;" ;esperahastaquelaterminalOC0sepongaenbajo ;seleccionaaltocomoaccindelaterminal

ERS

641

ProgramaenCparagenerarunaFormade OndaDigitalde1KHz
#include "hcs12.h" #definehi_time 900 #definelo_time 2100 void main (void) { TSCR1 =0x90; /*habilitaelTCNTylimpiezadebanderarpidadeltemporizador*/ TIOS |=OC0; /*habilitalafuncinOC0*/ TSCR2 =0x03; /*deshabilitalainterrupcinTCNT,establecerpreescala en8*/ TCTL2 =0x03; /*establecelaaccinOC0parasepull up*/ TC0 =TCNT+lo_time; /*inicialaoperacinOC0*/ while(1){ while(!(TFLG1&C0F)); /*esperaquePT0sepongaenalto*/ TCTL2 =0x02; /*establecelaterminaldeaccinOC0paraserpull down */ TC0 +=hi_time; /*iniciaunanuevaoperacinOC0*/ while(!(TFLG1&C0F)); /*esperaquePT0sepongaenbajo*/ TCTL2 =0x03; /*establecelaterminaldeaccinOC0paraserpull up*/ TC0 +=lo_time; /*iniciaunanuevaoperacinOC0*/ } }
ERS 642

ERS

643

Reloj del Bus

TSCR1 TEN

TSCR2 TCRE Limpia Contador Canal 7 Salida de Comparacin

TSCR2 PR2 PR1 PR0 TSCR2 TOI PACLK PACLK/256 PACLK/65536 00 01 TCNT 10 MUX 11 Reloj CLK1 CLK2 PACLK TIE Cnl Comparador de 16 bits TFLG1 CnF CFORC FOCn TCNT Contador de 16 bits TFLG2 TOF CCR I

Peticin de Interrupcin de Sobreflujo del Timer

Peticin de Interrupcin para Salida de Comparacin Puerto Terminal

Registro TCn

PTn
Control del Bit de Salida

TO 7 Ms Canales del Timer

TCTL1 o TCTL2 OMn OLn TIOS 7 6 5 4 3 2 1 0 Establecer en 1 el Bit IOSn para la Salida de Comparacin OC7M:OC7D OC7Mn OC7Dn

SUBSISTEMA DE SALIDA DE COMPARACIN

ERS

644

TIOS - $0040 Registro Seleccionador de Entrada de Captura o de Salida de Comparacin Bit 7 Read: Write: Reset: Read: En cualquier momento. Write: En cualquier momento IOS7 6 IOS6 5 IOS5 4 IOS4 3 IOS3 2 IOS2 1 IOS1 0 IOS0

ERS

645

ERS

646

ERS

647

TCTL3, TCTL4 Registro de Control del Timer Bit 7 TCTL3 Reset: EDG7B 0 Bit 7 TCTL4 Reset: EDG3B 0 6 EDG7A 0 6 EDG3A 0 5 EDG6B 0 5 EDG2B 0 4 EDG6A 0 4 EDG2A 0 3 EDG5B 0 3 EDG1B 0 2 EDG5A 0 2 EDG1A 0 1 EDG4B 0 1 EDG0B 0 0 EDG4A 0 0 EDG0A 0

Read: En cualquier momento. Write: En cualquier momento

ERS

648

Reloj del Oscilador

/1024

RTR6

RTICTL RTR5 RTR4 CRGINT RTIE RTR0 CRGFLG RTIF CRGFLG I Peticin de Interrupcin en Tiempo Real

Dividir entre 1, 2, 4, 8, 16, 32, 64 RTICTL RTR2 RTR1 Dividir entre 1 - 16

RTR3

ERS

649

ERS

650

Reloj del Bus Registro PWMDTYn Divisor Programable y Lgica de Seleccin del Reloj Registro PWMCNTn Reloj A, Reloj SA, Reloj B, Reloj SB 8 bits Comparador del Periodo Registro PWMPERn
ERS

PWMPOL PPOLn 8 bits Comparador del Ciclo de Trabajo

Q MUX PWMn

Flip Flop T

RESET
651

ERS

652

ERS

653

ERS

654

PWMCTL - $00E5 Registro de Control de PWM Bit 7 Read: Write: Reset: 0 0 6 CON45 0 5 CON23 0 4 CON01 0 3 PSWAI 0 2 PFRZ 0 1 0 0 0 0 0

= Reservado, sin implementar, o no se puede escribir en l. Read: En cualquier momento. Write: En cualquier momento PWMCAE - $00E4 Registro de Habilitacin de Alineacin del Centro de PWM Bit 7 Read: Write: Reset: 0 0 6 0 0 5 CAE5 0 4 CAE4 0 3 CAE3 0 2 CAE2 0 1 CAE1 0 0 CAE0 0

= Reservado, sin implementar, o no se puede escribir en l. Read: En cualquier momento. Write: En cualquier momento, pero escribir solo cuando el canal correspondiente est deshabilitado PWMCNT0, PWMCNT1, PWMCNT2, PWMCNT3, PWMCNT4, PWMCNT5 - Registro Contador del Canal Bit 7 Read: Write: Reset: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 5 4 3 2 1 0

= Reservado, sin implementar, o no se puede escribir en l. Read: En cualquier momento. Write: En cualquier momento (cualquier valor escrito ocasiona que el contador de PWM tenga un reset a $00).

ERS

655

ERS

656

EjemploEscribeunafuncinquegenereuntiempoderetardoqueseamltiplode1ms. AsumirquelafrecuenciaderelojEesde24MHz.ElnmerodemilisegundosespasadoaY. Tambinescribeunasecuenciadeinstruccionesparaprobarestafuncin. Solucin: Unmtodoparacrearunretardode1ms eselsiguiente:


Establecerlapreescala delTCNTen64 Calcularelnmerodeoperacionesdesalidasdecomparacin(dadoenY)concadaoperacinsecrear untiempoderetarde1ms. Elnmeroqueser sumadoalacopiadelTCNTes375.(375 64 24000000=1ms)

delayby1ms

again0 wait_lp0

pshd movb movb bset ldd addd std brclr ldd dbne puld rts

#$90,TSCR1 ;habilitaelTCNTylimpiezadebanderasrpidas #$06,TSCR2 ;establecerpreescala en64 TIOS,OC0 ;habilitaOC0 TCNT #375 ;iniciaconunaoperacindesalidadecomparacin TC0 ;conuntiempoderetardode1ms TFLG1,OC0,wait_lp0 TC0 y,again0

ERS

657

EjemploUtilizalasfuncionesdeentradadecapturaysalidadecomparacinparamedirla frecuenciadelasealconectadaalaterminalPT0. Solucin:Paramedirlafrecuencia:


Usaremosunadelasfuncionesdesalidadecomparacinparacrearuntiempodereferenciadeun segundo. Llevarunregistrodelnmerodelevantamientos(ocadas)debordequelleguenalaterminalPT0enel plazodeunsegundo.

#include CR LF

"hcs12.inc" equ $0D equ $0A org $1000 oc_cnt rmb 1 frequency rmb 2 org $1500 movb #$90,TSCR1 movb #$02,TSCR2 movb #$02,TIOS movb #100,oc_cnt movw movb movb bset cli #0,frequency #$01,TCTL4 #C0F,TFLG1 TIE,IC0

;habilitaTCNTylimpiezarpidadebandera ;estableceelfactordepreescala en4 ;habilitaOC1yIC0 ;prepreseparaejecutar100operacionesOC1,cadauna ;creaunretardode10ms haciendountotalde1segundo ;inicializarcuentadefrecuenciaen0 ;prepreseparacapturarellevantamientodebordedelPT0 ;limpialabanderaC0F ;habilitalainterrupcinIC0 ; "
ERS 658

ldd continue addd std w_lp brclr ldd dec bne ldd pshd ldd jsr leas swi msg db TC0_isr ldd ldx inx stx rti org fdb end

TCNT #60000 TC1 TFLG1,C1F,w_lp TC1 oc_cnt continue frequency #msg [printf,PCR] 2,sp

;inicialaoperacinOC1conunretardode10ms ; " ;" ;esperapor10ms

CR,LF,"The frequency is %d",CR,LF,0 TC0 ;limpialabanderaC0F frequency ;incrementaelconteodelafrecuenciaen1 ;" frequency ; $3E6E TC0_isr ;estableceelnmerodelvectordeinterrupcin ;paraTC0

ERS

659

HaciendoSonidoutilizandolaFuncinde SalidadeComparacin
Unsonidopuedesergeneradomediantelacreacindeunaformade ondadigitalconlafrecuenciaapropiadayutilizndolaparacontrolaruna bocinaounachicharra. ElcircuitodeconexionesparaunzumbadorsemuestraenlaFigura. Lacancinmssencillaesunasirenadedostonos.

ERS

660

AlgoritmoparaGenerarunaSirena
Paso1
Habilitauncanaldesalidadecomparacinparacontrolarelzumbador(olabocina).

Paso2
Inicialaoperacindesalidadecomparacinconunconteoderetardoigualalamitad delperododelasirenayhabilitalainterrupcinOC.

Paso3
Espereporladuracindeltododelasirena(esdecirmediosegundo).Duranteel perododeespera,lafuncindesalidadecomparacinsolicitar muchas interrupciones.Larutinadelserviciodeinterrupcionessimplementereiniciar la operacindesalidadecomparacin.

Paso4
Alfinaldeladuracindeltonodelasirena,elegirunconteodiferentederetardoparala operacindesalidadecomparacinconelfindequeelsonidodelasirenapuedatener diferentesfrecuencias.

Paso5
EspereporlamismaduracinquesevioenelPaso3.Duranteesteperodolaoperacin desalidadecomparacinsolicitar muchasinterrupciones.

Paso6

ERS

661

Ejemplo.Escribeunprogramaquegenereunasirenadedos tonosqueoscileentre300Hzy1200Hz. Solucin:


Establecerlapreescala delTCNTen1:8. Elcontadorderetardosparalafrecuenciadeltonobajoes(24000000 8) 300 2=5000. Elcontadorderetardosparalafrecuenciadeltonoaltoes(24000000 8) 1200 2=1250.
#include hi_freq lo_freq toggle delay "hcs12.inc" equ 1250 ;contadorderetardopara1200Hz(conpreescala 1:8) equ 5000 ;contadorderetardopara300Hz(conpreescala 1:8) equ $04 ;valorparaelsubeybajadelpinTC5 org $1000 ds.w 1 ;guardaretardoparaoperacindesalidadecomparacin org $1500 lds #$1500 movw #oc5_isr,UserTimerCh5 ;inicializavectordeinterrupcindeentrada movb #$90,TSCR1 ;habilitaTCNT,limpiezadebanderarpida movb #$03,TSCR2 ;preescala delconjuntoprincipaldeltemporizadora8
ERS 662

forever

oc5_isr

#include

bset TIOS,OC5 movb #toggle,TCTL1 movw #hi_freq,delay ldd TCNT addd delay std TC5 bset TIE,OC5 cli ldy #5 jsr delayby100ms movw #lo_freq,delay ldy #5 jsr delayby100ms movw #hi_freq,delay bra forever ldd TC5 addd delay std TC5 rti c:\miniide\delay.asm end

;habilitaOC5 ;seleccionartoggle delaterminalOC5 ;utilizaprimerfrecuenciaaltadelcontadorderetardo ;comienzafrecuenciabajadesonido ;" ;" ;habilitainterrupcinOC5 ;" ;esperamediosegundo ;" ;cambiaafrecuenciabajaelcontadorderetardo

;cambiaafrecuenciaaltaelcontadorderetardo

ERS

663

UsandoOC7paracontrolarmltiplesFunciones OC
OC7puedecontrolarhastaochocanalesdefuncionesOC. ElregistroOC7Mespecificaqu canalOCescontroladoporOC7. ElregistroOC7DespecificaelvalorquecualquierpinPTx asumecuandounaoperacin OC7tienexito. ParaOC0aOC6,cuandoelbit OC7Mn (n=0,,6)est enuno,ylacomparacinOC7es exitosa,stainvalidaunaaccindecomparacinexitosadelaterminalOC0OC6 duranteelmismociclo.

ERS

664

Ejemplo Qu valordebeescribirseenOC7MyOC7Dsise quierequelasterminalesPT2,PT3,yPT4asumanlosvalores 1,0,y1,respectivamentecuandounacomparacinOC7es exitosa? Solucin:


4,3,y2deOC7Mdebenponersea1,ylosbits4,3,2,deOC7D deben establecersecomo1,0,y1,respectivamente. Lasiguientesecuenciadeinstruccioneslograr elefectodeseado:

movb #$1C,OC7M movb #$14,OC7D

ERS

665

SalidadeComparacinForzada
Hayaplicacionesenlasquecadausuarioquierequeunaaccin desalidadecomparacinocurrainmediatamente,enlugarde esperarunencuentroentreelTCNTyelregistrodesalidade comparacinapropiado. Estasituacinsurgeenen algunasaplicacionesdecontrolde automviles. Paraforzarunaoperacindesalidadecomparacin,escribir1s enlosbitscorrespondientesalregistroCFORC. Acontinuacineltemporizadorcuenta,despusdeescribirenel registroCFORC,loscanalesforzadosadispararlasacciones programadasparaqueocurran.

ERS

666

SalidadeComparacinForzada
Ejemplo.SuponerqueloscontenidosdelosregistrosTCTL1yTCTL2son$D6y $6E,respectivamente.ElcontenidodeTFLG1es$00.Qu debeocurrirenlas terminalesPT7aPT0enelprximocicloderelojsielvalor$7Fesescritoenel registroCFORC? Solucin:
ElTCTL1yelTCTL2configuranlasaccionesdesalidadecomparacincomose muestranenlaTabla. ElregistroTFLG1indicacualesdelasoperacionesdesalidadecomparacinnohan tenidoxitoan. LasaccionesindicadasenlaTablafueronforzadasaocurririnmediatamente.

ERS

667

Acumulador de pulsos
ElsistematemporizadorestndardelHCS12tieneunacumuladordepulsosde16bit,llamadoPACTN.

ERS

668

Reloj del BUS

TSCR1 TEN

TSCR2 PR2 PR1 PR0

PACTL PAEN CLK1 CLK0

1 2 4 8 16 32 64 128

000 001 010 011 100 101 110 111

Sele cci n

MUX Reloj Divisor

000 001 010 011 100 101 110 111

Sele cci n

MUX Reloj TCNT

Al Contador TCNT

PACLK/65536 PACLK/256 PACTL PAEN 0 MUX PACLK 1 PACNT (BYTE ALTO) PACNT (BYTE BAJO)

PT7 PUERTO PIN

PAMOD PACTL

ERS

669

ModosdeOperacindelAcumuladorde Pulsos
MododeconteodeEventos.ElPACTNde16bitspuedeoperar enestemodoycontarelnmerodeeventosquelleganala terminalPT7. MododeAcumulacinporCompuerta.ElPACTNtambinpuede operarenestemodo.Mientrassemantengaactivalasealde PT7(puedeseraltaobaja),elcontadorPACTNesalimentado porunasealquecorrelibrementeE 64sig

FuentesdeInterrupcinparaelAcumuladorde Pulsos
ElPACTNtienedosfuentesdeinterrupcin:deteccindeun bordeenPT7yelsobreflujo delPACTN
ERS 670

RegistrosRelacionadosalosAcumuladores dePulsos
LaoperacindelPACTNestacontroladaporelregistroPACTL.Loscontenidosde steregistrosemuestranenlaFiguradelalaminasiguiente. PACTNtieneuncontadorde16bitsquecomprendeaPACNTLyPACNTH.Se puedeaccederaestecontadorde16bitsutilizandoelnombrePACNT. ElestadodePACNTesregistradoenelregistroPAFLG.

ERS

671

ERS

672

ERS

673

EjemploSuponerqueciertoseventosconectadosalaterminalPT7seconviertenenpulsos. EscribirunprogramaquehabilitaelPACTNparagenerarunainterrupcinalMCUcuandoN eventoshayanocurrido. Solucin:Escribiendouncomplementoa2sdeN,elPACTNinterrumpir alMCUcuandon eventosocurran: #include "hcs12.inc" N equ 1350 org $1500 lds #$1500 ;establecerelapuntadorapila movw #paov_isr,UserPAccOvf ;establecerelvectordeinterrupcinPAOV ldd #N ;colocarelcomplemento2senPACNT coma ; comb ; addd #1 ; std PACNT ; movb #$52,PACTL ;habilitaPACA,mododeconteodeeventos, ;elbordeestalevantndose cli ;habilitainterrupcinPAOV ; swi paov_isr movb #PAOVF,PAFLG ;limpialabanderaPAOVF end
ERS 674

ProcedimientoparalaMedicindelaFrecuenciade unaSealUsandolaFuncinPA
Paso1
ConectarlasealalaterminalPT7. EstablecerelPACNTparaoperarenelmododeconteodeeventos. Utilizaunadelasfuncionesdesalidadecomparacinparagenerarunintervalodetiempode1segundoo llamedelabibliotecaalafuncinderetardo. Utilizaunalocalidaddememoriaparallevarunregistrodelnmerodevecesquehaydesobreflujos en PACNT. HabilitalainterrupcinPAOV. DeshabilitalainterrupcinPAOVdespusdeunsegundo. frequency =paov_cnt 216 +PACNT

Paso 2 Paso 3

Paso 4

Paso 5

Paso 6 Lafrecuenciadelasealdesconocidaest dadaporlasiguienteecuacin:


ERS Losprogramasenensembly yenCparalamedicindelafrecuenciadelasealsemuestrana 675 continuacin:

"hcs12.inc" org $1000 oc_cnt rmb 1 paov_cnt rmb 2 ;llevauregistrodelconteodesobreflujos delPACNT frequency rmb 4 ;mantienelafrecuenciadelaseal org $1500 lds #$1500 movw #paov_isr,UserPAccOvf ;establecervectordeinterrupcinPAOV movb #50,oc_cnt ;sepreparapararealizar50accionesOC0 ldd #0 std PACNT ;PACNTdejadecontaren0 std paov_cnt ;PACNTinicializaelconteodesobreflujo en0 std frequency ;inicializarfrecuenciaen0 std frequency+2 ; " movb #$90,TSCR1 ;habilitaTCNTybanderadelimpiezarpida bset TIOS,OC0 ;seleccionarfuncinOC0 movb #$03,TSCR2 ;establecerpreescala delTCNTen8 bclr DDRT,$80 ;configuraPT7comoentrada ;configuralafuncinPA:habilitaPA,seleccionaelmododeconteo,levantamientodeborde ;delasealPAI,incrementaelcontadorPACNT,habilitainterrupcinPAOV movb #$52,PACTL cli ;habilitainterrupcinPAOV ldd TCNT
ERS 676

#include

sec_loop addd std brclr ldd dec bne movb sei ldd std ldd std swi paov_isr movb ldx inx stx end

#60000 TC0 TFLG1,C0F,* TC0 oc_cnt sec_loop #0,PACTL PACNT frequency+2 paov_cnt frequency #PAOVF,PAFLG paov_cnt paov_cnt

;aqu espera20ms

;deshabilitalafuncinPA ;Deshabilitalainterrupcin

;limpialabanderaPAOVF ;incrementasobreflujo PACNT ;contarpor1 ; "

ERS

677

UsandolaFuncinPAparaMedirlaDuracindel Pulso
Paso1
Seleccionarelmododeacumulacindetiempoporcompuerta,einicializaraPACNTen0.

Paso2
Seleccionarlabajadadebordecomobordeactivo,estohabilitar alTACNTparacontar cundolaterminalPAIest enalto.

Paso3
HabilitalainterrupcinPAIdelbordeactivoyesperaporlallegadadelbordeactivodePAI.

Paso4
Detengaelconteodelacumuladordepulsocuandolleguelainterrupcin.

Paramedirunpulsolargo,necesitamosllevarunregistrodelossobreflujos PA: ancho_de_pulso =[(216 paov_cnt)+PACNT] 64TE Ejemplo Escribeunprogramaparamedirladuracindeunasealdesconocidaenla terminalPAI. Solucin: Elprogramaenasembly escomosigue:
ERS 678

#include hcs12.inc" org $1000 paov_cnt ds.b 1 ;registraelconteodesobreflujos delPACNT pulse_width ds.b 3 ;mantieneelanchodepulso org $1500 movw #paov_isr,UserPAccOvf ;estableceelvectordeinterrupcinPAOV ldd #0 std PACNT ;PACNTdejadecontarhasta0 clr paov_cnt ;PACNTinicializaconteodesobreflujos hasta0 movb #$0,TSCR2 ;establecerlapreescala delTCNTen1 movb #$72,PACTL bclr DDRT,$80 ;configuralaterminalPAIcomoentrada cli ;habilitainterrupcinPAOV brclr PAFLG,PAIF,* ; PAI esperaporllegadadelevantamientodebordes movb #0,PACTL ;deshabilitalafuncinPA sei ;deshabilitainterrupcin ldd PACNT std pulse_width+1 ldaa paov_cnt staa pulse_width swi paovISR movb #PAOVF,PAFLG inc paov_cnt rti end ERS

679

Cadena de reloj para el RTI

ERS

680

SistemadeModulacindelAnchodePulso (PWM)
Muchasaplicacionesrequierenlageneracindeformasdeondadigitales. Lafuncindesalidadecomparacinpuedeutilizarseparagenerarunaformadeonda digitalperoincurremuchoenlarepeticindeinstrucciones. Elsistemademodulacindeanchodepulsorequieresololaconfiguracininicialdel perodoydelciclodetrabajoparagenerarformasdeondadigitales. ElMC9S12GC32tieneunmduloPWMde6canales. CadacanalPWMtieneunregistrodeperodo,unregistrodeciclodetrabajo,un registrodecontrolyuncontadordedicado. ElrelojdeentradadelPWMesprogramableatravsdeuncircuitodedosetapas. HaycuatroposiblesfuentesderelojparaelmduloPWM:relojA,relojSA,relojBy relojSB. ElrelojSAsederivadedividiralrelojApornmerosparesenunrangode2a512. ElrelojSBsederivadedividiralrelojApornmerosparesenunrangode2a512. ElrelojAyelrelojBsederivandedividiralrelojEporuna potenciade2.Elrangodela potenciapuedeserde0a7.
ERS 681

ERS

682

Diagrama a bloques del PWM

ERS

683

GeneracindelRelojdePWM
Losfactoresdepreescala paraelrelojAyelrelojBestapredeterminadaporlosbits PCKA2PCKA0yPCKB2PCKB0delregistroPWMPRCLK. ElrelojSAsederivadedividirelrelojAporlosvaloresdelregistroWMSCLAdivididos entre2. ElrelojSBsederivadedividirelrelojBporlosvaloresdelregistroPWMSCLBdivididos entre2. Laseleccindelafuentederelojest controladaporelregistroPWMCLK.

ERS

684

TemporizadoresdelosCanalPWM
LaparteprincipaldecadacanalxdelPWMconsistedeuncontadorde8bits(PWMCNTx),un registrodeperodode8bits(PWMPERx)yunregistrodeciclodetrabajode8bits(PWMDTYx). Elperododelaformadeondadesalidaest controladoporlacoincidenciaentreelregistro PWMPERx yelregistroPWMCNTx. Elciclodetrabajodelaformadeondadesalidaest controladoporlauninentreelregistro PWMDTYx yelregistroPWMCNTx. Lapolaridadinicialdelasalidaesseleccionablesobrelasbasesdeuncanalprogramandoel registroPWMPOL. ElcanalPWMdebeestarhabilitadoactivandoelbit correspondienteenelregistroPWME. ElfuncionamientoglobaldelmduloPWMsemuestraenlaFigura.
ERS 685

ERS

686

AlineacindelaFormadeOndaPWM
LaformadeondadesalidadelPWMpuedeseralineada aladerechaoalaizquierda. Laeleccindeelalineamientoest controladaporel registroPWMCAE.

ERS

687

SalidaconAlineacinIzquierda
ElcontadorPWMCNTx est configuradocomouncontadorascendente.
FrecuenciaPWMx =Reloj(FrecuenciaA,B,SA,SB) PWMPERx Polaridad=0 CiclodeTrabajoPWMx =[(PWMPERx PWMDTYx) PWMPERx] 100% Polaridad=1 CiclodeTrabajoPWMx =[PWMDTYx PWMPERx] 100%

ERS

688

MododeAlineacinCentrada
ElcontadorPWMoperacomouncontadorascendente/descendenteyel conteoascendenteest activadosiemprequeelcontadorseaiguala$00. Cuandoelcontadorencuentraunacoincidenciaentreelregistro delcicloyla salidadelflipflop,cambiasuestadoocasionandoquelasalidadelPWM tambincambiedeestado. UnacoincidenciaentreelcontadorPWMyelregistrodelperodocambiala direccindelcontadordeascendente/descendentea descendente/ascendente. CuandoelcontadorPWMdesciendeydenuevohayunacoincidencia conel registrodelciclodetrabajo,lasalidadelflipflop cambiadeestado ocasionandoquelasalidadelPWMtambincambiedeestado. CuandoelcontadorPWMdesciendehasta0,ladireccindelcontadorcambia deuncontadordescendenteregresandoauncontadorascendentey los registrosdelperodoydelciclosonrecargadosporsusbuffers.

ERS

689

MododeAlineacin
Frecuencia PWMx = Frecuancia (A, B, SA, or SB) de Reloj (2 PWMPERx) Cuando Cuando Polaridad = 0, Ciclo de Trabajo PWMx = [(PWMPERx PWMDTYx) PWMPERx] 100% Cuando Polaridad = 1, Ciclo de Trabajo PWMx = [PWMDTYx PWMPERx] 100%

ERS

690

ModoPWMde16bits
DoscanalesPWMadyacentespuedenconcatenarseparaformaruncanal PWMde16bit. LaconcatenacindeloscanalesPWMest controladoporelregistro PWMCTL. ElsistemaPWMde16bitsest ilustradoenlaFiguradelalminasiguiente. Cuandoestnconectadosloscanaleskyk+1,elcanalkeselcanaldemayor ordenmientrasqueelcanalk+1esdemenororden(kesunnmeropar).El canaldesalidade16bit delaterminaldelcanaldemenorordentambinest habilitadoporelcanaldemenororden. LosmodosdeAlineacin,tantoizquierdacomoderecha,sonaplicablesenel modode16bits.

ERS

691

ModoPWMde16bits

ERS

692

ERS

693

Ejemplo Escribeunasecuenciadeinstruccionesquegenerenunaformade onda cuadradade100KHzconunciclodetrabajodel50%desdelaterminalPWM0(PP0). AsumirquelaFrecuenciadeRelojEesde24MHz. Solucin: Utilizarlassiguientesindicaciones:


SeleccionaralrelojAcomolafuentederelojparaPWM0yestablecersupreescala en2. Seleccionarelmododealineacinizquierda. Cargarelvalorde120enelregistroPWMPER0(=240000001000002) Cargarelvalorde60enelregistroPWMDTY0(=120 50%)

#include hcs12.inc movb movb movb movb movb movb movb movb bset

#0,PWMCLK #1,PWMPRCLK #1,PWMPOL #0,PWMCAE #$0C,PWMCTL #120,PWMPER0 #60,PWMDTY0 #0,PWMCNT0 PWMEN,PWME0

;seleccionarelrelojAcomofuentederelojparaPWM0 ;establecerpreescala delrelojAen2 ;salidaaltadelcanal0aliniciodelperodo ;seleccionarmododealineacinizquierda ;modode8bits,deteneraPWMenmododeesperay


;congelado

;activarelvalordelperodo ;activarelvalordelciclodetrabajo ;darresetalcontadorPWM0 ;habilitacanal0delPWM


ERS 694

Ejemplo. Escribeunasecuenciadeinstruccionesparagenerarunaformade
ondacuadradaconunperiodode20ms yunciclodetrabajodel60%del PWM0,utilizaelmododealineacincentrada.

Solucin:
SeleccionaelrelojAcomolafuentederelojyestablecesupreescala en2. Cargarelvalor120enelregistroPWMPER0. PWMPER0=(20 24,000,000 1000,000) 2 2=120 PWMDTY0=PWMPER0 60%=72.
movb movb movb movb movb movb movb bset #0,PWMCLK #1,PWMPOL #1,PWMPRCLK #1,PWMCAE #$0C,PWMCTL #120,PWMPER0 #72,PWMDTY0 PWME,PWME0 ;seleccionaelrelojAcomofuentedereloj ;activalasalidadelPWM0empezandoconnivelalto ;establecerpreescala delrelojAen2 ;seleccionaelmododealineacincentrada ;seleccionamodode8bit,detnaPWMenmododeespera ;activaelvalordelperodo ;activaelvalordelciclodetrabajo ;habilitacanal0delPWM
ERS 695

Ejemplo.Escribeunasecuenciadeinstruccionesparagenerarunaformadeonda digitalde50Hzconunciclodetrabajodel80%,utilizarelmodode16bitsenla terminaldesalidaPWM1. Solucin: Utilizarlassiguientesindicaciones:

SeleccionaelrelojAcomolafuentederelojyestablecesupreescala en 16. Seleccionarelmododealineacinizquierdaconunapolaridadde1. Cargarelvalor30000enelregistroPWMPER0:PWMPER1. Cargarelvalor24000enelregistroPWMDTY0:PWMDTY1.


movb movb movb movb movb movw movw bset #0,PWMCLK #2,PWMPOL #4,PWMPRCLK #$1C,PWMCTL #0,PWMCAE #30000,PWMPER0 #24000,PWMDTY0 PWME,PWME1 ;seleccionaelrelojAcomofuentedereloj ;ponerlasalidaPWM0:PWM1iniciandoconnivelalto ;establecepreescala en16 ;concatenaPWM0:PWM1,deteneraPWMenmododeespera ;seleccionamododealineacinizquierda ;establecerperodoen30000 ;establecertrabajoen24000 ;habilitaPWM0:PWM1
ERS 696

Ejemplo. UtilizarelmduloPWMparadisminuirlaluzdeunafoco.Asumir queusamoslasalidaPWM0paracontrolarelbrillodelfoco.Escribeun programaenCparadisminuirgradualmenteen5segundoselbrilloaun10%. LaFrecuenciadelrelojEesde24MHz. Solucin:


Establecerdesdeelprincipioelciclodetrabajoenun100%. EnelPrimersegundodisminuyeelbrilloenun10%yenlosprximos4segundos disminuirloenun20%porsegundo. Enunprincipiocargarelvalor100enelregistroPWMPER0. Duranteelprimersegundocada100ms decrementa en1aPWMPER0y decrementa en2PWMPER0cada100ms enlossiguientes4segundos.

ERS

697

ControldeMotorDC
ElmotorDCtieneuncampomagnticopermanenteysuarmaduraesuna bobina. Cuandounvoltajeyposteriormenteunacorrientesonaplicadosa su armadura,elmotorcomienzaagirar. Elniveldevoltajeaplicadoatravsdelaarmaduradeterminalavelocidad delarotacin. CasitodaslasaplicacionesenlasqueseusanmotoresDCrequieren invertirladireccindelgiroomuchavelocidad. Sepuedeinvertirladireccindelgiroalcambiarlapolaridaddelvoltaje aplicadoalmotor. Cambiarlavelocidadrequierevariarelniveldevoltajedeentradaal motor.

ERS

698

ControldeMotorDC
Sepuedelograrcambiarelniveldevoltajealvariarelancho depulsodelasealdigitaldeentradaalmotorDC. ElHCS12puedeinteractuarconelmotorDCatravsdel controladormostradoverlminassiguientes. Sedebeseleccionaruncontroladoradecuadoparatomarel controldelasealdelHCS12yentregarelvoltajeyla corrientenecesariasparaelmotor. ElejemplodeuncontroladordemotorDCsemuestraenuna lminaadelante. ElL293tienedosvoltajesdesuministro:VSSyVS.VSSesun suministrolgicoypuedetenerunrangode4.5a36V.VSes analgicoypuedesertanaltacomo36V. ERS 699

ControldeMotorDC

ERS

700

ControldeMotorDC

ERS

701

MotordeDCRetroalimentado
LavelocidaddelmotordeDCdebeserretroalimentadaal microcontroladorparapodersercontrolado. Lavelocidaddelmotorpuedeserretroalimentadausandounlector ptico,undetectorinfrarrojoounsensor deEfectoHall. Basndoseenlaretroalimentacindelavelocidad,elmicrocontrolador puedeajustarelincrementoodecrementodelavelocidad,invertirla direccinoparaelmotor. AsumiendoquedosmagnetossonfijadosalejedelrotordelmotordeDC yuntransistordeEfectoHallesmontadoenlaarmaduradelestator. Comosemuestraenlasiguientelmina,cadavezqueeltransistorde EfectoHallpasaatravsdelcampomagnticosegeneraunpulso. LafuncindeentradadeCapturadelHCS12puedecapturareltiempodel pulsoquevapasando.Eltiempoentredoscapturaseslamitaddeuna revolucin.As lavelocidaddelmotorpuedesercalculada.
ERS 702

MotorDCRetroalimentado

ERS

703

SistemadeControldeunMotorDCbasado enunHCS12
Elesquemasemuestraenlaminassiguientes. LasalidaPWMdelaterminalPP3est conectadoaunextremodelmotor mientrasquePP7est conectadoalotroextremodelmotor. Elcircuitoest conectadodemaneraqueelmotorgireenelsentidodel relojcuandoelvoltajeenlaterminalPP7seaceromientrasque enla salidaPWMnoescero(espositiva). Ladireccindelarotacindelmotorestailustradaenlaminassiguientes. AplicandoelvoltajeapropiadoalasterminalesPP7yPP3(PWM3),el motorpuedegirarenelsentidodelreloj,ensentidocontrarioalrelojo inclusodetenerse.

ERS

704

SistemadeControldeunMotorDCbasado enunHCS12
ElCanal0deEntradadeCapturaseutilizaparacapturarla retroalimentacindeltransistordeEfectoHall. CuandoseenergizaprimeroaunmotorDC,tomatiempoparaalcanzarsu velocidadfinal. Cuandoseincrementalacargadelmotor,ser mslentoyporlotantoel ciclodetrabajoenPWM3deber incrementarparamantenerlavelocidad constante. Cuandosereducelacarga,lavelocidaddelmotorseincrementar yporlo tantoelciclodetrabajoenPWM3debedisminuir. ElmotorDCnorespondeinstantneamentealoscambiosenelciclode trabajo.Variosciclosdebenserpermitidosporelmicrocontroladorpara determinarsielcambiodelciclodetrabajohalogradosuefecto.
ERS 705

SistemadeControldeunMotorDCbasado enunHCS12

ERS

706

SistemadeControldeunMotorDCbasado enunHCS12

ERS

707

Ejemplo. EscribeunasubrutinaenlenguajeCpara medirlavelocidaddelmotor(enrpm).Asumirqueel relojEesde16MHz. Solucin:


DoslevantamientosdebordeconsecutivosenlaterminalPT0 debensercapturadosconelfindecalcularlavelocidaddel motor. Dejarquediff sealadiferenciadedoscapturasdebordeyel periodoest establecidoen1ms,entonces:
Speed =60 106 (2 diff)

ERS

708

El perro de guardia
COP

ERS

709

ERS

710

ERS

711

Potrebbero piacerti anche