Anda di halaman 1dari 370

Juan Carlos Vesga Ferreira, Martin Sinsel

Eduardo Muriel, Jaime Hueso


Juan Cazares, Luis Puebla, Diego Haro

MICROCONTROLADORES
Motorola-Freescale
Programacin, familias y sus distintas
aplicaciones en la industria

freescale
semiconductor
TM
Datos catalogrficos
Vesga, Juan
Microcontroladores Motorola-Freescale: programacin,
familias y sus distintas aplicaciones en la industria.
Primera Edicin
Alfaomega Grupo Editor, S.A. de C.V., Mxico
ISBN: 978-970-15-1329-3
Formato: 21 x 24 cm Pginas: 368

Microcontroladores Motorola-Freescale: programacin, familias


y sus distintas aplicaciones en la industria
Juan Carlos Vesga Ferreira
Coautores: Martin Sinsel, Eduardo Muriel, Jaime Hueso, Juan Cazares, Luis Puebla, Diego Haro
Derechos reservados Alfaomega Grupo Editor, S.A. de C.V., Mxico
Freescale Semiconductor

Primera edicin: Alfaomega Grupo Editor, Mxico, noviembre 2007

2008 Alfaomega Grupo Editor, S.A. de C.V.


Pitgoras 1139, Col. Del Valle, 03100, Mxico D.F.

Miembro de la Cmara Nacional de la Industria Editorial Mexicana


Registro No. 2317

Pg. Web: http://www.alfaomega.com.mx


E-mail: libreriapitagoras@alfaomega.com.mx

ISBN: 978-970-15-1329-3

Derechos reservados:
Esta obra es propiedad intelectual de su autor y los derechos de publicacin en lengua espaola han
sido legalmente transferidos al editor. Prohibida su reproduccin parcial o total por cualquier medio
sin permiso por escrito del propietario de los derechos del copyright.

Edicin autorizada para venta en Mxico y todo el continente americano.

Impreso en Mxico. Printed in Mexico.

Empresas del grupo:


Mxico: Alfaomega Grupo Editor, S.A. de C.V. Pitgoras 1139, Col. Del Valle, Mxico, D.F. C.P. 03100.
Tel.: (52-55) 5089-7740 Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396
E-mail: libreriapitagoras@alfaomega.com.mx
Colombia: Alfaomega Colombiana S.A. Carrera 15 No. 64 A 29 PBX (57-1) 2100122
Fax: (57-1) 6068648 E-mail: scliente@alfaomega.com.co
Chile: Alfaomega Grupo Editor, S.A. General del Canto 370-Providencia, Santiago, Chile
Tel.: (56-2) 235-4248 Fax: (56-2) 235-5786 E-mail: agechile@alfaomega.cl
Argentina: Alfaomega Grupo Editor Argentino, S.A. Paraguay 1307 P.B. 11, Capital Federal,
Buenos Aires, C.P. 1057 Tel.: (54-11) 4811-7183 / 8352, E-mail: info@alfaomegaeditor.com.ar
Mensaje del editor
Los conocimientos son esenciales para el buen desempeo de los profesionales. Estos les permiten adquirir
habilidades indispensables para competir laboralmente. Durante el paso por la universidad o por las instituciones
de formacin para el trabajo, se tiene una gran oportunidad de adquirir conocimientos, que debe ser aprovechada
para ms tarde cosechar en beneficio propio y en el de quienes nos rodean.
El avance de la ciencia y de la tcnica hace necesario mantener conocimientos actualizados, a riesgo de perder
competitividad laboral y, eventualmente, bienestar. Cuando se toma la decisin de capacitarse para actuar como
trabajadores profesionales, se firma un compromiso de por vida con los conocimientos que conforman un oficio
especfico.
Alfaomega se ocupa de presentarles a los lectores los conocimientos dentro de lineamientos pedaggicos
que faciliten su utilizacin y les ayuden a aprender y a desarrollar las competencias requeridas por una profesin
determinada. As mismo, combina las diferentes tecnologas de la informacin y las comunicaciones (IT) para facilitar
su aprendizaje. Alfaomega espera ser su compaera de por vida en este viaje por el conocimiento.
Nuestros libros impresos estn complementados por una pgina Web en donde el alumno y su profesor
encontrarn materiales adicionales, informacin actualizada, tests de autoevaluacin, diapositivas y vnculos con
otros sitios Web relacionados. Visualmente, las obras contienen numerosos grficos, tablas y prrafos cortos bien
desarrollados, para que el estudiante navegue durante su estudio, facilitndole la comprensin y apropiacin
del conocimiento.
Los libros de Alfaomega estn diseados para ser utilizados dentro de los procesos de enseanza-aprendizaje,
y pueden usarse como textos gua del curso o como apoyo para reforzar el desarrollo profesional. Cada captulo
tiene objetivos y metas cognitivas concretas, la estructura de relato es fcilmente comprensible; al final de cada
captulo se encuentran actividades pedaggicas, adems de extensa bibliografa, palabras clave y resumen.
Alfaomega desea que cuando el acervo cognitivo conjuntamente con el desarrollo de las destrezas le permitan
ser profesional exitoso(a), no olvide su responsabilidad social y as lograr conjuntamente construir un pas mejor.
Web de apoyo
La pgina Web de este libro, cuenta con Software (2 programas) que le permitirn trabajar simultneamente
los ejercicios y ejemplos planteados en el libro.
Tendrn a disposicin simulaciones de programacin, anexos con documentos afines al tema, ejercicios,
un plano para Programador Motorola, lista de sitios Web relacionados y ayudas permanentemente
actualizadas.
Ayudas para docentes que incluyen presentaciones del tema en PowerPoint por captulo.
Para acceder a la Web de Apoyo, deber ingresar a nuestra pgina Web: www.alfaomega.com.co en la
cual encontrar un link llamado Web de Apoyo, este a su vez lo llevar a nuestra plataforma virtual y al
libro Microcontroladores Motorola - Freescale. Para ingresar a las ayudas, utilice la clave incluida en el libro
y regstrese como usuario, una vez registrado, siga las instrucciones dadas en la Web.
Los usuarios que accedan con el cdigo asignado, podrn utilizar todas las ayudas virtuales, excepto las
que estn dedicadas a los docentes. stas, requieren una contrasea adicional que deber solicitar el docente
al promotor o directamente a nuestro correo electrnico:

Colombia: clubdelconocimiento@alfaomega.com.co
Mxico: libreriapitagoras@alfaomega.com.mx
Argentina: ventas@alfaomegaeditor.com.ar

Este libro fue hecho gracias al esfuerzo de muchas personas que sacrificaron su tiempo, su
autora y su capital para que fuera posible esta obra que enriquecer el conocimiento de
muchos estudiosos del tema. Igualmente, Usted ha invertido en la compra de este ejemplar,
porque es conciente de la inmensa riqueza intelectual que aporta un libro original, no lo
facilite para la fotocopia.

www.alfaomega.com.mx
Dedico este trabajo a Dios, a mis padres Jos Antonio y Esther, a mis hermanos
Diana Milena y Sergio Andrs, y finalmente a mi linda y adorada esposa
Katherin, a los que adoro con todo mi corazn.

Juan Carlos
Agradecimientos
A la empresa MOTOROLA-FREESCALE por todo su acompaamiento, colaboracin y orientacin durante
el proceso de elaboracin, desarrollo y evaluacin de tan importante proyecto. Especialmente a los Ingenieros
Armando Molano y Martin Sinsel, quienes estuvieron permanentemente al tanto de todo el proceso del
libro.
A la Universidad Manuela Beltrn y a las Unidades Tecnolgicas de Santander (Bucaramanga), por su
apoyo y colaboracin constante en el desarrollo del presente libro.
Al Dr. Miguel Jos Pinilla Gutirrez, rector de la Universidad Manuela Beltrn, por su colaboracin, apoyo
incondicional y confianza en diferentes aspectos relacionados con la elaboracin de este proyecto.
Al Dr. Vctor Ral Castro Neira, rector de las Unidades Tecnolgicas de Santander, por su amistad,
colaboracin, apoyo incondicional y confianza en lo pertinente al desarrollo de este proyecto.
A los ingenieros Gloria Galvis Valderrama y Jorge Eduardo Quintero Muoz, directores de los programas
de Ingeniera de Sistemas e Ingeniera Biomdica, respectivamente, por todo el apoyo brindado y la confianza
depositada desde el inicio en la elaboracin del presente trabajo.
A Daniel Mndez, Luis Eduardo Rodrguez y Luis Javier Buitrago por su acompaamiento, amistad y
orientacin en todo el proceso de elaboracin y edicin de este libro.
A todas las personas que de una u otra manera se relacionaron con el mismo, brindado el apoyo y la
ayuda que cada uno pudo aportar.

El autor
El autor
JUAN CARLOS VESGA FERREIRA naci en 1979 en Bucaramanga, departamento de Santander, en
Colombia.
Es ingeniero electrnico de la Universidad Industrial de Santander, ingeniero de sistemas de la Universidad
Manuela Beltrn, especialista en docencia universitaria de la Universidad Cooperativa de Colombia, especialista
en telecomunicaciones y candidato a magster en telecomunicaciones de la Universidad Pontificia Bolivariana.
Se desempe como coordinador de Tecnologa en Diseo y Administracin de Sistemas de las U.T.S., como
par acadmico ante el Ministerio de Educacin Nacional, como catedrtico en diferentes instituciones del rea
metropolitana de Bucaramanga en las reas de microcontroladores, electrnica de potencia, programacin
avanzada y telecomunicaciones, y se encuentra registrado como instructor Cisco CCNA-CCAI de las academias
locales (Unidades Tecnolgicas de Santander Universitaria de Investigacin y Desarrollo U.D.I.); es miembro
de la Red de Semilleros de Investigacin (REDSI UMB). Ha sido director, evaluador y conferencista de diversos
proyectos de grado y seminarios de profundizacin en las reas de control electrnico, electrnica de potencia,
control de mquinas, robtica, comunicaciones, redes LAN y WAN, arquitecturas de computacin, desarrollo
de aplicaciones, software bajo herramientas de ltima tecnologa.
CONTENIDO
Mensaje del editor ..............................................................................................................iii
Web de Apoyo ...................................................................................................................iv
Agradecimientos .................................................................................................................vi
El autor ..............................................................................................................................vii
Contenido ..........................................................................................................................ix
Prlogo de Freescale ..........................................................................................................xv
Introduccin .................................................................................................................... xvii

Captulo 1 INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA-FREESCALE


Objetivo del captulo .......................................................................................................................................1
Conocimientos previos ....................................................................................................................................1
1.1 Introduccin ...........................................................................................................................................1
1.2 Resea histrica ......................................................................................................................................2
1.3 Qu es un microcontrolador? ................................................................................................................3
1.6 Diferencias entre microprocesador y microcontrolador ...........................................................................4
1.7 Ventajas de un microcontrolador frente a un microprocesador ................................................................5
1.6 Relacin entre microcontrolador y DSP...................................................................................................6
1.7 Clasificacin de los microcontroladores...................................................................................................9
1.8 Arquitectura cerrada o abierta ...............................................................................................................12
1.9 Tipo de memoria de programa ..............................................................................................................12
1.10 Prestaciones y recursos especiales ..........................................................................................................14
1.11 Microcontroladores de uso comn .........................................................................................................15
1.12 Cmo elegir el microcontrolador adecuado?.........................................................................................17
1.13 Caractersticas de otros microcontroladores............................................................................................17
1.14 Principios bsicos de operacin interna..................................................................................................23
1.15 Sistemas de desarrollo............................................................................................................................25
RESUMEN DEL CAPTULO ...........................................................................................................................31
x JUAN CARLOS VESGA FERREIRA

Captulo 2 LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1


Objetivo del captulo .....................................................................................................................................33
Conocimientos previos ..................................................................................................................................33
2.1 Introduccin ..........................................................................................................................................33
2.2 Caractersticas de la CPU 08 ..................................................................................................................34
2.3 Caractersticas de los microcontroladores ...............................................................................................34
2.4 Distribucin de pines del microcontrolador MC68H(R)C908JL3/JK3/JK1 ................................................39
2.5 Descripcin de pines del JL3/JK3/JK1 ...................................................................................................41
2.6 Mapa de memoria del JL3.....................................................................................................................42
RESUMEN DEL CAPTULO ...........................................................................................................................44

Captulo 3 INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES


MOTOROLA- FREESCALE
Objetivo del captulo .....................................................................................................................................45
Conocimientos previos ..................................................................................................................................45
3.1 Introduccin ..........................................................................................................................................45
3.2 Registros de uso general ........................................................................................................................45
3.3 Modos de direccionamiento ..................................................................................................................49
3.4 Memoria RAM .......................................................................................................................................63
3.5 Set de instrucciones ..............................................................................................................................64
EJERCICIOS PROPUESTOS ............................................................................................................................70
RESUMEN DEL CAPTULO ...........................................................................................................................71

Captulo 4 PUERTOS DE ENTRADA/SALIDA


Objetivo del captulo .....................................................................................................................................73
Conocimientos previos ..................................................................................................................................73
4.1 Introduccin ..........................................................................................................................................73
4.2 Registro PORT A (PTA) ...........................................................................................................................74
4.3 Registro de configuracin del PORT A (DDRA).......................................................................................76
4.4 Registro PTAPUE ....................................................................................................................................77
4.5 Registro PORT B (PTB) ...........................................................................................................................78
4.6 Registro de configuracin del PORT B (DDRB) .......................................................................................79
4.7 Registro PORT D (PTD) ..........................................................................................................................79
4.8 Registro de configuracin del PORT D (DDRD)......................................................................................80
4.9 Registro de control del PORT D (PDCR) .................................................................................................80
4.10 EJERCICIOS RESUELTOS .......................................................................................................................81
EJERCICIOS PROPUESTOS ............................................................................................................................88
RESUMEN DEL CAPTULO ...........................................................................................................................88

ALFAOMEGA - FREESCALE
CONTENIDO xi

Captulo 5 MANEJO DE TEMPORIZACIN BSICA


Objetivo del captulo .....................................................................................................................................89
Conocimientos previos ..................................................................................................................................89
5.1 Introduccn ...........................................................................................................................................89
5.2 Display de cristal lquido ........................................................................................................................91
EJERCICIOS PROPUESTOS ............................................................................................................................95
RESUMEN DEL CAPTULO ..........................................................................................................................116

Captulo 6 INTERRUPCIONES (SISTEMA DE INTEGRACIN MODULAR)


Objetivo del captulo ...................................................................................................................................117
Conocimientos previos ................................................................................................................................117
6.1 Introduccin ........................................................................................................................................117
6.2 Interrupciones .....................................................................................................................................118
6.3 Estado de interrupcin del registro 1 ....................................................................................................120
6.4 Estado de interrupcin del registro 2 ....................................................................................................120
6.5 Estado de interrupcin del Registro 3 ...................................................................................................120
6.6 La instruccin SWI ...............................................................................................................................121
6.7 RESET ..................................................................................................................................................121
RESUMEN DEL CAPTULO ..........................................................................................................................122

Captulo 7 MDULO DE INTERRUPCIN POR TECLADO (KBI)


Objetivo del captulo ...................................................................................................................................123
Conocimientos previos ................................................................................................................................123
7.1 Introduccin ........................................................................................................................................123
7.2 Registro de control y estado de teclado (KBSCR) ..................................................................................124
7.3 Registro de habilitacin de interrupciones de teclado (KBIER) ..............................................................124
7.4 Inicializacin del teclado.....................................................................................................................125
7.5 EJERCICIOS RESUELTOS .....................................................................................................................126
EJERCICIOS PROPUESTOS ..........................................................................................................................133
RESUMEN DEL CAPTULO .........................................................................................................................133

Captulo 8 INTERRUPCIN EXTERNA IRQ


Objetivo del captulo ...................................................................................................................................135
Conocimientos previos ................................................................................................................................135
8.1 Introduccin ........................................................................................................................................135
8.2 Caractersticas .....................................................................................................................................136
8.3 Descripcin del funcionamiento .........................................................................................................136
8.3 Registro de control de estado de IRQ (INTSCR) ...................................................................................137

ALFAOMEGA - FREESCALE
xii JUAN CARLOS VESGA FERREIRA

8.4 EJERCICIOS RESUELTOS ......................................................................................................................138


EJERCICIOS PROPUESTOS ..........................................................................................................................142
RESUMEN DEL CAPTULO .........................................................................................................................143

Captulo 9 MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE


Objetivo del captulo ...................................................................................................................................145
Conocimientos previos ................................................................................................................................145
9.1 Introduccin .......................................................................................................................................145
9.2 Fuentes de interrupcin debidas al TIM ..............................................................................................147
9.3 Registro TSC .......................................................................................................................................147
9.4 Registro contador del TIM TCNTH/L ...................................................................................................148
9.5 Registro mdulo de tiempo TMODH/L ...............................................................................................149
9.6 Registro de estado y control de canales del TIM .................................................................................149
9.7 Los registros de canales del TIM (TCH0H/L:TCH1H/L) ........................................................................152
9.8 Funcin PWM ....................................................................................................................................153
9.9 Implementacin PWM en el microcontrolador....................................................................................154
9.10 EJERCICIOS RESUELTOS .....................................................................................................................156
EJERCICIOS PROPUESTOS ..........................................................................................................................176
RESUMEN DEL CAPTULO .........................................................................................................................176

Captulo 10 CONVERSOR ANLOGO/DIGITAL


Objetivo del captulo ...................................................................................................................................179
Conocimientos previos ................................................................................................................................179
10.1 Introduccin ......................................................................................................................................179
10.2 Descripcin del funcionamiento del ADC ..........................................................................................180
10.3 Voltaje de conversin.........................................................................................................................181
10.4 Tiempo de conversin .......................................................................................................................181
10.5 Registro de control y estado del A/D (ADSCR) ...................................................................................181
10.6 Registro de conversin A/D (ADR) ......................................................................................................183
10.7 Registro de configuracin del reloj para el conversor A/D (ADCLK) ....................................................183
10.8 EJERCICIOS RESUELTOS ....................................................................................................................185
EJERCICIOS PROPUESTOS ..........................................................................................................................195
RESUMEN DEL CAPTULO .........................................................................................................................195

Captulo 11 EL OSCILADOR
Objetivo del captulo ...................................................................................................................................197
Conocimientos previos ................................................................................................................................197
11.1 Introduccin ......................................................................................................................................197

ALFAOMEGA - FREESCALE
CONTENIDO xiii

EJERCICIOS PROPUESTOS ..........................................................................................................................201


RESUMEN DEL CAPTULO .........................................................................................................................201

Captulo 12 RECURSOS DE CONFIGURACIN AVANZADA


Objetivo del captulo ...................................................................................................................................203
Conocimientos previos ................................................................................................................................203
12.1 Introduccin ......................................................................................................................................203
12.2 Memoria Flash ...................................................................................................................................204
12.3 Borrado de la memoria flash en bloque .............................................................................................205
12.4 Programacin de la memoria flash .....................................................................................................206
12.5 Proteccin de la memoria flash ..........................................................................................................206
12.6 Mdulo de ruptura ............................................................................................................................207
12.7 Configuracin del registro CONFIG ...................................................................................................210
RESUMEN DEL CAPTULO ..........................................................................................................................212

Captulo 13 PROGRAMACIN EN C
Objetivo del captulo ...................................................................................................................................215
Conocimientos previos ................................................................................................................................215
13.1 Introduccin al lenguaje C .................................................................................................................215
13.2 Estructura de un programa en C .........................................................................................................217
13.3 Definicin de estructuras iniciales en C ..............................................................................................218
13.4 Definicin de variables ......................................................................................................................219
13.5 Programa principal ............................................................................................................................227
13.6 Operadores ......................................................................................................................................228
13.7 Sentencias de control .........................................................................................................................231
13.8 Arreglos o vectores.............................................................................................................................237
13.9 Funciones ..........................................................................................................................................238
13.10 Interrupciones ..................................................................................................................................243
RESUMEN DEL CAPTULO ..........................................................................................................................247

Captulo 14 INTRODUCCIN A LOS MICROCONTROLADORES SO8Q


Objetivo del captulo ...................................................................................................................................249
Conocimientos previos ................................................................................................................................249
14.1 Introduccin ........................................................................................................................................249
14.2 Caractersticas de los microcontroladores MC9S08QG8/QG4 ..............................................................250
14.3 Mdulo Timer Interface (MTIM) ...........................................................................................................261
14.4 Real Time Interrupt (RTI) ......................................................................................................................270
14.5 Mdulo de comparacin analgico ......................................................................................................284

ALFAOMEGA - FREESCALE
xiv JUAN CARLOS VESGA FERREIRA

14.6 Mdulo de conversin anlogo/digital ..................................................................................................288


Descripcin del funcionamiento del adc ..............................................................................................289
Modulos de comunicaciones con el S08 ..............................................................................................297
14.7 Mdulo interface de comunicaciones seriales (SCI)..............................................................................................299
14.8 Transmisiones seriales sincronas - mdulo spi .......................................................................................311
14.9 Mdulo I2C (Inter Integrated Circuit) ................................................................................................323
CONCLUSIONES FINALES ..........................................................................................................................347
RESUMEN DEL CAPTULO ..........................................................................................................................212

BIBLIOGRAFA ...........................................................................................................................................349

ALFAOMEGA - FREESCALE
Pr
rlogo
logo del Fre
Freesca
escale
le
Freescale Semiconductor es una compaa global lder en la industria de semiconductores enfocada proveer
procesamiento embebido y productos de conectividad. Actualmente, nos enfocamos al suministro de productos
para la industria automotriz, de redes, comunicaciones inalmbricas, control industrial e industrias de consumo
electrnico. Con nuestra oferta de procesadores embebidos y de productos complementarios, proporcionamos
a nuestros clientes una solucin completa de semiconductores y software.
Esta compaa privada est basada en Agustn, Texas, y tiene diseo, investigacin y desarrollo,
manufactura u operacin de ventas en ms de 30 pases. Freescale es una de las compaas ms grandes de
semiconductores con ventas en el 2006 de $6.4 Billones de dlares.
Nuestra base global de clientes est integrada por ms de 10,000 clientes finales. Entre ellos se incluyen
ms de 100 fabricantes lideres de equipo original a los que damos servicio a travs de nuestra fuerza de ventas
directas y a otros miles de clientes finales a quienes atendemos a travs de una red de distribuidores. Cerca
de 24,000 empleados en ms de 30 pases dan servicio y soporte a estos clientes.
Freescale puede ser una las mas grandes compaas que la gente toca cada da, pero a la que nunca se
escucha. Ha enviado ms de 17 billones de semiconductores que pueden ser encontradas en marcas de todos
los das como:
Celulares Motorota, Sony electronics, Electrodomsticos Whirlpool, Teclados y mousse Logitech, Sistemas
de entrenamiento Lifefitness, Routers Cisco, Radios Bose, Sistemas de calefaccin y enfriamiento Trane,
Vehculos Mercedes, BMW, Ford, Hyundai y General Motors, etc.
La visin de Freescale es ser el lder de procesamiento integrado para el mundo conectado. Nos esforzamos
por alcanzar este objetivo enfocndonos a los mercados con alto ndice de crecimiento donde podamos aplicar
nuestras fortalezas:
Experiencia y liderazgo en procesadores embebidos, Experiencia en el desarrollo de aplicaciones comerciales
para nuestras industrias objetivo, Liderazgo en tecnologa y propiedad intelectual, Enfoque diferenciado de
manufactura que aporta experiencia en tecnologa de procesos y capacidad de manufactura flexible, Relaciones
a largo plazo con clientes y con proveedores, Por consiguiente, nuestra misin para Amrica Latina, es
participar activamente en el desarrollo de la Industria Electrnica, creando as este canal de comunicacin, a
travs del cul buscaremos acercarnos a ustedes para entender mejor sus necesidades, ofreciendo productos
innovadores, inteligentes, ms simples y de bajo costo, que permitan construir y disear sus productos.
Despus de mas de 50 aos como parte de Motorola, Freescale comenz una nueva vida como compaa
independiente en Julio del 2004.
Freescale es propietaria de siete fbricas de obleas, dos de ensamble y sitios de pruebas y una linea
piloto de pruebas de 300 milmetros y centro de investigacin y desarrollo en Crolles, Francia junto con
STMicroelectronics y NXP. Freescale invierte $1 billn anualmente en Investigacin y Desarrollo y tiene 5,500
familias de patentes.
Es para nosotros muy grato presentar este libro que ha sido estudiado y apoyado por nuestros ingenieros,
y quienes han aportado significativos temas en el desarrollo del mismo, para lograr mayor credibilidad en el
contenido. Sin duda, ser un texto que les ayudar a entender con mayor facilidad el impresionante mundo
del microcontrolador Freescale.
iNTRODUCCIN
Uno de los temas ms relevantes de los ltimos tiempos en el campo de la electrnica ha sido el estudio y
la inclusin de los microcontroladores no solamente en dicho campo sino tambin en la vida moderna en
general. El microcontrolador se considera actualmente el componente electrnico ms verstil que existe,
sus aplicaciones son ilimitadas y cada da es mas frecuente encontrar equipos que los utilizan en diferentes
funciones orientadas al control, las telecomunicaciones y la instrumentacin.
Inicialmente toda la electrnica utilizada para el control de procesos se realizaba a travs de lgica cableada,
es decir, empleando circuitos integrados que no efectuaban sino algunas funciones especficas como, por
ejemplo, operaciones lgicas (caso de las compuertas lgicas), biestables, multiplexores, codificadores, etc. Al
inicio se crea que el manejo de un microprocesador era slo para personas que tuvieran un alto coeficiente
intelectual; por el contrario, con la aparicin de este circuito integrado todo sera mucho ms fcil de entender
y los diseos electrnicos se haran luego mucho ms pequeos y simplificados.
Aunque existen en el mercado una gran diversidad de familias de microcontroladores, los microcontroladores
Freescale lideran con su presencia y utilizacin en diferentes mbitos industriales, principalmente en el campo
automotriz, gracias a su estabilidad, facilidad de programacin, bajo costo frente a sus competidores, todo lo
cual los ha hecho tan llamativos para los profesionales como para estudiantes, usuarios, etc.
Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres unidades funcionales
de un computador: CPU, memoria y unidades de E/S, es decir, se trata de un computador completo en un solo
circuito integrado. Aunque sus recursos son limitados en comparacin con un PC corriente, adicionalmente
a su dicha integracin, su caracterstica principal es su alto nivel de especializacin.
Un microcontrolador es un microprocesador optimizado, se usa para controlar equipos electrnicos, diseo
de sistemas de comunicacin, monitoreo y adquisicin de seales fsicas, procesamiento y administracin
de seales analgicas y digitales.
Un microcontrolador difiere de una CPU corriente debido a que es ms fcil convertirla en un computador
o computadora en funcionamiento con un mnimo de chips externos de apoyo. Un microprocesador tradicional
no le permitir hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips.
Los microcontroladores estn conquistando el mundo, estn presentes en nuestro trabajo, en nuestra casa
y en nuestra vida en general. Se pueden encontrar controlando el funcionamiento de los mouses y teclados
de los computadores, y tambin en los telfonos, en los hornos microondas y los televisores de nuestro
hogar. Pero la invasin acaba de comenzar y el nacimiento del siglo XXI ser testigo de la conquista masiva
de estos diminutos computadores, que controlarn la mayor parte de los equipos que se han de fabricar y
que estarn presentes en todos los ambientes de nuestra vida, por ejemplo en nuestra vivienda, en el trabajo,
en los automviles, etc.
xviii JUAN CARLOS VESGA FERREIRA

Frecuentemente estos dispositivos integrados pueden ser controlados por instrucciones de procesadores
especializados. Los modernos microcontroladores frecuentemente incluyen un lenguaje de programacin
integrado, como el Basic o el C, que se utilizan bastante con este propsito.
Cuando se decide realizar un proyecto y en l es necesario utilizar un microcontrolador, el primer problema
que se enfrenta es la seleccin de una familia de microcontroladores y, dentro de esta, un modelo en concreto
que se ajuste lo mejor posible a las necesidades del diseo.Freescale dentro de su gama de productos ofrece
un sinfn de posibilidades de microcontroladores, cada uno con caractersticas propias y especficas para
diferentes tipos de diseos en los que se requieran.
Los microcontroladores Freescale tienen la reputacin de ser muy confiables, fciles de programar y,
ante todo, de ser unos de los ms utilizados a nivel mundial. Tanto los estudiantes como los profesionales
y usuarios en general, al conocer las bondades en cuanto a menor costo, mayor diversidad de instrucciones
para la ejecucin de operaciones matemticas como multiplicaciones y divisiones, manejo de interrupciones
vectorizadas mas no jerarquizadas y otra gran cantidad de recursos, sin dudarlo comienzan su relacin con
la familia de microcontroladores Freescale.
Uno de los aspectos sobresalientes de Freescale es que cada da sigue creciendo ms y ms; hace muy poco
tiempo se realiz el lanzamiento de una nueva familia de microcontroladores, denominada familia de ultra
bajo costo RS08, basada en el core de instrucciones reducidas RS08, prometiendo convertirse en una de
las familias ms importantes de microcontroladores de 8 y 16 pines, en donde sus principales ventajas sobre
sus homlogos son su muy reducido costo y facilidad de integracin en aplicaciones de volmenes elevados
y altas prestaciones, radicando su principal diferencia en la densidad de cdigo de las distintas instrucciones
y modos de direccionamiento, aunque conserva an muchas caractersticas potentes y verstiles de los
perifricos que se utilizan en la familia HC9S08.
Las bondades ofrecidas por los microcontroladores Freescale, complementado esto con el hecho de no
existir un libro que gue paso a paso en el conocimiento, adiestramiento y profundizacin de los mismos,
han constituido las dos razones fundamentales para la creacin del presente texto. Este libro no solamente
da al lector una introduccin al mundo de los microcontroladores, sino que lo lleva de la mano desde las
aplicaciones ms sencillas, como es el caso del encendido y apagado de un led, hasta aplicaciones complejas
como comunicaciones con el PC y control de procesos industriales e instrumentacin centrados en el uso de
los microcontroladores Freescale.
El libro presenta una forma muy didctica para la enseanza de estos dispositivos, utilizando tcnicas muy
tiles para el aprendizaje y asimilacin de la informacin en forma clara, concisa y muy rica conceptualmente,
lo cual llevar al lector a desarrollar aplicaciones desde las ms sencillas hasta tan complejas como lo desee,
iniciando con la programacin de los microcontroladores de la familia HC08 y finalizando con la introduccin
a la segunda familia de microcontroladores ms importante denominada S08, la cual en la actualidad se
considera como una de las ms completas y utilizadas a escala mundial soportando su programacin en
lenguajes como Assembler y el lenguaje C.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS
Captulo 1
MICROCONTROLADORES
MOTOROLA FREESCALE
OBJETIVO DEL CAPTULO
Al finalizar el captulo el estudiante tendr un
1.1 INTRODUCCIN
conocimiento sobre qu es un microcontrolador?,
para qu se utiliza?, qu beneficios aporta a El microcontrolador es quizs el componente electrnico
la hora de realizar un diseo electrnico?, ms verstil que existe, sus aplicaciones estn limitadas
qu tipos de microcontroladores existen en el nicamente por la imaginacin. Cada da es ms frecuente
mercado?, quines los fabrican?, cmo escoger encontrar equipos que los utilicen como elementos de
el microcontrolador adecuado para la aplicacin control, de comunicaciones, de sealizacin, etc.
a desarrollar?, qu diferencias existen entre
Existen en el mercado una gran cantidad de
un microcontrolador, un microprocesador y un
microcontroladores, como PICs, Basic Stamp, Xenix,
DSP?, as como muchas cosas ms que darn
al estudiante una visn global del mundo de Freescale, siendo estos ltimos los dispositivos de nuestro
los microcontroladores y en especial, de los inters, debido a la gran cantidad de aplicaciones en las
microcontroladores Freescale. que se encuentran, a su fcil programacin, a que son
muy comerciales y se consiguen a muy bajo costo frente
a sus competidores, lo cual los ha hecho tan llamativos
CONOCIMIENTOS PREVIOS para los profesionales como para estudiantes, etc.
Para iniciar el estudio de los microcontroladores Este libro presenta una forma muy didctica
Motorola-Freescale es necesario que el lector para la enseanza de estos dispositivos, utilizando
tenga conocimientos bsicos sobre electrnica tcnicas muy tiles para el aprendizaje y asimilacin
bsica y circuitos digitales, con el fin de que de la informacin en forma clara, concisa y muy
pueda aprovechar y comprender al mximo los rica conceptualmente, lo cual llevar al lector a
conceptos y las temticas expuestas tanto en el desarrollar aplicaciones desde las ms sencillas hasta
presente captulo como en los posteriores. tan complejas como lo desee.
2 JUAN CARLOS VESGA FERREIRA

Sin invertir grandes cantidades de tiempo y dinero en borradores, programadores o software, las tecnologas
actuales de microcontroladores de 8 y 16 bits de Freescale permiten a los usuarios tener rpidamente un
laboratorio donde puedan desarrollar sus aplicaciones en menos tiempo y con mayor confiabilidad.
En el pasado, las tecnologas existentes en el mercado obligaban a pequeos o medianos industriales a
invertir mucho dinero en equipos adicionales al microcontrolador como son los borradores ultravioleta,
programadores y, en algunos casos, en un buen software que les permitiera editar, ensamblar, simular,
realizar conexiones y programaciones.
Los nuevos microcontroladores y las herramientas de desarrollo disponibles para los usuarios de 8 bits
de Freescale permiten todas estas facilidades mediante un programa interno de fbrica que permite iniciar
proyectos en forma muy sencilla, rpida y sin ningn costo adicional.

1.2 RESEA HISTRICA

Recibe el nombre de controlador el dispositivo que se emplea para el control de uno o varios procesos. Aunque
el concepto de controlador ha permanecido invariable a travs del tiempo, su implementacin fsica ha variado
frecuentemente. Hace varios aos los controladores se construan exclusivamente con componentes de lgica
discreta; posteriormente se emplearon los microprocesadores, que se rodeaban con chips de memoria y
dispositivos de E/S sobre una tarjeta de circuito impreso.
En la dcada de 1970 los fabricantes de circuitos integrados iniciaron la construccin y el diseo de un
nuevo circuito para control, medicin e instrumentacin al que llamaron microcomputador en un slo chip
o, de manera ms exacta, microcontrolador.
Inicialmente toda la electrnica utilizada para el control de procesos se realizaba a travs de lgica cableada,
es decir, utilizando circuitos integrados que no efectuaban sino algunas funciones especficas como, por
ejemplo, operaciones lgicas (caso de las compuertas lgicas), biestables, multiplexores, codificadores, etc. Esto
haca que los diseos fueran relativamente grandes, conformados por una gran cantidad de componentes, lo
que en muchos casos se reflejaba en constantes fallas y problemas en el momento de operarlos; pero en 1971
apareci el primer microprocesador, el cual origin un cambio decisivo en las tcnicas de diseo de la mayora
de los equipos. Al comienzo se crea que el manejo de un microprocesador era para aquellas personas que
tuvieran un coeficiente intelectual muy alto; por el contrario, con la aparicin de este circuito integrado todo
sera mucho ms fcil de entender y los diseos electrnicos seran mucho ms pequeos y simplificados.
Entre los microprocesadores ms conocidos tenemos el popular Z-80 y el 8085. Los diseadores de equipos
electrnicos ahora tenan equipos que podan realizar mayor cantidad de tareas en menor tiempo y su tamao
se redujo considerablemente; sin embargo, despus de cierto tiempo aparece una nueva tecnologa llamada
microcontrolador, que simplifica an ms el diseo electrnico.
Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro trabajo, en nuestra casa
y en nuestra vida, en general. Se pueden encontrar controlando el funcionamiento de los mouses y teclados
de los computadores, en los telfonos, en los hornos microondas y los televisores de nuestro hogar. Pero la
invasin acaba de comenzar y el nacimiento del siglo XXI ser testigo de la conquista masiva de estos diminutos
computadores, que controlarn la mayor parte de los equipos que se fabriquen y que estarn presentes en todos
los ambientes de nuestra vida; por ejemplo, en nuestra vivienda, en el trabajo, en los automviles, etc.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 3

Cada vez existen ms productos que incorporan un microcontrolador con el fin de aumentar sustancialmente
sus prestaciones, reducir su tamao y costo, mejorar su fiabilidad y disminuir el consumo.
Algunos fabricantes de microcontroladores superan el milln de unidades de un determinado modelo
producidas en una semana. Este dato puede dar una idea de la masiva utilizacin de estos componentes.
Los microcontroladores estn siendo empleados en multitud de sistemas presentes en nuestra vida
diaria, como juguetes, horno microondas, televisores, computadores, impresoras, mdems, etc. Y tambin otras
aplicaciones ms especializadas como la instrumentacin electrnica, sistemas de control y comunicaciones, etc.

1.3 QU ES UN MICROCONTROLADOR?
Una definicin breve y general sera que un microcontrolador es un dispositivo electrnico capaz de llevar a
cabo procesos lgicos. Estos procesos o acciones son programados en lenguaje ensamblador por el usuario,
y son introducidos en ste a travs de un programador o quemador de microcontroladores.
Una definicin ms completa sera que un microcontrolador es un circuito integrado o chip que incluye
en su interior las tres unidades funcionales de un computador: CPU, memoria y unidades de E/S, es decir,
se trata de un computador completo en un solo circuito integrado. Aunque sus recursos son limitados en
comparacin con un PC normal, adicional a su dicha integracin, su principal caracterstica es su alto nivel
de especializacin.
El microcontrolador es un dispositivo dedicado. En su memoria slo reside un programa destinado
a controlar una aplicacin determinada; sus lneas de entrada/salida soportan la conexin de sensores y
dispositivos de control que permitan efectuar el proceso deseado. Una vez programado y configurado el
microcontrolador, solamente sirve para controlar la tarea asignada.
Un microcontrolador es un microprocesador optimizado, utilizado para controlar equipos electrnicos,
diseo de sistemas de comunicacin, monitoreo y adquisicin de seales fsicas, procesamiento y administracin
de seales analgicas y digitales.
Un microcontrolador difiere de una CPU normal debido a que es ms fcil convertirla en un computador en
funcionamiento, con un mnimo de chips externos de apoyo. Un microprocesador tradicional no le permitir
hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips.
Por ejemplo, un microcontrolador tpico tendr un generador de reloj integrado y una pequea cantidad
de memoria RAM y ROM/EPROM/EEPROM, lo que significa que para hacerlo funcionar se necesita
solamente unos pocos programas de control y un cristal de sincronizacin. Los microcontroladores disponen
generalmente tambin de una gran variedad de dispositivos de entrada/salida, como conversores de analgico
a digital, temporizadores, UARTs y buses de interfaz serie especializados, como I2C y CAN. Frecuentemente
estos dispositivos integrados pueden ser controlados por instrucciones de procesadores especializados. Los
modernos microcontroladores incluyen frecuentemente un lenguaje de programacin integrado, como el
Basic o el C, que se utilizan bastante con este propsito.
El microcontrolador es uno de los logros ms sobresalientes de nuestra poca. Hace unos aos tal afirmacin
habra parecido absurda. Pero cada ao el microcontrolador se acerca ms al centro de nuestras vidas,
haciendo parte fundamental y participando como cerebro central de muchos equipos de control electrnico.
Su presencia ha comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros mismos.

ALFAOMEGA - FREESCALE
4 JUAN CARLOS VESGA FERREIRA

Cada vez se hace ms difcil pasar por alto el microcontrolador como otro simple producto en una larga lnea
de innovaciones tecnolgicas.
Ninguna otra invencin en la historia se ha distribuido y crecido en forma casi exponencial en todo el
mundo. Hoy existen casi 15,000 millones de microchips de alguna clase en uso. De cara a esa realidad, quin
puede dudar que el microcontrolador no slo est transformando los productos que usamos sino tambin
nuestra forma de vivir y, por ltimo, la forma en que percibimos la realidad?
El mayor atributo del microcontrolador es que puede integrar inteligencia casi a cualquier equipo. Se
puede programar para adaptarse a su entorno, responder a condiciones cambiantes, volverse ms eficiente
y para que responda a las necesidades nicas de sus usuarios.

1.6 DIFERENCIAS ENTRE MICROPROCESADOR Y MICROCONTROLADOR

Bus direcciones

Bus Datos
Datos

Bus Control

P
Memoria Controlador 1 Controlador 2

Perifricos Perifricos

FIGURA 1.1
Estructura de un sistema abierto basado en un microprocesador.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 5

Cuando se realiza un diseo basado en un microprocesador, se puede observar que dependiendo del circuito
se requieren algunos circuitos integrados adems del microprocesador, como, por ejemplo: memorias RAM
para almacenar los datos temporalmente y memorias ROM para almacenar el programa que se encargara del
proceso del equipo, un circuito integrado para los puertos de entrada y salida y, finalmente, un decodificador
de direcciones.

Perifricos Perifricos
P

FIGURA 1.2
El microcontrolador es un sistema cerrado. Todas las partes del procesador estn contenidas
en su interior y slo salen al exterior las lneas que gobiernan los perifricos.

Un microcontrolador es un circuito integrado que contiene todos los elementos electrnicos que se utilizaban
para hacer funcionar un sistema basado en un microprocesador; es decir, contiene en un solo circuito integrado
la unidad de proceso, la memoria RAM, memoria ROM, puertos de entrada, salidas y otros perifricos, lo
cual se refleja en una considerable reduccin de espacio.

1.7 VENTAJAS DE UN MICROCONTROLADOR FRENTE


A UN MICROPROCESADOR

Estas ventajas son reconocidas inmediatamente por aquellas personas que han trabajado con los microprocesadores
y despus pasaron a trabajar con microcontroladores. Estas son las diferencias ms importantes:

ALFAOMEGA - FREESCALE
6 JUAN CARLOS VESGA FERREIRA

Por ejemplo, la configuracin mnima bsica de un microprocesador estaba constituida por un micro de
40 pines, una memoria RAM de 28 pines, una memoria ROM de 28 pines y un decodificador de direcciones
de 18 pines; pero un microcontrolador incluye todos estos elementos en un solo circuito integrado por lo que
implica una gran ventaja en varios factores: en el circuito impreso por su amplia simplificacin de circuitera,
el costo para un sistema basado en microcontrolador es mucho menor y, lo mejor de todo, el tiempo de
desarrollo de su proyecto electrnico se disminuye considerablemente.

En general, se prodra decir que la gran ventaja que presenta un microcntrolado, frente a
un microprocesador es la inclusin de diversos mdulos y perifricos que permiten que
el microcontrolador realice funciones completas sin necesidad de elementos externos
ms all del cristal y un oscilador.

1.6 RELACIN ENTRE MICROCONTROLADOR Y DSP

Existen dos herramientas clave en el diseo de cualquier circuito de control y comunicaciones, utilizadas en
gran parte por la mayora de los ingenieros; estas dos herramientas son los microcontroladores y los DSP
(Digital Signal processor o procesador digital de seales).
Los microcontroladores se usan primordialmente en aplicaciones de control que requieran manejo de
interrupciones y la deteccin y control de eventos externos, en dispositivos como PLC, temporizadores,
sistemas de medicin, controladores, etc. Los DSP se encuentran normalmente en sistemas donde se requiere
un procesamiento preciso de seales anlogas, como procesamiento de video y sonido.
Debido al normal avance en complejidad de cada una de estas tecnologas, hoy ya vemos microcontroladores
con algunas capacidades de procesamiento de seales (como es el caso de los DSCs) y a los DSP, siendo capaces
de ejecutar tareas de manejo de eventos en tiempo real, aunque siguen realizando sus tareas primordiales
de procesamiento matemtico.
Segn la aplicacin se debe escoger el ms adecuado, pero como caracterstica fundamental en el momento
de tomar como decisin unnime el uso de los DSP y dejar de lado los microcontroladores, es cuando se va
a trabajar en tareas de tiempo real en las cuales la mayora del los microcontroladores no cuentan con las
herramientas suficientes para hacerlo. Es esta la gran limitante de los microcontroladores.
Una tarea tpica de un microcontrolador es analizar y monitorear las entradas y el estado actual del sistema,
determinando qu dispositivos debe activar o desactivar. El programa que se encuentra almacenado en el
microcontrolador est bsicamente estructurado por saltos, condicionales y operaciones aritmtico-lgicas.
De otra parte, las aplicaciones con los DSP tienden a las aplicaciones matemticas, aplicacin de tcnicas
matemticas para analizar seales en tiempo discreto como, por ejemplo, transformadas de Fourier, entre
otros clculos binarios a una velocidad simplemente extraordinaria, mas no enfocados hacia el control de
procesos como lo realizan los microcontroladores.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 7

Actualmente las aplicaciones orientadas al control se desarrollan tradicionalmente con slo un


microcontrolador, pero en algunas recientes aplicaciones se estn incluyendo DSPs con el fin de acelerar el
desarrollo de operaciones matemticas. Entre los sistemas que cumplen con esta arquitectura se encuentran
el control de movimiento, la robtica, los discos duros y algunos medidores electrnicos. Estos sistemas
son fundamentalmente orientados al control, pero trabajando de la mano con un DSP haciendo las veces de
coprocesador matemtico del microcontrolador.
Una opcin que est tomando fuerza es incorporar funciones DSP en los microcontroladores. Esto es
til por muchas razones, ya que se pueden utilizar en los microcontroladores herramientas matemticas
ms avanzadas y mayor optimizacin de los recursos del sistema, adems de un ahorro de tipo econmico.
Aunque antiguamente pensar en incluir un DSP en un desarrollo era una inversin bastante alta, ahora
esa idea ha cambiado considerablemente; el avance tecnolgico y la necesidad de lograr cada da mayores
tasas de transmisin y capacidad de procesamiento de informacin elevada, ha llevado a que no solamente
microcontroladores posean caractersticas de DSP como es el caso de los DSCs, sino que adems los costos
de los DSP han bajado considerablemente permitiendo que estas poderosas herramientas se encuentren al
alcance de su mano.
En resumen, se puede concluir que un microcontrolador contiene toda la arquitectura de un sencillo pero
completo computador en un solo chip. Las aplicaciones y desarrollos que se pueden alcanzar utilizando estos
dispositivos son realmente interesantes.
El microcontrolador consiste en un circuito integrado de alta escala de integracin que incorpora la mayor
parte de los elementos que configuran un controlador. Se dice que es la solucin en un chip porque su
reducido tamao minimiza el nmero de componentes y el costo.
Los componentes de los que dispone normalmente un microcontrolador son:
Procesador o CPU (unidad central de procesamiento).
Memoria RAM para contener los datos de propsito general.
Memoria para el programa tipo ROM/PROM/EPROM.
Lneas de E/S para comunicarse con el exterior.
Diversos mdulos para el control de perifricos (temporizadores, puertas serie y paralelo, CAD, etc.)
Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.

Segn la referencia del microcontrolador con el que se desee trabajar, el tamao y el tipo de memoria
pueden cambiar, as como los mdulos de control de perifricos y el nmero de lneas de E/S. La inmensa
cantidad de modelos y marcas disponibles permite seleccionar el ms adecuado segn la aplicacin que se
quiera realizar. Una estructura interna fija supone una limitacin, que se convierte en una ventaja en el caso
de que en un simple circuito integrado residan todos los componentes que necesita el controlador.
La nica limitacin que tienen las aplicaciones de los microcontroladores actuales est en la imaginacin
del diseador. Los campos ms destacados en los que se emplean microcontroladores son los siguientes:
Automatizacin industrial.
Adquisicin y cuantificacin de variables fsicas.
Control de procesos industriales.
Enseanza e investigacin.
Electrodomsticos.

ALFAOMEGA - FREESCALE
8 JUAN CARLOS VESGA FERREIRA

Electromedicina.
Robtica.
Sistemas de navegacin.
Sistemas de seguridad.
La industria donde se presenta la mayor cantidad de estos dispositivos programables es la informtica,
la cual acapara la gran mayora de los microcontroladores que se fabrican. Casi todos los perifricos de un
computador, desde el mouse hasta la impresora o el teclado, son regulados por microcontroladores.
En el campo de la instrumentacin y la electromedicina existe una gran variedad de aplicaciones basadas
en microcontroladores, como: mediciones del ritmo cardaco, presin arterial, encefalogramas, temperatura,
humedad, etc.
En la rama de las comunicaciones y sistemas de transmisin y recepcin de informacin se utilizan
constantemente estos microcomputadores, aplicados en diferentes medios de transmisin como: aire, par
trenzado, red elctrica, entre otros.
A continuacin se ilustra un grfico de la distribucin de la produccin mundial de microcontroladores
en las diversas reas de aplicacin.

Aplicaciones automotrices 18%


Consumo 27%

Industria 10%

Computadores 15%

Comunicaciones 30%

FIGURA 1.3
Distribucin por sectores de aplicacin.

Los productos que para su control incorporan un microcontrolador disponen de las siguientes ventajas:
Aumento de prestaciones.
Aumento de la fiabilidad.
Reduccin del tamao en el producto acabado.
Menor consumo de energa.
Mayor flexibilidad.
Reduccin del precio del producto acabado.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 9

1.7 CLASIFICACIN DE LOS MICROCONTROLADORES

Los microcontroladores se pueden clasificar de diferentes maneras, segn criterios de diseo como tamao
de los datos, tipos de arquitectura, cantidad de pines, etc.
A continuacin se hace un resumen de las principales caractersticas que definen las diferentes
subclasificaciones que se presentan en los microcontroladores existentes en la actualidad.

Clasificacin de los microcontroladores Descripcin


Segn el tamao de los datos 4 bits
8 bits
16 bits
32 bits
64 bits
Segn la arquitectura interna Von Neumann
Harvard
Segn la arquitectura del procesador microcontroladores CISC
microcontroladores RISC
microcontroladores SISC

Clasificacin de los microcontroladores segn el tamao de los datos


Segn el tamao de los datos que procesa el microcontrolador, se pueden clasificar en:
Microcontroladores de 4 bits.
Microcontroladores de 8 bits.
Microcontroladores de 16 bits.
Microcontroladores de 32 bits.
Microcontroladores de 64 bits.

El ms representativo de esta clasificacin es el microcontrolador de 8 bits, porque resulta el ms flexible


y eficaz para la mayora de los desarrollos electrnicos. Aunque en los ltimos aos los microcontroladores
de 16 bits estn aumentando significativamente su aparicin en las diferentes aplicaciones industriales.

Tipos de arquitecturas de microcontroladores


Segn la arquitectura interna de la memoria del microcontrolador, se pueden clasificar en:
Microcontroladores con arquitectura Von Neumann.
Microcontroladores con arquitectura Harvard.

ALFAOMEGA - FREESCALE
10 JUAN CARLOS VESGA FERREIRA

Inicialmente todos los microcontroladores adoptaron la arquitectura clsica de Von Neumann. Actualmente
muchos microcontroladores utilizan esta arquitectura, pero poco a poco se impone la arquitectura
Harvard.

Arquitectura Von Neumann


La arquitectura tradicional de computadores y microprocesadores est basada en la arquitectura Von
Neumann, en la cual la unidad central de procesamiento (CPU) est conectada a una memoria nica donde
se guardan las instrucciones del programa y los datos.
El tamao de la unidad de datos o instrucciones est fijado por el ancho del bus que comunica la memoria
con la CPU. As, un microprocesador de 8 bits con un bus de 8 bits tendr que manejar datos e instrucciones
de una o ms unidades de 8 bits de longitud. Si tiene que acceder a una instruccin o dato de ms de un byte
de longitud, tendr que realizar ms de un acceso a la memoria.
Y el tener un nico bus permite que la estructura interna sea ms sencilla de implementar, y con ello un
requerimiento de menor cantidad de silicio, lo que permite que estos dispositivos sean fciles de construir,
eficientes y a costos de fabricacin y comercializacin relativamente bajos, contrario a lo que ocurre con los
dispositivos que poseen arquitectura Harvard. Por estas poderosas razones de estabilidad, simplicidad y
bajo costo, la mayora de fabricantes prefieran utilizar esta arquitectura en la gran mayora de dispositivos
que fabrican.

CPU MEMORIA

FIGURA 1.4
Arquitectura Von Neumann.

La arquitectura Harvard
Tiene la unidad central de procesamiento (CPU) conectada a dos memorias (una con las instrucciones y otra
con los datos) por medio de dos buses diferentes.
Una de las memorias contiene solamente las instrucciones del programa (memoria de programa), y la otra
slo almacena datos (memoria de datos).
Ambos buses son totalmente independientes y pueden ser de distintos anchos. Para un procesador de set
de instrucciones reducido, o RISC (Reduced Instruction Set Computer), el set de instrucciones y el bus de
memoria de programa pueden disearse de tal manera que todas las instrucciones tengan una sola posicin
de memoria de programa de longitud.
Adems, al ser independientes los buses, la CPU puede acceder a los datos para completar la ejecucin
de una instruccin y al mismo tiempo leer la siguiente instruccin a ejecutar.
Ventajas de esta arquitectura:

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 11

1. El tamao de las instrucciones no est relacionado con el de los datos, y por tanto puede ser optimizado
para que cualquier instruccin ocupe una sola posicin de memoria de programa, logrando as mayor
velocidad y menor longitud de programa.
2. El tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando una mayor
velocidad en cada operacin.

Entre las principales desventajas de los procesadores que tienen arquitectura Harvard estn:
Se debe poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario
incluir en los programas, ya que estas tablas se encontrarn fsicamente en la memoria de programa (por
ejemplo, en la EPROM de un microprocesador).
Debido a que la arquitectura Harvard es ms compleja que la arquitectura Von Neumann, requiere mayor
cantidad de silicio para su construccin y con ello, un mayor costo de produccin. La relacin aproximada
de costo entre un dispositivo con arquitectura Harvard es aproximadamente 50% ms costoso con relacin
a un dispositivo de arquitectura Von Neumann.

MEM MEM
DATOS CPU
PROGRAMA

FIGURA 1.5
Arquitectura Harvard.

Para el caso de los microcontroladores Freescale, la arquitectura implementada es la Von Neumann.

Arquitectura del procesador o CPU


Segn la filosofa de la arquitectura del procesador, se puede clasificar en:
Microcontroladores CISC.
Microcontroladores RISC.
Microcontroladores SISC.
Un microcontrolador basado en la filosofa CISC (computadores de juego de instrucciones complejo)
dispone de ms de 80 instrucciones mquina en su repertorio, algunas de las cuales son muy sofisticadas y
potentes, requiriendo muchos ciclos para su ejecucin.
Una ventaja de los procesadores CISC es que ofrecen al programador instrucciones complejas que actan
como macros. Pero la desventaja es que debido al gran nmero de instrucciones no se considera en muchos
casos llamativa para el ingeniero diseador.
La siguiente arquitectura, conocida como arquitectura RISC (computadores de juego de instrucciones
reducido) se considera como la ms llamativa para el diseo de aplicaciones debido a su juego de instrucciones

ALFAOMEGA - FREESCALE
12 JUAN CARLOS VESGA FERREIRA

un poco ms moderado en cuanto a cantidad que los CISC. Tanto la industria de los computadores comerciales
como la de los microcontroladores estn enfocndose hacia esta filosofa. En estos procesadores el repertorio de
instrucciones es muy reducido y las instrucciones son simples y, generalmente, se ejecuta en un solo ciclo.
La sencillez y rapidez de las instrucciones permiten optimizar el hardware y el software del procesador.
En los microcontroladores destinados a aplicaciones muy concretas, el juego de instrucciones, adems de
ser reducido, es especfico, o sea, las instrucciones se adaptan a las necesidades de la aplicacin prevista. Esta
filosofa se ha bautizado con el nombre de SISC (computadores de juego de instrucciones especfico).

1.8 ARQUITECTURA CERRADA O ABIERTA


Entre los fabricantes de microcontroladores hay dos tendencias para resolver las demandas de los
usuarios.
Los microcontroladores de arquitectura abierta se caracterizan porque, adems de poseer una estructura
interna determinada, emplean sus lneas de E/S para sacar al exterior los buses de datos, direcciones y control,
con lo que se posibilita la ampliacin de la memoria y las E/S con circuitos integrados externos. Esta solucin
se asemeja a la que emplean los clsicos microprocesadores.
Los microcontroladores de arquitectura cerrada poseen una determinada CPU, cierta cantidad de memoria
de datos, cierto tipo y capacidad de memoria de instrucciones, un nmero de E/S y un conjunto de recursos
auxiliares muy concreto. El modelo no admite variaciones ni ampliaciones. La aplicacin a la que se destina
debe encontrar en su estructura todo lo que precisa, y en caso contrario, hay que desecharlo.
La lnea que separa unos de otros es muy delgada, pero el concepto de microcontrolador se acerca
posiblemente ms a la arquitectura cerrada.

1.9 TIPO DE MEMORIA DE PROGRAMA


En los microcontroladores la memoria de instrucciones y datos est integrada en el propio chip. Una parte debe
ser no voltil, de tipo ROM, que se destina a contener el programa de instrucciones que gobierna la aplicacin.
Otra parte de memoria debe ser voltil, de tipo RAM, y se destina a guardar las variables y los datos.
Existen principalmente cinco versiones de memoria no voltil que se pueden encontrar en los
microcontroladores del mercado:
Memoria ROM con mscara.
Memoria OTP.
Memoria EPROM.
Memoria EEPROM.
Memoria FLASH.
La memoria ROM con mscara es no voltil y de slo lectura, cuyo contenido se graba durante la fabricacin
del chip. El elevado costo del diseo de la mscara slo hace aconsejable el empleo de los microcontroladores
con este tipo de memoria cuando se precisan cantidades superiores a varios miles de unidades.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 13

La memoria OTP (One Time Programmable) es no voltil, de slo lectura y programable una sola vez por
el usuario. La grabacin se realiza mediante un sencillo grabador o quemador controlado por un programa
desde un PC.
La versin OTP es recomendable cuando es muy corto el ciclo de diseo del producto, o bien, en la
construccin de prototipos o serie muy pequeas.
Los microcontroladores que disponen de memoria EPROM (Erasable Programmable Read Only Memory)
pueden borrarse y grabarse muchas veces. La grabacin se realiza como en el caso de la memoria OTP. Si
posteriormente se desea borrar el contenido, disponen de una ventana de cristal en su superficie por la que
se somete a la EPROM a rayos ultravioleta durante varios minutos.

FIGURA 1.6
Aspecto fsico de una memoria EPROM.

La memoria EEPROM (Electrical EPROM) es de slo lectura, programable y borrable elctricamente.


Tanto la programacin como el borrado se realizan elctricamente desde el propio grabador y bajo el control
programado de un PC, y puede hacerse con el microcontrolador instalado en el circuito. Es muy cmoda y
rpida la operacin de grabado, as como la de borrado.

FIGURA 1.7
Aspecto fsico de una memoria EEPROM.

La memoria flash es no voltil, de bajo consumo y puede grabarse y borrarse elctricamente. Funciona
como una ROM y una RAM pero consume menos energa y es ms pequea. La memoria FLASH tambin
puede programarse en circuito y adems, es ms rpida, tiene mayor densidad y tolera ms ciclos de
escritura/borrado que la EEPROM.

ALFAOMEGA - FREESCALE
14 JUAN CARLOS VESGA FERREIRA

1.10 PRESTACIONES Y RECURSOS ESPECIALES

Adems de las clasificaciones anteriores se podran hacer otras dos, atendiendo a las necesidades y a los
recursos especiales que pueden tener los microcontroladores.
Respecto a las bondades ofrecidas cabe destacar:
Precio.
Velocidad de ejecucin de cdigo.
Eficiencia en la compresin de cdigo.
Inmunidad al ruido.

Indudablemente, el precio es uno de los factores decisivos a la hora de emplear uno u otro
microcontrolador.
La velocidad de ejecucin del cdigo depende principalmente de la frecuencia de funcionamiento
del microcontrolador, la cual es establecida a travs del oscilador externo, pero tambin influyen otras
caractersticas como la arquitectura o el tipo de memoria empleada.
En lo que se refiere al nmero de palabras o bytes en la memoria que emplea cada microcontrolador en
contener un programa, sta depende sobre todo de la arquitectura bsica y de la longitud de la palabra de
datos.
La inmunidad al ruido, as como otras caractersticas especiales como rangos amplios de temperaturas de
funcionamiento, destacan sobre todo en microcontroladores destinados al uso militar.
Los recursos especiales ms comunes que pueden poseer los microcontroladores son los siguientes:
Temporizador y/o contador.
Perro guardin o COP.
Proteccin ante el fallo de la alimentacin.
Estado de reposo o de bajo consumo.
Conversor analgico-digital (CAD).
Conversor digital-analgico (CDA).
Comparador analgico.
Modulador de anchura de impulsos o PWM.
Puertas de entrada y salidas digitales.
Puertas de comunicacin (USART, USB, SCI, etc.)
Los temporizadores se emplean para controlar perodos de tiempo, actuando como temporizador o para
llevar la cuenta de acontecimientos que suceden en el exterior, actuando como contador.
El perro guardin consiste en un temporizador que cuando se desborda provoca automticamente un
reset en el microcontrolador, para as evitar que el sistema se quede bloqueado. Los detalles para el uso
adecuado de este poderoso recurso se expondrn posteriormente en el transcurso del libro.
La proteccin ante el fallo de la alimentacin consiste en un circuito que provoca un reset al microcontrolador
cuando el voltaje de alimentacin sea inferior a un voltaje mnimo. Mientras el voltaje de alimentacin sea

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 15

inferior al mnimo, el dispositivo se mantiene reseteado, comenzando a funcionar normalmente cuando


sobrepasa dicho valor.
Son abundantes las situaciones reales en las que el microcontrolador debe esperar, sin hacer nada, a que
se produzca algn acontecimiento externo que lo obligue a entrar de nuevo en funcionamiento. Para ahorrar
energa, factor clave en los equipos porttiles, los microcontroladores disponen de una instruccin especial
que les permite el paso al estado de reposo o de bajo consumo de energa, en el cual el consumo de potencia
es mnimo.
Los microcontroladores que poseen conversores anlogos digitales pueden ser utilizados para aplicaciones
que requieran esta bondad, como, por ejemplo, en aplicaciones de instrumentacin industrial, biomdica,
comunicaciones, entre otras. Adicional a esto, no solamente permiten el muestreo de una seal sino de varias
seales a la vez, ya que internamente poseen un multiplexor anlogo que constantemente est conmutando
las seales que provienen del exterior envindolas al conversor para su posterior muestreo y anlisis.
Algunos modelos de microcontrolador disponen internamente de un amplificador operacional que acta
como comparador analgico entre una seal de referencia fija y otra variable que es aplicada por uno de los
terminales de entrada del microcontrolador. La salida de comparador proporciona un nivel lgico 1 o 0 segn
una seal sea mayor o menor que la otra.
Otros microcontroladores poseen internamente un mdulo PWM (modulacin por ancho de pulso), utilizado
comnmente en aplicaciones de control de motores y comunicaciones digitales. Este mdulo proporciona en
la salida impulsos de ancho variable, programados por software segn las condiciones deseadas.
Todos los microcontroladores dedican algunos de sus terminales a lneas de entrada y salida digitales.
Por lo general, estas lneas se agrupan de ocho en ocho, formando as lo que se conoce como puertos.
Con el objeto de dotar al microcontrolador de la capacidad de comunicarse con otros dispositivos externos,
otros buses de microcontrolador o microprocesadores, buses de sistemas o buses de redes y poder adaptarlos
con otros elementos y con otras normas y protocolos, algunos microcontroladores disponen de puertos de
comunicacin. Destacan las conexiones serie UART y USART, puertos paralelos, puertos IC o el moderno
bus serie USB desarrollado para los PC.

1.11 MICROCONTROLADORES DE USO COMN

Los microcontroladores ms comunes en uso son:

Atmel: AVR
Hitachi: H8
Holtek: HT8
Intel: 8 bits (8XC42, MCS51, 8xC251), 16 bits (MCS96, MXS296)
National Semiconductor: COP8

Microchip

ALFAOMEGA - FREESCALE
16 JUAN CARLOS VESGA FERREIRA

Gama baja (familia 12Cxx de 12 bits) (p. ej., PIC12C508)


Gama media (familia 12Fxx, 16Cxx y 16Fxx de 14 bits) (p. ej., PIC16F84)
Gama alta (18Cxx y 18Fxx de 16 bits) (p. ej., PIC18F452)
dsPIC (DSPs)

NEC: 78K, ST, ST 62, ST 7


Texas Instruments: TMS370
Zilog: Z8, Z86E02

Genrico
Algunas arquitecturas de microcontrolador estn disponibles por tal cantidad de vendedores y en
tantas variedades, que podran tener, con total correccin, su propia categora. Entre ellos encontramos,
principalmente, las variantes de 8051 y Z80.

FREESCALE: Freescale cuenta con una gran diversidad de microcontroladores para todos los gustos y
requerimientos que presente un usuario en un determinado momento, los cuales se pueden clasificar de la
siguiente forma:

Microcontroladores de 8 bits
Dentro de las familias fundamentales se pueden mencionar:

Familias HC08: HC08AB, HC08AP, HC08AS/AZ, HC08BD, HC08EY, HC08G, HC08JK/JL, HC08MR,
HC08Q, HC08RF, HC08SR.
Dentro de las familias con mejoras significativas sobre las anteriores, incluyendo mdulos como I2C, SPI,
entre otros, se pueden mencionar:

Familias HCS08: HCS08AW, HCS08G/Q/R


Familias RS08: MC9RS08KA1/2
Existen otras familias importantes, como es el caso de las familias HC05 y HC11, las cuales actualmente
se encuentran descontinuadas.

Microcontroladores de 16 bits
Este grupo presenta diferencias significativas con las familias anteriores, no slo por los recursos adicionales
que ofrecen sino tambin por su alta capacidad de procesamiento. Dentro de las familias fundamentales se
pueden mencionar:

Familias S12: S12XA/XD, S12A, S12C, S12D, S12E, S12H, S12G y una que permite a los usuarios establecer
comunicaciones de alta envergadura, como el caso de la familia S12 ETHERNET Y USB.

Familias HC12: HC912BXX, HC912DXX

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 17

Familias HC16: 68HC16R1, 68HC16Y1/Y3, 68HC16Z1/Z3


Y la familia 568XX/E, que brinda al usuario la posibilidad de integrar todo el potencial de los microcontroladores
y la capacidad de procesamiento de seales que brinda un DSP en un solo chip, denominados DSCs.

Microcontroladores de 32 bits
Este grupo presenta caractersticas avanzadas tanto en velocidad de procesamiento como en funciones
especiales que realiza. Dentro de las familias ms importantes se pueden mencionar:

Familias 68K/ColdFire: ColdFire MCF52XX, 68K M683XX, 68K M680X0.

1.12 CMO ELEGIR EL MICROCONTROLADOR ADECUADO?


El primer problema al que se enfrenta un ingeniero a la hora de materializar una idea usando un
microcontrolador es la eleccin de una familia de microcontroladores y dentro de sta, un modelo en concreto
que se ajuste lo mejor posible a las necesidades del diseo.
Todos los microcontroladores que se fabrican hoy en da son buenos, y el mejor no siempre es el mismo.
Cambian el modelo y el fabricante segn la aplicacin y las circunstancias que lo envuelven.
En el mercado existen multitud de fabricantes. La eleccin de un MICROCONTROLADOR FREESCALE
frente a otros ms conocidos como el 80XX de Intel, el PIC de Microchip, el ST-62XX de SGS-Thomson o
el Z86XX de Zilog, se debe a caractersticas como su bajo precio, velocidad, reducido consumo de energa,
tamao, facilidad de uso, fcil programacin y, lo mejor de todo, los recursos que la gran mayora de estos
microcontroladores presentan a la hora de disear cualquier aplicacin. Por ello los microcontroladores
Freescale se encuentran hoy en da en la gran mayora de aplicaciones industriales, de comunicaciones y control.
Si se desea investigar al respecto, por ejemplo, en el caso de la industria automotriz, la cual en la actualidad
es una de las que requieren mayor precisin en el desarrollo de procesos de control, instrumentacin, entre
otras, se encuentra que casi 90% de sus componentes son gobernados por microcontroladores Freescale,
debido a sus bondades, estabilidad, inmunidad al ruido y otros factores importantes que hacen decisiva su
eleccin frente a otras marcas.

1.13 CARACTERSTICAS DE OTROS MICROCONTROLADORES

Altair
Altair es el nombre genrico de una familia de microcontroladores de propsito general compatibles
con la familia 51. Todos ellos son programables directamente desde un equipo PC mediante lenguaje
macroensamblador, o bien mediante otros lenguajes disponibles para la familia 51 (Basic, C, etc.)
Los microcontroladores Altair disponen de un microprocesador de 8 bits 100% compatible a nivel de cdigo,
256 bytes de memoria interna, 128 registros especiales de funcin, puertos de entrada/salida de propsito
general, 111 instrucciones y posibilidad de direccionar 128 kbytes.

ALFAOMEGA - FREESCALE
18 JUAN CARLOS VESGA FERREIRA

Existen distintos modelos, dependiendo de la velocidad de ejecucin, del nmero de E/S o de los perifricos
de los que dispongan (DAC, ADC, Watchdog, PWM, etc.) La eleccin de un modelo u otro depender de las
necesidades del caso.
Como entrenador o sistema de iniciacin existen varios modelos, entre los que destacan el Altair 32 bsico
o bien el Altair 535A completo. Para proyectos avanzados o desarrollos profesionales, el Altair 537 A.

Intel
El 8051 es el primer microcontrolador de la familia introducido por Intel Corporation. La familia 8051 de
microcontroladores son controladores de 8 bits capaces de direccionar hasta 64 kbytes de memoria de programa
y una memoria de datos de 64 kbytes.
El 8031 (la versin sin ROM interna del 8051, siendo esta la nica diferencia) tiene 128 bytes de RAM interna
(el 8032 tiene RAM interna de 256 bytes y un temporizador adicional). El 8031 tiene dos temporizadores/
contadores, un puerto serie, cuatro puertos de entrada/salida paralelas de propsito general (P0, P1, P2 y
P3) y una lgica de control de interrupcin con cinco fuentes de interrupciones. Al lado de la RAM interna,
el 8031 tiene varios registros de funciones especiales (SFR) que son para el control y registros de datos. Los
SFR tambin incluyen el registro Acumulador, el registro B, y el registro o palabra de estado de programa
(PSW), que contiene los flags de la CPU.
La ROM interna del 8051 y la del 8052 no pueden ser programadas por el usuario. El usuario debe
suministrar el programa al fabricante, y el fabricante programa los microcontroladores durante la produccin.
Debido a los costos, la opcin de la ROM programada por el fabricante no es econmica para produccin de
pequeas cantidades.
El 8751 y el 8752 son las versiones EPROM del 8051 y el 8052. Estos pueden ser programados por los
usuarios.

Siemens
El Siemens SAB80C515 es un miembro mejorado de la familia 8051 de microcontroladores. El 80C515 es de
tecnologa CMOS que tpicamente reduce los requerimientos de energa. Las caractersticas que tiene frente
al 8051 son ms puertos, un verstil conversor analgico-digital, un segundo temporizador optimizado, un
Watchdog, y modos de ahorro de energa sofisticados.
El 80C515 es completamente compatible con el 8051. Esto es, usa el mismo conjunto de instrucciones del
lenguaje ensamblador MCS-51. Las nuevas facilidades del chip son controladas y monitoreadas a travs de
SFR adicionales.

Los microcontroladores Freescale


Como se haba mencionado antes, esta familia de microcontroladores es una de las ms difundidas y utilizadas a
nivel mundial, brindando un sinfn de posibilidades que harn que cualquier diseador no piense otra cosa que
no sea utilizar un microcontrolador Freescale en sus desarrollos. Sus aplicaciones incluyen las comunicaciones,
el control, la electrnica automotriz, etc. Los microcontroladores Freescale tienen la reputacin de ser muy
confiables, fciles de programar y, ante todo, de ser unos de los ms utilizados a nivel mundial. Aunque la gran
mayora de las instituciones universitarias y profesionales en general trabajan con microcontroladores PIC de
la empresa Microchip, al conocer las bondades en cuanto a menor costo, mayor diversidad de instrucciones
para la ejecucin de operaciones matemticas como multiplicaciones y divisiones, manejo de interrupciones

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 19

vectorizadas mas no jerarquizadas y otra gran cantidad de recursos, sin dudarlo han comenzado su relacin
con la familia de microcontroladores Freescale. Y no es de extraar, ya que esta firma es lder en productos
de alta tecnologa. La cantidad de familias y referencias que poseen estos dispositivos permiten que los
diseadores puedan escoger el ms apropiado para cada tarea especfica que se deba realizar.
Anteriormente se mencionaron las principales familias que hacen parte de esta gran diversidad de
microcontroladores; cada una de ellas tiene muchas referencias distintas, las cuales pueden variar por el
tamao de la memoria que poseen, el nmero de pines, aplicaciones, caractersticas especiales como conversor
A/D, timer, interrupciones, entre otras.
Debido a las bondades ofrecidas por los microcontroladores Freescale, adems del hecho de no existir
un libro que gue paso a paso en el conocimiento, adiestramiento y profundizacin de los mismos, se puede
decir que han sido las dos razones fundamentales para la creacin del presente texto. El libro no solamente
da al lector una introduccin al mundo de los microcontroladores, sino que lo lleva de la mano desde las
aplicaciones ms sencillas, como es el caso del encendido y apagado de un led, hasta aplicaciones complejas
como comunicaciones con el PC y control de procesos industriales e instrumentacin centrados en el uso de
los microcontroladores Freescale.
A continuacin se da una visin general de las caractersticas presentes en algunas de las familias ms
importantes pertenecientes a este tipo de microcontroladores

Familia de microcontroladores HC05


Esta familia es una de las ms utilizadas en la gran mayora de aplicaciones por su versatilidad de recursos y
fcil programacin. Sin embargo, presenta una propiedad de mayor importancia y es su compatibilidad con
familias ms avanzadas; por ejemplo, con la familia HC08, lo que permite hacer migracin de diseos hacia
dispositivos de ms alto rendimiento de una manera muy fcil y rpida.

Familia 68HC05-B. Es un dispositivo de propsito general cuyas principales ventajas son un poderoso
timer y memoria para datos tipo EEPROM de 256 posiciones. Otras caractersticas incluyen memoria de
programa desde 4k hasta 32k, memoria RAM desde 176 hasta 528 bytes, 8 canales A/D, comunicacin serial
sncrona y asncrona, y otros recursos de gran inters.

Familias 68HC05-C y 68HC05-D. Son elementos de propsito general cuya principal ventaja es su timer
de 16 bits, el cual est acompaado por un mdulo de captura y un mdulo de comparacin. Adems, ofrece
tamaos de memoria de programa desde 4k hasta 16k, acreditndolo para realizar tareas bastante complejas.
Posee interface de comunicaciones asncronas SCI (Serial Communications Interface), con velocidad ajustable
por software desde 75 Hz hasta 131 kHz; tambin incluye una interface SPI (Serial Peripheral Interface)
de 4 hilos y alta velocidad. El watchdog timer o circuito de vigilancia tambin es una de las caractersticas
importantes.

Familias 68HC05-J y 68HC115-K. Estas son las familias de ms bajo costo, vienen en encapsulados
de 20 y 16 pines. El tamao de su memoria de programa va desde 0,5k hasta 2k, con memoria RAM de 32
hasta 128 bytes.

Familia 68HC05-P. Es una familia de microcontroladores de propsito general de 28 pines, posee memoria
de programa desde 2k hasta 8k con memoria RAM desde 96 hasta 192 bytes. Tiene comunicacin serial

ALFAOMEGA - FREESCALE
20 JUAN CARLOS VESGA FERREIRA

sncrona, timer de 16 bits con mdulo de captura y de comparacin, conversor A/D de 8 bits con 4 canales
de entrada y capacidad de manejar alta corriente en algunos pines.

Familia 68HC05-L. La principal caracterstica es que posee un controlador para manejar una pantalla de
cristal lquido o LCD, con un tamao que va desde 8 caracteres por 4 filas hasta de 16 caracteres por 60 filas.
La memoria de programa va desde 0,6k hasta 24k con memoria RAM de 32 hasta 768 bytes. Incluye timer de
16 bits con mdulos de captura y comparacin, comunicacin serial sncrona y asncrona.

Familia de microcontroladores HC11


Esta es una familia de microcontroladores de 8 bits de muy alto rendimiento, su arquitectura es compatible con
la HC05 y su programacin es compatible con la familia de microcontroladores de 16 bits 68HC 12; esto hace
que la migracin de diseos de una familia a otra sea bastante rpida. Entre las caractersticas sobresalientes
de esta familia se encuentran:
Ha sido optimizado para bajo consumo de potencia
Posee un sistema de interrupciones muy avanzado
Muchos de sus miembros poseen memoria EEPROM
Los ltimos miembros de esta familia incluyen un coprocesador matemtico con Unidad Aritmtica
Lgica (ALU) de 16 bits para rpidas operaciones de multiplicacin y divisin
Registro acumulador de 16 bits o 2 de 8 bits
Seis modos de direccionamiento

Familia de microcontroladores HC12


Este es un poderoso microcontrolador de 16 bits, segn Freescale rene lo mejor del 68HC 11 y mucho ms.
Entre sus principales caractersticas se encuentran:
Bajo consumo de potencia y operacin a bajo voltaje
Memorias flash y EEPROM en un solo chip
Instrucciones de Fuzzy logic
Bus de datos de 16 bits
64 nuevas instrucciones adicionales a las ya conocidas del 68HC11
Unidad Aritmtica Lgica (ALU) de 20 bits
Conversor A/D
PWM
En el transcurso de este libro se trabajar con base en la familia 68HC08, la cual es la ms comercial y
presenta una gran mayora de recursos como conversores A/D, timers, PWM, comunicaciones seriales, manejo
de interrupciones sectorizadas, entre otros recursos adicionales.

ltimos microcontroladores desarrollados por Freescale


Hace muy poco tiempo se realiz el lanzamiento de una nueva familia de microcontroladores, denominada
familia de ultra bajo costo RS08, en donde sus primeros ejemplares son los dispositivos con referencias

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 21

MC9RS08KA2 y MC9RS08KA1. Esta nueva familia se encuentra basada en el core de instrucciones reducidas
RS08, prometiendo convertirse en una de las familias ms importantes de microcontroladores de 8 y 16 pines,
en donde sus principales ventajas sobre sus homlogos son su muy reducido costo y facilidad de integracin
en aplicaciones de volmenes elevados.
El Core RS08 es una versin reducida del conocido y potente Core S08 de muy bajo consumo y altas
prestaciones, radicando su principal diferencia en la densidad de cdigo de las distintas instrucciones y modos
de direccionamiento, aunque conserva an muchas caractersticas potentes y verstiles de los perifricos que se
utilizan en la familia HC9S08; un ejemplo claro consiste en el mdulo BDM que permite emulacin en tiempo
real a un solo hilo con herramientas de bajo costo, oscilador interno de gran estabilidad que permite lograr
frecuencias de bus de hasta 10 Mhz, mdulo KBI para manejo de teclado por interrupciones y los modos de
bajo consumo tpicos de la familia HC9S08.
Estos nuevos modelos de microcontroladores (MC9RS08KA2 y MC9RS08KA1) disponen de 2 kbytes y 1
kbyte de memoria flash de tercera generacin, respectivamente, para alojar cdigo de programa o datos, 63
bytes de memoria RAM, y lo que ms llama la atencin de estos dispositivos es la propiedad de trabajar en el
rango de tensiones desde 5,5 V con solamente 1,8 V de alimentacin, lo que los hace ideales para aplicaciones
porttiles basadas en bateras gracias al bajo consumo de energa que presentan.
Los dispositivos MC9RS08KA2 y MC9RS08KA1 se encuentran disponibles en el mercado en encapsulados
de 8 PDIP, 8 pines SOIC y la versin ultrapequea de 6 pines DFN (3 mm x 3 mm), complementndose con el
hecho de que Freescale dispone de un amplio portafolio de herramientas de hardware y software que soportan
esta nueva familia y que estn disponibles por medio de sus distribuidores autorizados.
Entre las novedades presentes actualmente en la familia HC908 FLASH se encuentran una gran diversidad
de dispositivos con capacidad de memoria FLASH de hasta 16K, entre las cuales se pueden mencionar:

MC68HC908QTxA/QYxA: Familia de 8 y 16 pines, versin muy mejorada de la popular QT/QY.


MC68HC908QLxx: Familia de 20 y 16 pines, de hasta 16 K de memoria flash, con puerto serial apto
para redes LIN (CAN limitada), A/D de 10 bits, SPI, 2 comparadores analgicos, oscilador interno,
entre sus principales caractersticas.
MC68HC908QC16xx: Familia de hasta 28 pines y con capacidades de memoria FLASH de hasta 16 K,
puertos seriales, SPI apto para redes LIN, A/D de 10 bits, 2 timers de 16 bits, oscilador interno de
mltiples frecuencias, entre sus principales caractersticas.
MC68HC908GRxxA: Es la familia que presenta la mayor cantidad de pines (64) y mayor cantidad de
memoria flash (60 K), con A/D de 10 bits, puerto serial apto para redes LIN, hasta 53 puertos I/O, 2
timers de 16 bits, SPI.
MC68HC908QB8: Dispositivo de 16 pines con 8 K de memoria flash, con puerto serial apto para redes
LIN, A/D de 10 bits, oscilador interno de alta estabilidad.
MC68HC908JL16: perteneciente a la familia JL, esta versin de 16 K, compatible con las versiones
menores (JL3 y JL8), posee puerto serial, A/D de 10 bits, 2 timers de 16 bits, KBI, entre sus principales
caractersticas.
Sin embargo, tambin se han presentado novedades en la familia HC9S08 de bajo consumo, entre las
cuales se pueden mencionar:
MC9S08QG8/4: Familia de pocos pines (16/8) que posee un puerto SCI, SPI, I2C, A/D de 10 bits,
timer de 16 bits, timer de 8 bits MTIM especial para realizar tareas peridicas, comparador analgico,

ALFAOMEGA - FREESCALE
22 JUAN CARLOS VESGA FERREIRA

oscilador interno de alta estabilidad y de hasta 10 Mhz de bus programable, lo cual permite desarrollar
aplicaciones en muchos casos avanzadas gracias a la gran variedad de mdulos y recursos que esta
familia de microcontroladores en particular presenta.
MC9S08AWxx: Familia de hasta 60K de memoria FLASH especialmente diseada para el mbito
automotriz, se pueden encontrar hasta de 64 pines, soportan alimentacin extendida desde 1,8 V
hasta 5 V, poseen adicionalmente 2 timers de 16 bits, 2 puertos SCI, SPI, I2C, A/D de 10 bits y muchas
herramientas ms.
Por otro lado, la familia de 16 bits HC9S12 mostr su amplio portafolio de dispositivos en donde se
destacan las soluciones con mdulos para conectividad Ethernet / TCP/IP (MC9S12NE64) y otras aplicaciones
industriales.

Microcontroladores COLDFIRE de Freescale


Con la base de aos de experiencia en control industrial y comunicaciones, Freescale ha desarrollado el
primer microcontrolador de 32-bit con Ethernet, CAN y memoria flash incorporada. El nuevo dispositivo,
el Coldfire MCF5282, ofrece a los diseadores una opcin poderosa, nueva y de bajo costo que incluye
avanzadas caractersticas de comunicaciones, un amplio set de perifricos y una gran variedad de software
y herramientas de desarrollo para sistemas de redes embedded.
Estos dispositivos contienen drivers para manejo de redes Ethernet, protocolos Internet como IP, UDP,
TCP, ICMP, ARP y DHCP, http para pequeos servidores web, servidores FTP triviales para actualizaciones
del firmware a distancia y clientes para protocolos al nivel de la aplicacin para SMTP y SNTP, entre otros
recursos adicionales, que hacen de estos diminutos dispositivos unos gigantes en el campo tecnolgico del
desarrollo de aplicaciones y, lo mejor de todo, al alcance de cualquier persona.
Los microcontroladores ColdFire son los nuevos dispositivos de 32 bits que complementan la gran familia
de microcontroladores fabricados por Freescale; entre las principales caractersticas de la familia de productos
68 k/coldfire se encuentra su controlador de tipo Fast Ethernet/capa fsica y USB On-The-Go, permitiendo
a los programadores de microcontroladores la posibilidad de crear aplicaciones basadas en comunicaciones
y redes de computadores, transmisin remota de datos, sistemas de seguridad avanzados, domtica y un
sinfn de posibilidades que slo la imaginacin podr limitar.
Pueden soportar gran variedad de aplicaciones de redes, incluyendo servidores web, servidores UDP/
TCP, gateways/routers, sistemas de seguridad, e interface web para dispositivos X-10; pueden utilizarse
como interfaces para tradicionales aplicaciones LAN con microcontroladores, como mquinas de vending y
control de equipos de fabricacin.
El MCF5282 es el primer microcontrolador basado en el ncleo Coldfire de 32-bit de Freescale, el cual
presenta caractersticas avanzadas en comunicaciones, un gran set de perifricos y amplio soporte software
y de herramientas de desarrollo.
Entre sus principales caractersticas internas se pueden mencionar:
Memoria FLASH incorporada de 512 KB
MAC Ethernet 10/100
Incluye soporte para protocolos comunes de redes e Internet como UDB, IP, TCP, ARP, DHCP e
ICMP
Interfaces analgicos-digitales (QADC)

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 23

Timers de 16 y 32 bits
Interface I2C
3 UARTS para comunicacin serie local
Una herramienta grfica de inicializacin para reducir el ciclo de diseo
Metrowerks Codewarrior y herramientas de terceras partes
Otra de las propiedades que se encuentra entre otros modelos de microcontroladores ColdFire est el bus
de serie universal (USB, por sus siglas en ingls), On-The-Go, el cual es una extensin del USB tradicional
que permite al puerto actuar como servidor o como dispositivo; si se encuentra configurado como servidor
har que otros dispositivos de comunicaciones dependan de l; de lo contrario, si se encuentra configurado
como dispositivo, ste depender de otro que se encuentre configurado como servidor.
Otra de las referencias clave de esta poderosa familia de microcontroladores es el dispositivo MCF5223x,
considerado como uno de los primeros microcontroladores que ofrece en un solo integrado 32 bits, controlador
de Fast Ethernet, capa fsica de Ethernet y memoria flash, complementndose con el hecho de ser el ms
pequeo que existe en la industria para redes basadas en Ethernet. Entre las aplicaciones que ofrece en este
mismo chip est su aceleracin criptogrfica, brindando posibilidades de integrar aplicaciones de seguridad,
un coprocesador programable Coldfire que ayuda a acelerar las funciones fsicas y, por tanto, tambin
el desempeo de algoritmos criptogrficos, permitiendo que la informacin sea ocultada y protegida, lo
cual brinda un mayor soporte y herramientas a la hora de desarrollar aplicaciones basadas en redes de
computadores.
El microcontrolador MCF5222x es otro dispositivo pionero de la misma familia, el cual posee la caracterstica
de un mdulo USB On-The-Go integrado y memoria flash, permitiendo que dos dispositivos USB tengan
comunicacin sin necesidad de un host (una interface en modo de anfitrin) o en otras palabras, un PC.
La familia Coldfire se beneficia de una amplia gama de herramientas de desarrollo. Freescale, Quadros y
Metrowerks se han unido para soportar soluciones de control para redes embedded basadas en el Coldfire
MCF5282, RTXC Quadros y Codewarrior para Coldfire.

RESUMEN
Se podra decir que estas familias de dispositivos abren la puerta hacia
el uso de procesadores de desempeo de 32-bits de alto rendimiento,
brindando un gran portafolio de recursos a la hora de que los diseadores
de aplicaciones basadas en microcontrolador puedan desarrollar sistemas
integrados que manejen secciones basadas en control, conectividad y
estabilidad capaces de brindar niveles de seguridad a muy bajo costo.

1.14 PRINCIPIOS BSICOS DE OPERACIN INTERNA


El microcontrolador ejecuta las instrucciones que se encuentran almacenadas en la memoria de programa. Este
proceso se genera de manera sncrona con base en un reloj un oscilador (OSC), que paso a paso va siguiendo

ALFAOMEGA - FREESCALE
24 JUAN CARLOS VESGA FERREIRA

una mquina de estados finita encargada de buscar la instruccin en memoria, interpretarla y ejecutar las
tareas asociadas a la instruccin en particular.
De esta forma, el OSC se convierte en la referencia de tiempo de ejecucin del microcontrolador. Si el
OSC tiene una mayor frecuencia, entonces ejecutar instrucciones a mayor velocidad, teniendo como lmite
la mxima velocidad de operacin del microcontrolador
Al ser una mquina de estados finita, es necesario que parta de un estado conocido. Lo anterior se logra
con el proceso de inicializacin de encendido (Power On Reset). En el proceso de inicializacin, el contador
de programa (PC) se carga con un valor inicial. Este PC se encargar de estar apuntando a la siguiente
instruccin a ejecutar.
Con base en la mquina de estados, el PC se convertir en la direccin de memoria de programa que contiene
la siguiente instruccin a ejecutar; la unidad de control se encargar de leer la instruccin y de actualizar el
PC para que apunte a la siguiente instruccin.
Se presentan otras circunstancias en las que es necesario que el PC vuelva a la posicin inicial, por lo
que se ofrece la opcin de que una seal de entrada externa al microcontrolador, la seal de RESET, pueda
utilizarse con dicho comportamiento.

Unidad Central de Procesamiento (CPU)


La unidad central de procesamiento es el mdulo inteligente del microcontrolador. La CPU sigue la secuencia
de instrucciones, o programa, que se encuentra almacenada en la memoria de cdigo (Flash).
El diseador del programa define la secuencia de instrucciones que resolver la aplicacin. Este programa
se interpreta en cdigo mquina (binario) aunque el diseador lo escribe en un lenguaje un poco ms cercano
al ser humano, conocido como lenguaje ensamblador. Este lenguaje ensamblador es un punto intermedio
entre el lenguaje mquina y lenguajes de mayor nivel, como, por ejemplo, lenguaje C.
En tiempos modernos la programacin se hace principalmente en lenguaje C. Se dice que es un lenguaje
de mayor nivel por estar ms cercano al lenguaje humano y ms alejado del lenguaje mquina. Implica un
mayor nivel de abstraccin y mayor simplicidad en la programacin.
La unidad central de procesamiento (CPU) est conformada por la unidad de control, los registros del
procesador y la unidad de control.
La unidad aritmtico lgica (ALU) es la encargada de realizar las operaciones, es el mdulo que ejecuta los
clculos que colaboran, paso a paso, en la ejecucin de las operaciones que el diseador define para resolver
la aplicacin.
La ALU se auxilia de registros internos, que son localidades de memoria de alta velocidad, construidos con
Flip Flops. Algunos de estos registros se usan en lenguaje ensamblador para poder ejecutar las operaciones.
En lenguaje C, el diseador no opera con estos registros, le son transparentes.
La secuencia de acciones necesarias desde la interpretacin hasta la ejecucin de las instrucciones es
controlada por la unidad de control. Esta unidad se construye con base en decodificadores y mquinas de
estado finitas (FSM) que llevan paso a paso el control de todos los mdulos. La unidad de control gobierna
la operacin de todos los mdulos, indicando cundo debe ejecutar y qu tipo de accin debe realizar.
La unidad de control inicia su operacin como respuesta a la seal de inicializacin (RESET); a partir de
ese momento, seguir la secuencia de acciones dependiendo de cada instruccin y cumpliendo la secuencia
almacenada en la memoria de programa. La mquina de estado se sincroniza con base en una seal de reloj
(CLK) que puede estar definida por una seal externa o una seal interna.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 25

Memoria interna
El microcontrolador sigue la estrategia del programa almacenado en memoria; por lo anterior, requiere
memoria de programa, memoria de datos y registros internos, explicados anteriormente.

Memoria de programa
Es la encargada de mantener la secuencia de instrucciones a ejecutar; normalmente es memoria no voltil,
es decir, que aunque se retire la energa, puede mantener las instrucciones durante aos. Dicha memoria se
borra, programa o configura con descargas elctricas, por lo que puede ser programada sin necesidad de
removerse de la tarjeta de circuito impreso; lo anterior se denomina In Circuit Programming.
El ambiente de desarrollo integral (IDE) en el computador o la computadora permitir, entre otras cosas,
poder grabar la memoria de programa en el dispositivo electrnico.

Memoria de datos
La memoria de datos, conocida como RAM, es la unidad de almacenamiento temporal; es voltil, por lo que
al retirar la energa se perdern los datos. Cmo respuesta a un Reset, las celdas de memoria quedarn con
valores desconocidos, por lo que no se puede presuponer ningn valor.

Puertos de entrada/salida
Los puertos de entrada/salida son los medios con los cuales el microcontrolador tiene la capacidad de realizar
interfaces con el entorno. Va los puertos de entrada se pueden conectar desde dispositivos muy simple como
switches y teclados.

Bsicos (GPIO)
Estndar (Special Funct)

1.15 SISTEMAS DE DESARROLLO

Existen gran cantidad de modelos, los cuales se ajustan a las necesidades y presupuestos disponibles. Estos
equipos ofrecen muchas ventajas a pesar de su bajo costo; por ejemplo, una de las ventajas que presentan los
programadores de microcontroladores Freescale sobre programadores de otros fabricantes es que incluyen la
capacidad de emulacin en el circuito de aplicacin, y aunque esta tarea no se ejecuta en tiempo real, s es de
gran ayuda para agilizar el trabajo y disminuir el tiempo de desarrollo de los programas. Otras caractersticas
son:
Ambiente de desarrollo totalmente integrado bajo Windows
Se puede examinar y modificar la memoria, registros y pines de entrada/ salida
Acepta hasta hasta 64 breakpoints (puntos de parada)
Diferentes modos de ejecucin en pasos o de corrido
Programa microcontroladores OTP y EPROM
Conexin serial con el computador

ALFAOMEGA - FREESCALE
26 JUAN CARLOS VESGA FERREIRA

FIGURA 1.8
Sistema de desarrollo creado por Freescale para la
familia HC08.

As como existe un gran nmero de referencias de microcontroladores, existe tambin un buen nmero
de sistemas de desarrollo, tarjetas de evaluacin y programadores disponibles para que el diseador escoja el
que ms le convenga. Se pueden encontrar en el mercado programadores universales de microcontroladores
Freescale a costos relativamente bajos como programadores exclusivos para ciertas referencias, por ejemplo
programadores para solamente GP32, JK1/JK3, HC11, S08, etc. Para obtener mayor informacin al respecto
se puede visitar la pgina de internet http://www.freescale.com o la pgina http://www.pemicro.com/, en la cual
se puede encontrar toda la informacin necesaria relacionada con la gama de programadores y herramientas
de desarrollo para las diferentes familias de microcontroladores Freescale. Al final del libro se adjunta un
circuito de un programador para el microcontrolador JK1/JK3. (Ver pgina web www.alfaomega.com.co).
Existen tambin en internet planos de programadores muy sencillos para cada familia. Una de las ventajas
de estos programadores es que todos funcionan como primera medida con el mismo software (WINIDE),
aunque debido a los avances y tendencias actuales de los nuevos desarrollos realizados por Freescale,
recomiendan trabajar con la herramienta software denominada Codewarrior, la cual no solamente supera las
caractersticas que presenta la herramienta de desarrollo WINIDE sino que adems permite compilar tanto
en lenguaje ensamblador como en C; adicionalmente brinda recursos poderosos de simulacin, emulacin,
libreras incorporadas ya listas para comenzar a interactuar con dispositivos presentes en aplicaciones como
pantallas de cristal lquido, memorias, entre otros dispositivos.
El diseo basado en un microcontrolador requiere herramientas que permitan simplificar varios procesos:
la generacin del programa, el mecanismo para grabar la memoria de programa en el dispositivo electrnico
y la capacidad de poder verificar el proceso correcto del par hardwaresoftware. Todo lo anterior lo ofrece
Freescale en su ambiente de desarrollo integrado (IDE) llamado CodeWarrior.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 27

Para generar el cdigo que ejecutar el microcontrolador, el Code Warrior (CW) tiene un editor de texto
que puede recibir cdigo en lenguaje ensamblador, en lenguaje C o en una mezcla de ambos.
Freescale ofrece muchas libreras o secciones de software que lo mismo sirven para inicializar los perifricos
integrados o el CPU, como para implementar ciertos algoritmos y hasta aplicaciones completas.
La familia HCS08 de Freescale tiene la capacidad de grabar la memoria de programa usando una
interfaz especial llamada BDM (Background Debug Mode). Normalmente la interfaz BDM se conecta a una
computadora personal usando un mdulo USB. El mdulo USB puede venir como parte de la tarjeta de
desarrollo (Demo board) o en un mdulo independiente.
CW tiene los elementos de software necesarios para poder cargar el programa en la memoria de cdigo usando
la interfaz USB. De esta manera, es muy fcil realizar la etapa de programacin del microcontrolador.

Tarjetas de evaluacin o tarjetas demo


Freescale ofrece diferentes tarjetas de circuito impreso para poder acelerar el desarrollo de aplicaciones,
eliminando la necesidad de hacer tarjetas de circuito impreso para iniciar el proceso. El diseador puede
desarrollar su cdigo, grabarlo en el microcontrolador y probarlo. Las tarjetas de evaluacin o las tarjetas demo
tienen interfaces comunes al tipo de aplicaciones para las cuales se utiliza el microcontrolador. Durante el
desarrollo de esta obra se usar la tarjeta demo del microcontrolador S08QG8. La familia S08 se programa con
la interfaz BDM y el componente llamado QG8 tiene 8 KB de memoria de programa y un conjunto interesante
de perifricos y funcionalidades integradas.
El diseador puede iniciar la ejecucin de su cdigo desde la ventana de depuracin presionando la tecla
RUN o puede simplemente desconectar el mdulo BDM y la energa, de tal modo que al reenergizar corra
la aplicacin desarrollada.
Para la instalacin del ambiente IDE CodeWarrior Development Studio for HC(S)08 y service pack para
soporte de la familia QG pueden encontrarse indicaciones en la pgina web de Freescale, www.freescale.com, y
descargarse las versiones ms recientes de CodeWarrior (CW). Siga las indicaciones del proceso de instalacin
de la gua de inicio rpida (Quick Start Guide).
Despus de que CodeWarrior haya sido instalado de manera adecuada, instale el service pack para HC(S)08
usando el CD llamado CodeWarrior service pack. Este paso es necesario si se desea utilizar la interfaz USB-
BDM de la tarjeta DEMO9S08QG8.

Debe registrar la instalacin y as podr obtener una licencia para el uso de la edicin
especial de CodeWarrior.

Esta poderosa herramienta se explicar en detalle en captulos posteriores, y brindar un gran soporte
a la hora de entrenarse y desarrollar aplicaciones de una manera fcil y rpida dentro del mundo de los
microcontroladores Freescale.

ALFAOMEGA - FREESCALE
28 JUAN CARLOS VESGA FERREIRA

Conoce el hardware con el que se trabajar


Antes de comenzar cualquier proyecto basado en software y hardware, es necesario conocer como est
conectado el hardware asociado al microcontrolador; para ello se usa en primera instancia el manual de la
tarjeta a ser utilizada, donde se indica comnmente a qu voltaje se alimenta la tarjeta, ubicacin y funcin
de los jumpers y dispositivos conectados a ella.

FIGURA 1.9

Para entender claramente cmo est conectado el microcontrolador debe verse el diagrama esquemtico.
A continuacin mencionamos las principales caractersticas de la tarjeta de evaluacin.

Componentes principales de la tarjeta DEMO9S08QG8


Programador USB-BDM
La tarjeta DEMO9S08QG8 cuenta con una interfaz USB-BDM que permite programar y depurar nuestro
cdigo en el microcontrolador. Es importante hacer notar que una aplicacin final con el microcontrolador
no requiere este programador en la misma tarjeta, es decir, el microcontrolador puede operar solo.
El programador a su vez cuenta con dos LED que informan de su estado.
USB LED La conexin del USB con la computadora se ha establecido.
USB PWR out La interfaz USB est proporcionando voltaje a la tarjeta.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 29

Fuente de poder
Esta tarjeta puede ser alimentada utilizando el voltaje que se proporciona a la interfaz USB, o mediante una
fuente no regulada externa de 7-12 voltios mediante el JACK PWR. La fuente es seleccionada mediante el
jumper PWR_SEL
VB Voltaje proveniente de la interfaz USB
VDD voltaje de la fuente externa conectada al JACK PWR
LED que indica que el microcontrolador est alimentado VDD presente.

Botones
La tarjeta demo cuenta con dos botones denominados SW1 y SW2, los cuales estn conectados de tal forma
que cuando no son presionados el microcontrolador lee un valor de 1 lgico (Vcc) y cuando se presionan el
microcontrolador lee un 0 lgico.

LEDS
La tarjeta cuenta con dos lmparas de tipo LED denominadas LED1 y LED2. Estos LED prenden cuando el
pin del microcontrolador conectado al LED se pone en 0 V y se apagan cuando estn a 1.

Potencimetro
El potencimetro Rv1 proporciona un voltaje variable a una entrada del microcontrolador de 0 voltios a Vcc;
este potencimetro servir para hacer pruebas con el convertidor analgico-digital.

Fotocelda
La fotocelda Rz1 proporciona un voltaje proporcional a la intensidad de luz a una de las entradas del
microcontrolador.

Interfase RS232
Esta interfase puede utilizarse para transferir informacin entre el microcontrolador y la computadora.

Jumper On Off MCU PORT MCU PIN


SW1 Enable SW1 Disable SW1 PTA2 14
SW2 Enable SW2 Disable SW2 PTA3 13
LED1 Enable LED1 Disable LED1 PTB6 6
LED2 Enable LED2 Disable LED2 PTB7 5
RV1 Enable RV1 Disable RV1 PTB0 16
RZ1 Enable RZ1 Disable RZ1 PTB1 15

TABLA 1.1
Jumpers y configuracin del DEMO9S08QG8.

ALFAOMEGA - FREESCALE
30 JUAN CARLOS VESGA FERREIRA

VB
PWR SEL

COM_EN

VDD VX_EN

6
5
4
3
2
1
USER_EN

FIGURA 1.10
Distribucin de jumpers puesta en fbrica (default).

El microcontrolador cuenta con un puerto de comunicacin serie llamado SCI el cual es acondicionado
en el DEMO9S08QG8 para aceptar niveles de comunicacin RS232 estndar. Este puerto de comunicacin
RS232 tambin se conoce como puerto COM en las computadoras.
La siguiente tabla muestra en resumen los dispositivos que estn conectados al microcontrolador, as
como los jumpers asociados.
Revise que los jumpers se encuentren en la posicin default. Use la figura como gua.
Conecte el cable USB a la PC y a la tarjeta electrnica. Si se est usando la tarjeta por primera vez en la
computadora, siga las instrucciones en pantalla para instalar adecuadamente el dispositivo USB. (Si no ha
instalado CW y el service pack, no dispondr de los archivos necesarios (drivers) para reconocer la tarjeta
DEMO.
Despus de que los drivers de USB se instalaron de manera adecuada, los LED de USB, USB PWR OUT
y VDD se encendern.
Presione el SW1 y el LED1 cambiar de estado. El LED2 parpadear a una velocidad mayor.
Si la tarjeta DEMO no tiene preinstalado el programa de prueba, deben seguirse estos pasos:
1. Copie el archivo DEMO_S08QG8_Test.zip del CD de Axiom y extraiga todos los archivos a una nueva
carpeta.
2. Abra CodeWarrior, seleccione la opcin Start using CodeWarrior y abra el archivo de proyecto
DEMO_S08QG8_Test.mcp.
3. Presione el cono Debug o la tecla F5. La ventana de la herramienta de depuracin se abrir; siga las
instrucciones para completar el proceso de grabacin del programa en la memoria Flash.
4. Cuando se abra la ventana Erase and Program Flash, presione YES.
5. La ventana del programador se cerrar y entonces est lista la aplicacin para ejecutarse.

El cdigo fuente de este programa se puede encontrar en el archivo DEMO_S08QG8_Test.zip del CD


de Axiom, especficamente en la carpeta Examples.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES MOTOROLA FREESCALE 31

RESUMEN DEL CAPTULO


CAPTULO
Freescale cuenta con una gran diversidad de microcontroladores para todos los
gustos y requerimientos que presente un usuario en un determinado momento
y diseo en particular.
Se puede concluir que un microcontrolador contiene toda la arquitectura de un sencillo pero
completo computador en un solo chip. Las aplicaciones y desarrollos que se pueden alcanzar utilizando
estos dispositivos son realmente interesantes.
El microcontrolador consiste en un circuito integrado de alta escala de integracin que incorpora la
mayor parte de los elementos que configuran un controlador. Se dice que es la solucin en un chip
porque su reducido tamao minimiza el nmero de componentes y el costo.
Los componentes de los que dispone normalmente un microcontrolador son:
Procesador o CPU (unidad central de procesamiento).
Memoria RAM para contener los datos de propsito general.
Memoria para el programa, tipo ROM/PROM/EPROM.
Lneas de E/S para comunicarse con el exterior.
Diversos mdulos para el control de perifricos (temporizadores, puertas serie y paralelo, CAD,
etc.)
Generador de impulsos de reloj que sincronizan el funcionamiento de todo el sistema.
La nica limitacin que tienen las aplicaciones de los microcontroladores actuales est en la imaginacin
del diseador. Los campos ms destacados en los que se emplean microcontroladores son los siguientes:
Automatizacin industrial.
Adquisicin y cuantificacin de variables fsicas.
Control de procesos Industriales.
Enseanza e investigacin.
Electrodomsticos.
Electromedicina.
Robtica.
Sistemas de navegacin.
Sistemas de seguridad.
Adems de las clasificaciones anteriores, se podran hacer otras dos clasificaciones atendiendo a las
necesidades y a los recursos especiales que pueden tener los microcontroladores.
Respecto a las bondades ofrecidas cabe destacar:
Precio.
Velocidad de ejecucin de cdigo.

ALFAOMEGA - FREESCALE
32 JUAN CARLOS VESGA FERREIRA

Eficiencia en la compresin de cdigo.


Inmunidad al ruido.

Los recursos especiales ms comunes que pueden tener los microcontroladores son los siguientes:
Temporizador y/o contador.
Perro guardin o COP.
Proteccin ante el fallo de la alimentacin.
Estado de reposo o de bajo consumo.
Conversor analgico-digital (CAD).
Conversor digital-analgico (CDA).
Comparador analgico.
Modulador de anchura de impulsos o PWM.
Puertas de entrada y salidas digitales.
Puertas de comunicacin (USART, USB, SCI, etc.)

ALFAOMEGA - FREESCALE
Captulo 2
LOS MICROCONTROLADORES
MC68H(R)C908JL3/JK3/JK1

OBJETIVO DEL CAPTULO 2.1 INTRODUCCIN


Al finalizar el presente captulo el estudiante
tendr un conocimiento sobre las caractersticas El MC68H(R)C908JL3/JK3/JK1 son miembros de
principales de los microcontroladores Freescale muy bajo costo, alto desempeo en la familia de 8
JK1/JK3/JL3, tales como: distribucin de pines, bits M68HC08. Todos los miembros de la familia 08
principales recursos, mapa de memoria, modos de Freescale utilizan la unidad de procesamiento
de direccionamiento, registros de uso general, y CPU08 y estn presentes en una gran variedad de
muchas cosas ms que hacen parte fundamental presentaciones de (20,28 y 40 pines) y en diversos
de esta familia de microcontroladores. tamaos de memoria de programa (1.5k, 4k y 32k).
Dentro de las principales caractersticas de estos
CONOCIMIENTOS PREVIOS microcontroladores estn: tienen memoria Flash
(borrable y programable elctricamente), adems
de contar con conversores anlogos digitales,
Para iniciar el estudio del presente captulo, es
necesario que el lector posea conocimientos interrupciones sectorizadas, interrupciones externas,
bsicos sobre: qu es un microcontrolador?, timers, etc.
para qu sirve?,qu tipos de familias y fabricantes
existen en el mercado?, y arquitecturas, entre
otros aspectos, con el fin de que pueda
comprender al mximo los conceptos y las
temticas expuestas.
34 JUAN CARLOS VESGA FERREIRA

DISPOSITIVO TAMAO DE MEMORIA No. PINES


FLASH
MC68HC908JL3 4096 bytes 28
MC68HC908JK3 4096 bytes 20
MC68HC908JK1 1536 bytes 20

TABLA 2.1
Tamao de la memoria Flash y nmero de pines

2.2 CARACTERSTICAS DE LA CPU 08

Presenta un modelo de programacin muy completo


Tiene set de instrucciones muy amplio, incluyendo varios modos de direccionamiento
Registro de 16 bits (H:X) y stack pointer manipulable por el usuario
Instrucciones de transferencia de memoria a memoria
Instrucciones de multiplicacin rpida de 8*8
Instrucciones de divisin rpida de 16/8
Instrucciones de BCD
Fcil soporte de lenguajes de alto nivel como el C

2.3 CARACTERSTICAS DE LOS MICROCONTROLADORES


CPU de 8 bits
Operacin interna a 8 MHz
Rango de operacin entre 3 V y 5 V
LVI: Proteccin contra voltaje
Opcin de oscilador con red RC o cristal
Sistema de programacin Flash
Seguridad Flash
4096 bytes para MC68H(R)C908JL3/JK3
1536 bytes para MC68H(R)C908JK1
128 bytes de memoria RAM
2 timers de 16 bits

ALFAOMEGA - FREESCALE
LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1 35

12 canales de conversores A/D de 8 bits (JL3), 10 canales de conversin A/D para el JK3.
23 pines de entrada/salida para uso general (JL3).
7 interrupciones de teclado con resistencias de Pull-up
10 drivers para LED
2 ICAP/OCAP/PWM
15 pines de entrada/salida para uso general (JK3/JK1)
1 interrupcin por teclado con resistencias de Pull-up
4 drivers para LED
2 ICAP/OCAP/PWM
Modos de bajo consumo
COP perro guardin
Fuentes de interrupciones totalmente sectorizadas
Pull-down programables por puerto de entrada

Antes de iniciar el recorrido por el mundo de la programacin de los microcontroladores Freescale, existe
la necesidad de exponer una serie de conceptos bsicos que le ayudarn al lector a comprender con mayor
fluidez el comportamiento y funcionamiento de los microcontroladores con el mundo exterior.
A continuacin se explicarn conceptos como: qu son los pines de entrada?, qu son los pines de
salida?, qu es una CPU y qu funcin desempea en el microcontrolador?, qu es el reloj y para qu sirve?,
cmo se articula un programa escrito por un desarrollador, con el hardware propio del microcontrolador?,
y muchas preguntas ms, dndole al lector una visin mucho ms clara del comportamiento y alcance de
estos poderosos dispositivos programables.

Qu son los pines de entrada?


En los microcontroladores se usan dispositivos de entrada muy sencillos como, por ejemplo, interruptores
simples, debido a que la mayora de las entradas de los microcontroladores pueden solamente procesar seales
digitales con los mismos niveles de tensin que la fuente de alimentacin (+5 V). Inicialmente se debe tener
en cuenta lo siguiente: el nivel de cero voltios o nivel de tierra se denomina Vss, y el nivel positivo o nivel
de alimentacin se denomina Vdd, cuyo valor por defecto son 5 voltios de corriente contnua. Se sabe por
circuitos digitales que un nivel de tensin de (0- 0.8 V) se considera como un 0 lgico y una tensin que se
puede encontrar entre 2.5 y 5 V se considera como un 1 lgico.
Sin embargo, no todas las seales que se aplican al microcontrolador deben ser seales de tipo digital;
el mundo real est poblado de seales analgicas, o seales que son de otros niveles de tensin. Algunos
dispositivos tienen la propiedad de acondicionar las seales presentes en el medio a niveles de tensin
dentro del rango permitido para el microcontrolador, esto en cuanto a nivel digital; por otra parte, existen
otros dispositivos con la propiedad de convertir seales analgicas en seales digitales (a valores binarios
compuestos por 1 y 0), los cuales el microcontrolador ser capaz de procesar y manipular. En el caso de
la familia que se estudiar a lo largo del libro, estos dispositivos conversores ya vienen incorporados en el
mismo microcontrolador y con muchas herramientas potenciales adicionales.
En la mayora de las aplicaciones que requieran instrumentacin se recurrir al uso de dispositivos
conocidos como transductores, los cuales tienen la caracterstica de convertir una variable fsica presente

ALFAOMEGA - FREESCALE
36 JUAN CARLOS VESGA FERREIRA

en el mundo real, como, por ejemplo: presin, temperatura, velocidad, en seales elctricas directamente
proporcionales a su valor real, es decir, a mayor valor de la variable, mayor valor de voltaje a la salida del
transductor y viceversa.

Se debe tener en cuenta que cuando se desee realizar un diseo, en la mayora de los
microcontroladores los pines cuando son configurados como entradas pueden recibir
corrientes provenientes de otros circuitos hasta 25 mA por pin, aproximadamente.

Qu son los pines de salida?


As como se mencion antes, que las entradas permiten recibir seales, en la mayora de los casos en formato
digital, los dispositivos de salida permiten que el microcontrolador enve informacin al mundo exterior o
bien realice acciones sobre ste. En un computador, un dispositivo de salida puede ser el monitor; en los
microcontroladores se utilizan de igual modo dispositivos simples basados en mecanismos de conmutacin
o interruptores. Cuando el microcontrolador enva un 0 lgico a travs de alguno de los pines configurados
como salida, a nivel de tensin se obtendr externamente un valor de 0 V; de lo contrario, si se enva un 1
lgico a travs de alguno de los pines configurados como salida, a nivel de tensin se obtendr externamente
un valor de 5 V.

Se debe tener en cuenta que cuando se desee realizar un diseo, en la mayora de los
microcontroladores los pines cuando son configurados como salidas podrn suministrar
corrientes hasta 20 mA por pin, aproximadamente, lo suficiente como para encender
perfectamente un LED.

Qu es una CPU y qu funcin desempea en el microcontrolador?


La CPU o unidad central de proceso es el ncleo de todo el sistema; su funcin principal es ejecutar cada una
de las instrucciones programadas por el diseador. Este programa estar constituido por instrucciones que le
ordenar en muchos casos a la CPU leer informacin proveniente de los pines de entrada o de una direccin de
memoria de trabajo, y a su vez enviar informacin ya sea a un puerto o a una direccin de memoria en particular.
Algunas instrucciones del programa involucran sencillas decisiones provocando establecer rutinas condicionales
y/o repetitivas necesarias para realizar una tarea especfica. En el apndice del libro se explica cuidadosamente
cada una de las instrucciones disponibles para esta familia especial de microcontroladores.
En un microcontrolador hay usualmente slo un programa, el que atiende una aplicacin especfica
de control. La CPU de la familia MC68HC08 (CPU08) reconoce alrededor de 89 instrucciones diferentes,
respectivamente, permitiendo realizar cualquier tarea que el diseador requiera y con una estabilidad y
funcionalidad excelentes.

ALFAOMEGA - FREESCALE
LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1 37

Qu es el reloj y para qu sirve?


Uno de los elementos primordiales que debe estar presente en cualquier microcontrolador es el oscilador.
Un oscilador es un circuito que permite la generacin de una seal que podemos imaginar como un tren
de pulsos, a una determinada frecuencia, establecida convencionalmente por un cristal de cuarzo. Este tren
de pulsos permitir que el microcontrolador funcione y ejecute cada una de las instrucciones previamente
programadas. Una instruccin, por sencilla que sea, se puede dividir en una serie de etapas ms elementales,
cada una de estas pequeas etapas en la operacin de un microcontrolador toma un ciclo de reloj de la CPU;
es decir, el ciclo o tiempo de ejecucin de una instruccin es equivalente a una cantidad de ciclos generados
por el oscilador, en donde la relacin aproximada en la mayora de los microcontroladores es que el tiempo
de ejecucin de una instruccin ser aproximadamente de 4 ciclos de reloj, o sea 4 ciclos del oscilador.

Qu funcin cumple la memoria dentro del sistema?


Hay varios tipos de memoria que se utilizan para diversos propsitos en los sistemas del computador. Los
principales tipos que se encuentran en sistemas con microcontroladores son la memoria de la lectura solamente
(ROM) y la memoria de lectura / escritura de acceso aleatorio (RAM). La ROM se utiliza principalmente
para el almacenamiento de programas y datos de manera permanente, en los cuales, en caso de presentarse
ausencia de energa en el circuito, los datos no sern borrados del microcontrolador. Caso contrario ocurre
en la memoria RAM, en donde la informacin es almacenada de manera temporal y en caso de ocurrir
alguna falla en la energa, los datos se perdern definitivamente. Existe otro tipo de memoria que se
encuentra convencionalmente en muchos microcontroladores, la cual sera el homlogo del disco duro en un
computador personal; este tipo de memoria se denomina EEPROM, y es programable y borrable elctricamente,
manteniendo almacenada la informacin deseada por el desarrollador y, en caso de ausencia de energa, no
se perder. En aplicaciones reales, esta memoria puede ser utilizada, por ejemplo, para almacenar nmeros
de identificacin de dispositivos, contraseas, conteos, entre otros valores que puedan ser valiosos para el
desarrollador y que en caso de requerir modificacin no sea necesario reprogramar el microcontrolador
totalmente, sino modificar ligeramente desde aplicaciones externas el valor presente en ella.
Se debe tener en cuenta que la menor unidad de almacenamiento de memoria en un microcontrolador es
el bit, el cual puede retener un valor correspondiente a un 1 o un 0 lgico; el conjunto de 8 bits agrupados
es lo que se denomina byte. Los microcontroladores pueden manejar canales de comunicacin internos desde
8 bits hasta los ms poderosos, que permiten transferir simultneamente hasta 32 bits. En el caso de la familia
HC08 se utilizar como estndar canales de comunicacin y registros de 8 bits.

Cmo se articula un programa escrito por un desarrollador,


con el hardware propio del microcontrolador?
La figura que se muestra a continuacin ilustra al programa como una nebulosa, dndose a entender que
en esta seccin en particular puede haber cualquier cosa, dependiendo de la imaginacin del desarrollador.
Tal como se haba mencionado antes, los componentes fundamentales de un programa son las instrucciones
ejecutadas progresiva y secuencialmente por la CPU. De la misma manera, un desarrollador mediante el uso de
circuitos elctricos digitales puede implementar un sistema basndose en elementos tan simples como son las
compuertas AND, OR y NOT; por analoga, un programador puede escribir un programa que realice la misma
funcin mediante instrucciones simples y con menor circuitera y complejidad que el mtodo inicial.

ALFAOMEGA - FREESCALE
38 JUAN CARLOS VESGA FERREIRA

PROGRAMA

ENTRADAS SALIDAS

MEMORIA
SWITCHES RELEVOS

TECLADOS LEDS
CPU

SENSORES PARLANTES

Reloj

OSCILADOR

FIGURA 2.1
Diagrama de bloques interno de un microcontrolador.

Cmo funcionan los puertos del microcontrolador


y cmo se pueden configurar como entrada o salida?
Cuando se tienen valores a la entrada o salida de un pin o grupo de pines en particular, la informacin del
estado y control de los pines de entrada/salida se puede conocer gracias a que sus valores se vern reflejados
en el registro correspondiente al puerto en el que se encuentran ubicados, registro que est en una posicin
particular del mapa de memoria, permitiendo entonces que el sistema pueda intercambiar informacin desde
o hacia su mundo exterior. El mapa de memoria correspondiente a la familia HC08 se estudiar en detalle
en captulos posteriores.
Los tipos ms simples de posiciones de memoria de I/O son un simple puerto de entrada y un puerto de
salida; cada puerto se encuentra constituido por 8 bits, y aunque muchas veces externamente slo se tiene
acceso a una cantidad inferior a los 8 pines, internamente siempre estar completo el puerto respectivo,
estableciendo el valor de 0 lgico en aquellos bits que no pueden ser visualizados externamente.
Por ejemplo: si en un puerto, de sus 8 bits los 4 bits de ms peso fueran configurados como entrada y los 4
bits de menos peso como salida, y adicionalmente se colocara un voltaje de 5 voltios en el pin de ms peso y
el valor ledo por este pin fuera representado por el bit de menos peso, se obtendra el siguiente resultado:

ALFAOMEGA - FREESCALE
LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1 39

MSB LSB
1 0 0 0 0 0 0 1

BIT DE BIT DE
ENTRADA SALIDA

Los microcontroladores incluyen pines de I/O de ports paralelos de propsito general. El sentido de
cada pin se puede configurar de manera independiente, es decir, que a pesar de tener un puerto 8 bits, la
combinacin de cules pines sern configurados como entrada y cules como salida depender solamente del
desarrollador a travs de la combinacin establecida en el registro DDR respectivo. Un pin de port se puede
configurar como salida si en el registro correspondiente DDR, en el bit respectivo est escrito un 1 lgico;
de lo contrario, si un pin de port se desea configurar como entrada, en el registro DDR respectivo deber
estar escrito como un 0 lgico. Si por algn motivo todos los bits del registro DDR son borrados, se estara
configurando en el puerto equivalente todos sus pines como entrada.

2.4 DISTRIBUCIN DE PINES DEL MICROCONTROLADOR


MC68H(R)C908JL3/JK3/JK1

Como se puede visualizar en la figura 1, el microcontrolador JL3 est constituido por 28 pines, mientras que
los microcontroladores JK3 y JK1 solamente poseen 20 pines. A continuacin se ilustra la distribucin de
pines de cada uno de ellos y la respectiva funcin que desempean.
Como se puede observar, el microcontrolador MC68H(R)C908JL3 est constituido por 28 pines, entre los
cuales presenta tres puertos configurables como entrada o salida de manera independiente, mientras que el
MC68H(R)C908JK3/JK1 posee dos puertos con las mismas caractersticas de este ltimo. Una de las principales
caractersticas de estos microcontroladores es que sus pines comparten recursos propios del dispositivo, los
cuales se ilustran en detalle en la tabla siguiente. Adems tienen dos pines para conexin del oscilador, el cual
permite el funcionamiento del microcontrolador, conversores anlogos/digitales. Fuentes de interrupcin
externa como la IRQ1 y funciones de interrupcin por teclado presentes solamente en el JL3.

ALFAOMEGA - FREESCALE
40 JUAN CARLOS VESGA FERREIRA

IRQ1 1 28 RST

PTA0 2 27 PTA5

VSS 3 26 PTD4

OSC1 4 25 PTD5

OSC2/PTA6 5 24 PTD2 IRQ1 1 20 RST


PTA1 6 23 PTA4 VSS 2 19 PTD4
VDD 7 22 PTD3 OSC1 3 18 PTD5
PTA2 8 21 PTB0 OSC2/PTA6 4 17 PTD2
PTA3 9 20 PTB1 VDD 5 16 PTD3
PTB7 10 19 PTD1 15
PTB7 6 PTB0
PTB6 11 18 PTB2 PTB6 7 14 PTB1
PTB5 12 17 PTB3 PTB5 8 13 PTB2
PTD7 13 16 PTD0 PTD7 9 12 PTB3
PTD6 14 15 PTB4 PTD6 10 11 PTB4

MC68H(R)C908JL3 MC68H(R)C908JK3/JK1

TABLA 2.2
Distribucin de pines y apariencia fsica del JL3/JK3/JK1.

ALFAOMEGA - FREESCALE
LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1 41

2.5 DESCRIPCIN DE PINES DEL JL3/JK3/JK1

Nombre del pin Descripcin del pin IN/OUT Nivel de voltaje


VDD Alimentacin positiva IN 35V
VSS Tierra OUT 0V
RST Reset activo en bajo IN VDD
IRQ1 Interrupcin externa IN VDD
Posee resistencia de Pull-Up
Pin usado para seleccionar modo de arranque
OSC1 Entrada del oscilador IN Anloga
OSC2 Para oscilador a cristal: salida del OSC1 OUT Anloga
Para oscilador RC IN/OUT VDD
PTA[0:6] 7 bit de propsito general I/O IN/OUT VDD
7 interrupciones de teclado IN IN VDD
Resistencias de Pull-Up programables VDD
PTB[0:7] 8 bits de propsito general I/O IN/OUT VDD
8 conversores A/D ADC[0:7] IN Anloga
PTD[0:7] 8 bits de propsito general I/O IN/OUT VDD
PTD[3:0] 4 conversores A/D ADC[8:11] IN Anloga
PTD[4:5] canales TIM, TCH0, TCH1 IN/OUT VDD
PTD[6:7] pines I/O drenador abierto IN/OUT VDD

TABLA 2.2
Descripcin de pines del JL3/JK3/JK1.

NOTA
En los microcontroladores JK3/JK1 no est disponible el PTA, ni los pines PTD0
y PTD1.

ALFAOMEGA - FREESCALE
42 JUAN CARLOS VESGA FERREIRA

2.6 MAPA DE MEMORIA DEL JL3

$0000
Registros de I/O (64 bytes)
$003F

$0040
Registros Reservados (64 bytes)
$007F

$0080
Memoria RAM (128 bytes)
$00FF

$0100 Sin Implementar


$0100
Sin Implementar (60160 bytes) 62720
$EBFF
$F5FF
$E000 Memoria FLASH 409.6 bytes Memoria Flash
$FBFF MC68H(R)C908JL3/JK3 1536 bytes/JK1 $0600
$FC00 Monitor ROM $FBFF
$FDFF 512 bytes
$FE00 Registro de Estado de Ruptura BSR
$FE01 Registro de Estado de Reset RSR
$FE02 Reservado
$FE03 Registro de Control de Ruptura BFCR
$FE04 Registro de Estado de Interrupcin INT1
$FE05 Registro de Estado de Interrupcin INT2
$FE06 Registro de Estado de Interrupcin INT3
$FE07 Reservado
$FE08 Registro de Control FLASH FLCR
$FE09 Proteccin en Bloque FLASH FLBPR
$FE0A Reservado
$FE0B Reservado
$FE0C Direccin de Ruptura Alto BRKH
$FE0D Direccin de Ruptura Baja BRKL
$FE0E Estado y Control de Ruptura BRKSCR
$FEDF Reservado
$FE10 Monitor ROM
$FFCF 448 Bytes
$FFD0 Uso de Vectores
$FFFF 48 Bytes

ALFAOMEGA - FREESCALE
LOS MICROCONTROLADORES MC68H(R)C908JL3/JK3/JK1 43

Desde las direcciones $0000 hasta la $003F se encuentran todos los registros de control para entrada y
salida de datos, configuracin de los puertos A, B y D, configuracin y estado de los timers, de los canales de
conversin A/D, etc.

Direccin Nombre Detalle


$0000 PORTA Registro del puerto A
$0001 PORTB Registro del puerto B
$0003 PORTD Registro del puerto D
$0004 DDRA Registro de configuracin del puerto A
$0005 DDRB Registro de configuracin del puerto B
$0007 DDRD Registro de configuracin del puerto D
$000A PDCR Registro de control del puerto D
$000D PTAPUE Habilitacin de resistencias Pull-Up del PortA
$001 KBSCR Control de teclado
$001B KBIER Habilitacin de interrupcin de teclado
$001D INTSCR Control y estado de la IRQ
$001E CONFIG2 Registro de configuracin del sistema 2
$001F CONFIG1 Registro de configuracin del sistema 1
$0020 TSC Registro de estatus y control del TIM
$0021 TCNTH Byte alto contador del timer (TIM)
$0022 TCNTL Byte bajo contador del timer (TIM)
$0023 TMODH Mdulo contador del TIM byte alto
$0024 TMODL Mdulo contador del TIM byte bajo
$0025 TSC0 Estatus y control del TIM canal 0
$0026 TCH0H Timer CH0 byte alto
$0027 TCH0L Timer CH0 byte bajo
$0028 TSC1 Estatus y control del TIM canal 1
$0029 TCH1H Timer CH1 byte alto
$002 TCH1L Timer CH1 byte bajo
$003C ADSCR Control y estatus del ADC
$003D ADR Datos del ADC
$003E AD/CLK Reloj del ADC

TABLA 2.4
Registros de I/O.

ALFAOMEGA - FREESCALE
44 JUAN CARLOS VESGA FERREIRA

RESUMEN DEL CAPTULO


CAPTULO
Los microcontroladores Freescale son dispositivos de muy bajo costo, alto
desempeo y estn presentes en una gran variedad de presentaciones (de 20,
28 y 40 pines) y en diversos tamaos de memoria de programa. Entre las principales
caractersticas de estos microcontroladores estn la de tener memoria Flash (borrable y
programable elctricamente), adems de contar con conversores anlogos digitales, interrupciones
sectorizadas, interrupciones externas, timers, etc.
Adems presentan un modelo de programacin muy completo, set de instrucciones muy amplio,
incluyendo varios modos de direccionamiento, instrucciones de transferencia de memoria a memoria,
instrucciones de multiplicacin y divisin rpida, fcil soporte de lenguajes de alto nivel como el C, rango
de operacin entre 3 V y 5 V, proteccin contra voltaje, opcin de oscilador con red RC o cristal, sistema de
programacin FLASH, timers de 16 bits, canales de conversores A/D de 8 bits (JL3), 10 canales de conversin
A/D para el JK3, modos de bajo consumo, fuentes de interrupciones totalmente sectorizadas, Pulldown
programables por puerto de entrada y muchas caractersticas ms que hacen de estos microcontroladores
dispositivos muy especiales en el campo de la electrnica.
La CPU o unidad central de proceso es el ncleo de todo el sistema; su funcin principal es ejecutar
cada una de las instrucciones programadas por el diseador.
El oscilador es un circuito que permite la generacin de una seal que podemos imaginar como un
tren de pulsos, a una determinada frecuencia, establecida convencionalmente por un cristal de cuarzo.
Este tren de pulsos permitir que el microcontrolador funcione y ejecute cada una de las instrucciones
previamente programadas.

ALFAOMEGA - FREESCALE
Captulo 3
INTRODUCCIN A LA PROGRAMACIN
DE LOS MICROCONTROLADORES
MOTOROLA-FREESCALE
OBJETIVO DEL CAPTULO 3.1 INTRODUCCIN
Al finalizar este captulo el estudiante estar
familiarizado con el repertorio de instrucciones, los Para iniciar la travesa en el campo de la programacin
modos de direccionamiento utilizados y el estado de microcontroladores es necesario comprender su
del registro banderas en un momento determinado, filosofa de trabajo, as como su vocabulario, que
las cuales conforman el grupo de funciones ya sea para nuestro caso se trata del set de instrucciones,
de tipo aritmtico, lgico, condicional, de salto, las cuales en el presente captulo se visualizarn en
de manipulacin de bits o registros, entre otras, un cuadro resumen, pero podrn ser estudiadas en
que hacen parte fundamental en el proceso de detalle en el apndice B al final del libro, y finalmente
programacin y que brindan al estudiante una visin los modos de direccionamiento utilizados para la
de todo lo que se puede realizar en el mundo de los transferencia, manipulacin y procesamiento de los
microcontroladores Freescale.
registros que hacen parte de un programa o desarrollo
en particular.
CONOCIMIENTOS PREVIOS
Para iniciar el estudio del presente captulo, es
necesario que el lector posea conocimientos 3.2 REGISTROS DE USO GENERAL
sobre las caractersticas bsicas de la familia de
microcontroladores HC08 en estudio y conceptos Existen unos registros que se encuentran
bsicos de fundamentos de programacin, con el
constantemente interactuando con el microcontro-
fin de que pueda comprender los conceptos y set
lador, efectuando tareas de acuerdo con las
de instrucciones explicados a continuacin.
instrucciones que se vayan realizando. Uno de los
detalles a tener en cuenta es que a pesar de que estos
46 JUAN CARLOS VESGA FERREIRA

registros hacen parte constante de la programacin de microcontroladores, son registros propios e internos
de la CPU y por tal razn no se encuentran mapeados en la memoria.
Estos registros son:

ACUMULADOR (A): Es un registro de 8 bits de propsito general usado en las operaciones aritmticas y
lgicas. El acumulador comnmente se utiliza para almacenar operandos, resultados de clculos aritmticos,
y de manipulacin de datos, complementndose con el hecho de ser directamente accesible a la CPU para
operaciones no aritmticas.
Cuando se almacenan datos numricos se debe tener en cuenta la notacin de la base a utilizar para
introducir las cantidades.
$: cantidad hexadecimal
%: cantidad binaria
t: cantidad decimal

REGISTRO NDICE (X):


El registro ndice se emplea para los modos de direccionamiento indexados, o bien puede usarse como un
acumulador auxiliar; est constituido por 8 bits, valor que puede ser cargado directamente o desde una
posicin de memoria. En las instrucciones indexadas, el registro X provee un valor de 8 bits que es sumado
a la direccin base provista por la instruccin para crear una direccin afectiva. El valor provisto por la
instruccin puede ser de 0, 1 o 2 bytes de largo.

REGISTRO NDICE (H:X)


Este registro puede ser visto como uno solo formado por 16 bits o como dos registros de 8 bits independientes,
H y X (registro explicado antes). Este registro se utiliza en los modos de direccionamiento indexados y sirve
como un apuntador, siendo capaz de cubrir todo el mapa de memoria con 16 bits. Adems, el registro X puede
ser utilizado como un acumulador secundario, ya que existen diversas instrucciones que lo emplean como
fuente y/o destino, igual que A. Esto es til para disminuir la carga de trabajo del registro A, de modo que
se requiera menos movimiento de datos entre memoria y A, agilizando as la ejecucin de la aplicacin.

PUNTERO DE PILA (SP): (Stack Pointer). Es un registro de 16 bits que contiene la direccin de la
posicin disponible en el stack. El stack pointer puede funcionar como un registro de indexado para acceder
a datos en el stack.
Una pila (stack) es una estructura de datos de tipo LIFO (del ingls Last In First Out) que permite almacenar
y recuperar datos mediante operaciones push (apilar) y pop (desapilar). Estas operaciones se realizan sobre
un nico extremo de la pila llamado cima.
Por analoga con objetos cotidianos, una operacin push equivaldra a colocar un plato sobre una pila
de platos, y un pop a retirarlo. Esto quiere decir que con una operacin pop se obtendr el elemento que se
aadi la ltima vez en la pila, es decir, el que se encuentre en la parte superior de la pila; al mismo tiempo
que lo elimina de la pila.
En general, se puede decir que:

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 47

Un objeto de la clase stack es una pila, la cual permite almacenar objetos y luego recuperarlos en el orden
inverso en que se insertaron, es decir, siempre se recupera el ltimo elemento insertado. Para insertar un
objeto a la pila se utiliza la instruccin Push, y para retirarlo se utiliza la instruccin Pop.

CONTADOR DE PROGRAMA (PC). Es un registro de 16 bits que contiene la direccin de la siguiente


instruccin u operacin a procesar. En otras palabras, se podra decir que el registro contador de programa
(PC) es usado por la CPU para no perder de vista la direccin de la prxima instruccin a ejecutar. Al resetear
la CPU (encenderla), el contador de programa (PC) es cargado con el contenido de un par de posiciones de
memoria especficas denominadas vector de reset. Las operaciones del vector de reset contienen la direccin
donde est almacenada la lgica interna de la CPU incrementar paulatinamente el valor del contador de
programa, de modo tal que siempre apunte a la prxima instruccin a ejecutar.
En muchas de las variantes de la famila HC08, algunos de los bits superiores del contador de programa
no son usados y estn siempre en cero. Se debe tener en cuenta que el nmero de bits utilizados en el
contador de programa coincide con el nmero de lneas de direccin implementadas en el sistema del
microcontrolador.

REGISTRO DE BANDERAS (CCR). Es un registro de 8 bits que contiene el bit de enmascarado


general de interrupciones y 5 banderas de estado, las cuales indican ciertas condiciones originadas por la
instruccin previamente ejecutada. El registro de cdigo de condicin (o registro de banderas) contiene una
mscara de interrupcin y cuatro indicadores de estado que reflejan el resultado de operaciones aritmticas
y de otro tipo de la CPU. Las cinco banderas son semi-acarreo (H), mscara de interrupcin (I), negativo (N),
cero (Z) y acarreo/prstamo (C).

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir V 1 1 H I N Z C

Este registro contiene un conjunto de banderas que dan informacin sobre el resultado de la ltima
operacin ejecutada. La mayora de las instrucciones de salto utilizan estas banderas como condicin. Aqu
se encuentra tambin el habilitador global de interrupciones. Los bits que componen este registro son:

V: BANDERA DE REBOSAMIENTO
Esta bandera es el equivalente de C para operaciones con signo. Se activa si el resultado sale del rango de
-128 a 127. Este bit puede ser modificado tambin por instrucciones no aritmticas.
La CPU coloca esta bandera en 1 cuando al efectuar el complemento a dos ocurre un rebosamiento.
1: Rebosamiento
0: No rebosamiento

H: BANDERA DE MEDIO CARRY


Indica si existi un desbordamiento en los primeros 4 bits del resultado. Funciona de la misma manera que
C para instrucciones aritmticas, pero considerando slo los primeros 4 bits del resultado.

ALFAOMEGA - FREESCALE
48 JUAN CARLOS VESGA FERREIRA

La CPU coloca este bit en 1 cuando ocurre un carry entre los bits 3 y 4 durante una suma con o sin carry;
el medio carry es requerido cuando se utiliza codificacin en BCD.
1: Carry entre los bits 3 y 4
0: No carry entre los bits 3 y 4

I: MSCARA DE INTERRUPCIN
Este bit es el habilitador global de interrupciones. Si se encuentra en 1, todas las interrupciones (exceptuando
las no enmascarables) sern inhibidas y permanecern pendientes hasta que este bit sea colocado en 0. Este
habilitador se modifica en lenguaje C con las instrucciones EnableInterrupts y DisableInterrupts.
Cuando este bit se coloca en 1 lgico todas las interrupciones son deshabilitadas, y se habilitan nuevamente
cuando este bit se coloca en 0 lgico. Cuando ocurre cualquier interrupcin, este bit se coloca automticamente
en 1 lgico. Despus de que este bit es limpiado, la interrupcin que es atendida es la que posea mayor
prioridad.
El bit I no es una bandera de estado, es un bit de mscara de interrupcin que desabilita todas las fuentes de
interrupcin enmascarables cuando el bit I est en uno: de lo contrario, las interrupciones estarn habilitadas
cuando este bit est en cero. Cuando ocurre cualquier interrupcin, el bit I es automticamente forzado a uno
luego de haber salvado los registros en la pila, pero antes es buscado el vector de interrupcin.
Si ocurre una interrupcin interna mientras el bit I est en uno, la interrupcin es almacenada y procesada
luego de que el bit I se ponga en cero; de esta manera, no se perder una interrupcin IRQ que se presente
cuando el bit est en uno. Cuando se ha atendido una interrupcin, la instruccin retorno desde una
interrupcin (RTI) provocar que los registros recuperen sus valores previos.
Normalmente, el bit I permanecera en cero luego de que fuese ejecutada la instruccin RTI; sin embargo,
luego de la ocurrencia de cualquier reset, el bit I estar en uno y slo podr llevrselo a cero por medio de
una instruccin.

N: BANDERA DE VALOR NEGATIVO


Esta bandera refleja el estado del bit de signo (bit 7) del resultado anterior. Al igual que la bandera de cero,
esto se extiende a otro tipo de instrucciones.
Este bit se coloca en 1 lgico cuando el resultado de una operacin aritmtica es negativa.
1: Resultado negativo
0: Resultado positivo

Z: BANDERA DE CERO
Este bit se coloca en 1 lgico cuando el resultado de una operacin aritmtica o lgica d cmo resultado
CERO. Esta bandera no slo es modificada por instrucciones aritmticas, por lo que se activar siempre que
el valor del registro de destino de la instruccin sea igual a 0.
1: Resultado cero
0: Resultado no cero

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 49

C: BANDERA DE CARRY
En instrucciones aritmticas sin signo, esta bandera indica si ocurri un desbordamiento en el resultado, es
decir, si sali del rango de 0 a 255. Las instrucciones de corrimiento y rotacin pueden tambin hacer uso de
este bit.
Este bit se coloca en 1 lgico cuando el resultado de una operacin aritmtica produce Carry despus del
bit 7. El bit C se usa para indicar si ha habido o no acarreo de una suma o pedido de prstamo como resultado
de una resta. Las instrucciones de desplazamiento y rotacin operan sobre y a travs del bit C para facilitar
operaciones de desplazamiento de mltiples bytes. El bit C es afectado adems durante las instrucciones de
evaluacin de bit y de bifurcacin.
1: Carry
0: No carry
En los captulos posteriores se harn explicaciones en detalle de cada uno de los registros de uso general
de acuerdo con los requerimientos de programacin que haya en un momento dado.

3.3 MODOS DE DIRECCIONAMIENTO


En todo proceso de programacin se requiere realizar constantemente operaciones, asignacin de valores a
registros y extraer valores existentes en otros registros para transferirlos y/o procesarlos con otros datos; este
proceso de extraccin y adjudicacin se conoce como DIRECCIONAMIENTO.
Una de las propiedades que brindan actualmente los microcontroladores consiste en la habilidad para
acceder a la memoria; aprovechado tal cualidad, los modos de direccionamiento existentes en la CPU proveen
esta capacidad. Existe una gran variedad de formas de direccionar los datos, las cuales se clasifican segn la
forma en que una instruccin obtendr el valor requerido para su ejecucin. Debido a los diferentes modos de
direccionamiento, una instruccin puede acceder al operando en una de las diversas maneras. Cada variante
del modo de direccionamiento de una instruccin debe tener un nico cdigo de operacin de instruccin.
Los microcontroladores Freescale usan seis modos de direccionamiento, que son:
Inherente
Inmediato
Extendido
Directo
indexado
sin desplazamiento
con desplazamiento de 8 bits
con desplazamiento de 16 bits
relativo
En los microcontroladores pequeos como, por ejemplo, en la familia HC08, todos los registros utilizados
en el programa para el uso de variables y los registros de entrada/salida no requieren rea adicional de

ALFAOMEGA - FREESCALE
50 JUAN CARLOS VESGA FERREIRA

memoria, todos ellos se encuentran funcionando en el rango de memoria que va desde la direccin $0000 a
la direccin $00FF, en donde el modo de direccionamiento ms utilizado es el direccionamiento directo.
A continuacin se describen en detalle las diferentes formas de direccionamiento existentes, acompaadas
de una descripcin general y algunos ejemplos que le ayudarn al lector a comprender mucho mejor las
bondades y formas de uso presentes en cada modo de direccionamiento.
Antes de entrar en detalle, hay necesidad de explicar ciertos conceptos sobre el uso adecuado del sistema
numrico en el que se desea expresar una cantidad en un momento dado. El espacio en blanco o ningn smbolo,
o culminando la expresin con la letra T, indica que el nmero es decimal. Este nmero ser trasladado a un
valor binario antes de ser almacenado en memoria para ser usado por la CPU.
El smbolo $ precediendo a un nmero indica que el nmero es hexadecimal; por ejemplo, $0F es la
representacin en hexadecimal del nmero 15 en decimal o base 10. El smbolo # indica que el valor que lo
acompaa es un valor constante. Se debe tener en cuenta que existe una gran variedad de smbolos y expresiones
que pueden utilizarse siguiendo al carcter #. Debido a que no todos los compiladores de ensamblador usan
las mismas reglas de sintaxis ni los mismos caracteres especiales, es necesario referirse a la documentacin
del ensamblador en particular que se est utilizando en un modelo especfico.
A continuacin se ilustra un cuadro resumen que ayudar al lector a comprender mejor la forma de
representar una cantidad en el sistema numrico deseado.

PREFIJO Tipo de valor que representa


t Decimal
$ Hexadecimal
@ Octal
% Binario
Apstrofe Carcter ASCII

TABLA 3.1
Listado de prefijos comnmente utilizados en
representaciones numricas.

Modo de direccionamiento inmediato


En el modo de direccionamiento inmediato, el operando est contenido en el byte inmediato siguiente al
cdigo de operacin. Este modo se usa cuando se requiere un valor o constante conocido en el momento de
escribir el programa y que cumple con el hecho de que no cambiar durante la ejecucin del programa. Esta
es una instruccin de dos bytes, uno para el cdigo de operacin y otro para el byte de dato inmediato.

En otras palabras, el operando es un dato constante al que se le antepone el


smbolo #

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 51

Ejemplos

LDA #$0F ;A=$0F

Explicacin
Los pasos que se ejecutan en el momento de evaluar la anterior instruccin son los siguientes:
La CPU almacena el nuevo valor en el registro acumulador (A); en este caso, se almacena el valor de
0F en hexadecimal o 15 en decimal y se ajusta las banderas requeridas segn la operacin.

LDX #10T ; X = 10

Explicacin

Los pasos que se ejecutan en el momento de evaluar la anterior instruccin son los siguientes:
La CPU almacena el nuevo valor en el registro ndice (X); en este caso se almacena el valor 10 y se ajusta
las banderas requeridas segn la operacin.

A continuacin se muestra el listado de instrucciones que permiten la ejecucin del direccionamiento


inmediato.

Instruccin Nemnico
Suma con acarreo ADC
Suma sin acarreo ADD
Funcin lgica AND AND
Comparar el acumulador con memoria CMP
Comparar el registro ndice con memoria CPX
Funcin OR exclusiva EOR
Cargar el acumulador desde memoria LDA
Cargar el registro ndice desde memoria LDX
Funcin OR ORA
Resta con acarreo SBC
Resta sin acarreo SUB

TABLA 3.2
Instrucciones con modo de direccionamiento inmediato

ALFAOMEGA - FREESCALE
52 JUAN CARLOS VESGA FERREIRA

Modo de direccionamiento inherente


Este modo de direccionamiento se caracteriza porque toda la informacin requerida para la operacin ya
es implcitamente conocida por la CPU y no es necesario utilizar valores adicionales para su ejecucin. En
caso de requerirse algn operando en particular, son slo los registros de la CPU o bien valores de datos
almacenados en la pila.

Ejemplos

INCA ; Incrementar el acumulador

Explicacin

Los pasos que se ejecutan en el momento de evaluar la anterior instruccin son los siguientes:
La CPU lee el valor que se encuentra almacenado en el registro Acumulador.
La CPU le suma uno al valor actual del acumulador.
La CPU almacena el nuevo valor en el acumulador y ajusta las banderas requeridas segn la
operacin.

CLRA ; Borrar el Acumulador

Explicacin

Los pasos que se ejecutan en el momento de evaluar la anterior instruccin son los siguientes:

La CPU almacena el valor (00h) en el registro acumulador (A), borrando toda informacin que
se encontrara almacenada previamente en este registro y ajusta las banderas requeridas segn la
operacin.

A continuacin se listan las instrucciones que pueden usar el modo de direccionamiento inherente.

Instruccin Nemnico
Desplazamiento aritmtico a la izquierda ASLA, ASLX
Desplazamiento aritmtico a la derecha ASRA, ASRX
Borrar bit de cari CLC
Borrar bit de mscara de interrupcin CLI
Limpiar CLRA, CLRX
Complementar COMA, COMX
Decrementar DECA, DECX
Incrementar INCA, INCX
Desplazamiento lgico a la izquierda LSLA, LSLX

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 53

Desplazamiento lgico a la derecha LSRA, LSRX


Multiplicar MUL
Negar NEGA, NEGX
No operacin NOP
Rotar a la izquierda a travs del carry ROLA, ROLX
Rotar a la derecha a travs del carry RORA, RORX
Resetear la pila RSP
Retorno de interrupcin RTI
Retorno de subrutina RTS
Colocar el bit de carry en 1 SEC
Colocar el bit de mscara de interrupcin en 1 SEI
Habilitar IRQ, detener el oscilador STOP
Interrupcin por software SWI
Transferir el acumulador al registro X TAX
Probar qure no sea negativo o cero TSTA, TSTX
Transferir el registro X al acumulador TXA

TABLA 3.3
Instrucciones con modo de direccionamiento inherente.

Modo de direccionamiento extendido


Uno de los modos de direccionamiento ms importantes dentro de la programacin de los microcontroladores
es el modo de direccionamiento extendido, que consiste en extraer la informacin almacenada en una direccin
de memoria que para representarla requiere 2 bytes (16 bits), y se escribe su valor seguido de la instruccin.
Este modo se emplea para hacer referencia a cualquier posicin de memoria dentro del espacio de memoria del
MCU, incluyendo direcciones de puertos de entrada/salida, direcciones de la memoria RAM, ROM, EPROM,
Flash. En general, se podra decir que esta forma de direccionamiento se encuentra constituida por tres bytes,
un primer byte para la instruccin a utilizar y otros dos para la direccin del operando. A continuacin se
ilustra un ejemplo que explica con mayor detalle este modo especial de direccionamiento:

Ejemplo

Supongamos que en la posicin de memoria $0367 se encuentra almacenado el valor $0F, entonces:
LDA $0367 ; A=$0F , es decir el valor 0Fh (15 en base 10)

La anterior instruccin extrae el valor que se encuentra almacenado en la direccin extendida 0367h y lo
almacena en el registro Acumulador (A).

ALFAOMEGA - FREESCALE
54 JUAN CARLOS VESGA FERREIRA

Explicacin

La CPU lee la instruccin que significa cargar el acumulador usando el modo de direccionamiento
extendido.
La CPU lee el valor $03, el cual es interpretado como el valor correspondiente a los 8 bits de mayor
peso de la direccin a leer.
La CPU lee el valor $67, el cual es interpretado como el valor correspondiente a los 8 bits de menos
peso de la direccin a leer.
La CPU arma la direccin extendida completa $0367 con los dos valores previamente ledos, esta
direccin es colocada en el bus de direcciones y la CPU leer el valor almacenado en la posicin de
memoria $0367 almacenndolo en el registro Acumulador (A).
En el Acumulador quedar almacenado el valor 0Fh para el caso del ejemplo.

A continuacin se ilustra la tabla de instrucciones que permiten el uso del modo de direccionamiento
extendido.

Instruccin Nemnico
Suma con acarreo ADC
Suma sin acarreo ADD
Funcin lgica AND AND
Comparar el acumulador con memoria CMP
Comparar el registro ndice con memoria CPX
Funcin OR exclusiva EOR
Saltar JMP
Saltar a subrutina JSR
Cargar el acumulador desde memoria LDA
Cargar el registro ndice desde memoria LDX
Funcin OR ORA
Resta con acarreo SBC
Resta sin acarreo SUB

TABLA 3.4
Instrucciones con modo de direccionamiento extendido

Modo de direccionamiento directo


Uno de los modos de direccionamiento ms utilizados en la programacin de microcontroladores es el modo
de direccionamiento directo; ste es muy similar al modo de direccionamiento extendido, con la diferencia de

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 55

que el byte correspondiente a la parte alta de la direccin del operando (los 8 bits de ms peso del valor
de la direccin) se asume con el valor $00, de tal forma que slo es necesario incluir el byte de menos
peso de la direccin del operando (8 bits de menos peso del valor de la direccin) en la instruccin a
ejecutar.
El hecho de considerar que la parte alta de la direccin de memoria a accesar se considere como 00h,
delimita en cierta manera los registros y recursos del microcontrolador a accesar mediante este modo de
direccionamiento. Esta rea de memoria en especial se denomina pgina directa, la cual incluye los registros
de memoria RAM y puertos de entrada/salida del interior del chip.
En general, se podra decir que este modo de direccionamiento es muy eficiente en factores fundamentales
a la hora de programar y desarrollar aplicaciones como son: menor espacio de memoria de programa, menor
tiempo de ejecucin, entre otros factores, debido a que sta es una instruccin de dos bytes, el primero utilizado
para la instruccin a ejecutar y el otro para el byte de menos peso de la direccin de memoria a accesar.
A continuacin se ilustra un ejemplo que explica con mayor detalle este modo especial de
direccionamiento:

Ejemplo

Supongamos que en la posicin de memoria $80 se encuentra almacenado el valor $0F, entonces:

LDA $80 ; A=$0F , es decir el valor 0Fh (15 en base 10)


La anterior instruccin extrae el valor que se encuentra almacenado en la direccin 80h y lo almacena en
el registro Acumulador (A).

Explicacin

La CPU lee la instruccin que significa cargar el acumulador usando el modo de direccionamiento
directo.
La CPU lee el valor $80, el cual es interpretado como el valor correspondiente a los 8 bits de menos
peso de una direccin de pgina directa (desde $0000 hasta $00FF).
Los 8 bits de ms peso de la direccin a acceder se establecen como $00.
La CPU arma la direccin completa de pgina directa $0080 con los dos valores previamente mencionados,
colocando esta direccin en el bus de direcciones y la CPU leer el valor almacenado en la posicin de
memoria $0080 almacenndolo en el registro Acumulador (A).
En el Acumulador quedar almacenado el valor 0Fh para el caso del ejemplo.

A continuacin se ilustra la tabla de instrucciones que permiten el uso del modo de direccionamiento
directo.

ALFAOMEGA - FREESCALE
56 JUAN CARLOS VESGA FERREIRA

Instruccin Nemnico
Desplazamiento aritmtico a la izquierda ASL
Desplazamiento aritmtico a la derecha ASR
Limpiar CLR
Complementar COM
Decrementar DEC
Incrementar INC
Desplazamiento lgico a la izquierda LSL
Desplazamiento lgico a la derecha LSR
Negar NEG
Rotar a la izquierda a travs del carry ROL
Rotar a la derecha a travs del carry ROR
Probar que no sea negativo o cero TST
Asignar valor al acumulador STA
Asignar valor al registro ndice X STX
Suma con acarreo ADC
Suma sin acarreo ADD
Funcin lgica AND AND
Comparar el acumulador con memoria CMP
Comparar el registro ndice con memoria CPX
Funcin OR exclusiva EOR
Saltar JMP
Saltar a subrutina JSR
Cargar el acumulador desde memoria LDA
Cargar el registro ndice desde memoria LDX
Funcin OR ORA
Resta con acarreo SBC
Resta sin acarreo SUB
Cargar el acumulador desde memoria STA
Cargar el registro ndice desde memoria STX
Saltar si el bit n es 1 BRCLR
Saltar si el bit n es 0 BRSET
Colocar en 1 el bit en memoria BSET
Limpiar el bit en memoria BCLR

TABLA 3.5
Instrucciones con modo de direccionamiento directo.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 57

Modo de direccionamiento indexado


Uno de los problemas que surgen en el momento de requerir almacenar 10, 20 o ms valores en direcciones de
memoria consecutivas utilizando los modos de direccionamiento anteriores sera el hecho de tener que escribir
el cdigo de instrucciones de almacenamiento tantas veces como valores se desee almacenar, lo cual generara un
trabajo bastante tedioso; por esta razn se plante el modo de direccionamiento indexado. Este modo particular
de direccionamiento consiste en que la direccin efectiva del operando es variable y depende de dos factores:
El valor almacenado actualmente en el registro ndice (X)
El desplazamiento contenido en el byte o bytes siguientes al cdigo de operacin.

Este modo de direccionamiento se puede clasificar de tres maneras diferentes:


sin desplazamiento
con desplazamiento de 8 bits
con desplazamiento de 16 bits.

Indexado sin desplazamiento


La primera subclase del modo de direccionamiento indexado denominada indexado sin desplazamiento
consiste en que la direccin efectiva del operando para la instruccin est contenida en los 8 bits del registro
ndice. De tal forma que este modo de direccionamiento puede acceder a las primeras 256 posiciones de
memoria (desde $0000 hasta $00FF), considerando el hecho de que la direccin que se tomar como punto
de partida o de desplazamiento con relacin al valor almacenado en el registro ndice ser $00 (00h). Hay
que tener en cuenta que esta instruccin es de un solo byte.
A continuacin se ilustra un ejemplo que explica con mayor detalle este modo especial de
direccionamiento.

Ejemplo

Supongamos que en la posicin de memoria $80 se encuentra almacenado el valor $0F y se desea acceder a
esta posicin utilizando el modo de direccionamiento indexado sin desplazamiento; entonces:

LDX #$80 ; X = $80 o (80h) direccin a ser apuntada por el registro X


LDA 0,X ; Carga el registro A con el valor almacenado previamente en la direccin 80h de la memoria,
que para el ejemplo corresponde al valor $0F (0Fh)

La anterior secuencia de instrucciones ilustra la forma de almacenar en el registro Acumulador (A), el


valor almacenado en la direccin 80h, apuntada por el registro ndice (X)

Explicacin
La CPU lee la instruccin que permitir almacenar un valor existente en una posicin de memoria
en particular en el registro acumulador (A), utilizando el modo de direccionamiento indexado sin
desplazamiento.
La CPU construye la direccin completa a acceder sumando $0000 al contenido del registro ndice de 8
bits (X), registro que actualmente, para el caso del ejemplo, presenta un valor almacenado de $80 (80h).

ALFAOMEGA - FREESCALE
58 JUAN CARLOS VESGA FERREIRA

La direccin resultante es colocada en el bus de direcciones y la CPU lee el valor del registro contenido
en esa posicin de memoria y lo carga en el registro acumulador (A).
La siguiente tabla incluye una lista de todas las instrucciones que pueden usar el modo de direccionamiento
indexado sin desplazamiento y con desplazamiento de 8 bits.

Instruccin Nemnico
Suma con acarreo ADC
Suma sin acarreo ADD
Funcin lgica AND AND
Desplazamiento aritmtico a la izquierda ASL
Desplazamiento aritmtico a la derecha ASR
Limpiar CLR
Comparar el acumulador con memoria CMP
Complementar COM
Comparar el registro ndice con memoria CPX
Decrementar DEC
Funcin OR exclusiva EOR
Incrementar INC
Saltar JMP
Saltar a subrutina JSR
Cargar el acumulador desde memoria LDA
Cargar el registro ndice desde memoria LDX
Desplazamiento lgico a la izquierda LSL
Desplazamiento lgico a la derecha LSR
Negar NEG
Funcin OR ORA
Rotar a la izquierda a travs del carry ROL
Rotar a la derecha a travs del carry ROR
Resta con acarreo SBC
Asignar valor al acumulador STA
Cargar el acumulador desde memoria STX

TABLA 3.6
Instrucciones con modo de direccionamiento indexado (No offset
o 8 bits Offset).

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 59

Indexado con desplazamiento de 8 bits


La segunda subclase del modo de direccionamiento indexado denominada indexado con desplazamiento de
8 bits consiste en que la direccin efectiva es la suma del contenido del registro ndice de 8 bits (X) y el byte de
desplazamiento siguiente a la instruccin a ejecutar. Hay que tener en cuenta que el byte de desplazamiento
suministrado en la instruccin es un nmero entero no signado de 8 bits. Una de las cosas que se deben
tener en cuenta es que a pesar de contarse con la suma de dos registros de 8 bits cada uno, la sumatoria de
ambas cantidades no debe superar 256, garantizando con ello que este modo de direccionamiento permita
acceder a las primeras 256 posiciones de memoria (desde $0000 hasta $00FF) manteniendo la condicin de
pgina directa. La direccin que se tomar como punto de partida o de desplazamiento con relacin al valor
almacenado en el registro ndice ser la estipulada por el valor del byte de desplazamiento siguiente a la
instruccin a ejecutar.
A continuacin se ilustra un ejemplo que explica con mayor detalle este modo especial de
direccionamiento.

Ejemplo

Supongamos que en la posicin de memoria $85 se encuentra almacenado el valor $0F y se desea acceder a
esta posicin utilizando el modo de direccionamiento indexado con desplazamiento de 8 bits; entonces:
LDX #$80 ; X = $80 o (80h) direccin a ser apuntada por el registro X
LDA 5,X ; Carga el registro A con el valor almacenado en la direccin de memoria correspondiente a
la suma del valor del registro ndice X ($80) y el valor constante que acompaa la instruccin (5); en otras
palabras, $80+5=$85, lo cual produce que el valor almacenado en la direccin $85 sea almacenado en el registro
Acumulador, que para el ejemplo corresponde al valor $0F (0Fh).
La anterior secuencia de instrucciones ilustra la forma de almacenar en el registro Acumulador (A) el
valor almacenado en la direccin 85h, apuntada por el registro ndice (X) y complementada por un valor de
corrimiento constante.

Explicacin

La CPU lee la instruccin que permitir almacenar un valor existente en una posicin de memoria
en particular en el registro acumulador (A), utilizando el modo de direccionamiento indexado con
desplazamiento de 8 bits.
la CPU construye la direccin completa a acceder sumando el valor constante que acompaa la
instruccin (5), establecindose como punto de partida la $0005 con el contenido del registro ndice
de 8 bits (X), registro que actualmente, para el caso del ejemplo, presenta un valor almacenado de $80
(80h).
La direccin resultante ($80+$5=$85) es colocada en el bus de direcciones y la CPU lee el valor del
registro contenido en esa posicin de memoria y lo carga en el registro acumulador (A).

Indexado con desplazamiento de 16 bits


La tercera subclase del modo de direccionamiento indexado es la denominada indexado con desplazamiento
de 16 bits; la direccin efectiva es la suma del contenido del registro ndice de 8 bits y los dos bytes de

ALFAOMEGA - FREESCALE
60 JUAN CARLOS VESGA FERREIRA

desplazamiento siguientes a la instruccin a ejecutar. Se debe tener en cuenta que el byte de desplazamiento
suministrado en la instruccin es un nmero entero sin signo de 16 bits. En resumen, se puede decir que este
modo especial de direccionamiento constituye una instruccin de tres bytes, uno para la instruccin a ejecutar
y los otros dos bytes son para el desplazamiento.
Una de las cosas que se deben tener en cuenta es que el hecho de contar con la suma de dos registros, uno
de 8 bits y el otro de 16 bits, generar un resultado de 16 bits, provocando que se pueda acceder a posiciones
de memoria en modo extendido.
A continuacin se ilustra un ejemplo que explica con mayor detalle este modo especial de
direccionamiento.

Ejemplo

Supongamos que en la posicin de memoria $0315 se encuentra almacenado el valor $0F y se desea acceder
a esta posicin utilizando el modo de direccionamiento indexado con desplazamiento de 16 bits; entonces:

LDX #$5 ; X = $5 o (5h) direccin a ser apuntada por el registro X


LDA $0310,X ; Carga el registro A con el valor almacenado en la direccin de memoria correspondiente
a la suma del valor del registro ndice X ($5) y el valor constante de 16 bits que acompaa la instruccin
($0310); en otras palabras, $0310+$5=$0315, lo cual produce que el valor almacenado en la direccin $0315
sea almacenado en el registro Acumulador, que para el ejemplo corresponde al valor $0F (0Fh).
La anterior secuencia de instrucciones ilustra la forma de almacenar en el registro Acumulador (A) el
valor almacenado en la direccin 0315h, apuntada por el registro ndice (X) y complementada por un valor
de corrimiento constante de 16 bits.

Explicacin

La CPU lee la instruccin que permitir almacenar un valor existente en una posicin de memoria
en particular en el registro acumulador (A), utilizando el modo de direccionamiento indexado con
desplazamiento de 16 bits.
La CPU construye la direccin completa a acceder sumando el valor constante que acompaa la
instruccin ($0310), establecindose como punto de partida la $0310 con el contenido del registro ndice
de 8 bits (X), registro que actualmente, para el ejemplo, presenta un valor almacenado de $5 (5h).
La direccin resultante ($0310+$5=$0315) es colocada en el bus de direcciones y la CPU lee el valor del
registro contenido en esa posicin de memoria y lo carga en el registro acumulador (A).

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 61

Instruccin Nemnico
Suma con acarreo ADC
Suma sin acarreo ADD
Funcin lgica AND AND
Desplazamiento aritmtico a la izquierda ASL
Desplazamiento aritmtico a la derecha ASR
Comparar el acumulador con memoria CMP
Comparar el registro ndice con memoria CPX
Funcin OR exclusiva EOR
Saltar JMP
Saltar a subrutina JSR
Cargar el acumulador desde memoria LDA
Cargar el registro ndice desde memoria LDX
Funcin OR ORA
Rotar a la izquierda a travs del carry ROL
Rotar a la derecha a travs del carry ROR
Resta con acarreo SBC
Asignar valor al acumulador STA
Cargar el acumulador desde memoria STX
Resta sin acarreo SUB

TABLA 3.7
Instrucciones con modo de direccionamiento indexado (16
bits de Offset).

Modo de direccionamiento relativo


Uno de los modos de direccionamiento especiales y que se considera de gran ayuda a la hora de programar
microcontroladores es el llamado modo de direccionamiento relativo, el cual es usado solamente por las
instrucciones de bifurcacin (saltos condicionados). Se debe tener en cuenta que las instrucciones de bifurcacin,
a excepcin de las bifurcaciones en su versin de manipulacin de bits, generan dos bytes de cdigo de
mquina: el primer byte se utiliza para la instruccin y otro byte para el desplazamiento relativo. Como en
muchos casos se desea que el salto o bifurcacin sea en cualquier sentido (hacia arriba o hacia abajo), el byte
de desplazamiento es un nmero que puede presentar bit de signo, oscilando en el rango entre -128 hasta
+127 bytes (respecto a la direccin de la instruccin inmediata posterior a la instruccin de bifurcacin).
Si la condicin de salto es verdadera, el contenido de los 8 bits del byte con signo siguiente al cdigo de
operacin (desplazamiento) es sumado al contenido del contador de programa para formar la direccin de

ALFAOMEGA - FREESCALE
62 JUAN CARLOS VESGA FERREIRA

bifurcacin efectiva; de otro modo, el control contina en la siguiente instruccin inmediata posterior a la
instruccin de bifurcacin. A continuacin se ilustra un ejemplo para explicar con mayor detalle el modo de
direccionamiento relativo.

Ejemplo

LDA #40T ; A = 40, Acumulador = 40


CMP #30T ; Compara A con 30
BNE Salto1 ; Si no son iguales salta a la etiqueta Salto1, de lo contrario sigue en la siguiente lnea; como
en este caso no son iguales, se produce el salto.

Explicacin

La CPU lee la instruccin de saltar hacia la etiqueta Salto1 en caso de que al efectuar el proceso de
comparacin el bit Z = 0.
La CPU lee la direccin de memoria denominada en este caso $XX, en donde la direccin $XX es
interpretada como el valor de desplazamiento relativo. Despus de realizado este proceso, el contador
de programa apunta al primer byte de la prxima instruccin a ejecutar.
Si el bit Z =1, no se produce ninguna bifurcacin o salto y el programa debe continuar con la
prxima instruccin. De lo contrario, si el bit Z=0, la CPU generar la direccin completa sumando el
desplazamiento con signo mencionado anteriormente ($XX) con el valor existente en el contador de
programa para obtener la direccin destino de la bifurcacin o salto, provocando que la ejecucin del
programa contine desde otro punto del programa (Salto1).

La tabla siguiente incluye una lista de todas las instrucciones que se pueden usar en el modo de
direccionamiento relativo.

Instruccin Nemnico
Saltar a la etiqueta si el bit de carry es 0 BCC
Saltar a la etiqueta si el bit de carry es 1 BCS
Saltar a la etiqueta si es igual (bit Z = 1) BEQ
Saltar a la etiqueta si el bit de carry medio es 0 (H) BHCC
Saltar a la etiqueta si el bit de carry medio es 1 (H) BHCS
Saltar a la etiqueta si es mayor BHI
Saltar si es mayor o igual BHS
Saltar si el Pin IRQ est en alto BIH
Saltar si el pin IRQ est en bajo BIL
Saltar a la etiqueta si es menor BLO
Saltar a la etiqueta si es menor o igual BLS
Saltar si la bandera de interrupcin est en 0 BMC

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 63

Saltar si el resultado de una operacin es negativo BMI


Saltar si la bandera de interrupcin est en 1 BMS
Saltar a la etiqueta si no es igual BNE
Saltar si el resultado de una operacin es positivo BPL
Saltar a la etiqueta siempre BRA
Saltar si el bit N del registro OPR est en 0 BRCLR
Nunca saltar BRN
Saltar si el bit N del registro OPR est en 1 BRSET
Poner en 1 el bit N del registro OPR BSET
Saltar a subrutina BSR

TABLA 3.8
Instrucciones que se pueden usar en el modo de direccionamiento
relativo.

DIRECCIONAMIENTO DE MEMORIA A MEMORIA: Se puede utilizar de cuatro formas


diferentes:
1. EL MOVER DE Inmediato Directo
Ej: MOV #$30,$80
2. El MOVER DE Directo Directo
Ej: MOV $80,$90
3. El MOVER DE Directo Indexado
Ej: MOV $80,X+
4. El MOVER DE Indexado Directo
Ej: MOV X+,$90

DIRECCIONAMIENTO CON STACK POINTER: Permite agregar a 8 o 16 bits con Offset.


Ej: LDA $50,SP ; STACK POINTER A 8 BITS
LDA $0150,SP ; STACK POINTER A 16 BITS

3.4 MEMORIA RAM


El microcontrolador posee 128 registros de propsito general en la memoria RAM, estos registros se utilizan
para la adjudicacin de variables necesarias dentro de un programa especfico.
Este espacio est definido desde la direccin $0080 hasta la $00FF.

ALFAOMEGA - FREESCALE
64 JUAN CARLOS VESGA FERREIRA

3.5 SET DE INSTRUCCIONES


Las instrucciones son aquellas rdenes que se dan al microcontrolador para que realice una tarea especfica.
Como se puede observar, la programacin de estos dispositivos se realiza en lenguaje Assembler, el cual
tiene la ventaja de que efecta tareas en forma muy rpida y el paso es casi directo al lenguaje comprendido
por cualquier dispositivo electrnico; se trata del lenguaje binario, el cual est conformado por dos dgitos
(1 y 0).
Este microcontrolador permite tambin su programacin mediante compiladores en lenguajes de alto
nivel como el C, el cual se explicar en detalle en captulos posteriores. Mientras tanto, iniciemos el camino
hacia la programacin de los microcontroladores Freescale. En el anexo de la pgina web del libro se explica
en detalle cada una de las instrucciones que hacen parte de esta familia de microcontroladores describiendo
su sintaxis, funcin y algunos ejemplos que harn fcil la comprensin y el uso de cada uno de ellos dentro
de un programa, segn sea el caso.

Nota
En la siguiente tabla se ha reunido todo el conjunto de instrucciones
ordenadas de manera alfabtica; con el fin de brindar al estudiante una
gua fcil y didctica a la hora de querer consultar alguna instruccin
en especial, ilustrndose su sintaxis, funcin, nmero de ciclos y
algunos detalles adicionales que la convierten en pieza clave a la hora
de desarrollar aplicaciones basadas en microcontroladores Motorola
Freescale.

INSTRUCCIN OPERACIN No. CICLOS


ADC #OPR SUMA CON CARRY 2
ADC OPR 3
ADC OPR,X A = A+(M)+C 3
ADC ,X M = Dato o valor almacenado 2
ADC OPR,SP C = Carry 4
ADD #OPR SUMA SIN CARRY 2
ADD OPR 3
ADD OPR,X A = A+(M) 3
ADD ,X M = Dato o valor almacenado 2
ADD OPR,SP 4
AIS #OPR SP=SP+DATO 2
AIX #OPR H:X = H:X + DATO 2

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 65

AND #OPR FUNCION AND 2


AND OPR 3
AND OPR,X A = A&(M) 3
AND ,X M = Dato o valor almacenado 2
AND OPR,SP 4
ASL OPR Desplazamiento aritmtico a la izquierda 4
ASLA 1
ASLX 1
ASL OPR,X C B7 B0 0 4
ASL,X 3
ASL OPR,SP 5
ASR OPR Desplazamiento aritmtico a la derecha 4
ASRA 1
ASRX 1
ASR OPR,X B7 B0 C 4
ASR OPR,SP 5
BCC Etiqueta Saltar a la etiqueta si el bit de carry es 0 3
BCLR N,OPR Borrar el bit N del registro OPR 4
BCS Etiqueta Saltar a la etiqueta si el bit de carry es 1 3
BEQ Etiqueta Saltar a la etiqueta si es igual (bit Z=1) 3
BGE OPR Saltar si es igual o mayor que OPR 3
BGT OPR Saltar si es mayor que OPR 3
BHCC Etiqueta Saltar a la etiqueta si el bit de carry medio es 0 (H) 3
BHCS Etiqueta Saltar a la etiqueta si el bit de carry medio es 1 (H) 3
BHI Etiqueta Saltar a la etiqueta si es mayor 3
BHS Etiqueta Saltar si es mayor o igual 3
BIH Etiqueta Saltar si el pin IRQ est en alto 3
BIL Etiqueta Saltar si el pin IRQ est en bajo 3
BIT #OPR 2
BIT OPR Probar bits 3
BIT OPR,X 3
BIT ,X A & (M) 2
BIT OPR,SP M = Dato o valor almacenado 4
BLE OPR Saltar si es igual o menor que OPR 3
BLO ETIQ Saltar a la etiqueta si es menor 3
BLS ETIQ Saltar a la etiqueta si es menor o igual 3
BLT OPR Saltar si es menor que 3
BMC ETIQ Saltar si la bandera de interrupcin est en 0 3
BMI ETIQ Saltar si el resultado de una operacin es negativo 3
BMS ETIQ Saltar si la bandera de interrupcin est en 1 3
BNE ETIQ Saltar a la etiqueta si no es igual 3

ALFAOMEGA - FREESCALE
66 JUAN CARLOS VESGA FERREIRA

BPL ETIQ Saltar si el resultado de una operacin es positivo 3


BRA ETIQ Saltar a la etiqueta siempre 3
BRCLR N,OPR,ETIQ Saltar a la etiqueta si el bit N del registro OPR est en 0 5
BRN ETIQ Nunca saltar 3
BRSET N,OPR,ETIQ Saltar a la etiqueta si el bit N del registro OPR est en 1 5
BSET N,OPR Poner en 1 el bit N del registro OPR 4
BSR ETIQ Saltar a subrutina 4
CBEQ OPR,ETIQ 5
CBEQA #OPR,ETIQ Comparar el valor de A con el valor #OPR o el dato 4
CBEQX #OPR,ETIQ almacenado en OPR y saltar si son iguales a la etiqueta 4
CBEQ OPR,X+,ETIQ 5
CBEQ OPR,SP,ETIQ 5
CLC Borrar el bit de carry 1
CLI Borrar el bit de interrupcin o bandera de interrupcin 2
CLR OPR 3
CLRA 1
CLRX Borrar 1
CLRH 1
CLR OPR,X 3
CLR,X 2
CLR OPR,SP 4
CMP #OPR 2
CMP OPR Comparar el valor de A con el valor #OPR o el dato 3
CMP OPR,X almacenado en OPR 3
CMP ,X 2
CMP OPR,SP 4
COM OPR 4
COMA 1
COMX Complemento a uno 1
COM OPR,X 4
COM ,X 3
COM OPR,SP 5
CPHX #OPR Comparar el valor de H:X con el valor #OPR o el dato 3
CPHX OPR almacenado en OPR 4
CPX #OPR 2
CPX OPR Comparar el valor de X con el valor #OPR o el dato 3
CPX ,X almacenado en OPR 3
CPX OPR,X 2
CPX OPR,SP 4
DAA Ajustar a decimal el registro A 2

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 67

DBNZ OPR,ETIQ 5
DBNZA ETIQ 3
DBNZX ETIQ Decrementar y saltar si no es cero 3
DBNZ OPR,X,ETIQ 5
DBNZ X,ETIQ 4
DBNZ OPR,SP,ETIQ 5
DEC OPR 4
DECA 1
DECX Decrementar y saltar si no es cero 1
DEC OPR,X 4
DEC ,X 3
DEC OPR,SP 5
DIV Dividir A=(H:A)/X (A = cociente, H = residuo) 7
EOR #OPR 2
EOR OPR OR EXCLUSIVA 3
EOR OPR,X 3
EOR ,X A=A (M) 2
EOR OPR,SP M = Dato o valor almacenado 4
INC OPR 4
INCA 1
INCX Incrementar 1
INC OPR,X 4
INC ,X 3
INC OPR,SP 5
JMP OPR 2
JMP OPR,X Saltar a la direccin OPR 3
JMP ,X 2
JSR OPR 4
JSR OPR,X Saltar a subrutina 5
JSR ,X 4
LDA #OPR 2
LDA OPR 3
LDA OPR,X Cargar en A el valor #OPR o el dato almacenado en OPR 3
LDA ,X 2
LDA OPR,SP 4
LDHX #OPR Cargar en H:X el valor #OPR o el dato almacenado en OPR 3
LDHX OPR 4
LDX #OPR 2
LDX OPR 3
LDX OPR,X Cargar en X el valor #OPR o el dato almacenado en OPR 3
LDX ,X 2
LDX OPR,SP 4
LSL OPR 4
LSLA 1
LSLX Desplazamiento lgica a la izquierda (igual que ASL) 1
LSL OPR,X 4
LSL ,X 3
LSL OPR,SP 5

ALFAOMEGA - FREESCALE
68 JUAN CARLOS VESGA FERREIRA

LSR OPR 4
LSRA Desplazamiento lgica a la derecha 1
LSRX 1
LSR OPR,X 4
0 B7 B0 C
LSR ,X 3
LSR OPR,SP 5
MOV OPR,OPR 5
MOV OPR,X+ Mover fuente, destino 4
MOV #OPR,OPR 4
MOV X+,OPR 4
MUL Multiplicacin sin signo (X:A = X* A) 5
NEG OPR 4
NEGA 1
NEGX Complemento a Dos 1
NEG OPR,X 4
NEG ,X 3
NEG OPR,SP 5
NOP No operacin 1
NSA Intercambiar nibles de A (A=(A[3:0]:A[7:4])) 3

ORA #OPR 2
ORA OPR FUNCION OR 3
ORA OPR,X 3
ORA ,X A = A | (M) 2
ORA OPR,SP M = Dato o valor almacenado 4
PSHA Insertar A en el stack 2
PSHH Insertar H en el stack 2
PSHX Insertar X en el stack 2
PULA Sacar A del stack 2
PULH Sacar H del stack 2
PULX Sacar X del stack 2
ROL OPR 4
ROLA Rotar a la izquierda a travs del carry 1
ROLX 1
ROL OPR,X 4
ROL ,X C B7 B0 3
ROL OPR,SP 5
ROR OPR 4
RORA Rotar a la derecha a travs del carry 1
RORX 1
ROR OPR,X B7 B0 C 4
ROR ,X 3
ROR OPR,SP 5

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 69

RSP Reset al Stack Pointer 1


RTI Retornar de una interrupcin 7
RTS Retornar de una subrutina 4
SBC #OPR 2
SBC OPR RESTA CON CARRY 3
SBC OPR,X 3
SBC ,X A = A - (M) C 2
SBC OPR,SP M = Dato o valor almacenado 4
SEC Colocar el bit de carry en 1 1
SEI Colocar el bit de interrupcin en 1 I=1 2
STA OPR 3
STA OPR,X Asignar A en el registro OPR 4
STA ,X M=A 2
STA OPR,SP M = Dato o valor almacenado en direccin OPR 4
STHX OPR Asignar H:X en el registro OPR 4
STOP Habilitar el pin IRQ, detener el oscilador 1
STX OPR 3
STX OPR,X Asignar X en el registro OPR 4
STX ,X 2
STX OPR,SP 4
SUB #OPR 2
SUB OPR RESTAR 3
SUB OPR,X 3
SUB ,X A = A - (M) 2
SUB OPR,SP M = Dato o valor almacenado 4
SWI Interrupcin por software 9
TAP Transferir A al CCR , CCR = A 2
TAX Transferir A a X ,X=A 1
TPA Transferir CCR a A ; A = CCR 1
TST OPR 3
TSTA 1
TSTX Probar si la cantidad es negativa o cero 1
TST OPR,X 3
TST ,X 2
TST OPR,SP 4
TSX Transferir SP a H:X , H:X = SP + 1 2
TXA Transferir X a A ,A=X 1
TXS Transferir H:X a SP , SP = H:X 1 2

TABLA 3.9
Conjunto de instrucciones.

ALFAOMEGA - FREESCALE
70 JUAN CARLOS VESGA FERREIRA

EJERCICIOS PROPUESTOS

Escribir una rutina que permita leer dos nmeros y efectuar las siguientes funciones:
a. Sumarlos
b. Restarlos
c. Multiplicarlos
d. Dividirlos
Las respuestas correspondientes se deben almacenar en las direcciones $80, $81, $82, $83, respectivamente.

Disear un programa que permita sumar los nmeros del 1 al 100 y calcular su promedio.
Escribir una rutina que permita leer dos nmeros y efectuar las siguientes funciones:
a. AND
b. OR
c. XOR
d. Complementarlos a 1 el primero y a 2 el segundo, y las respuestas correspondientes se deben
almacenar en las direcciones $80, $81, $82, $83, respectivamente.

NOTA
Se recomienda, para resolver estos ejercicios, el uso del CodeWarrior o
el WINIDE con el fin de codificar y depurar paso a paso cada uno de los
programas, verificando su funcionamiento. Ver Anexo A.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LA PROGRAMACIN DE LOS MICROCONTROLADORES MOTOROLA-FREESCALE 71

RESUMEN DEL CAPTULO


CAPTULO
Existen unos registros que se encuentran constantemente interactuando con el
microcontrolador, efectuando tareas dependiendo de las instrucciones que se vayan
realizando. Uno de los detalles a tener en cuenta es que a pesar de que estos registros
hacen parte constante de la programacin de microcontroladores, son registros propios e
internos de la CPU y por tal razn no se encuentran mapeados en la memoria.
Estos registros son: acumulador (A), registro ndice (H:X), pila (SP), contador de programa (PC) registro
de banderas (CCR).
En todo proceso de programacin se requiere realizar constantemente operaciones, asignacin de valores
a registros y extraer valores existentes en otros registros para transferirlos y/o procesarlos con otros datos; este
proceso de extraccin y adjudicacin se conoce como direccionamiento. Los microcontroladores Freescale
usan seis modos de direccionamiento: inherente, inmediato, extendido, directo, indexado y relativo.
Las instrucciones son aquellas rdenes que se le dan al microcontrolador para que realice una tarea
especfica. Como se puede observar, la programacin de estos dispositivos se puede realizar en lenguaje
Assembler o en lenguaje C.

ALFAOMEGA - FREESCALE
Captulo 4
PUERTOS DE ENTRADA/SALIDA
OBJETIVO DEL CAPTULO

A l finalizar el captulo el estudiante tendr


conocimiento sobre qu es un puerto del
microcontrolador?, cuntos puertos hay segn la
4.1 INTRODUCCIN
referencia del microcontrolador a utilizar?, qu Los puertos del microcontrolador son el punto de
recursos adicionales brindan al estudiante aparte comunicacin entre el microcontrolador y el mundo
de configurarse como simple terminales de entrada/ exterior; a travs de ellos se puede efectuar procesos
salida lgicos?, cmo configurarlos segn los de control electrnico sobre dispositivos de potencia,
requerimientos del estudiante? y finalmente, cmo instrumentacin, telemetra, etc. Adems, permiten
interactuar con ellos en un momento dado? tambin recibir seales del mundo exterior como,
por ejemplo, seales provenientes de transductores,
CONOCIMIENTOS PREVIOS amplificadores, transmisores, actuadores, etc. En
otras palabras, los puertos del microcontrolador se
Para iniciar el estudio del presente captulo es pueden ver como los brazos con los que interacta el
necesario que el lector posea conocimientos microcontrolador con otros sistemas electrnicos.
sobre las caractersticas bsicas de la familia de
microcontroladores HC08 en estudio y conceptos En el microcontrolador, 23 pines pueden ser
bsicos de lgica digital, con el fin de que pueda configurados de manera bidireccional (I/O) a travs
comprender el comportamiento y configuracin de tres puertos paralelos. Todos los pines pueden ser
de los puertos o perifricos presentes en esta configurados como entrada o salida.
familia de microcontroladores
74 JUAN CARLOS VESGA FERREIRA

Se debe tener en cuenta que en la gran mayora de familias de microcontroladores los puertos de entrada/
salida no solamente cumplen funciones de envo y recepcin de seales digitales, sino que adems comparten
recursos internos con el microcontrolador; es decir, que si por un pin en especial se pueden manipular datos
digitales (1 y 0), segn la estructura interna, tambien podra cumplir, por ejemplo, funciones de conversin
A/D o funciones de PWM, o funciones de compracin analgica, entre otras funciones adicionales propias
de cada familia de microcontroladores a utilizar. Estos mdulos alternos o compartidos presentes en el
microcontrolador se pueden conocer para cualquier familia de microcontroladores en el manual de referencia
propio de cada uno; para el caso del JK1/JK3/JL3, se puede observar en el captulo 2 del presente libro.

NOTA
Antes de comenzar con la descripcin de cada uno de los puertos existentes
en la familia JK1/JK3/JL3, se recomienda el montaje del siguiente circuito, el
cual no solamente le ayudar a la verificacin de los ejercicios resueltos
sino que adems podr servirle de gua para desarrollar otros programas
sencillos y visualizar posibles resultados que al procesarse internamente en
el microcontrolador sera imposible visualizarlos a simple vista, pero con
la ayuda de este circuito podr visualizar el resultado, por ejemplo, de una
operacin matemtica, lgica o el resultado de algn proceso en particular,
gracias al banco de LEDS presentes en el esquema.

A continuacin se ilustra cada uno de los registros correspondientes al uso y configuracin de cada uno
de los puertos existentes en esta familia especial de microcontroladores.

4.2 REGISTRO PORT A (PTA)

Direccin $0000

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0
Escribir PTA 6 PTA 5 PTA 4 PTA 3 PTA 2 PTA 1 PTA 0

Este registro posee sus 8 bits, de los cuales slo 7 pueden ser configurados como pines de entrada o salida
de manera independiente a travs del registro DDRA. Adems de permitir manejar independientemente
las salidas de cada uno de sus bits, tiene la funcin especial de interrupcin por teclado, efectundose esta
configuracin mediante el registro KBI, lo cual se explicar en detalle ms adelante. Una de las principales
caractersticas de este puerto es que cada pin del puerto A posee configuracin por software de las resistencias
de Pull-Up a travs del registro PTAPUE. Estas resistencias tienen un valor de 30 k.

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 75

5V

1K

20 15 220
20pF RST PTB0
220
14
PTB1
3
OSC1 220
13
4MHz + 10M PTB2
4
OSC2/PTA6 220
12
PTB3

20pF 1 11 220
IRQ1 PTB4

8 220
PTB5

7 220
5V
+ PTB6

5 220
6
VDD PTB7

2
VSS
17 + 5V
PTD2

16
PTD3
10K
19
PTD4
SW1
18
PTD5 +
10
PTD6

9
PTD7

FIGURA 4.1
Circuito recomendado para la verificacin de rutinas, ejemplos resueltos y propuestos.

Una resistencia de Pull-Up consiste en una resistencia que se encuentra conectada


internamente entre un pin en particular del puerto A y el terminal positivo de
alimentacin o VDD, que en nuestro caso sera +5 V.

ALFAOMEGA - FREESCALE
76 JUAN CARLOS VESGA FERREIRA

Para comprender mucho mejor este concepto, supongamos que se desea conocer cmo estara conectada
la resistencia del Pull-Up presente en el Pin 0 del puerto A (PTA0). En la grfica siguiente se ilustra este
concepto con gran detalle.

VDD (+5V)

30k Resistencia de
Pull-Up

PIN PTA0

Microcontrolador

FIGURA 4.2
Conexin interna de una resistencia de Pull-Up a travs del pin PTA0.

4.3 REGISTRO DE CONFIGURACIN DEL PORT A (DDRA)

Direccin $0004
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer 0
Escribir DDRA 6 DDRA 5 DDRA 4 DDRA 3 DDRA 2 DDRA 1 DDRA 0

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 77

Mediante este registro de 8 bits, de los cuales slo se puede acceder a 7 bits, se efecta la configuracin
de los bits del registro PORT A, ya sea como entradas o como salidas. Tal como se mencion en el captulo
2, el registro PORTA permite visualizar el estado actual de los diferentes niveles presentes en el puerto; sin
embargo, el registro DDRA sera el encargado de realizar la configuracin del puerto A, en donde se establece
inicialmente qu pines se configurarn para recibir seales de fuentes externas y qu pines funcionarn como
salidas del microcontrolador hacia el mundo real.
A continuacin se describe qu valores deben establecerse en el registro DDRA para configurar un pin
como entrada o como salida.

DDRA[6:0]: bits de configuracin del PORT A


1: El pin correspondiente del PORT A es configurado como salida
0: El pin correspondiente del PORT A es configurado como entrada

4.4 REGISTRO PTAPUE


Direccin $000D

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir PTA6EN PTAPUE6 PTAPUE5 PTAPUE4 PTAPUE3 PTAPUE2 PTAPUE1 PTAPUE0

Este registro es el que permite habilitar o deshabilitar las resistencias de Pull-Up para cada uno de los pines
del puerto A. Se debe tener en cuenta que cuando se habilitan las resistencias de Pull-Up, estas resistencias
sern vlidas solamente cuando el pin correspondiente es configurado como entrada y dinmicamente
deshabilitado cuando este pin es configurado como salida.
A continuacin se explica en detalle el significado de cada bit perteneciente al registro PTAPUE y la
funcin que desempea cada uno.

PTA6EN: Habilitar el pin PTA6 como OSC2.


La funcin del OSC2 se configura cuando se escoge la opcin de oscilador RC.
1: El OSC2 es configurado para utilizar el pin PTA6 como un pin de I/O, con las funciones de
interrupcin y configuracin de resistencias de Pull-Up.
0: El OSC2 es configurado como oscilador de tipo RC.

PTAPUE[6:0]: Habilitacin de resistencias de Pull-Up


1: Habilita las resistencia de Pull-Up correspondiente al pin del puerto A, siempre y cuando este
pin est configurado como entrada.
0: Deshabilita la resistencia de Pull-Up correspondiente al pin del puerto A.

ALFAOMEGA - FREESCALE
78 JUAN CARLOS VESGA FERREIRA

Ejemplo

Supongamos que se desea configurar en el puerto A los 4 bits de menos peso como entradas y los 4 pines de
ms peso como salidas; adicionalmente, habilitar las resistencias de Pull-Up para los 4 pines configurados
como entrada en el puerto A.

Solucin

MOV #$F0,DDRA
MOV #$8F,PTAPUE

Explicacin

En la primera instruccin se almacen en el registro DDRA el valor $F0 (F0h) que corresponde al valor
11110000 expresado en binario, provocando con ello que los bits en donde se encuentran con valor 0 sean
configurados como entrada y los bits donde se encuentran 1 sean configurados como salida.
En la segunda instruccin se almacen en el registro PTAPUE el valor $8F (8Fh) que corresponde al valor
10001111 expresado en binario, provocando con ello que los bits en donde se encuetran con valor 0 se
deshabilite el uso de resistencias de Pull-Up y los bits donde se encuentran 1 sean habilitadas; sin embargo,
en el bit 7 del registro PTAPUE se estableci el valor 1, el cual en este caso no corresponde a la habilitacin
de una resistencia de Pull-Up, sino habilitando la opcin de ser utilizado este pin como pin de I/O y no como
entrada para un oscilador de tipo RC.

Con las intrucciones anteriores se da solucin al problema, configurando como


primera medida los 4 bits de menos peso del puerto A como entradas y los 4 bits de
ms peso como salidas; adems se habilit internamente el uso de 4 resistencias de
Pull-Up en los pines correspondientes a los 4 bits de menos peso del puerto A.

4.5 REGISTRO PORT B (PTB)

Direccin $0001
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer
Escribir PTB7 PTB6 PTB5 PTB4 PTB3 PTB2 PTB1 PTB0

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 79

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

ADC7 ADC6 ADC5 ADC4 ADC3 ADC2 ADC1 ADC0

El registro PORTB permite la manipulacin de seales digitales entre sus terminales, tal como ocurre con
el registro PORTA; sin embargo, este puerto comparte adicionalmente recursos con el mdulo de conversin
analgico-digital incluido internamente en el microcontrolador, en donde cada pin del puerto correspondera
a un canal de conversin A/D. Cada uno de estos pines puede ser configurado como entrada o como salida
de manera independiente a travs del registro DDRB.

4.6 REGISTRO DE CONFIGURACIN DEL PORT B (DDRB)


Direccin $0005

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0

Mediante este registro de 8 bits se efecta la configuracin de los bits del registro PORT B, ya sea como
entradas o salidas, tal como ocurra con el registro de configuracin DDRA.

DDRB[7:0]: bits de configuracin del PORT B


1: El pin correspondiente del PORT B es configurado como salida.
0: El pin correspondiente del PORT B es configurado como entrada.

4.7 REGISTRO PORT D (PTD)


Direccin $0003

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir PTD7 PTD6 PTD5 PTD4 PTD3 PTD2 PTD1 PTD0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Funcin 1 LED LED TCH1 TCH0 LED LED
Funcin 2 25MA 25MA ADC8 ADC9 ADC10 ADC11

ALFAOMEGA - FREESCALE
80 JUAN CARLOS VESGA FERREIRA

El registro PORTD posee dos pines destinados para uso del mdulo TIM, 4 pines destinados para canales
de conversin A/D (los mdulos TIM y ADC sern tratados en captulos posteriores) y dos pines (PTD6 y
PTD7) que poseen drivers de corriente superior a 25 mA y resistencias de Pull-Up programables de 5 k.
Cada uno de estos pines puede ser configurado como entrada o como salida de manera independiente a
travs del registro DDRD.

4.8 REGISTRO DE CONFIGURACIN DEL PORT D (DDRD)

Direccin $0007

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0

Mediante este registro de 8 bits se efecta la configuracin de los bits del registro PORT D, ya sea como
entradas o como salidas.

DDRD[7:0]: bits de configuracin del PORT D


1: El pin correspondiente del PORT D es configurado como salida.
0: El pin correspondiente del PORT D es configurado como entrada.

4.9 REGISTRO DE CONTROL DEL PORT D (PDCR)

Direccin $000A

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0
Escribir SLOWD7 SLOWD6 PTDPU7 PTDPU6

Este registro cumple funciones muy semejantes a las del registro PTAPUE explicado anteriormente,
permitiendo habilitar y deshabilitar las resistencias de Pull-Up, y manejo del driver de corriente para los
pines PTD7 y PTD6. A continuacin se explica el modo de configuracin de este registro y las funciones que
realiza segn los valores establecidos en cada uno de sus bits.

SLOWDx: los bits SLOWD6 Y SLOWD7 permiten habilitar drenador abierto y driver
de corriente.

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 81

1: El pin est configurado como salida con drenador abierto.


0: El pin est configurado con Push-Pull.

PTDPUx: bits para habilitar resistencias de Pull-Up


1: Habilitar resistencia de Pull-Up de 5 k
0: Deshabilitar resistencia de Pull-Up de 5 k

velocidad establecida.
4.10 EJERCICIOS RESUELTOS
Teniendo en cuenta
lo anterior resolvamos nuevamente el
ejercicio,
Antes de aventurarnos con la
en el mundo de diferencia de incluir
la programacin de los microcontroladores Freescale, es necesario
un retardo que permita la visualizacin
conocer algunos conceptos especiales que le ayudarn al desarrollador a generar fcilmente cualquier
programa que desee.ms
Por clara de loesocurrido
tal motivo necesarioenestablecer
el procesouna estructura de programacin, la cual ser
utilizada en todos los programas que se desarrollen en adelante. Esta estructura servir de plantilla o molde
para la codificacin de cualquier programa de microcontroladores que se requiera.

Inclusin de libreras especiales para configuracin de bits, registros y dems propios de


la referencia de microcontrolador a programar.
Inclusin de libreras especiales que incluyan subrutinas requeridas en un proceso en
particular.

$INCLUDE JL3REGS.INC

Etiquetas de direccin en el microcontrolador

FLASH EQU $EC00


RESET EQU $FFFE
RAM EQU $80
COPD EQU 0

Definicin de los bits que se utilizarn en el microcontrolador para manejar funciones especiales, por
ejemplo: encender un Led, habilitar dispositivo, etc. Para el caso, supongamos que se desea que el
Led1 sea controlado por el pin 1 y la habilitacin de un relevo por el pin 2 de un puerto cualquiera.

LED1 EQU 1
H_RELEVO EQU 2

ALFAOMEGA - FREESCALE
82 JUAN CARLOS VESGA FERREIRA

Definicin de registros a utilizar en la RAM; en esta seccin se establecen todas las variables y registros
definidos por el desarrollador. Para el caso, supongamos que se desea crear dos variables: Cantidad1 y
Cantidad2.
ORG RAM
CANTIDAD1 RMB 1
CANTIDAD2 RMB 1

Definicin de la direccin a partir de la cual se debe escribir el programa, direccin correspondiente


a la memoria Flash.
ORG FLASH

En esta seccin del programa se pueden establecer vectores o tablas que se desee trabajar en la aplicacin
a desarrollar.
A continuacin se ilustra 2 tablas; la primera hace referencia a un mensaje o cadena de caracteres y la
segunda a un vector con cantidades hexadecimales.
TABLA FDB PRUEBA DE PANTALLA
TABLA1 DB $0F,$F0,$AA,$55
Seccin de inicio del programa principal

INICIO BSET COPD,CONFIG1 ; Deshabilita el COP

Seccin para configuracin de registros especiales, configuracin de puertos como entradas/salidas,


establecer valores iniciales en cada uno de los terminales del microcontrolador, etc.

MOV #$00,PORTB ; Configuracin de puertos B y D


MOV #$FF,DDRB
MOV #00,PORTD
MOV #$FF,DDRD

Seccin para escritura del cuerpo del programa


.........
...........
...................
............................
Seccin para establecer rutas hacia subrutinas relacionadas con interrupciones, inicializacin del sistema
y reset
ORG RESET
DW INICIO

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 83

Ejercicio 1
Enunciado del problema
Se desea escribir un programa que permita encender o apagar un LED segn el estado de un interruptor.
Si el interruptor se encuentra abierto, el LED deber encender pero si el interruptor se encuentra cerrado,
el LED deber apagarse.
Solucin
Utilizando el circuito propuesto inicialmente para el microcontrolador MC68HC908JK3, la solucin del
ejemplo sera la siguiente:

5V 1K

20 15 220
20pF RST PTB0
220
14
PTB1
3
OSC1 220
13
4MHz + 10M PTB2
4
OSC2/PTA6 220
12
PTB3

20pF 1 11 220
IRQ1 PTB4

8 220
PTB5

7 220
5V
+ PTB6

5 220
6
VDD PTB7

2
VSS
17 + 5V
PTD2

16
PTD3
10K
19
PTD4
SW1
18
PTD5 +
10
PTD6

9
PTD7

FIGURA 4.3 Circuito propuesto, utilizado para el encendido y apagado del LED conectado al
pin PTB0 segn el estado del interruptor SW1.

ALFAOMEGA - FREESCALE
84 JUAN CARLOS VESGA FERREIRA

El programa que obedece a este ejercicio es el siguiente:

$ Include jl3regs.inc

FLASH EQU $ECE0


RESET EQU $FFFE
LED EQU 1
SW EQU 2 ;Bit 2 Puerto D
Captulo
COPD5 EQU 0
MANEJO
ORGDEL TEMPORIZACIN
FLASH BSICA
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
Objetivo del captulo
BSET LED,PORTB ;BIT 1 PORTB = 1
Al finalizar el captulo
BSET el LED,DDRB
estudiante estar familiarizado con conceptos clave a la hora
;BIT 1 Salida
de disear aplicaciones basadas en
BCLR SW,PORTD microcontroladores,
;BIT 2 PORTD = 0 el uso de retardos y
que requieran
temporizaciones bsicas,
BCLRmediante conocimientos bsicos
SW,DDRD del circuito oscilador y el tiempo
;BIT 2 Entrada
de ejecucin de una instruccin.
SALTO BRSET SW,PORTB,LED_ON ;SW abierto?, Ir a LED_ON
5.1 INTRODUCCIN BRCLR SW,PORTB,LED_OFF ;SW abierto?, Ir a LED_OFF
BRA un
Muchas veces se requiere SALTO
retardo en diferentes;Iraplicaciones,
a SALTO por ejemplo: en el captulo
anterior se expuso un ejercicio de rotacin del encendido de un LED, pero, debido a la gran
LED_ON BSET LED,PORTB ;Encender Led
velocidad de ejecucin, se daba la sensacin de que los LEDS siempre estuvieran encendidos,
BRAcierto
lo cual en realidad no era SALTO
ya que slo uno de ellos estaba encendido y, por caractersticas
propias del ojo humano, al no poder responder a velocidades de conmutacin tan altas se
LED_OFF BCLR LED,PORTB ;Apagar Led
produca esa sensacin de encenddo constante.
BRA SALTO
Si se hubiera contado con una rutina que generara un retardo correspondiente a un tiempo
cercano o igual al segundo,
ORG el resultado de rotacin
RESET sera excelente
;Cuando y fcil de apreciar a la
se Energiza
DW INICIO ;Ir a rutina INICIO

Ejercicio 2
Enunciado del problema
Analicemos un segundo ejercicio en el cual se desea que dependiendo del valor de un interruptor, el
encendido de un LED sea rotado de derecha a izquierda cuando el interruptor est abierto y sea rotado
de izquierda a derecha cuando el interruptor est cerrado.

Solucin
Utilizando el mismo circuito del ejemplo anterior, el programa que obedece a este ejercicio es el
siguiente:

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 85

$ Include jl3regs.inc
FLASH EQU $ECE0
RESET EQU $FFFE
LED EQU 0
SW EQU 2
COPD EQU 0

ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
BSET LED,PORTB ;BIT 0 PORTB = 1
MOV #$FF,DDRB ;Puerto B Salida
BCLR SW,PORTD ;BIT 2 PORTD = 0
BCLR SW,DDRD ;BIT 2 Entrada
SALTO BRSET SW,PORTD,ROT_IZQ ;SW abierto?, Ir a ROT_IZQ
BRCLR SW,PORTB,ROT_DER ;SW abierto?, Ir a ROT_DER
BRA SALTO ;Ir a SALTO

ROT_IZQ ROL PORTB ;Rotar a Izquierda


BRA SALTO

ROT_DER ROR PORTB ;Rotar a Derecha


BRA SALTO

ORG RESET ;Cuando se Energiza


DW INICIO ;Ir a rutina INICIO

Ejercicio 3
Enunciado del problema
Analicemos un tercer ejercicio. Uno de los desafos presentes a la hora de realizar un programa en lenguaje
ensamblador es el uso de bucles o rutinas repetitivas. Resolvamos ahora uno de los programas propuestos
anteriormente, realizando la multiplicacin de dos nmeros con la restriccin de no utilizar la instruccin
MUL.

Solucin
Segn los conceptos bsicos sobre aritmtica, una multiplicacin consiste en una suma sucesiva de una
cantidad A (multiplicando), tantas veces como lo indique una cantidad B (multiplicador) y el resultado de
esta suma sucesiva ser el resultado de la multiplicacin (producto).

Ejemplo: Si se desea multiplicar 8 por 3, el valor resultante consistir en sumar sucesivamente la cantidad
A (8) tantas veces como lo indique la cantidad B (3). Por tanto:

Producto = 8 + 8 + 8 = 24

ALFAOMEGA - FREESCALE
86 JUAN CARLOS VESGA FERREIRA

Utilizando el mismo circuito del ejemplo anterior, se visualizar el resultado de multiplicar dos cantidades, y
para facilitar el ejercicio circuitalmente se establecern las dos cantidades a multiplicar directamente desde
el programa, visualizando el resultado de la multiplicacin en el puerto B. El programa que obedece a este
ejercicio es el siguiente:

$ Include jl3regs.inc
FLASH EQU $ECE0
RESET EQU $FFFE
RAM EQU $80
COPD EQU 0
ORG RAM
CANT_A RMB 1
CANT_B RMB 1
MULTIPLI RMB 1

ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
CLR PORTB ;PORTB = 00h
MOV #$FF,DDRB ;Puerto B Salida
CLR DDRD ;Puerto D Entrada

En este caso se realizar la multiplicacin de 10 * 3, donde CANT_A = 10 y CANT_B=3

OTRO MOV #10T,CANT_A ;CANT_A=10


MOV #3T,CANT_B ;CANT_B=3
CLR MULTIPLI ;MULTIPLI=0

Rutina de multiplicacin de CANT_A*CANT_B

LDA MULTIPLI ; A = MULTIPLI , A=0


SALTO ADD CANT_A ; A = A + CANT_A
DBNZ CANT_B,SALTO ;Mientras CANT_B0, salta
STA MULTIPLI ;MULTIPLI=CANT_A*CANT_B
STA PORTB ;PORTB=MULTIPLI,
;Visualizando el resultado
BRA OTRO

La rutina decrementa CANT_B y salta si no es cero, realizando en este caso el salto tantas veces como lo
indique CANT_B, lo cual se representa en realizar CANT_B veces la suma sucesiva de CANT_A, quedando
finalmente el resultado de la multiplicacin en el registro MULTIPLI.

ALFAOMEGA - FREESCALE
PUERTOS DE ENTRADA/SALIDA 87

ORG RESET ;Cuando se Energiza


DW INICIO ;Ir a rutina INICIO

Uno de los detalles ms importantes a la hora de utilizar los puertos de un microcontrolador es conocer su
valor en el momento posterior a la ocurrencia de un RESET.
El reset se utiliza para forzar al microcontrolador a ir a un punto de partida o direccin conocida. Cuando
ocurre un reset, los sistemas perifricos como los puertos, los bits de control y los bits de estado son tambin
forzados a un estado conocido como resultado de un reset.
Como resultado de cualquier reset en el microcontrolador, ocurren las siguientes acciones internas:

Todos los registros referentes a puertos se colocan en cero en condicin de entradas.


El puntero de la pila (SP) es forzado a $00FF.
El bit I del CCR toma el valor 1 lgico, deshabilitando las interrupciones enmascarables.
El latch de interrupciones externas es borrado.
El latch de STOP es borrado.
El latch de WAIT es borrado.

Cuando ocurre un reset en el microcontrolador, el contador de programa (PC) comienza a buscar la


direccin ms alta. Esta operacin se denomina bsqueda del vector de reset, que al alcanzarla, la CPU
del microcontrolador iniciar la bsqueda y ejecucin de instrucciones, comenzando por la direccin
almacenada en el vector de reset.
Pero surge una pregunta: cando se puede producir un reset en un microcontrolador?

Se puede producir externamente, cuando es aplicado un 0 lgico en el pin / RESET.


Al encender la fuente de alimentacin, energizando el microcontrolador (power on reset).
Cuando ocurre un rebosamiento del valor presente en el Watch Dog o perro guardin.
Cuando se desea ejecutar una instruccin desde una direccin ilegal.
Al detectarse una transicin positiva sobre VDD.

ALFAOMEGA - FREESCALE
88 JUAN CARLOS VESGA FERREIRA

EJERCICIOS PROPUESTOS

Escribir un programa que permita efectuar la divisin de un nmero en potencias de 2.


Escribir un programa que permita efectuar la multiplicacin de un nmero en potencias de 2.
Escribir un programa que lea un nmero por los cuatro bits de menos peso del puerto B y muestre
el correspondiente cdigo de esta cantidad en Exceso 3, por los cuatro bits de ms peso del puerto
B y utilice el bit PTD2 como el quinto bit para representar esta cantidad.
Escribir un programa que lea dos nmeros utilizando los cuatro bits de menos peso para un nmero
(A), y los cuatro bits de ms peso para el otro nmero (B). Estos nmeros se deben comparar e
indicar segn corresponda:
Si A > B , entonces PTD2 = 1, PTD3 = 0, PTD4 = 0
Si A = B , entonces PTD2 = 0, PTD3 = 1, PTD4 = 0
Si A < B , entonces PTD2 = 0, PTD3 = 0, PTD4 = 1

Disear un programa que permita manejar una pantalla de cristal lquido, configurada a 4 bits
enviando secuencialmente mensajes en forma aleatoria y desplazando el contenido del mensaje
de derecha a izquierda.

RESUMEN DEL CAPTULO


CAPTULO
Uno de los componentes ms importantes de un microcontrolador son sus
perifricos. Los puertos del microcontrolador son el punto de comunicacin
entre el microcontrolador y el mundo exterior, a travs de ellos se pueden efectuar
procesos de control electrnico sobre dispositivos de potencia, instrumentacin,
telemetra, etc. Adems permiten recibir seales del mundo exterior como, por ejemplo, seales
provenientes de transductores, amplificadores, transmisores, actuadores, etc. En otras palabras, los puertos
del microcontrolador se pueden considerar como los brazos con los que interacta el microcontrolador con
otros sistemas electrnicos cumpliendo funciones de conversin A/D o funciones de PWM, o funciones de
comparacin analgica, entre otras funciones adicionales propias de cada familia de microcontroladores
a utilizar.

ALFAOMEGA - FREESCALE
Captulo 5
MANEJO DE
TEMPORIZACIN BSICA
OBJETIVO DEL CAPTULO
Al finalizar el captulo el estudiante estar
familiarizado con conceptos clave a la 5.1 INTRODUCCIN
hora de disear aplicaciones basadas en
microcontroladores que requieran el uso de Muchas veces se requiere un retardo en diferentes
retardos y temporizaciones bsicas, mediante aplicaciones, por ejemplo: en el captulo anterior se
conocimientos bsicos del circuito oscilador y el expuso un ejercicio de rotacin del encendido de un
tiempo de ejecucin de una instruccin. LED, pero, debido a la gran velocidad de ejecucin,
se daba la sensacin de que los LEDS siempre
estuvieran encendidos, lo cual en realidad no era
CONOCIMIENTOS PREVIOS cierto ya que slo uno de ellos estaba encendido y, por
caractersticas propias del ojo humano, al no poder
Para iniciar el estudio del presente captulo es
responder a velocidades de conmutacin tan altas se
necesario que el lector posea un conocimiento
produca esa sensacin de encendido constante.
bsico del conjunto de instrucciones propias
de esta familia de microcontroladores y
adicionalmente conocimientos bsicos de
circuitos digitales, con el fin de que pueda
comprender el concepto de temporizacin y
su uso dentro del desarrollo de aplicaciones.
90 JUAN CARLOS VESGA FERREIRA

Si se hubiera contado con una rutina que generara un retardo correspondiente a un


tiempo cercano o igual al segundo, el resultado de rotacin sera excelente y fcil de
apreciar a la velocidad establecida.

Teniendo en cuenta lo anterior resolvamos nuevamente el ejercicio, con la diferencia de incluir un retardo
que permita la visualizacin ms clara de lo ocurrido en el proceso de rotacin del encendido de un LED.

5V

1K

20 15 220
20pF RST PTB0
220
14
PTB1
3
OSC1 220
13
4MHz + 10M PTB2
4
OSC2/PTA6 220
12
PTB3

20pF 1 11 220
IRQ1 PTB4

8 220
PTB5

7 220
5V
+ PTB6

5 220
6
VDD PTB7

2
VSS
17 + 5V
PTD2

16
PTD3
10K
19
PTD4
SW1
18
PTD5 +
10
PTD6

9
PTD7

FIGURA 5.1 Circuito propuesto, utilizado para el encendido y apagado del LED conectado al pin
PTB0 segn el estado del interruptor SW1.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 91

5.2 DISPLAY DE CRISTAL LQUIDO

FIGURA 5.2

Un display de cristal liquido (LCD) es una muy prctica interfaz con el usuario, que permite visualizar letras,
nmeros y otros smbolos y caracteres tiles. Las pantallas de cristal lquido pueden ser de una sola lnea
o de dos lneas y cada lnea puede tener una capacidad para 16 caracteres visibles (2x16) o de 20 caracteres
(2x20), tambin de 4 lneas (4x16 o 4x20). Cada una de las localidades donde se pueden presentar los caracteres
est conformada por una matriz de puntos, ya sea de 5x10 o de 5x7, sobre las cuales se pueden presentar los
caracteres ASCII.
Un display de cristal liquido posee dos buses: el bus de datos, que es de 8 bits, y el bus de control que es
de 3 bits, que son manejados directamente por el sistema microprocesado al cual est conectado.

pin 14

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F
pin 2

pin 1

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F

pin 14 pin 1

FIGURA 5.3
Direcciones para las matrices del LCD y distribucin de pines.

ALFAOMEGA - FREESCALE
92 JUAN CARLOS VESGA FERREIRA

El direccionamiento de las matrices para los caracteres visibles va para la primera lnea desde 00 hasta 0F
HEX. Y para la segunda lnea, desde 40 HEX hasta 4F HEX.

5.2.1 MODOS DE OPERACIN


Se utilizan los 8 bits del bus de datos (caso de configuracin a 8 bits), o se pueden utilizar los 4 bits de ms peso
(caso de configuracin a 4 bits), para enviar tanto instrucciones como caracteres al mdulo. Estas instrucciones
pueden ser limpiar pantalla, direccionar matriz, mover el cursor, etc.

Nmero del
Smbolo Nivel Funcin
terminal
1 VSS - Fuente 0 V (GND)
2 VDD - Fuente + 5 V
3 VEE - Control de contraste

4 RS 1/0 Registro selector


1: Carcter de entrada
2: Instruccin de entrada
5 R/W 1/0 2: Leer carcter
2: Escribir carcter
6 E 1,1 0 Pulso de validacin de la
operacin de lectura o
escritura
7 DB0 1/0 Bits bajos del bus de datos
8 DB1 1/0 Bits bajos del bus de datos
9 DB2 1/0 Bits bajos del bus de datos.
10 DB3 1/0 Bits bajos del bus de datos.
11 DB4 1/0 Bits altos del bus de datos.
12 DB5 1/0 Bits altos del bus de datos.
13 DB6 1/0 Bits altos del bus de datos.
14 Db7 1/0 Bits altos del bus de datos.

TABLA 5.1
Distribucin y funcin de los pines del LCD.

Los bits RS y E del bus de control determinan la validacin de la instruccin o del carcter que est presente
en el bus de datos con temporizaciones que se hace necesario respetar.
La siguiente tabla describe el conjunto de instrucciones y requerimientos del mdulo LCD en forma
general.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 93

Instrucciones RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Descripcin T

Borrado de 0 0 0 0 0 0 0 0 0 1 Clarea el display y 1.28 ms


pantalla direcciona 00 a DD RAM.
Cursor a casa 0 0 0 0 0 0 0 0 1 * Direcciona 00 a DD RAM 1.28 ms
sin cambiar los datos en
RAM.
Seleccin de 0 0 0 0 0 0 0 1 I/D S Configura corrimiento 31.0 s
modo cursor desplazamiento
del display.
Control on/off 0 0 0 0 0 0 1 D C B Configura parpadeo del 31.0 s
de pantalla display, cursor y carcter.
Corrimiento 0 0 0 0 0 1 S/C R/L * * Mueve el cursor y el 31.0 s
cursor o display sin cambiar los
pantalla datos en RAM.
Seleccin de 0 0 0 0 1 DL N F * * Configura bus de datos 31.0 s
funcin (DL), lneas (L) y puntos
de la matriz (F).
Seleccin de 0 0 0 1 Direccin para generar en RAM Direcciona para la 31.0 s
direccin CG generacin de caracteres
RAM CG en RAM.
Seleccin de 0 0 1 Direccin de RAM Direcciona para la escribir 31.0 s
direccin un carcter en DD RAM.
DD RAM
Leer bandera 0 1 BF AC Lectura bandera Busy 0 s
de ocupado Flag para saber el
funcionamiento.
Escribir dato a 1 0 Escritura del dato Escribe el dato o carcter 31.0 s
CG o DD RAM en DD RAM o en CG
RAM.
Lee dato desde 1 1 Lectura del dato Lee el dato o carcter 31.0 s
CG o DD RAM desde DD RAM o CG
RAM.
I/D = 1:Incrementa DL = 1:Bus de datos de 8 bits
I/D = 0:Decrementa DL = 0:Bus de datos de 4 bits
S = 1:Desplaza mensaje en pantalla N = 1:Dos lneas de pantalla
S = 0:Mensaje fijo en pantalla N = 0:Una lnea de pantalla
S/C = 1:Desplazamiento de la pantalla F = 1:Matriz de 5 x 10 puntos
S/C = 0:Desplazamiento del cursor F = 0:Matriz de 5 x 7 puntos
R/L = 1:Corrimiento a la derecha BF = 1:Indica una operacin interna del mdulo
R/L = 0:Corrimiento a la izquierda BF = 0:Indica finalizacin de una operacin interna
*:Sin efecto

TABLA 5.2
Conjunto de instrucciones para la LCD.

ALFAOMEGA - FREESCALE
94 JUAN CARLOS VESGA FERREIRA

A continuacin se ilustra un ejemplo de cmo configurar una pantalla de cristal lquido a 8 bits.
Se debe tener muy en cuenta el orden en que se envan los datos de configuracin a la pantalla y los tiempos
de espera entre un comando y otro.
Las rdenes se envan en la siguiente forma:
Configuracin de la pantalla, indicando el nmero de bits a utilizar para la configuracin, el nmero
de lneas y el tipo de matriz que posee la pantalla a utilizar.
Configuracin del parpadeo del cursor, del display y del carcter.
Borrar pantalla.
Configuracin del desplazamiento del cursor.
Direccin de la pantalla para comenzar a escribir.
Para enviar la informacin a la pantalla se debe diferenciar cundo se trata de una orden y cundo se trata
de un carcter, por ello se utiliza la siguiente rutina:

CONTROL BCLR RS,PORTD


BRA DATO2
DATO BSET RS,PORTD
DATO2 BSET E,PORTD
STA PORTB
BSR RETARDO1
BCLR E,PORTD
BSR RETARDO1
BCLR RS,PORTD
RTS

La etiqueta CONTROL hace referencia a la rutina que se llama cuando se desea enviar un comando de
configuracin a la pantalla. La etiqueta DATO hace referencia a la rutina que se llama cuando se desea enviar
un carcter.
La rutina RETARDO1 corresponde a la rutina que genera el retardo para efectuar los cambios de nivel de
los bits E y RS para una ptima configuracin y comunicacin con la pantalla de cristal lquido.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 95

EJERCICIOS PROPUESTOS

Ejercicio 1
Enunciado del problema
A continuacin se ilustra cada uno
de losseregistros
Recordando el enunciado, desea quecorrespondientes al de un interruptor, el encendido de un LED
dependiendo del valor
sea rotado de derechauso y configuracin
a izquierda cuando elde cada unoest
interruptor deabierto y sea rotado de izquierda a derecha
cuando el interruptorlos puertos
est existentes
cerrado, en esta
manteniendo familia
el estado de encendido de un LED por un perodo de
1 segundo. especial de microcontroladores.

Explicacin de teora adicional para la solucin del problema


Antes de escribir la solucin al ejercicio es necesario conocer cmo se pueden generar rutinas de retardo
en un microcontrolador haciendo uso del tiempo de ejecucin de una instruccin.
Al final del captulo 3 se expuso el set de instrucciones propias de la familia de microcontroladores HC08,
en donde una de las casillas que se ilustra en la tabla resume el nmero de ciclos que tarda cada instruccin
en ejecutarse. Aunque este mtodo no sea el ptimo en rutinas de temporizacin, resulta bastante til a la
hora de generar retardos que no requieran mucha exactitud en la ejecucin de los respectivos tiempos.
Cuando se desea calcular el nmero de instrucciones requeridas para establecer un tiempo especfico,
se puede utilizar la siguiente expresin:

Tiempo (seg) = ciclos


Frec. Oscilador

En donde No_Ciclos indica cuntos ciclos de mquina se deben ejecutar para lograr el tiempo
deseado.

Para el caso en que se requiera un retardo de 1 segundo y considerando un oscilador de 4MHz, la cantidad
de ciclos sera la siguiente:

1 (seg) = ciclos

No_ ciclos = 106 , es decir, un milln de ciclos

ALFAOMEGA - FREESCALE
96 JUAN CARLOS VESGA FERREIRA

Aunque la cantidad de ciclos parezca exorbitante, es muy fcil de implementar gracias al uso de rutinas
cclicas. Si recordamos la rutina correspondiente a la multiplicacin de dos cantidades, de la misma manera
se puede escribir una rutina que, realizando un proceso semejante al de la multiplicacin, permita generar
la ejecucin de un milln de ciclos de mquina. La siguiente rutina permitir generar este retardo de una
manera fcil y rpida.
Como sabemos, la frecuencia del cristal es 4 M Hz. Por tanto, el tiempo que tarda en ejecucin 1 ciclo
de mquina es 1 s.

Adems, 1.000.000 = 5*100*200 quiere decir que:


si tenemos un bucle con una duracin de 5 ciclos, el cual repetimos 100 veces y a su vez este ltimo
lo repetimos 200 veces, obtendramos una duracin de 1.000.000 de ciclos aproximadamente.

Por tanto, la rutina que permite establecer un retardo de 1 segundo ser la siguiente:

Rutina de retardo de 1 segundo


RET_1S MOV #200T,CONTA ;CONTA = 200
LDA #100T ;A = 100
REDO NOP ;1 Ciclo
NOP ;1 Ciclo
DBNZA REDO ;3 Ciclos. Total=5 ciclos
LDA #100T ;A = 100
DBNZ CONTA,REDO ;Decrementa CONTA y salta si0
RTS ;Retornar de Rutina

Solucin
Teniendo en cuenta lo anterior, el resultado del ejercicio es el siguiente:
$ Include jl3regs.inc
FLASH EQU $ECE0
RESET EQU $FFFE
RAM EQU $80

COPD EQU 0

ORG RAM
CONTA RMB 1
ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 97

BSET LED,PORTB ;BIT 0 PORTB = 1


MOV #$FF,DDRB ;Puerto B Salida
BCLR SW,PORTD ;BIT 2 PORTD = 0
BCLR SW,DDRD ;BIT 2 Entrada

SALTO JSR RET_1S ;Retardo de 1 Segundo


BRSET SW,PORTD,ROT_IZQ ;SW abierto?, Ir a ROT_IZQ
BRCLR SW,PORTB,ROT_DER ;SW abierto?, Ir a ROT_DER
BRA SALTO ;Ir a SALTO
ROT_IZQ ROL PORTB ;Rotar a Izquierda
BRA SALTO

ROT_DER ROR PORTB ;Rotar a Derecha


BRA SALTO
RET_1S MOV #200T,CONTA ;CONTA = 200
LDA #100T ;A = 100
REDO NOP ;1 Ciclo
NOP ;1 Ciclo
DBNZA REDO ;3 Ciclos. Total=5 ciclos
LDA #100T ;A = 100
DBNZ CONTA,REDO ;Decrementa CONTA y salta si0
RTS ;Retornar de Rutina

ORG RESET ;Cuando se Energiza


DW INICIO ;Ir a rutina INICIO

Ejercicio 2
Enunciado del problema
El programa que se muestra a continuacin consiste en una rutina para configuracin de una pantalla de
cristal lquido, con bus de datos a 8 bits, dos lneas para visualizacin de datos y muestra un mensaje que
dice PRUEBA DE PANTALLA.

ALFAOMEGA - FREESCALE
98 JUAN CARLOS VESGA FERREIRA

NOTA
Se debe recordar que cuando se desea utilizar comentarios en un programa se utiliza *.
La librera JL3REGS.INC es una librera que posee la definicin de todos los registros y
bits que hacen parte del mapa de memoria del microcontrolador JL3/JK3/JK1.

Solucin
A continuacin se ilustra el circuito desarrollado con el microcontrolador MC68HC908JK3.

+5
PRUEBA DE PANTALLA

12 VDD
13 VEE

14 VSS
DB0
2 DB1

3 DB2

4 DB3

5 DB4

6 DB5

7 DB6

8 DB7

10 RW
11 RS
9 E
R3

+5
20 15
PTB0
C1

14
PTB1
3 OSC1 +5
13
Q1

PTB2
4
OSC2/PTA6
R4

12
4

PTB3

2
C2

1 11
IRQ1 PTB4

R1
8
+5 PTB5 3

7
PTB6
1

5 6
VDD PTB7

2
VSS
17
PTB2
16
PTB3
19
PTB4
18
PTB5
10
PTB6
9
PTB7

FIGURA 5.4
Circuito de control de LCD a 8 bits con MC68HC908JK3.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 99

El programa que obedece al ejemplo es el siguiente:


$INCLUDE JL3REGS.INC
Etiquetas de direccin en el microcontrolador

FLASH EQU $EC00


RESET EQU $FFFE
RAM EQU $80
COPD EQU 0

Definicin de los bits que se utilizarn en el microcontrolador para manejar las lneas RS y E de la pantalla
de cristal liquido, en este caso los pines PTD2 y PTD3, respectivamente.
E EQU 3
RS EQU 2

Definicin de registros a utilizar en la RAM


ORG RAM
CONT RMB 1

Definicin de la direccin a partir de la cual se escribe el programa


ORG FLASH
TABLA FDB PRUEBA DE PANTALLA
INICIO BSET COPD,CONFIG1 ; Deshabilita el COP
CLRA
CLRX
CLRH
MOV #$00,PORTB ; Configuracin de Puertos B y D
MOV #$FF,DDRB
MOV #00,PORTD
MOV #$FF,DDRD
BSR RETARDO ; Retardo
BSR LCD_CONF ; Configuracin de la Pantalla
MOV #19T,CONT ; No. de caracteres del mensaje
LDHX #TABLA ; Rutina para enviar el mensaje
CICLO LDA ,X ; A = carcter X+1 de la tabla
DEC CONT ; Caracteres por enviar
BEQ FIN ; Saltar si ya se enviaron todos
BSR DATO ; Si no, enviar carcter
BSR RETARDO ; Retardo

ALFAOMEGA - FREESCALE
100 JUAN CARLOS VESGA FERREIRA

AIX #1 ; X = X+1 ,Siguiente carcter


BRA CICLO
FIN BRA FIN

Rutina de configuracin de LCD a 8 bits


LCD_CONF LDA #%00111000 ; Configuracin de LCD
BSR CONTROL
LDA #%00001110 ; Configuracin de Parpadeo
BSR CONTROL
LDA #%00000001 ; Borrar pantalla
BSR CONTROL
LDA #%00000110 ; Configuracin de desplazam.
BSR CONTROL
LDA #%10000000 ; Direccin inicial para escritura
BSR CONTROL
RTS
RETARDO PSHH
PSHX
LDA #$FF
DELAY LDHX #$00EF
LOOP1 AIX #-1
CPHX #0
BNE LOOP1
DECA
BNE DELAY
PULX
PULH
RTS

Retardo para pulso de envo de comandos o datos a la LCD


RETARDO1 LDA #$FF
DELAY1 DECA
BNE DELAY1
RTS

Rutina de envo de comandos o caracteres a la LCD a 8 bits


CONTROL BCLR RS,PORTD ; Bit RS = 0 lgico

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 101

BRA DATO2 ; Salta a DATO2


DATO BSET RS,PORTD ; Bit RS = 1 lgico
DATO2 BSET E,PORTD ; Bit E = 1 lgico
STA PORTB ; Enviar al PTOB a valor de A
BSR RETARDO1 ; Pulso de Retardo1
BCLR E,PORTD ; Bit E = 0 lgico
BSR RETARDO1 ; Pulso de Retardo1
BCLR RS,PORTD ; Bit RS = 0 lgico
RTS ; Retorno de Subrutina
ORG RESET
DW INICIO

La rutina equivalente para configuracin a 4 bits es la misma anterior, solamente se efecta el cambio
de la rutina de envo de comandos y caracteres (CONTROL) y la rutina de configuracin (LCD_CONF)
por la siguiente:

LCD_CONF LDA #%00101000 ; Configuracin de LCD


BSR CONTROL
LDA #%00001110 ; Configuracin de Parpadeo
BSR CONTROL
LDA #%00000001 ; Borrar pantalla
BSR CONTROL
LDA #%00000110 ; Configuracin de desplazam.
BSR CONTROL
LDA #%10000000 ; Direccin inicial para escritura
BSR CONTROL
RTS
CONTROL BCLR RS,PORTD ; Bit RS = 0
BRA DATO2 ; Saltar a DATO2
DATO BSET RS,PORTD ; Bit RS = 1
DATO2 BSET E,PORTD ; Bit E = 1
STA CHAR ; CHAR = A
AND #$F0 ; bits de ms peso de A
STA PORTB ; se envan al Puerto B
BSR RETARDO1 ; Pulso de Retardo1
BCLR E,PORTD ; Bit E = 0
CLR PORTB ; Borra Puerto B
BSR RETARDO1 ; Pulso de Retardo1
BSET E,PORTD ; Bit E = 1

ALFAOMEGA - FREESCALE
102 JUAN CARLOS VESGA FERREIRA

LDA CHAR ; A = CHAR


NSA ; Intercambia nibles de A
AND #$F0 ; bits de menos peso antes
STA PORTB ; se envan al Puerto B
BSR RETARDO1 ; Pulso de retardo1
BCLR E,PORTD ; Bit E = 0
BSR RETARDO1 ; Pulso de retardo1
CLR PORTB ; Borra Puerto B
RTS ; Retorna de Subrutina

Ejercicio 3
Explicacin de teora adicional para la solucin del ejercicio
A continuacin se ilustra toda la teora y el desarrollo para efectuar una comunicacin serial entre el
microcontrolador y el PC a una velocidad de 2400 baudios. El estudiante debe asimilar esta teora, aplicarla
y verificarla. En caso de requerir ajuste, el estudiante debe efectuarlo.

COMUNICACIN SERIAL CON EL 68HC908JL3/JK3/JK1


La comunicacin serial, como su nombre lo indica, realiza la transferencia de informacin enviando o recibiendo
datos descompuestos en bits, los cuales viajan secuencialmente uno tras otro. En la comunicacin paralela,
los datos pueden ser transferidos en paquetes de 8, 16, 32 o ms bits en forma simultnea, utilizando un cable
para cada bit, mientras que en la comunicacin serial solamente se hace uso de algunos conductores y por
ellos viaja toda la informacin correspondiente a los datos propiamente dichos.
La transferencia de datos en forma paralela es rpida pero usa muchas lneas conductoras y la transferencia
serial es lenta pero utiliza menor nmero de cables. Se debe tener en cuenta que la comunicacin en paralelo
permite menor distancia entre los equipos a comunicar que la comunicacin serial.
Todo esto est regido por normas o protocolos donde el utilizado por las computadoras convencionales
es el protocolo RS-232.
El protocolo RS-232 es una norma o estndar mundial que rige los parmetros de uno de los modos de
comunicacin serial.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 103

No. Pin Funcin


1 Detector de portadora (CD)
2 Recepcin de datos (RxD)
3 Transmisin de datos (TxD)
4 Datos listos en terminal (DTR)
5 Tierra (GND)
6 Datos listos para enviar (DSR)
7 Solicitud de envo (RTS)
8 Listo para envo (CTS)
9 Detector de tono (RI)

FIGURA 5.5
Distribucin de pines del conector DB9 para comunicacin serial.

Para transmitir serial y asincrnicamente, adems del dato, se necesita la generacin adicional del bit
de arranque (un cero lgico) y los de parada (un uno lgico); el bit de paridad es opcional. Para recibir
datos, el elemento clave es detectar sobre la lnea que recibe los datos, el bit de arranque, bien sea a travs
de interrupciones, o bien a travs de la lectura frecuente de la lnea. En ambos casos lo recomendable es que
despus de detectado el bit de arranque, la lectura de cada uno de los bits se realice en la mitad del bit, tal
como se puede observar en la figura.
Con el microcontrolador se pueden utilizar las interrupciones, dando mayor eficiencia al sistema. En
nuestro caso se utiliz el segundo mtodo, cuyo diagrama de flujo para recepcin serial y el programa se
ilustran a continuacin, considerando adems que la rutina es ms til ya que se hace extensiva a todos los
microcontroladores.

ALFAOMEGA - FREESCALE
104 JUAN CARLOS VESGA FERREIRA

BIT DE
PARADA
Estado antes Estado
despus
de TX DATO DE 8 BITS de TX

1 0 LSB MSB 1 1
Puntos donde es recomendable
adquirir el valor del Bit

BIT DE
ARRANQUE

FIGURA 5.6
Lectura de los bits de datos.

Valor Lgico Equivalente en TTL Equivalente en


protocolo RS-232
1 lgico 2.5 a 5 V -5 a -20 V
0 lgico 0 a 0.8 V 5 a 20 V

TABLA 5.3
Niveles de tensin en el protocolo RS-232.

Aunque las anteriores rutinas de recepcin y transmisin son vlidas para establecer comunicaciones
seriales entre microcontroladores y microprocesadores, surgen incompatibilidades cuando pretendemos
comunicar un microcontrolador con un computador de tipo PC debido a los niveles de tensin que se manejan
entre ellos.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 105

5V

10uF
10uF 1
C1 +
2
TX V+
3
C1 -
6
RX V-
4
C2 +
10uF

5
C2 -
GND

10uF 11 14
T1IN T1OUT
10 7
T2IN T2OUT RX PC
12 13
R1OUT R1IN
9 8
R2OUT R2IN TX PC

FIGURA 5.7
Interfaz de comunicacin entre el microcontrolador y el PC utilizando el protocolo RS-232.

Para estos casos se puede acudir a un circuito integrado muy til, el MAX 232 que, utilizando una fuente
nica de 5 voltios, logra traducir los niveles TTL existentes en los microcontroladores a niveles RS-232,
los cuales pueden viajar distancias mayores y son los que estn presentes a la entrada del puerto DB9 de un
computador PC. Las rutinas para transmisin y recepcin serial a una velocidad de 2400 baudios (bits por
segundo) y con una frecuencia del oscilador de 4 MHz son las siguientes.
La rutina para transmisin serial es:
ENVIAR STA TRANSM ;TRANSM = Dato
MOV #$8,CONTA ;8 bits a Transmitir
BCLR 6,PORTD ;Bit de arranque
BSR UN_BIT ;Retardo 1 bit
XNEXT ROR TRANSM ;rotar a Derecha.
BCLR 6,PORTD ;PTD6 = 0
BHCC SALTO ;si Carry = 0, saltar
BSET 6,PORTD ;si no, PTD6 = 1
SALTO BSR UN_BIT ;Retardo 1 bit
DEC CONTA ;Decrem. Bits por Tx
BNE XNEXT ;Bits <> 0?,saltar
BSET 6,PORTD ;Bit de parada

ALFAOMEGA - FREESCALE
106 JUAN CARLOS VESGA FERREIRA

BSR UN_BIT ;Retardo 1 bit


RTS ;Retorno de rutina
La rutina para recepcin serial es:
RECIBIR CLR RECEPC ;RECEPC = 0
BRSET 7,PORTD,RECIBIR ; Si Bit Rx=1, salta
BSR UNOYMED ;si no,Retardo 1.5 bit
MOV #$08,CONTA ;Bits a recibir
RNEXT CLC ;Carry = 0
BRCLR 7,PORTD,SALTO1 ;Si RX = 0, salta
SEC ;si no, carry = 1
SALTO1 ROR RECEPC ;Rotar RECEPC
BSR UN_BIT ;Retardo 1 bit
DEC CONTA ;Dec. Bits por recibir
BNE RNEXT ;Si bits<>0, salta
BSR UN_BIT ;Retardo 1 bit
RTS ;Retorna de rutina

Como se desea transmitir a 2400 baudios, es decir, 2400 bits por segundo, debemos calcular el tiempo
requerido para 1 bit y 1.5 bits.

1 bit = = 416*10-6 seg = 416 s

1.5 bits = 1.5 * 416 s = 624 s

Como sabemos, la frecuencia del cristal es 4 MHz. Por tanto, el tiempo que tarda en ejecucin 1 ciclo de
mquina es 1 s.

415 s = 1 s * 5 * 83 ; 5 ciclos de mquina, 83 veces


625 s = 1 s * 5 * 125 ; 5 ciclos de mquina, 125 veces

Rutina de retardo para velocidad de transmisin a 2400 baudios

UNOYMED LDA #125T ;A = 125


BRA REDO ;Saltar a REDO
UN_BIT LDA #83T ;A = 83
REDO NOP
NOP
DBNZA REDO ;Dec A y salta si A<>0
RTS ;Retornar de Rutina
ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 107

RECEPCIN

No
Lnea Rx
en bajo

Rutina 1.5 bits


Contador = 8

Limpiar Carry

No

Lnea Rx en
bajo Carry = 1

No

Rotar a la derecha registro


de recepcin

Rutina de 1 Bit
decrementar contador

No
Contador = 0 ?

Terminar

FIGURA 5.8
Diagrama de flujo de la rutina de recepcin serial.

ALFAOMEGA - FREESCALE
108 JUAN CARLOS VESGA FERREIRA

TRANSMITIR

Bit de arranque
contador = 8

Colocar lnea de
transmisin en bajo

Rotar a la derecha registro de


transmisin

No

Carry = 0? Colocar lnea de Tx


en alto

Rutina de 1Bit
decremementar contador

No
Contador = 0?

Bit de parada

Terminar

FIGURA 5.9
Diagrama de flujo de la rutina de transmisin serial.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 109

LA COMUNICACIN SERIAL CON EL PC


Como es sabido, la comunicacin serial se estar efectuando entre el microcontrolador y el PC. Las rutinas
de transmisin y recepcin desde el microcontrolador ya se explicaron antes, ahora analizaremos las rutinas
de transmisin y recepcin desde el PC mediante Visual Basic.

FIGURA 5.10
Control para comunicacin serial con Visual Basic y sus propiedades.

ALFAOMEGA - FREESCALE
110 JUAN CARLOS VESGA FERREIRA

Para la utilizacin de las comunicaciones seriales en Visual Basic se debe utilizar un control ActiveX llamado
MICROSOFT COMM CONTROL, que permite manipular las comunicaciones seriales desde cualquier puerto
serial existente en el PC y a velocidades deseadas por el usuario.
La explicacin de la lgica de transmisin y recepcin serial ya se expuso con anterioridad, por ello
solamente se explicar la implementacin de este control y sus respectivas rutinas.
En la figura anterior se pueden observar las propiedades principales para la configuracin del control
ActiveX y su aspecto fsico. El significado de cada una de ellas es el siguiente:

CommPort: Indica qu puerto serial se desea utilizar para la comunicacin. Cuando se asigna el valor 1
corresponde al COMM1, y as sucesivamente.

Handshaking: Constante de protocolos.

Constante Valor Descripcin


Compone 0 Sin protocolo
ComXonXoff 1 Protocolo XON/XOFF
ComRTS 2 Protocolo RTS/CTS (peticin de
envo/preparado para enviar)

TABLA 5.4
Opciones de la propiedad Handshaking

InputMode: El tipo de los datos recuperados por la propiedad Input est determinado por el valor de esta
propiedad, que puede tomar alguno de los valores siguientes:

Constante Valor Descripcin


comInputModeText 0 (Predeterminado) Los datos se
recuperan como texto
mediante la propiedad Input
comInputModeBinary 1 Los datos se recuperan como
datos binarios mediante la
propiedad Input

TABLA 5.5
Valores posibles de la propiedad InputMode.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 111

RThreshold: Si toma el valor 0 desactiva la posibilidad de detectar en qu momento se recibe algn dato,
si toma el valor 1 lo activa.

SThreshold: Si toma el valor 0 desactiva la posibilidad de enviar algn dato, si toma el valor 1 lo activa.

Settings: Esta propiedad permite configurar el modo en el cual se van a enviar los datos serialmente en
el siguiente orden:

Velocidad de transmisin: Puede tomar valores de 1200, 2400, 4800, 9600, 14400 baudios.
Cantidad de bits de datos: Se pueden considerar dos opciones, ya sean 8 o 9 bits de datos.
Paridad: Configura si se desea considerar en la transmisin paridad o no; si lo desea coloca S, de lo
contrario N.
Bits de parada: Si transmite 8 bits de datos se puede o no colocar un bit de parada, de lo contrario
no se puede por la longitud del buffer de transmisin.

Considerando lo anterior, como en el proyecto se utiliz una transmisin a 2400 baudios, 8 bits de datos,
sin paridad y un bit de parada, en la propiedad Settings se coloca lo siguiente:

Settings = 2400,8,n,1

RUTINAS PARA TRANSMISIN Y RECEPCIN CON VISUAL BASIC


A continuacin se ilustran las rutinas para la transmisin y recepcin serial con Visual Basic.

RUTINA PARA RECEPCIN


Private Sub MSComm1_OnComm() ; Ocurri algn evento
Dim DatoMIC as Variant
Select Case MSComm1.CommEvent
Case comEvReceive ; En caso de ser Recepcin
DatoMIC = Asc(MSComm1.Input) ; Lea el dato del Buffer
End Select
End Sub

RUTINA PARA TRANSMISIN


Private Sub Enviar()
Dim Dato_a_Enviar as Variant
MSComm1.Output=chr(Dato_a_Enviar) ; Enva el dato almacenado
End Sub ; en la variable.

ALFAOMEGA - FREESCALE
112 JUAN CARLOS VESGA FERREIRA

Solucin
Se desea implementar un sistema de comunicacin serial entre el PC y el microcontrolador 68HC908JL3,
utilizando el pin PTD6 como transmisor y el pin PTD7 como receptor, transmitiendo a una velocidad de
2400 baudios.

5V

1K

20 15 220 -1
RST PTB0
20pF
220 2
14
PTB1
3
OSC1
1

13 220 3
10M

4MHz + PTB2
4
OSC2/PTA6 220 4
4

12
PTB3

1 11 220 1
20pF IRQ1 PTB4

8 220 2
PTB5

7 220 3
5V 5V
+ PTB6

5 220 4
6
VDD PTB7

10uF
10uF 1
2 C1 +
VSS 2
17 V+
PTD2 3 C1 -
16 V- 6
PTD3 4 C2 +
10uF
19
PTD4
5 C2 -
GND
18
PTD5 10uF 11 T1IN T1OUT 14
10
PTD6 10 T2IN T2OUT 7 RX
12 R1OUT R1IN 13
9
PTD7 9 R2OUT R2IN 8 TX

FIGURA 5.11
Circuito de comunicacin serial a 2400 baudios.

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 113

La informacin que enva el PC corresponde a un nmero de 8 bits (0 a 255), siendo esta


posteriormente visualizada por el puerto B considerando PTB0 como el bit de menos peso
y PTB7 como el bit de ms peso.

El cdigo fuente es el siguiente:

$ INCLUDE JL3REGS.INC
FLASH EQU $ECE0
RESET EQU $FFFE
RAM EQU $80
COPD EQU 0
ORG RAM

BANDERA RMB 1 ;Registro Bandera de 1 Seg.

ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
MOV #$00,PORTB ;PTB7 = 0
MOV #$FF,DDRB ;Configura el PTB como salida
MOV #$40,PORTD ;PTD6 = 1
MOV #$40,DDRD ;PTD6 = SALIDA
ESPERA BSR RECIBIR ;Espera recibir dato del PC
MOV RECEPC,PORTB ;Cuando lo recibe va al PTB
LDA RECEPC ;Lo que recibio, lo carga A
BSR ENVIAR ;A es enviado al PC
BRA ESPERA ;salto

La rutina para transmisin serial es:


ENVIAR STA TRANSM ;TRANSM = Dato
MOV #$8,CONTA ;8 bits a Transmitir
BCLR 6,PORTD ;Bit de arranque
BSR UN_BIT ;Retardo 1 bit
XNEXT ROR TRANSM ;rotar a Derecha.
BCLR 6,PORTD ;PTD6 = 0
BHCC SALTO ;si Carry = 0, saltar
BSET 6,PORTD ;si no, PTD6 = 1

ALFAOMEGA - FREESCALE
114 JUAN CARLOS VESGA FERREIRA

SALTO BSR UN_BIT ;Retardo 1 bit


DEC CONTA ;Decrem. Bits por Tx
BNE XNEXT ;Bits <> 0?,saltar
BSET 6,PORTD ;Bit de parada
BSR UN_BIT ;Retardo 1 bit
RTS ;Retorno de rutina

La rutina para recepcin serial es:

RECIBIR CLR RECEPC ;RECEPC = 0


BRSET 7,PORTD,RECIBIR ; Si Bit Rx=1, salta
BSR UNOYMED ;si no,Retardo 1.5 bit
MOV #$08,CONTA ;Bits a recibir
RNEXT CLC ;Carry = 0
BRCLR 7,PORTD,SALTO1 ;Si RX = 0, salta
SEC ;si no, carry = 1
SALTO1 ROR RECEPC ;Rotar RECEPC
BSR UN_BIT ;Retardo 1 bit
DEC CONTA ;Dec. Bits por recibir
BNE RNEXT ;Si bits<>0, salta
BSR UN_BIT ;Retardo 1 bit
RTS ;Retorna de rutina

Rutina de retardo para velocidad de transmisin a 2400 baudios.

UNOYMED LDA #125T ;A = 125


BRA REDO ;Saltar a REDO
UN_BIT LDA #83T ;A = 83
REDO NOP
NOP
DBNZAREDO ;Dec A y salta si A<>0
RTS ;Retornar de Rutina
ORG RESET
DW INICIO

ALFAOMEGA - FREESCALE
MANEJO DE TEMPORIZACIN BSICA 115

FIGURA 5.12
Interfaz grfica de comunicacin serial.

En la rutina de transmisin, el dato es colocado en la caja de texto TEXT1 y posteriormente se pulsa el


botn Enviar. El dato es enviado serialmente, es recibido por el microcontrolador y regresado nuevamente
al PC. Este dato es recibido y detectado mediante el evento OnComm de Visual Basic, el cual ocurre cuando
se encuentra un dato en el buffer de recepcin. Este dato es retirado del buffer y enviado a la caja de texto
Text2, en donde es visualizado.
Las rutinas correspondientes a la transmisin y recepcin serial desde el PC son las siguientes:
Rutina para transmisin
Private Sub Enviar()
Dim Dato_a_Enviar as Variant
MSComm1.Output=chr(Val(Text1.Text)) ; Enva el dato almacenado
End Sub ; en la variable.

Rutina para recepcin


Private Sub MSComm1_OnComm() ; Ocurri algn evento

ALFAOMEGA - FREESCALE
116 JUAN CARLOS VESGA FERREIRA

Dim DatoMIC as Variant


Select Case MSComm1.CommEvent
Case comEvReceive ; En caso de ser Recepcin
DatoMIC = Asc(MSComm1.Input) ; Lea el dato del Buffer
Text2.Text = DatoMIC
End Select
End Sub

RESUMEN DEL CAPTULO


CAPTULO

Uno de los recursos ms importantes que se requieren en la mayora de


aplicaciones electrnicas son los retardos. Un retardo es, como su nombre lo indica,
un tiempo de espera que efecta el microcontrolador mientras realiza una operacin
especfica que lo requiera.
Aunque todo microcontrolador posee recursos dedicados a la ejecucin y manejo de tiempos en
un proceso de control electrnico como lo es el timer, en este caso se efectu teniendo en cuenta los
retardos ofrecidos por la ejecucin de instrucciones, las cuales tambin provocan un pequeo retardo
mientras se ejecutan y se pueden cuantificar mediante ciclos; estas estn relacionadas de manera directa
con la frecuencia del oscilador interno, siendo sta en muchos casos una manera fcil y til de realizar
procedimientos de retardo en alguna aplicacin que lo requiera.

ALFAOMEGA - FREESCALE
Captulo 6
INTERRUPCIONES
(SISTEMA DE INTEGRACIN MODULAR)
OBJETIVO DEL CAPTULO 6.1 INTRODUCCIN
En esta seccin se explicar el sistema de integracin
Al finalizar el captulo el estudiante estar
modular, el cual soporta hasta 24 interrupciones
familiarizado con las diferentes fuentes de
internas y externas, junto con la CPU, los controles
interrupciones que existen en esta familia, sus
aplicaciones, propiedades y formas de utilizarlas, SIM y todas las actividades de la MCU. A continuacin
configurarlas e identificarlas en el momento de se ilustra un diagrama que muestra un resumen de
su ocurrencia. los registros de I/O existentes en la SIM. La SIM es
un sistema de control de estados que coordina a la
CPU, y es responsable de:

Generacin del reloj de bus, control de la CPU


CONOCIMIENTOS PREVIOS y perifricos
Arranque, parada, espera y ruptura de
Para iniciar el estudio del presente captulo es
entrada y recuperacin.
necesario que el lector posea una comprensin
general de las caractersticas propias de sta Control del reloj interno.
familia de microcontroladores y su programacin. Control maestro del reset, incluyendo el Power - on
Reset y el tiempo de rebosamiento del COP.
Control de interrupciones.
Habilitacin y deshabilitacin de tiempos en la
CPU.
118 JUAN CARLOS VESGA FERREIRA

Mdulo de parada
Mdulo de espera
STOP/WAIT Parada de la CPU
CONTROL Espera de la CPU
SIMOSCEN (TO OSCILLATOR)

SIM Reloj del COP


COUNTER

2OSCOUT
OSCOUT

+2
VDD

Ctrl de Reloj Generador de Reloj Relojes Internos


INTERNAL
PULL-UP

RESET POR CONTROL ILLEGAL OPCODE (FROM CPU)


PIN LOGIC MASTER ILLEGAL ADDRESS (FROM ADRESS
RESET PIN CONTROL RESET MAP DECORDERSS
CONTROL COP TIMEOUT (FROM COP MODULE)
SIM RESET STATUS REGISTER
USB RESET (FROM USB MODULE)

RESET

Fuentes de Interrupcin
INTERRUPT CONTROL AND
PRICRITY DECODE
Interfase con la CPU

FIGURA 6.1
Diagrama en bloque del SIM.

6.2 INTERRUPCIONES

Una interrupcin cambia temporalmente la secuencia del programa en ejecucin y va a responder a un evento
particular. Es decir, se emplean a veces para interrumpir el procesamiento normal o para responder a algn
evento inusual. Los microcontroladores por lo general pueden ser interrumpidos mediante diferentes fuentes
de interrupcin.

ALFAOMEGA - FREESCALE
INTERRUPCIONES (SISTEMA DE INTEGRACIN MODULAR) 119

Prioridad Fuente Bandera Mscara INT Direccin del


Reg. bandera vector
Mayor Reset $FFFE-$FFFF
SWI Instruccin $FFFC-$FFFD
IRQ1 pin IRQF1 IMASK1 IF1 $FFFA-$FFFB
Interrupcin por timer canal 0 CHOF CHOIE IF3 $FFF6-$FFF7
Interrupcin por timer canal 0 CH1F CH1IE IF4 $FFF4-$FFF5
Interrupcin por rebosamiento del timer TQF TOIE IF5 $FFF2-$FFF3
Interrupcin por teclado KEYF IMASKK IF14 $FFF0-$FFF1
Menor Interrupcin por conversin completa del A/D C0C0 AIEN IF15 $FFDE-$FFDF

TABLA 6.2
Fuentes de interrupcin

Prioridad del vector Vector Direccin Detalle


Menor prioridad IF15 $FFDE Vector de conversin completa ADC (byte alto)
$FFDF Vector de conversin completa ADC (byte bajo)
IF14 $FFE0 Vector de teclado (alto)
$FFE1 Vector de teclado (bajo)
IF13 A IF6 No usado
IF5 $FFF2 Rebosamiento del timer (byte alto)
$FFF3 Rebosamiento del timer (byte bajo)
IF4 $FFF4 timer canal1 vector alto
$FFF5 timer canal1 vector bajo
IF3 $FFF6 timer canal0 vector alto
$FFF7 timer canal0 vector bajo
IF2 No usado
IF1 $FFFA vector IRQ (byte alto)
$FFFB vector IRQ (byte bajo)
$FFFC SWI vector (alto)
$FFFD SWI vector (bajo)
$FFFE Reset (byte alto)
Mayor prioridad $FFFF Reset (byte bajo)

TABLA 6.3
Direcciones de interrupciones vectorizadas

ALFAOMEGA - FREESCALE
120 JUAN CARLOS VESGA FERREIRA

6.3 ESTADO DE INTERRUPCIN DEL REGISTRO 1

Direccin $FE04

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 IF5 IF4 IF3 0 IF1 0 0
Escribir R R R R R R R R

R: Reservado

IF1, IF3 A IF5: BANDERAS DE INTERRUPCIN


Estas banderas indican cul fue la interrupcin que ocurri segn la fuente que se ilustra en la tabla
anterior.
Los bits 0, 1, 3 y 7 siempre son ledos como cero.

6.4 ESTADO DE INTERRUPCIN DEL REGISTRO 2


Direccin $FE05

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer IF14 0 0 0 0 0 0 0
Escribir R R R R R R R R

R: Reservado

IF14: BANDERAS DE INTERRUPCIN


Esta bandera indica cul fue la interrupcin que ocurri segn la fuente que se ilustra en la tabla anterior.
Los bits [0:6] siempre son ledos como cero.

6.5 ESTADO DE INTERRUPCIN DEL REGISTRO 3

Direccin $FE06
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer IF14 0 0 0 0 0 0 IF15
Escribir R R R R R R R R

R: Reservado

ALFAOMEGA - FREESCALE
INTERRUPCIONES (SISTEMA DE INTEGRACIN MODULAR) 121

IF15: BANDERAS DE INTERRUPCIN


Esta bandera indica cul fue la interrupcin que ocurri segn la fuente que se ilustra en la tabla anterior.
Los bits [1:7] siempre son ledos como cero.

6.6 LA INSTRUCCIN SWI


La SWI es una instruccin no enmascarable que causa una interrupcin indiferente del estado que posea el
bit I (bit bandera de interrupcin), en la condicin de registro de cdigo.
Una interrupcin por software enva el PC (contador de programa) al stack. Una interrupcin por software
no aplica al PC=PC 1, cosa que s hace una interrupcin por hardware.

6.7 RESET
Todas las fuentes de reset son las que tienen igual o mayor prioridad sobre las dems y no pueden ser
omitidas de ninguna forma. El reset obliga a que el bit I tome el valor 1 lgico y en 0 lgico todos los bits
que permiten la habilitacin de interrupciones locales a fin de prevenir interrupciones durante el proceso de
inicializacin. Cuando el bit I est en uno, ninguna interrupcin (excepto SWI) es reconocida. Aunque pueda
registrarse a la fuente de interrupcin, su pedido no ser atendido hasta que el bit I se ponga en cero.

Se debe tener en cuenta que si se produce una interrupcin mientras la CPU est
ejecutando una instruccin, la instruccin ser completada antes de que la CPU responda
al pedido de interrupcin.
Las interrupciones pueden ser deshabilitadas en conjunto colocando el bit I del CCR en
1 lgico, o colocando en ceros los bits de control de habilitacin de cada fuente de
interrupcin.

ALFAOMEGA - FREESCALE
122 JUAN CARLOS VESGA FERREIRA

RESUMEN DEL CAPTULO


CAPTULO
Una de las principales ventajas del uso de los microcontroladores Freescale
consiste en que el manejo de su conjunto de interrupciones, ya sean internas o
externas, se encuentran totalmente sectorizadas, facilitando con ello la identificacin
de la interrupcin, mayor rapidez de atencin, mayor estructuracin del software en
forma modular, etc.
Gracias a los registros de interrupcin 3, 2 y 1 se puede tambin verificar en forma jerrquica la ocurrencia
de estos eventos que provocan la interrupcin, definiendo el usuario la prioridad, aunque internamente en
el microcontrolador esta jerarqua ya est preestablecida.

ALFAOMEGA - FREESCALE
Captulo 7
MDULO DE INTERRUPCIN
POR TECLADO (KBI)

OBJETIVO DEL CAPTULO 7.1 INTRODUCCIN


Al finalizar el captulo el estudiante estar en En muchas aplicaciones es comn el uso de dispositivos
capacidad de utilizar, configurar y manipular para introducir informacin, caso particular del
la interrupcin por teclado KBI, la cual facilita teclado, el cual se hace presente en desarrollos como
el desarrollo de aplicaciones que utilicen este los controles de bandas transportadoras, programacin
dispositivo de entrada de datos. de tareas, horarios, control de acceso, etc.
El mdulo de interrupcin por teclado tiene siete
(7) interrupciones externas manipuladas de manera
independiente cada una de ellas, y se encuentran
disponibles entre los pines PTA[0:6].
CONOCIMIENTOS PREVIOS Entre las caractersticas del mdulo de interrupcin
por teclado podemos mencionar las siguientes:
Para iniciar el estudio del presente captulo es
necesario que el lector posea una comprensin Siete pines de interrupcin por teclado
general de las caractersticas propias de esta habilitadas por separado cada una y un solo
familia de microcontroladores y su programacin. bit indicador de la interrupcin.
Configuracin de resistencias de Pull-Up.
Interrupcin programable por flanco o flanco/
nivel.
Salida en modo de bajo consumo.
124 JUAN CARLOS VESGA FERREIRA

7.2 REGISTRO DE CONTROL Y ESTADO DE TECLADO (KBSCR)


Direccin $001A

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0 KEYF 0
Escribir IMASKK MODEK

Los bits del 7 al 4 no son utilizados, y siempre son ledos como 0 lgico.

KEYF: bit de bandera de teclado


Este bit es de slo lectura y toma el valor 1 lgico cuando la interrupcin por teclado ha ocurrido y se encuentra
pendiente por atender.

1: Interrupcin de teclado pendiente


0: Interrupcin de teclado no pendiente

ACKK: bit de reconocimiento de teclado


Este bit es ledo siempre como 0 lgico, pero cuando se escribe en l un 1 lgico se est indicando que la
interrupcin por teclado ya fue atendida y, por ende, el bit KEYF retorna a 0 lgico.

IMASKK: bit de habilitacin de interrupcin por teclado


1: Deshabilita la interrupcin por teclado
0: Habilita la interrupcin por teclado

MODEK: Configuracin de sensibilidad de activacin del teclado


1: Interrupcin activada por flanco descendente y nivel lgico bajo
0: Interrupcin activada por flanco descendente solamente

7.3 REGISTRO DE HABILITACIN DE


INTERRUPCIONES DE TECLADO (KBIER)

Direccin $001B

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0
Escribir KBIE6 KBIE5 KBIE4 KBIE3 KBIE2 KBIE1 KBIE0

ALFAOMEGA - FREESCALE
MDULO DE INTERRUPCIN POR TECLADO (KBI) 125

Este registro habilita o deshabilita independientemente los pines del puerto A para utilizar la interrupcin
por teclado.
1: El bit KBIx es habilitado para interrupcin por teclado
0: El bit KBIx es deshabilitado para interrupcin por teclado
Cuando se habilita la interrupcin en un pin especfico, la resistencia de Pull-Up es habilitada tambin
en el pin correspondiente.

7.4 INICIALIZACIN DEL TECLADO


Cuando un pin de interrupcin por teclado es habilitado, le toma un tiempo interno a la resistencia de Pull-Up
alcanzar un 1 lgico. Por tanto, una interrupcin falsa puede ocurrir tan pronto como el pin es habilitado.
Para prevenir una falsa interrupcin en la inicializacin del teclado se debe efectuar lo siguiente:
IMASKK = 1
Asignar los valores a cada uno de los KBIx.
ACKK = 0
IMASKK = 0

Otra forma de evitar una interrupcin falsa es la siguiente:

Configurar todo el puerto A como salida, esto se hace colocando cada uno de los bits del registro DDRA
en 1 lgico.
Escribir un 1 lgico en cada uno de los bits correspondientes al puerto A.
Asignar los valores a cada uno de los KBIx.

Los teclados pueden tener varias configuraciones, unos pueden ser matriciales y otros lineales.
Los teclados lineales son los que poseen tantos pines como teclas presenten y dos pines ms para
alimentacin. Cada vez que se pulse una tecla, esta enviar a su respectivo pin un nivel bajo, identificando
con ello la tecla pulsada.
Los teclados matriciales, los cuales son los ms utilizados en la gran mayora de aplicaciones electrnicas
se encuentran configurados, como su nombre lo indica, como una matriz.
Para identificar una tecla, sta se encuentra direccionada por una fila y una columna, y la interseccin
de ellas encasilla la tecla. En nuestro caso se explicar un ejemplo de interrupcin por teclado, mediante un
teclado matricial de 12 teclas (teclado de telfono), el cual enviar el valor de la tecla pulsada a una pantalla
de cristal liquido.
Segn el circuito, la tecla que sea pulsada presentar tanto en la fila como en la columna que la direcciona
un 0 lgico, este cero ser rotado por las columnas del teclado y cuando la tecla sea pulsada, ste ser enviado
directamente a la fila que la preside provocando con ello la interrupcin por teclado.
La forma de configurar el teclado es la siguiente:
Configuramos los pines para el manejo del teclado, en nuestro caso los bits de PTA[6:3] sern entradas
(filas) y los bits PTA[2:0] sern salidas (columnas).

ALFAOMEGA - FREESCALE
126 JUAN CARLOS VESGA FERREIRA

MOV #$FF,PORTA
MOV #%10000111,DDRA

Configuramos las resistencias de Pull-Up para los pines PTA[6:3] y habilitamos el pin PTA6 como un pin de
I/O y no como una funcin del oscilador de tipo RC, colocando en 1 lgico en bit 7 del registro PTAPUE.

MOV #%11111000,PTAPUE

Para evitar una interrupcin falsa, efectuamos lo siguiente:


IMASKK = 1
Asignar los valores a cada uno de los KBIx.
ACKK = 0
IMASKK = 0
Y el resultado es:
BSET IMASKK,KBSCR
MOV #%01111000,KBIER
BCLR ACKK,KBSCR
BCLR IMASKK,KBSCR

7.5 EJERCICIOS RESUELTOS


Enunciado del captulo
Se desea escribir un programa que permita leer la informacin enviada desde un teclado matricial de 12
teclas, y el valor de la tecla pulsada podr ser visualizado a travs de una pantalla de cristal lquido.

ALFAOMEGA - FREESCALE
MDULO DE INTERRUPCIN POR TECLADO (KBI) 127

Solucin

PTA2 PTA1 PTA0

PTA3 1 2 3
PTA4 4 5 6
PTA5 7 8 9
PTA6
* 0 #

FIGURA 7.1
Conexin del teclado.

PTA7 PTA6 PTA5 PTA4 PTA3 PTA2 PTA1 PTA0 PTAA


0 1 1 1 0 0 1 1 1
0 1 1 1 0 1 0 1 2
0 1 1 1 0 1 1 0 3
0 1 1 0 1 0 1 1 4
0 1 1 0 1 1 0 1 5
0 1 1 0 1 1 1 0 6
0 1 0 1 1 0 1 1 7
0 1 0 1 1 1 0 1 8
0 1 0 1 1 1 1 0 9
0 0 1 1 1 0 1 1 *
0 0 1 1 1 1 0 1 0
0 0 1 1 1 1 1 0 #

TABLA 7.1
Combinaciones para identificar la tecla pulsada.

ALFAOMEGA - FREESCALE
128 JUAN CARLOS VESGA FERREIRA

+5
+5

1K

7
+5

26 2

VDD
RST PTA0

20K PTA1
6 1 2 3
8
4
OSC1
PTA2 4 5 6
9
PTA3
5
OSC2/PTA6 23
7 8 9
PTA4
10pF
MC68HC908JL3

1 27
IRQ1 PTA5
* 0 #

16 PTB0 21
PTD
19

24
PTD1 PTB1
20

18
LCD
PTD2 PTB2
22 17
PTD3 PTB3

12 VDD
13 VEE

14 VSS
DB0
2 DB1

3 DB2

4 DB3

5 DB4

6 DB5

7 DB6

8 DB7

10 RW
11 RS
9 E
26 15
PTD4 PTB4
1

25 12 +5
PTD5 PTB5
14 11
PTD6 PTB6
VSS

13 PTD7 10
PTB7
3

2
10k

3
1

FIGURA 7.2
Circuito para manejo de teclado y LCD.

$INCLUDE JL3REGS.INC
* Etiquetas de direccin en el microcontrolador
FLASH EQU $EC00
RESET EQU $FFFE
TIMER EQU $FFF2
TECLADO EQU $FFE0
RAM EQU $80
COPD EQU 0

ALFAOMEGA - FREESCALE
MDULO DE INTERRUPCIN POR TECLADO (KBI) 129

* Definicin de los bits que se utilizarn en el microcontrolador para manejar las lneas RS y E de la pantalla
de cristal liquido, en este caso los pines PTD2 y PTD3, respectivamente.

E EQU 3
RS EQU 2

* Definicin de registros a utilizar en la RAM


ORG RAM
CONT RMB 1
* Definicin de la direccin a partir de la cual se escribe el programa
ORG FLASH
NMEROS DB %01110011 ;1
DB %01110101 ;2
DB %01110110 ;3
DB %01101011 ;4
DB %01101101 ;5
DB %01101110 ;6
DB %01011011 ;7
DB %01011101 ;8
DB %01011110 ;9
DB %00111011 ;*
DB %00111101 ;0
DB %00111110 ;#
ASCII DB 123456789*0#
INICIO BSET COPD,CONFIG1 ; Deshabilita el COP
CLRA
CLRX
CLRH
MOV #$00,PORTB ; Configuracin de Puertos B y D
MOV #$FF,DDRB
MOV #00,PORTD
MOV #$FF,DDRD

* Rutina de configuracin del teclado


MOV #$FF,PORTA
MOV #%10000111,DDRA

ALFAOMEGA - FREESCALE
130 JUAN CARLOS VESGA FERREIRA

MOV #%11111000,PTAPUE ;Habilitar Resist. Pull-Up


BSET IMASKK,KBSCR
MOV #%01111000,KBIER ;Hab. Pines de Interrup.
BCLR ACKK,KBSCR
BCLR IMASKK,KBSCR ;Hab. Interrup. de Tecl.

* Configuracin del timer


MOV #$36,TSC
MOV #$02,TMODH
MOV #$FF,TMODL
MOV #$46,TSC

BSR RETARDO ; Retardo


BSR LCD_CONF ; Configuracin de la Pantalla LCD
CLI ; Habilitar Interrupciones
FIN BRA FIN ; Bucle infinito

* Rutina de configuracin de LCD a 8 bits


LCD_CONF LDA #%00111000 ; Configuracin de LCD
BSR CONTROL
LDA #%00001110 ; Configuracin de Parpadeo
BSR CONTROL
LDA #%00000001 ; Borrar pantalla
BSR CONTROL
LDA #%00000110 ; Configuracin de desplazam.
BSR CONTROL
LDA #%10000000 ; Direccin inicial para escritura
BSR CONTROL
RTS

* Retardo para inicializar la LCD


RETARDO PSHH
PSHX
LDA #$FF
DELAY LDHX #$00EF
LOOP1 AIX #-1
CPHX #0
BNE LOOP1

ALFAOMEGA - FREESCALE
MDULO DE INTERRUPCIN POR TECLADO (KBI) 131

DECA
BNE DELAY
PULX
PULH
RTS

* Retardo para pulso de envo de comandos o datos a la LCD


RETARDO1 LDA #$FF
DELAY1 DECA
BNE DELAY1
RTS

* Rutina de envo de comandos o caracteres a la LCD a 4 bits


CONTROL BCLR RS,PORTD ; Bit RS = 0
BRA DATO2 ; Saltar a DATO2
DATO BSET RS,PORTD ; Bit RS = 1
DATO2 BSET E,PORTD ; Bit E = 1
STA CHAR ; CHAR = A
AND #$F0 ; Tomar los bits de ms peso
STA PORTB ; se envan al Puerto B
BSR RETARDO1 ; Pulso de Retardo1
BCLR E,PORTD ; Bit E = 0
CLR PORTB ; Borra Puerto B
BSR RETARDO1 ; Pulso de Retardo1
BSET E,PORTD ; Bit E = 1
LDA CHAR ; A = CHAR
NSA ; Intercambia nibles de A
AND #$F0 ; bits de menos peso antes
STA PORTB ; se envan al Puerto B
BSR RETARDO1 ; Pulso de retardo1
BCLR E,PORTD ; Bit E = 0
BSR RETARDO1 ; Pulso de retardo1
CLR PORTB ; Borra Puerto B
RTS ; Retorna de Subrutina

* Rutina de interrupcin por timer


INT_TIM PSHH ;Guarda H en el Stack
BRSET 0,PORTA,LOOP3 ;si PTA0 es 1,saltar

ALFAOMEGA - FREESCALE
132 JUAN CARLOS VESGA FERREIRA

MOV #%11111011,ROT_COL ;si no, iniciar valor


BRA SALTO ;de Columna
ROR ROT_COL ;Rotar a Dcha. La Columna
SALTO MOV ROT_COL,PORTA ;Enviar el dato al PORTA
FIN_TIM BCLR 7,TSC ;timer Atendido
PULH ;Sacar H del Stack
RTI ;Fin de Interrupcin

* Rutina de interrupcin por teclado


INT_TECL PSHH ;Guarda H en el Stack
LOOP2 CLRX ;X = 0
LOOP4 CPX #$12T ;Comparar X con 12
BEQ FIN_TEC ;Si X=12, Teclas no pulsadas
LDA PORTA ;si no, Leer valor puerto A
CMP NMEROS,X ;Compara con la tabla
BEQ LOOP5 ;si coincide, ir a LOOP5
INCX ;Si no, X = X+1
BRA LOOP4 ;Siguiente valor de Tabla
LOOP5 LDA ASCII,X ;Cargar carcter
BSR DATO ;Enviarlo a la LCD
FIN_TEC BSET ACKK,KBSCR ;Interrupcin atendida
PULH ;Sacar H del Stack
RTI ;Salir de la Interrupcin

ORG TIMER
DW INT_TIM

ORG TECLADO
DW INT_TECL

ORG RESET
DW INICIO

ALFAOMEGA - FREESCALE
MDULO DE INTERRUPCIN POR TECLADO (KBI) 133

EJERCICIOS PROPUESTOS

Escribir una rutina que permita leer una clave de acceso mediante un teclado matricial de 16
teclas. La clave debe estar constituida por 4 dgitos. Si por algn motivo se digita errneamente
alguna tecla, se debe permitir las funciones de borrado y aceptacin de la clave con tres intentos
como mximo para introducir la clave correctamente.
En una empresa de bebidas se desea disear un sistema que permita contar botellas, las cuales
se trasladan mediante una banda transportadora, ubicndolas finalmente en una caja. El sistema
debe permitir configurar el cupo mximo de botellas por caja.

RESUMEN DEL CAPTULO


Un teclado se utiliza constantemente en diferentes aplicaciones electrnicas;
sin embargo, debido a su funcionamiento interno es necesario recurrir a un
conjunto de dispositivos adicionales o, en muchos casos, a rutinas complicadas
e innecesarias provocando un aumento en la complejidad del sistema y un desgaste a
nivel de programacin. Una de las bondades presentes en los microcontroladores Freescale
es la inclusin de un mdulo especializado en el manejo de este tipo de dispositivos, lo cual favorece al
diseador a la hora de desarrollar alguna aplicacin que lo requiera. El mdulo de interrupcin por teclado
posee siete (7) interrupciones externas manipuladas de manera independiente cada una, y se encuentran
disponibles entre los pines PTA[0:6].
Entre las caractersticas del mdulo de interrupcin por teclado podemos mencionar las siguientes:
Siete pines de interrupcin por teclado habilitadas por separado cada una, y un solo bit indicador de
la interrupcin.
Configuracin de resistencias de Pull-Up.
Interrupcin programable por flanco o flanco/nivel.
Salida en modo de bajo consumo.
Los teclados pueden tener varias configuraciones, unos pueden ser matriciales y otros lineales. Los teclados
lineales son los que poseen tantos pines como teclas presenten y dos pines ms para alimentacin. Cada

ALFAOMEGA - FREESCALE
134 JUAN CARLOS VESGA FERREIRA

vez que se pulse una tecla, sta enviar a su respectivo pin un nivel bajo, identificando con ello la tecla
pulsada.
Los teclados matriciales, los cuales son los ms utilizados en la gran mayora de aplicaciones electrnicas,
se encuentran configurados, como su nombre lo indica, como una matriz.
Para identificar una tecla, sta se encuentra direccionada por una fila y una columna, y la interseccin de
ellas encasilla la tecla.

ALFAOMEGA - FREESCALE
Captulo 8
INTERRUPCIN EXTERNA IRQ
OBJETIVO DEL CAPTULO 8.1 INTRODUCCIN
Esta interrupcin es una de las ms utilizadas en las
Al finalizar el captulo el estudiante estar en aplicaciones desarrolladas con los microcontroladores
capacidad de configurar, manipular e interactuar Freescale, se emplea comnmente para conteo de
con la interrupcin IRQ, la cual se emplea en el personas, medidores de velocidad, deteccin de cruce
campo de deteccin de eventos externos como
por cero en circuitos de control de potencia, deteccin
conteos, cambios de estado de dispositivos,
de eventos, alarmas, etc. Es una de las interrupciones
que se encuentran relacionadas con el bit bandera de
interrupciones I.
Como la mayora de los estudiantes
CONOCIMIENTOS PREVIOS estn familiarizados con la programacin de
microcontroladores PIC, esta interrupcin es el
equivalente a la interrupcin por flanco presente en
etc.Para iniciar el estudio del presente captulo es
el pin RB0 del PIC16F84.
necesario que el lector posea un concepto bsico
de lo que es una interrupcin, una comprensin Una de las ventajas que presentan las interrupciones
general de las caractersticas propias de sta en los microcontroladores Freescale, a diferencia
familia de microcontroladores y su programacin. de otros fabricantes, es que su manejo se hace
de manera sectorizada, es decir, que para cada
interrupcin existe una direccin nica a la cual ir el
microcontrolador automticamente en el momento de
ocurrir determinada interrupcin, y no como ocurre
136 JUAN CARLOS VESGA FERREIRA

con otras familias en las que el manejo de interrupciones se hace de manera jerarquizada, es decir, hay que
clasificar las interrupciones segn el grado de importancia que considere el diseador a la hora de realizar
cualquier aplicacin, con la necesidad de preguntar una interrupcin tras otra hasta que se encuentre el
evento deseado.

8.2 CARACTERSTICAS

El mdulo de la IRQ tiene las siguientes caractersticas:


Un pin para interrupcin externa,
Bit de control de interrupcin IRQ
Buffer de histresis
Interrupcin programable como flanco o como flanco y nivel
Reconocimiento de interrupcin automtica
Resistencias de Pull-Up seleccionable

8.3 DESCRIPCIN DEL FUNCIONAMIENTO


Un 0 lgico aplicado al pin de interrupcin externo produce la interrupcin. A continuacin se muestra aqu
el esquema correspondiente a la estructura del mdulo IRQ.

ACK1
RESET
Bus de direcciones internas

VECTOR
FETCH
DECODER A la CPU para las
instrucciones BIL/BIH
VDD
IRQPUD VDD
INTERNAL
IRQF1
PLLLUP
DEYICE CLR Demanda de la
D Q SYNCHRO- interrupcin IRQ1
NIZER
IRQ1 CK
IRQ1
FF
IMASK1

MODE1 Al modo de
Seleccin Lgico
Deteccin
de alto
voltaje

FIGURA 8.1
Mdulo de interrupcin IRQ.
ALFAOMEGA - FREESCALE
INTERRUPCIN EXTERNA IRQ 137

El pin de interrupcin externa es configurable por software, activado por flanco descendente o por flanco
descendente y nivel bajo. El bit MODE1 en el registro ISCR controla el grado de sensibilidad para la activacin
del pin.
Es necesario tener en cuenta que se debe atender la interrupcin y salir de ella antes de que el pin de
interrupcin retorne a 1 lgico siempre y cuando se tenga configurado como flanco y nivel lgico bajo.

8.3 REGISTRO DE CONTROL DE ESTADO DE IRQ (INTSCR)


Direccin $001D

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0 IRQF1 0
Escribir ACK1 IMASK1 MODE 1

Este registro es el encargado del control y monitoreo de las operaciones del mdulo IRQ. El ISCR tiene
las siguientes funciones:
Mostrar el estado de la bandera IRQ1
Limpiar el latch IRQ1
Control de activacin del pin de interrupcin IRQ1
Bit IRQ1 y demanda de interrupciones

IRQF1: BANDERA IRQ1


Este bit es de slo lectura y se encuentra en 1 lgico cuando la interrupcin IRQ1 est pendiente.
1: Interrupcin IRQ1 pendiente
0: Interrupcin IRQ1 no pendiente

ACK1: bit de reconocimiento de demanda de la interrupcin IRQ1


Se debe escribir en este bit un 1 lgico solamente cuando se desee borrar el bit IRQF1, y siempre ser ledo
este bit como 0 lgico.

MASK1: bit de habilitacin de la interrupcin IRQ1


1: Interrupcin IRQ1 deshabilitada
0: Interrupcin IRQ1 habilitada

MODE1: bit de seleccin de flanco/nivel para IRQ1


Este bit controla la activacin del pin IRQ1
1: Interrupcin IRQ1 activada por flanco descendente y nivel lgico bajo
0: Interrupcin IRQ1 activada por flanco descendente solamente

ALFAOMEGA - FREESCALE
138 JUAN CARLOS VESGA FERREIRA

Se debe recordar que en el registro CONFIG2, ubicado en la direccin $001E, se encuentra un bit llamado
IRQPUD que habilita o deshabilita las resistencias de Pull-Up existentes entre el pin IRQ1 y VDD.

8.4 EJERCICIOS RESUELTOS


Enunciado del problema
Se desea utilizar una matriz de LEDS a travs de la cual se visualizar una letra. Esta cambiar cada vez
que se presione el pulsador SW1, el cual mediante la interrupcin IRQ efecta este cambio.

Solucin
La matriz de LEDS a utilizar se encuentra constituida por 7 filas y 5 columnas, as:

PTD3 PTD4 PTD5 PTD6 PTD7 LETRA


C1 C2 C3 C4 C5 C1 C2 C3 C4 C5
PTB0 F1 0 0 1 0 0
PTB1 F2 0 1 0 1 0
PTB2 F3 1 0 0 0 1
PTB3 F4 1 0 0 0 1
PTB4 F5 1 1 1 1 1
PTB5 F6 1 0 0 0 1
PTB6 F7 1 0 0 0 1
NO USADO 0 0 0 0 0

FIGURA 8.2
Esquema de configuracin de la matriz de Leds.7

Se debe tener en cuenta que las filas encienden con 1 lgico y las columnas con 0 lgico. En la grfica se
ilustra el ejemplo de la construccin de la letra A, los cinco valores correspondientes a las cinco columnas
son los valores establecidos en la tabla vistos de izquierda a derecha y considerando que el valor que se
encuentra en cada columna corresponde a un registro de 8 bits, el cual es enviado al puerto B, segn
la habilitacin de la columna por un nivel bajo. A continuacin se ilustra el circuito desarrollado con el
microcontrolador MC68HC908JK3.

ALFAOMEGA - FREESCALE
INTERRUPCIN EXTERNA IRQ 139

5V

1K

5
20 15
RST PTB0
20pF
7
14
PTB1
3
OSC1
1

13 8
10M

4MHz + PTB2
4
OSC2/PTA6
4

12 9
PTB3

1 11
20pF IRQ1 PTB4 10

8
PTB5 11

5V 7
+ PTB6
1
5 6
VDD PTB7
2

12
2
VSS
17
PTD2
220
5V 16
PTD3
220
19
PTD4

18 220
10K PTD5

10 220
SWI PTD6

9 220
PTD7

FIGURA 8.3
Circuito de control de matriz de Leds con MC68HC908JK3.

$INCLUDE JL3REGS.INC
FLASH EQU $EC00
RESET EQU $FFFE

ALFAOMEGA - FREESCALE
140 JUAN CARLOS VESGA FERREIRA

RAM EQU $80


IMASK1 EQU 1
MODE1 EQU 0
ACK1 EQU 2

ORG RAM
ROTADOR RMB 1
LETRA RMB 1
CONTA RMB 1
BANDERA RMB 1

ORG FLASH
TABLA DB %01111100,%00010010,%00010001,%00010010,%01111100 ;A
DB %01111111,%01001001,%01001001,%01001001,%00110110 ;B
DB %00111110,%01000001,%01000001,%01000001,%00100010 ;C
DB %01111111,%01000001,%01000001,%01000001,%00111110 ;D
DB %01111111,%01001001,%01001001,%01001001,%01001001 ;E
DB %01111111,%00001001,%00001001,%00001001,%00001001 ;F
DB %00111110,%01001001,%01001001,%01001001,%00110010 ;G
DB %01111111,%00001000,%00001000,%00001000,%01111111 ;H
DB %01000001,%01000001,%01111111,%01000001,%01000001 ;I
DB %01110000,%01000000,%01000000,%01000001,%00111111 ;J
DB %01111111,%00001000,%00010100,%00100010,%01000001 ;K
DB %01111111,%01000000,%01000000,%01000000,%01000000 ;L
DB %01111111,%00000010,%00000100,%00000010,%01111111 ;M
DB %01111111,%00000100,%00001000,%00010000,%01111111 ;N
DB %00111110,%01000001,%01000001,%01000001,%00111110 ;O
DB %01111111,%00001001,%00001001,%00001001,%00000110 ;P
DB %00111110,%01000001,%01010001,%01100001,%01111110 ;Q
DB %01111111,%00001001,%00011001,%00101001,%01000110 ;R
DB %00100110,%01001001,%01001001,%01001001,%00110010 ;S
DB %00000001,%00000001,%01111111,%00000001,%00000001 ;T

INICIO BSET 0,CONFIG1


* CONFIGURACIN DE LOS PUERTOS
MOV #$00,PORTB
MOV #$FF,DDRB ;Configura el Puerto B como Salida
MOV #$00,PORTD
MOV #$FF,DDRD ;Configura el Puerto D como Salida

ALFAOMEGA - FREESCALE
INTERRUPCIN EXTERNA IRQ 141

* CONFIGURACIN DE LA INTERRUPCIN IRQ


BCLR IMASK1,INTSCR ;Habilita Interrupcin de la IRQ
BCLR MODE1,INTSCR ;IRQ por flanco descendente
CLI ;Habilita Interrupciones
CLR LETRA ;Borra el registro Tabla
INIC_ROT CLR BANDERA ;Borra registro Bandera
LDA LETRA ;Carga en A el nmero de letra
STA CONTA ;y se almacena en CONTA
CLR PORTB ;Borrar PTOB
CLRX ;Borra X, apuntador OFFSET de Tabla
MOV #%11110111,ROTADOR
ROT MOV ROTADOR,PORTD ;Enciende la Columna
LDX CONTA ;Carga en X el valor de CONTA
LDA TABLA,X ;Va a la tabla y carga la fila X de la Letra
STA PORTB ;y la enva al PTOB
BSR RETARDO ;Llama retardo
INC CONTA ;Siguiente Fila, CONTA = CONTA+1
BRCLR 7,PORTD,INIC_ROT ; Si ya se visualizaron las 5 columnas
BRSET 1,BANDERA,INIC_ROT ;Siguiente Letra
ROL ROTADOR ;Rota a siguiente Columna
CLR PORTB ;Borra el PTOB
BRA ROT ;Salta a ROT, Sig. fila y Columna

RETARDO LDA #$70 ;A = $70


SALTO2 LDHX #$0002 ;H:X = $0002
SALTO1 AIX #-1 ;H:X = H:X - 1
CPHX #$0 ;Compare H:X con Cero
BNE SALTO1 ;Si no es cero, saltar a SALTO1
DECA ;A = A - 1
BNE SALTO2 ;Si A no es Cero, Saltar a SALTO2
RTS ;Salir de Subrutina

* INTERRUPCIN IRQ
IRQ PSHH ;Guarda H en el Stack
BIH FIN_IRQ ;Salta a FIN_IRQ si el Pin IRQ = 1
LDA LETRA ;si no, cargar el No. de Fila
CMP #95T ;A = 95 decimal?
BEQ SALTO_IRQ ;Si A = 95, ir a COMENZAR

ALFAOMEGA - FREESCALE
142 JUAN CARLOS VESGA FERREIRA

LDA LETRA ;Si no, A=LETRA


ADD #$5 ;A = A+5
STA LETRA ;LETRA = A
BSET 1,BANDERA ;Cambio de Letra
FIN_IRQ BSET ACK1,INTSCR ;Borra Interrupcin por IRQ
PULH ;Saca H del Stack
RTI ;Salir de Interrupcin

COMENZAR CLR LETRA ;Se posiciona en la primera letra


BRA FIN_IRQ ;Ir a FIN_IRQ

ORG $FFFA
DW IRQ ; Cuando ocurre interrupcin por IRQ
ORG RESET
DW INICIO ; Salta a INICIO cuando se energiza

EJERCICIOS PROPUESTOS

Se desea escribir un programa que permita contar el nmero de personas que ingresan y salen
de un almacn, mediante la interrupcin externa IRQ y utilizando 2 sensores fotorresistivos. La
cantidad de personas debe visualizarse a travs de una pantalla de cristal lquido.

Se desea disear un programa que permita controlar una alarma hogarea, de tal manera que
cuando un sensor de tipo magntico que se encuentra en la puerta quede abierto se active una
sirena mediante la generacin de un tren de pulsos a una frecuencia entre 400 y 500 Hz.

Disear un programa que permita controlar las luces de una habitacin utilizando rels, de tal
modo que cuando se detecte la presencia de una persona mediante un sensor de movimiento, el
sistema debe encenderlas o apagarlas, siempre y cuando se encuentre oscura la habitacin.

ALFAOMEGA - FREESCALE
INTERRUPCIN EXTERNA IRQ 143

RESUMEN DEL CAPTULO


Una de las ventajas que presentan las interrupciones en los microcontroladores
Freescale con respecto a otros fabricantes es que su manejo se hace de manera
sectorizada, es decir, que para cada interrupcin existe una direccin nica a la
cual ir el microcontrolador automticamente en el momento de ocurrir determinada
interrupcin, y no como ocurre con otras familias en las que el manejo de interrupciones se
hace de manera jerarquizada, es decir, hay que clasificar las interrupciones segn el grado de importancia
que considere el diseador a la hora de realizar cualquier aplicacin, con la necesidad de preguntar una
interrupcin tras otra hasta que se encuentre el evento deseado.
El mdulo de la IRQ tiene las siguientes caractersticas: un pin para interrupcin externa IRQ1, bit de
control de interrupcin IRQ, buffer de histresis, interrupcin programable como flanco o como flanco y
nivel, reconocimiento de interrupcin automtica, resistencias de Pull-Up seleccionable.
El pin de interrupcin externa es configurable por software, activado por flanco descendente o por
flanco descendente y nivel bajo. El bit MODE1 en el registro ISCR controla el grado de sensibilidad para la
activacin del pin IRQ1.

ALFAOMEGA - FREESCALE
Captulo 9
MANEJO DE LOS TIMERS
CON EL MICROCONTROLADOR
MOTOROLA-FREESCALE
OBJETIVO DEL CAPTULO 9.1 INTRODUCCIN
Al finalizar el captulo el estudiante estar Uno de los recursos que ms se necesitan a la hora
familiarizado con el uso del timer existente en de desarrollar cualquier aplicacin es el manejo de
el microcontrolador, con el cual a travs de tiempos o retardos. Los retardos se pueden realizar de
la interrupcin podr programar, configurar y dos formas: la primera consiste en valerse del retardo
manipular segn sus necesidades, desarrollando presente durante la ejecucin de una instruccin, la
adems la habilidad para trabajar tiempos a cual depende del nmero de ciclos que requiere para
diferentes escalas y momentos, y aplicarlos en su ejecucin y de la frecuencia del oscilador encargado
todo desarrollo que lo requiera. del funcionamiento del microcontrolador; teniendo en
cuenta estos dos factores es posible generar un retardo

CONOCIMIENTOS PREVIOS a base de instrucciones, forma que en la mayora


de los casos es poco prctica ya que obliga a que el
microcontrolador dirija su atencin a este proceso y
Para iniciar el estudio del presente captulo es descuide otros procesos que en un momento dado
necesario que el lector posea conceptos bsicos
representen mayor importancia. La segunda forma
sobre temporizacin y uso de interrupciones.
y, de paso, la ms adecuada y utilizada, es valerse
de un poderoso recurso presente en la gran mayora
de microcontroladores existentes, que es utilizar el
timer. El timer se puede considerar como un registro
contador que incrementa su valor a medida que
146 JUAN CARLOS VESGA FERREIRA

transcurre el tiempo, donde el incremento depende de varios factores como son la frecuencia del oscilador y
la configuracin del prescalador. En este captulo se hace nfasis en el manejo, configuracin y programacin
de este recurso tan importante a la hora de disear cualquier aplicacin de ndole electrnica.
El TIM es un mdulo de tiempo de dos canales que recibe, compara, enva y tiene funciones de modulacin
por ancho de pulso PWM.

PRESCALER SELECT
INTERNAL
BUS CLOCK PRESCALER

TSTOP
PS2 PS1 PS0
TRST

16-BIT COUNTER TOF INTERRUPT


TOIE LOGIC
16-BIT COMPARATOR
TMODH:TMODL
TOVO
CHANNEL 0 ELS0B ELS0A CH0MAX PORT
LOGIC TCH0
16-BIT COMPARATOR
TCH0H:TCH0L CH0F
INTERRUPT
16-BIT LATCH LOGIC
MS0A CH0IE
MS0B
TOV1
CHANNEL 1 ELS1B ELS1A CH1MAX PORT
TCH1
LOGIC
INTERNAL BUS

16-BIT COMPARATOR
TCH1H:TCH1L CH1F
16-BIT LATCH INTERRUPT
LOGIC
MS1A CH1IE

FIGURA 9.1
Mdulo interno del TIM.

En el puerto D se encuentran dos pines que manejan dos canales de I/O con el TIM, siendo estos PTD4/
TCH0 y PTD5/TCH1. Cada canal de I/O es programable de manera independiente como un pin de captura
de entrada (Input Compare) o una comparacin de salida (Output Compare). El pin PTD4/TCH0 puede
ser configurado como un buffer de comparacin de salida o un pin de buffer PWM.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 147

9.2 FUENTES DE INTERRUPCIN DEBIDAS AL TIM


TOF: Bandera de rebosamiento del TIM
El bit TOF se coloca en 1 lgico cuando el valor del contador del TIM retorna al valor $0000 despus de haber
alcanzado el valor MDULO (valor de rebosamiento), esta interrupcin es habilitada cuando el bit TOIE
tiene como valor 1 lgico.

BANDERAS DE CANALES (CH1F:CH0F). El bit CHxF se coloca en 1 lgico cuando una captura
de entrada o una comparacin de salida ocurren en el canal x. Automticamente el canal x genera la llamada
a la interrupcin controlada por el canal x y sta se habilita cuando el bit CHxIE tiene como valor 1 lgico.

9.3 REGISTRO TSC

Direccin $0020

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer TOF 0 0
Escribir 0 TOIE TSTOP TRST PS2 PS1 PS0

TOF: bit indicador de rebosamiento del TIM


Este bit se coloca en 1 cuando el contador del TIM se reinicia o tiene como valor $0000 despus de alcanzar
el valor MDULO; para borrar este bit basta con leer el valor del registro TSC.
1: El contador del TIM ha alcanzado el valor MDULO
0: El contador del TIM no ha alcanzado el valor MDULO

TOIE: bit habilitador de interrupcin por rebosamiento del TIM


1: Interrupcin por rebosamiento del TIM habilitada
0: Interrupcin por rebosamiento del TIM deshabilitada

TSTOP: bit de parada del TIM


Este bit permite parar el contador del TIM
1: Detiene el contador del TIM
0: Activa el contador del TIM

TRST: bit de Reset del TIM


1: Prescalador y contador del TIM son limpiados
0: Sin efecto

ALFAOMEGA - FREESCALE
148 JUAN CARLOS VESGA FERREIRA

PS[2:0]: seleccin de bits para configuracin del prescalador


Estos bits permiten configurar el prescalador del TIM, dependiendo de la combinacin tal como lo ilustra la
siguiente tabla.

PS2 PS1 PS0 PRESCALADOR DEL TIM


0 0 0 RELOJ INTERNO 1
0 0 1 RELOJ INTERNO 2
0 1 0 RELOJ INTERNO 4
0 1 1 RELOJ INTERNO 8
1 0 0 RELOJ INTERNO 16
1 0 1 RELOJ INTERNO 32
1 1 0 RELOJ INTERNO 64
1 1 1 NO DISPONIBLE

TABLA 9.1
Configuracin del prescalador.

9.4 REGISTRO CONTADOR DEL TIM TCNTH/L


REGISTRO TCNTH

Direccin $0021

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8
Escribir

REGISTRO TCNTL

Direccin $0022
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Escribir

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 149

Estos dos registros (TCNTH:TCNTL) son de slo lectura y contienen los bytes alto y bajo del contador
del TIM, respectivamente.

9.5 REGISTRO MDULO DE TIEMPO TMODH/L

REGISTRO TMODH

Direccin $0023

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8

REGISTRO TMODL

Direccin $0024

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Estos dos registros contienen el valor MDULO para el contador del TIM. Cuando el contador del TIM
alcanza el valor MDULO, el bit TOF se coloca en 1 lgico y comienza nuevamente el conteo desde $0000.

9.6 REGISTRO DE ESTADO Y CONTROL DE CANALES DEL TIM


Cada uno de los registros de control de estado de canales del TIM tiene las siguientes caractersticas:
Banderas de capturas de entrada (Input Compare) y comparacin de salidas (Output Compare).
Habilitacin de capturas de entrada y comparacin de salidas.
Seleccin de capturas de entrada, comparacin de salidas o funciones PWM.
Seleccin de flanco ascendente/descendente como valores de arranque.
Seleccin de salidas bipolares (toggle) en el rebosamiento del TIM.
Seleccin de duracin del ciclo PWM en 100%.
Habilitacin de buffers en comparacin de salidas/funciones PWM.

ALFAOMEGA - FREESCALE
150 JUAN CARLOS VESGA FERREIRA

REGISTRO TSC0

Direccin $0025

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer CH0F
Escribir 0 CH0IE MS0B MS0A ELS0B ELS0A TOV0 CH0MAX

REGISTRO TSC1

Direccin $0028

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer CH1F 0
Escribir 0 CH1IE MS1A ELS1B ELS1A TOV1 CH1MAX

CHxF: bit bandera del canal x


Este bit se coloca en 1 lgico cuando ocurre un flanco en el pin del canal x. Cuando el canal x es una comparacin
de salida, este bit se coloca en 1 lgico cuando en el registro contador del TIM es igual al valor del registro
del TIM del canal x.
1: Captura de entrada o comparacin de salida en el canal x.
0: NO captura de entrada o comparacin de salida en el canal x.

CHxIE: bit de habilitacin de interrupcin del canal x


1: Habilita la interrupcin
0: Deshabilita la interrupcin

MSxB: modo de seleccin del bit B


Este bit selecciona el buffer para comparacin de salida/operacin PWM. Este bit existe solamente en el
registro TSC0.
Si este bit tiene valor de 1 lgico, el TSC1 queda deshabilitado y regresa el TCH1 a propsitos generales
de I/O.
1: Habilita el buffer para comparacin de salida/operaciones PWM.
0: Deshabilita el buffer para comparacin de salida/operaciones PWM.

MSxA: modo de seleccin del bit A


Cuando ELSxB:A 00

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 151

1: Sin buffer de comparacin de salida/operacin PWM.


0: Operacin captura de entrada.

Cuando ELSxB:A = 00
Selecciona el valor inicial del pin TCHx
1: 0 lgico como valor inicial.
0: 1 lgico como valor inicial.

ELSxB y ELSxA: bits de seleccin de flanco o nivel


Para comprender mejor la combinacin anterior se debe tener en cuenta la siguiente tabla.

MSxB MSxA ELSxB ELSXA MODO CONFIGURACIN


X 0 0 0 Pin bajo control del puerto
Salida prestablecida 1 lgico como valor inicial
X 1 0 0 Pin bajo control del puerto
0 lgico como valor inicial
0 0 0 1 Captura con solo flanco ascendente
0 0 1 0 Captura de entrada Captura con solo flanco descendente
0 0 1 1 Captura con solo flanco ascend. o descend.

0 1 0 1 Salida de Toggle en comparacin


0 1 1 0 Comparacin de Salida 0 lgica en comparacin
salida o PWM Salida 1 lgica en comparacin
0 1 1 1
1 X 0 1 Comparacin de Salida de Toggle en comparacin
1 X 1 0 salida con buffer o Salida 0 lgica en comparacin
PWM con buffer Salida 1 lgica en comparacin
1 X 1 1

TABLA 9.2
Seleccin de modos, flancos y niveles.

TOVx: bit de habilitacin de toggle en rebosamiento


1: Aplicar toggle al pin del canal x cuando el contador del TIM se rebose.
0: No aplicar toggle al pin del canal x cuando el contador del TIM se rebose.

CHxMAX: bit de mxima duracin del ciclo en el canal x


Cuando TOVx es un 0 lgico y se coloca el bit CHxMAX en 1 lgico, se configura la duracin del ciclo PWM
a 100% y esto se mantiene hasta que el bit CHxMAX es borrado.

ALFAOMEGA - FREESCALE
152 JUAN CARLOS VESGA FERREIRA

9.7 LOS REGISTROS DE CANALES DEL TIM (TCH0H/L:TCH1H/L)


Estos registros contienen el valor del contador del TIM de la funcin captura de entrada o comparacin de
salida. El estado de estos registros despus del reset es desconocido.

REGISTRO TCH0H

Direccin $0026

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit 15 Bit 14 Bit 13 Bit 12 EBit 11 Bit 10 Bit 9 Bit 8

REGISTRO TCH0L

Direccin $0027

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit 7 Bit 6 Bit 5 Bit 4 EBit 3 Bit 2 Bit 1 Bit 0

REGISTRO TCH1H

Direccin $0029

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit 15 Bit 14 Bit 13 Bit 12 EBit 11 Bit 10 Bit 9 Bit 8

REGISTRO TCH1L

Direccin $002A

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit 7 Bit 6 Bit 5 Bit 4 EBit 3 Bit 2 Bit 1 Bit 0

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 153

9.8 FUNCIN PWM


La modulacin del ancho de pulso se usa para generar una forma de onda con un perodo fijo y el ciclo de
servicio variable. El ciclo de servicio es la relacin existente entre el tiempo en el cual la seal se mantiene en
un estado alto 1 y el tiempo en que la seal se mantiene en un estado bajo 0. Segn lo anterior, se puede
decir que en la modulacin PWM se pueden presentar diferentes frecuencias y resoluciones. La frecuencia
est definida por el perodo o duracin de un ciclo completo de la seal (T = TH + TL; TH: tiempo de duracin
para un nivel alto, TL: tiempo de duracin para un nivel bajo) y la resolucin es definida por el nmero de
pasos discretos del ciclo de servicio que se pueden poner a 1.
Si se configura una modulacin PWM de 8 bits, es decir, configurando el rebosamiento del timer a un
valor de 256, que para lograrlo se debe establecer (TMODH:TMODL = 00:FF), permitiendo especificar el ciclo
de servicio en 256 pasos.
El uso de seales PWM tiene lugar comnmente en diferentes tipos de aplicaciones como, por ejemplo:
Generacin de seales sinusoidales, obtenida de la generacin de una onda cuadrada a un frecuencia fija
(programada segn el perodo de la seal PWM con 50% de ciclo de servicio), aplicada posteriormente
a un filtro pasabajo con frecuencia de corte igual a la frecuencia de la seal cuadrado.
Control de velocidad de un motor de DC.
Control de carga de una batera.
Control de intensidad de luz en una lmpara (Dimmer).

Entre las funciones ms importantes del mdulo TIM estn las funciones Output Compare
e Input Compare. A continuacin se explicar en detalle cada una de ellas y se indicarn
los beneficios que brindan a la hora de realizar cualquier implementacin que requiera
el uso de este mdulo.

Funcin Output Compare


La funcin de comparacin de salida usa los siguientes componentes para su ptimo funcionamiento:
Mdulo de tiempo de 16 bits
Un comparador
Un latch de 16-bits de comparacin de salida (Output Compare)
Un pin de salida
Un pin de control lgico y una fuente de interrupcin.
La funcin Output Compare realiza, como su nombre lo indica, una comparacin entre el valor presente
en el registro (TCNTH:TCNTL) y el valor de contador del mdulo TIM propio del canal (TCHxH:TCHxL);
cuando estos dos valores son iguales se genera una interrupcin visualizada en los bits TCHxF.

ALFAOMEGA - FREESCALE
154 JUAN CARLOS VESGA FERREIRA

Opcionalmente se puede establecer un pin de salida a 1, 0 o conmutando (toggle) cuando la accin anterior
ocurra. Al utilizar las interrupciones permite al usuario acercarse a tiempos muy precisos y crear eventos
externos usando los pins de entrada/salida de comparacin.

Aplicaciones Output Compare


Se puede utlizar la funcin Output Compare en una gran variedad de aplicaciones que van desde cronometraje
o temporizacin de eventos hasta control de niveles de tensin en cargas elctricas. Usando el pin de salida
configurado en modo (toggle) se puede implementar un simple pulso con ancho variable, generar una frecuencia
de salida variable o una seal de modulacin de ancho de pulso (PWM). Estas tcnicas sern explicadas con
mayor detalle en secciones posteriores.

Funcin Input Capture


La funcin Input Capture se implementa a travs de un pin de entrada con modo de seleccin de flanco,
detector lgico y lgica de interrupcin; utiliza un contador de 16 bits permitiendo cronometrar eventos
externos para ser referenciados al contador que corre libremente de 16 bits.
Se puede configurar el pin de la entrada para buscar un flanco de subida, un flanco de bajada o cualquier
tipo de flanco. Cuando se activan las interrupciones y se ha detectado el flanco seleccionado, el latch del
Input Capture se carga con el valor del contador que corre libremente y graba un tiempo de cuando ocurri
el evento, colocando en 1 el indicador de estado y generarando as la interrupcin correspondiente.

Aplicaciones Input Capture


Se puede usar la funcin Input Capture en una gran diversidad de aplicaciones. Se emplea comnmente para
realizar una referencia de tiempo absoluto de un evento externo, medir un perodo de entrada, entre otras
aplicaciones. Cuando se utilizan perodos largos, la rutina de servicio se ajusta al nmero de interrupciones
de desbordamiento del timer que ocurren entre el primer y segundo flanco.
Usando el Input Capture se puede medir el ancho de un pulso de entrada, funcin semejante a la medicin
de un perodo, excepto que la segunda captura se configura para detectar el flanco de bajada en vez del flanco
de subida inicial. Cuando se requieren anchos de pulso muy cortos, se pueden utilizar los dos canales del
timer para mirar la misma seal con un canal para detectar el flanco de subida y el otro canal para detectar
el flanco de bajada permitiendo la toma de tiempos inferiores a 125 ns.
En caso de no requerirse la funcin de captura de entrada, se puede utilizar el pin de captura de entrada
como una lnea de interrupcin adicional.
La operacin de PWM o modulacin por ancho de pulso presenta en la actualidad una gran variedad de
aplicaciones en control y comunicaciones, y este microcontrolador tiene esta valiosa herramienta entre sus
funciones.

9.9 IMPLEMENTACIN PWM EN EL MICROCONTROLADOR

Para efectuar la operacin de modulacin por ancho de pulso se debe tener en cuenta que el PERODO de la
operacin PWM se adjudica en los registros MDULO del contador del TIM y en los registros TCHxH/L se

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 155

configura el ancho del pulso. La comparacin de salida en el registro del canal del TIM determina al ancho
del pulso de la seal PWM. El tiempo entre el rebosamiento y la comparacin de la salida corresponde al
ancho del pulso.

Perodo y ancho de pulso de la operacin PWM


El valor de los registros mdulo y la seleccin prescalador de salida determina la frecuencia de salida de la
seal PWM. La frecuencia es variable en 256 incrementos. Si TMODH:TMODL = $00FF (255), los registros
contadores de mdulo producen un perodo de 256 veces el perodo del reloj interno si el valor del prescalador
es 000 (configuracin del prescalador en el registro TSC).

REBOSAMIENTO REBOSAMIENTO REBOSAMIENTO

PERODO

ANCHO
DEL
PULSO

TCHx

COMPARACIN DE SALIDA COMPARACIN DE SALIDA COMPARACIN DE SALIDA

FIGURA 9.3
Perodo y ancho de pulso.

El valor de los registros de canal del TIM determina el ancho del pulso de la seal PWM. Aqu tambin se
tiene una variacin de 256 incrementos. Si, por ejemplo, el valor $0080 (128), es almacenado en los registros
canales del TIM, produce una duracin de ciclo de (128/256), es decir, 50%.
El hecho de utilizar salida PWM con buffer o sin buffer puede traer ventajas en cuanto al control de la seal
PWM, ya que permite manejarse en forma sncrona o asncrona, respectivamente, y con ello evitar que haya
errores al cambiar valores antiguos para el valor del ancho de pulso.
Una operacin asncrona puede causar operaciones incorrectas por uno o dos perodos de PWM. Por
ejemplo, colocar un nuevo valor antes de que el contador alcance el valor antiguo pero despus de que alcance
el valor nuevo, evita alguna comparacin durante ese perodo de PWM; sin embargo, utilizando la bandera
de interrupcin de rebosamiento del TIM podr escribir un nuevo dato, pero si ste provoca un ancho muy
pequeo puede llegar a omitirse.

ALFAOMEGA - FREESCALE
156 JUAN CARLOS VESGA FERREIRA

Por ello se recomienda efectuar el siguiente procedimiento para evitar tener problemas al sincronizar la
seal PWM sin buffer:
Cuando se cambie a un ancho de pulso corto o largo se debe habilitar la interrupcin de comparacin
de salida del canal x y escribir un nuevo dato en la rutina de interrupcin de comparacin de salida. Esta
interrupcin ocurre cuando finaliza el pulso actual de PWM.

INICIALIZACIN DE LA FUNCIN PWM


Para lograr un correcto funcionamiento de la funcin PWM:
1. Efectuar las siguientes tareas en el registro TSC:
a. TSTOP = 1
b. TRST =1
2. En los registros (TMODH:TMODL), escribir el valor requerido para el perodo PWM.
3. En los registros (TCHxH:TCHxL), escribir el valor requerido para el ancho del pulso.
4. En el registro TSCx, efectuar las siguientes tareas:
a. escribir 0:1 (para comparacin de salida sin buffer o seales PWM) o escribir 1:0 (para comparacin de
salida con buffer o seales PWM) en el modo de seleccin de bits MSxB:MSxA; ver tabla de seleccin
de modos y flancos expuesta anteriormente.
b. TOVx = 1
c. escribir 1:0 (para 0 lgico la comparacin de salida) o escribir 1:1 (para 1 lgico la comparacin de
salida) en el bit de seleccin para flanco/nivel ELSxB:ELSxA.
5. TSTOP = 0 del registro TSC
El registro TSCR0 es el que se encarga de controlar y monitorear la seal PWM. Cuando se coloca en el
bit TOVx = 0 tiene como resultado que la duracin del ciclo de salida es 0%.

9.10 EJERCICIOS RESUELTOS

En el captulo referente al Manejo de temporizacin bsica se introdujeron conceptos bsicos sobre


temporizacin utilizando como mecanismo de retardo el generado por cada instruccin, de acuerdo con
los ciclos de mquina propios de cada instruccin a la hora de ejecutar la funcin especfica para la que
fueron diseados.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 157

Ejercicio 1
Enunciado
A continuacin se ilustra un ejemplo en el que se desea escribir una rutina que permita efectuar un retardo
de 1 segundo (otra forma diferente), utilizando simplemente el retardo efectuado por el nmero de ciclos
de una instruccin y considerando la frecuencia del oscilador de 4MHz.

Solucin
Teniendo en cuenta que:

1 CICLO DE MQUINA = 4 CICLOS DEL OSCILADOR

Entonces si se considera esto, se puede afirmar que:


Frec.Oscilador
Frecuencia del bus interno =
4
1 4
1 ciclo de mquina = =
Frec.BusInterno Frec.Oscilador

En nuestro caso, si el oscilador tiene una frecuencia de 4 MHz, el tiempo que tarda un ciclo de mquina es
1 s. Como se desea escribir una rutina que genere un retardo de 1 segundo, se puede pensar que:

1 segundo = (1 s) x (10 ciclos) x 1000 x 100


= ((((1 s) 10 ciclos) 1000 veces ) 100 veces)

Considerando lo anterior, la rutina que cumple lo deseado es la siguiente:


RETARDO PSHH ; Almacena H en el Stack 2Cic.
PSHX ; Almacena X en el Stack 2Cic.
LDA #$64 ; A = $64 , 100 Veces 2Cic.
DELAY LDHX #$03E8 ; H:X = $03E8 , 1000 Veces 3Cic.
* Rutina de retardo 10 ciclos de mquina

LOOP1 AIX #-1 ; HX = HX 1 2Cic.


CPHX #0 ; Compara HX con 0 3Cic.
NOP ; Nada 1Cic.
NOP 1Cic.
BNE LOOP1 ; Si no es Cero, saltar a LOOP1 3Cic.

DECA ; Decrementar A 1Cic.


BNE DELAY ; Si no es Cero, saltar a DELAY1 3Cic.

ALFAOMEGA - FREESCALE
158 JUAN CARLOS VESGA FERREIRA

PULX ; Sacar X del Stack 2Cic.


PULH ; Sacar H del Stack 2Cic.
RTS ; Retornar de Subrutina 4Cic.

Para obtener el mismo efecto anterior se deben seguir estos pasos, los cuales son necesarios para la ptima
configuracin del timer.
1. Se deshabilita la interrupcin por TIM, TOIE = 0
2. se detiene el TIM, TSTOP = 1
3. Se borra el TIM, TRST = 1
4. Se configura el prescalador, en este caso se configura a 64
5. Se establecen los valores de rebosamiento en los registros TMODH/L
6. Se habilita el TIM para interrupcin TOIE = 1
7. Se deshabilita el reset del TIM, TRST = 0
8. Se permite el conteo del TIM , TSTOP = 0

Teniendo en cuenta lo anterior, el resultado es el siguiente:

4
1 segundo = x Pr escalador x (TMODH : TMODL)
Frec.Oscilador

Si consideramos la frecuencia del oscilador nuevamente de 4 MHz y el valor del prescalador = 64, el
valor correspondiente a TMODH:TMODL ser:

1 Segundo x Frec. Oscilador 1 x 4 x 106


TMODH : TMODL = = = 15625
4 x Pr escalador 4 x 64

La respuesta es 15625 en decimal, o su equivalente 3D09 en hexadecimal, indicando este ltimo que
los valores de TMODH y TMODL sern $3D y $09, respectivamente.

CONF_TIM MOV #$36,TSC ;B00110110 al TSC, Pasos 1,2,3 y 4


MOV #$3D,TMODH ;TMODH = , Paso 5
MOV #$09,TMODL ;TMODL 0 , Paso 5
MOV #$46,TSC ;B01000110 al TSC, Pasos 6,7 y 8

Esta rutina provocar que el timer genere una interrupcin cada segundo, la cual deber ser atendida.
Para observar el efecto consideremos el siguiente ejemplo, en el que se desea que un LED ubicado en el
pin PTB7 se encienda y se apague cada segundo.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 159

5V

1K

20 15
RST PTB0
20pF
14
PTB1
3
OSC1
1

13
10M

4MHz + PTB2
4
OSC2/PTA6
4

12
PTB3

20pF 1 11
IRQ1 PTB4

8
PTB5

+5V 7
+ PTB6

5 6
VDD PTB7
220

2
VSS
17
PTD2

16
PTD3

19
PTD4

18
PTD5

10
PTD6

9
PTD7

FIGURA 9.4
Circuito aplicado al ejemplo con MC68HC908JK3.

$ INCLUDE JL3REGS.INC
FLASH EQU $ECE0
RESET EQU $FFFE
TIMER EQU $FFF2
RAM EQU $80

ALFAOMEGA - FREESCALE
160 JUAN CARLOS VESGA FERREIRA

COPD EQU 0
LED EQU 7
ORG RAM
BANDERA RMB 1 ;Registro Bandera de 1 Seg.
ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
MOV #$00,PORTB ;PTB7 = 0
MOV #$80,DDRB ;Config. el PTB7 salidas
SALTO BCLR 7,PORTB ;PTB7 = 0
BSR RETARDO ;Retardo de 1 Segundo
BSET 7,PORTB ;PTB7 = 1
BSR RETARDO ;Retardo de 1 Segundo
BRA SALTO ;Ir a Salto

RETARDO BCLR LED,BANDERA ;No ha transcurrido 1 Seg.


CONF_TIM MOV #$36,TSC ;B00110110 al TSC
MOV #$3D,TMODH ;TMODH = $3D
MOV #$09,TMODL ;TMODL = $09
MOV #$46,TSC ;B01000110 al TSC
CLI ;Habilita Interrupciones

ESPERA BRSET LED,BANDERA,FIN ;Si transcurri 1 Seg. FIN


BRA ESPERA ;Si n, ir a Espera
FIN RTS ;Retorno de Subrutina

TIM PSHH ;Guarda el registro H


BSET LED,BANDERA ;Ya transcurri 1 Segundo
FIN_INT BCLR 7,TSC ;Borra bandera de interrup
PULH ;Sacar H del Stack
RTI
ORG RESET ;Cuando se energiza
DW INICIO ;Ir a INICIO
ORG TIMER ;Interrupcin por TIMER
DW TIM ;Ir a TIM

Ejercicio 2
Enunciado
Otra aplicacin importante en el campo de la electrnica es el control de motores paso a paso. Estos motores
estn presentes en una gran cantidad de aplicaciones como controles de posicin, robtica, impresoras, etc.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 161

Explicacin de teora adicional para solucin del problema


BOBINA 1

BOBINA 2
BOBINA 3

BOBINA 4

GRIS AMARILLO
ROJO
NEGRO
NEGRO ROJO
AMARILLO GRIS

FIGURA 9.5
Esquema de un motor paso a paso.

Estos motores estn conformados internamente por cuatro bobinas, las cuales dependiendo de la forma en
que son energizadas, permiten obtener diferentes configuraciones de movimiento para el motor. Entre las
configuraciones de movimiento se pueden mencionar:
1. CONFIGURACIN OLA. Esta configuracin consiste en que solamente una de las cuatro bobinas
es energizada, permitiendo con ello un movimiento del motor armnico, pero sin mucho torque.
2. CONFIGURACIN PASO. Consiste en que dos de las cuatro bobinas se encuentran energizadas;
con ello se permite avanzar en la misma forma que la configuracin anterior, pero con un mayor
torque.
3. CONFIGURACIN MEDIO PASO. Esta configuracin es til cuando se desea que el desplazamiento
del motor sea, como su nombre lo dice, a medio paso, es decir, un motor por lo general se identifica
por el nmero de pasos que requiere para dar un giro completo (360 grados). Esta configuracin
permite que si el motor es de 50 pasos se convierta en uno de 100 pasos, permitiendo con ello
un movimiento ms fino. La configuracin consiste en que alternadamente se van energizando
dos bobinas y luego una y as sucesivamente hasta completar con esta combinacin las cuatro
bobinas.

ALFAOMEGA - FREESCALE
162 JUAN CARLOS VESGA FERREIRA

A continuacin se ilustra la forma en que son energizadas las bobinas para cada una de las configuraciones,
teniendo en cuenta que la bobina es energizada donde se encuentre un 1 lgico y desenergizada cuando
se encuentre un 0 lgico.

CONFIGURACIN OLA
BOBINA 1 BOBINA 2 BOBINA 3 BOBINA 4
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

TABLA 9.2
Configuracin Ola.

CONFIGURACIN PASO
BOBINA 1 BOBINA 2 BOBINA 3 BOBINA 4
1 1 0 0
0 1 1 0
0 0 1 1
1 0 0 1

TABLA 9.3
Configuracin Paso.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 163

CONFIGURACIN MEDIO PASO


BOBINA 1 BOBINA 2 BOBINA 3 BOBINA 4
1 1 0 0
0 1 0 0
0 1 1 0
0 0 1 0
0 0 1 1
0 0 0 1
1 0 0 1
1 0 0 0

TABLA 9.4
Configuracin Medio paso.

Se desea escribir un programa que permita controlar un motor paso a paso en las diferentes configuraciones
Paso, Medio paso y Ola y el sentido de giro, ya sea horario o antihorario, mediante 3 interruptores que se
encuentran en los pines PTB[7:5] configurados as:
Los interruptores correspondientes a los pines PTB[7:6] controlan segn su combinacin el tipo de
configuracin para el motor paso a paso.

PTB7 PTB6 Configuracin


0 0 Deterner
0 1 Ola
1 0 Paso
1 1 Medio Paso

TABLA 9.5
Estado de bits para control del motor.

ALFAOMEGA - FREESCALE
164 JUAN CARLOS VESGA FERREIRA

El interruptor del pin PTB5 controla el sentido de giro.

CONFIGURACIN PASO
PTB5 Sentido
TABLA 9.6 0 Horario
1 Antohorario
Estado de bits para control del motor.

12V
5V

VDD
1K

L4

L3

L2

L1
20 15 10K

1
RST PTB0
20pF
14 10K
PTB1
3
OSC1
1

13 10K
4MHz + 10M PTB2
4
OSC2/PTA6
4

12 10K
PTB3

20pF 1 11 10K
IRQ1 PTB4

8
PTB5 5V

5V 7
+ PTB6 5V
R3

5 6
VDD PTB7 5V 10K

1 2
10K 83
R2

2
VSS 1 2
17
PTD2 82
10K
16 1 2
PTD3 81

19
PTD4

18
PTD5

FIGURA 9.6 PTD6


10

Circuito de control de motor PTD7


9
paso a paso con JK3.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 165

$ INCLUDE JL3REGS.INC
FLASH EQU $ECE0
RESET EQU $FFFE
TIMER EQU $FFF2
RAM EQU $80
COPD EQU 0

*BANDERAS
*BIT 0 ;0 SENTIDO A 1 SENTIDO B
*BIT 1 ;1 SIGUE TABLA 0 INICIO DE TABLA
ORG RAM
DATO RMB 1
BANDERA RMB 1
MAXIMO RMB 1
MINIMO RMB 1

ORG FLASH
TABLA DB $0,$8,$4,$2,$1,$0 ; OLA
DB $0,$0C,$6,$3,$9,$0 ; PASO
DB $0,$0C,$4,$6,$2,$3,$1,$9,$8,$0 ; MEDIO PASO

INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD


CLRA ;A = 0
CLRX ;X = 0
CLR BANDERA ;BANDERAS = 0
CLR DATO ;DATO = 0

* Configuracin de Puertos
MOV #$00,PORTB ;Puerto B Borrado
MOV #$0F,DDRB ;PTB[7:4] IN, PTB[3:0] OUT

* Configuracin del TIMER


MOV #$36,TSC
MOV #$00,TMODH
MOV #$14,TMODL
MOV #$46,TSC
CLI ;Habilita Interrupciones
MOV #0T,MINIMO ;Valores Iniciales

ALFAOMEGA - FREESCALE
166 JUAN CARLOS VESGA FERREIRA

MOV #0T,MAXIMO ;Valores Iniciales

* Rutina que controla el motor en sentido horario


HORARIO CLR PORTB ;Apaga Motor
MOV MINIMO,DATO ;Valor minimo de Config.
NEXTH LDX DATO ;X = MINIMO
LDA TABLA,X ;Carga combinacin
BEQ HORARIO ;si Valor = 0,salta
STA PORTB ;si no, la enva al puerto
SALTOH BRCLR 2,BANDERA,SALTOH ; Espera el retardo
BCLR 2,BANDERA ;Borra bandera de Retardo
INC DATO ;Siguiente combinacin
BRSET 5,PORTB,AHORARIO ;Verifica sentido
BRA NEXTH ;Salta a siguiente valor

* Rutina que controla el motor en sentido antihorario


AHORARIO CLR PORTB ;Apaga Motor
MOV MAXIMO,DATO ;Valor mnimo de Config.
NEXTAH LDX DATO ;X = MAXIMO
LDA TABLA,X ;Carga combinacin
BEQ AHORARIO ;si Valor = 0,salta
STA PORTB ;si no, la enva al puerto
SALTOAH BRCLR 2,BANDERA,SALTOAH ; Espera el retardo
BCLR 2,BANDERA ;Borra bandera de Retardo
DEC DATO ;Siguiente combinacin
BRCLR 5,PORTB,HORARIO ;Verifica sentido
BRA NEXTAH ;Salta a siguiente Valor
TIM PSHH
BSET 2,BANDERA ;Bit de Retardo cumplido
LDA PORTB ;Leer PTOB
AND #$C0 ;Extrae bits 7 y 6
CBEQA #$40,S_OLA ;Configuracin OLA?
CBEQA #$80,S_PASO ;Configuracin PASO?
CBEQA #$C0,S_MPASO ;Configuracin MPASO?
CBEQA #$40,PARAR ;Parar Motor?
FIN_INT BCLR 7,TSC ;Interrupcin Atendida
PULH
RTI

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 167

* Rutinas de valores MINIMO Y MAXIMO segn la configuracin


S_OLA MOV #1T,MINIMO
MOV #4T,MAXIMO
BRA FIN_INT

S_PASO MOV #7T,MINIMO


MOV #10T,MAXIMO
BRA FIN_INT
S_MPASO MOV #13T,MINIMO
MOV #20T,MAXIMO
BRA FIN_INT

PARAR MOV #0T,MINIMO


MOV #5T,MAXIMO
BRA FIN_INT

ORG TIMER
DW TIM

ORG RESET
DW INICIO

Ejercicio 3

Enunciado
El objetivo del trabajo prctico es la implementacin del mdulo PWM en el control de intensidad de una
lmpara dicroica, utilizando un microcontrolador de la familia HC08 Freescale (JK3).
El sistema contar con de un pulsador, en donde cada vez que se presione incrementar la intensidad de la
lmpara pasando duraciones del ciclo de tabajo PWM de 10%, 20%, 30%, 40% o 50%.

En caso de encontrarse en el ciclo de trabajo de 50% y es presionado el pulsador, ste


provocar reiniciar nuevamente adjudicando un modo de trabajo de 10%.

ALFAOMEGA - FREESCALE
168 JUAN CARLOS VESGA FERREIRA

Solucin

5V

1K

20 15
RST PTB0
20pF
14
PTB1
3
OSC1
1

13
10M

4MHz + PTB2
4
OSC2/PTA6
4

12
PTB3

1 11
20pF IRQ1 PTB4

8
PTB5

5V 7
+ PTB6

5 6
VDD PTB7

12V
2
VSS
5V 17
PTD2
+5
16
PTD3
10K
19
PTD4

18
10K PTD5

10
PTD6

9
PTD7

FIGURA 9.7
Esquemtico control de intensidad lumnica.

Como se requiere que el control PWM realice diferentes porcentajes de servicio, se necesita crear una tabla
que almacene la secuencia de los valores correspondientes al registro TCH0L, para su aplicacin.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 169

Como se estableci que el registro TMODH:TMODL=$00FF


El valor del prescalador del timer se desea configurar en 64
Frecuencia del oscilador 4 MHz.

Se calculara que el valor del perodo de la seal PWM ser:

4
Perodo PWM = = Pr escalador x (TMODH : TMODL)
Frec. escalador

4 x 64 x (255) = 16.32 ms
=
4 * 106

Los valores del registro TCH0L sern entonces los siguientes mediante el uso de una regla de 3 simple,
manteniendo siempre el valor del registro TCH0H=00h:

255 x (% servicio)
TCH0L =
100

% servicio Valor calculado Valor TCH0L


10 25.5 28
20 51 51
30 76.5 77
40 102 102
50 127.5 128

TABLA 9.7
Valores calculados para TCH0L segn % de servicio.

Quedando la tabla definida de la siguiente forma:

TABLA DB $0,26T, 51T, 77T, 102T, 128T,$0

Los valores extremos de la tabla ($0) se establecieron como 0 para que cuando se detecte el ltimo valor
de la tabla, al presionar nuevamente el pulsador se inicialice el proceso secuencial de valores. Teniendo
en cuenta lo expuesto antes sobre los pasos de inicializacin del mdulo PWM, el programa final quedara
de la siguiente forma:

ALFAOMEGA - FREESCALE
170 JUAN CARLOS VESGA FERREIRA

$ INCLUDE JL3REGS.INC
FLASH EQU $ECE0
RESET EQU $FFFE
T_PWM EQU $FFF6
RAM EQU $80
COPD EQU 0
IMASK1 EQU 1
MODE1 EQU 0
ACK1 EQU 2

ORG RAM
DATO RMB 1
MAXIMO RMB 1
MINIMO RMB 1

ORG FLASH
TABLA DB $0,26T, 52T, 77T, 102T, 128T,$0
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
CLRA ;A = 0
CLRX ;X = 0
CLR DATO ;DATO = 0

* Configuracin de Puertos
MOV #$00,PORTD ;Puerto D Borrado
MOV #$FF,DDRD ;PTD[7:0] OUT

* Configuracin del TIMER


MOV #$36,TSC
MOV #$00,TMODH
MOV #255T,TMODL
MOV #$00,TCH0H
MOV #26T,TCH0L ;Inicia Ciclo de Servicio 10%
MOV #%01101010,TSC0 ;Configuracin PWM
MOV #$06,TSC

* CONFIGURACIN DE LA INTERRUPCIN IRQ


BCLR IMASK1,INTSCR ;Habilita Interrupcin de la IRQ
BCLR MODE1,INTSCR ;IRQ por flanco descendente

CLI ;Habilita Interrupciones

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 171

SALTO BRA SALTO ;Bucle infinito


PWM PSHH
BCLR 7,TSC0 ;Interrupcin Atendida
PULH
RTI

* INTERRUPCIN IRQ
IRQ PSHH ;Guarda H en el Stack
BIH FIN_IRQ ;Salta a FIN_IRQ si el Pin IRQ = 1
INCX
DIMMER LDA TABLA,X ;Carga VALOR (% SERVICIO)
BEQ LIMPIAR ;si Valor = 0,salta
STA TCH0L ;Cambia el % de servicio
FIN_IRQ BSET ACK1,INTSCR ;Borra Interrupcin por IRQ
PULH ;Saca H del Stack
RTI ;Salir de Interrupcin

LIMPIAR CLRX ;X = 0
BRA FIN_IRQ

ORG T_PWM
DW PWM

ORG $FFFA
DW IRQ ; Cuando ocurre interrupcin por IRQ

ORG RESET
DW INICIO

Ejercicio 4

Enunciado
DISEO DE UN TACMETRO CON EL 68HC908JL3/JK3/JK1
A continuacin se explica toda la teora de funcionamiento y aparece el cdigo correspondiente al desarrollo,
pero este programa presenta algunos errores. Usted debe encontrarlos y corregirlos para lograr el ptimo
funcionamiento. Esto con el fin de reforzar sus conocimientos sobre la programacin de esta familia de
microcontroladores.

ALFAOMEGA - FREESCALE
172 JUAN CARLOS VESGA FERREIRA

Teora adicional para solucin del problema


Como se sabe, una de las finalidades de varios proyectos en el ambiente industrial es el control de velocidad
de motores. En muchos proyectos se utilizan sensores de efecto Hall, entre otros, que permiten cuantificar
la tensin del motor y con ello, de manera indirecta, la velocidad. El procedimiento de determinar la
velocidad de un motor por medio del conocimiento de la tensin existente en sus terminales es vlido
siempre y cuando el motor se analice en vaco, pero un motor siempre tendr carga afectando en una forma
considerable la corriente y la velocidad.
Por esta razn se pens en disear un circuito que permita cuantificar la velocidad de una manera precisa
sin depender de factores como voltajes o corrientes. Por ello se dise entonces un tacmetro ptico que
permite sensar la velocidad del motor de manera prctica.
El mtodo para sensar la velocidad es el siguiente:
Un haz de luz es enviado directamente hacia una fotocelda, la cual vara su resistencia segn la intensidad
recibida; en el rotor se encuentra un aspa que va cortando el haz de luz, provocando una variacin alterna
de resistencia en la fotocelda, la cual se refleja en el circuito en forma de voltaje.
Esta variacin de tensin se asemeja a una onda diente de sierra y segn la luminosidad del ambiente vara
su valor pico y promedio. Si se pensaba en un divisor de tensin para compararse con la seal de la fotocelda,
funcionara, pero para cierto grado de luminosidad del ambiente, generando con ello un problema.
Por esto se pens que en vez de compararse con un voltaje fijo producido por un divisor de tensin, se
comparara con un voltaje que variara en la misma forma como variaba el voltaje de la fotocelda segn el
grado de luminosidad existente en ese momento. Este voltaje se tom directamente de la seal, que por
medio de un condensador y una resistencia se obtendra un valor muy semejante al valor promedio de la
onda, que al compararse con la seal genera una onda cuadrada perfecta directamente proporcional a la
velocidad del motor.
Esta seal es aplicada al pin IRQ del microcontrolador, el cual mediante la interrupcin externa detecta
los cambios de nivel, los cuantifica y los enva al PC o a una pantalla de cristal liquido para visualizar
posteriormente la velocidad, tomndose en total tres muestras en un tiempo de 0.5 segundos cada una
para luego ser promediadas y visualizadas.
Se consider este tiempo de 0.5 segundos, con el fin de permitir la cuantificacin de la velocidad en el
motor tanto en instantes en donde la velocidad es baja como en aquellos en que la velocidad es alta.
El esquema utilizado para sensar la velocidad es el siguiente.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 173

5V

1K

+ IRQ

+ 100

220uF 1M

5V

220

FIGURA 9.8
Esquema del tacmetro ptico.

NOTA
En la rutina no se encuentra incluida la forma de visualizacin de la
informacin. Esto se deja libre para que el estudiante escoja la que ms
le agrade.

Solucin parcial del problema


$INCLUDE JL3REGS.INC
FLASH EQU $EC00
TIMER EQU $FFF2
RESET EQU $FFFE

ALFAOMEGA - FREESCALE
174 JUAN CARLOS VESGA FERREIRA

RAM EQU $80


IMASK1 EQU 1
MODE1 EQU 0
ACK1 EQU 2

ORG RAM
CONTA RMB 1
MUESTRA1 RMB 1
MUESTRA2 RMB 1
MUESTRA3 RMB 1

ORG FLASH
INICIO BSET 0,CONFIG1

* configuracin de los PUERTOS


MOV #$00,PORTB
MOV #$FF,DDRB ;Configura el Puerto B como Salida
MOV #$00,PORTD
MOV #$FF,DDRD ;Configura el Puerto D como Salida

* Configuracin del TIMER a 0.5 segundos


MOV #$36,TSC
MOV #$1E,TMODH
MOV #$60,TMODL
MOV #$46,TSC

* Configuracin de la interrupcin IRQ


BCLR IMASK1,INTSCR ;Habilita Interrupcin de la IRQ
BCLR MODE1,INTSCR ;IRQ por flanco descendente
CLI ;Habilita Interrupciones

OTRO CLR CONTA


CLRX
CLR MUESTRA1
CLR MUESTRA2
CLR MUESTRA3
ESPERA LDA CONTA
CMP #3T
BNE ESPERA
CLRA
ADD MUESTRA1

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 175

ADD MUESTRA2
ADD MUESTRA3
LDX #3T
DIV
LDX #120T
MUL

En este espacio se debe colocar la rutina para visualizar la informacin correspondiente a


la velocidad del motor. Se debe tener en cuenta que la informacin ya est dada en r.p.m.
(revoluciones por minuto), donde estas revoluciones se encuentran en el registro X:A.

BRA OTRO

* INTERRUPCIN IRQ
IRQ PSHH ;Guarda H en el Stack
INC $81,X ;Incrementa Muestra1/2/3
FIN_IRQ BSET ACK1,INTSCR ;Borra Interrupcin por IRQ
PULH ;Saca H del Stack
RTI ;Salir de Interrupcin
TIM PSHH
INCX ;Siguiente Muestra
INC CONTA ;Siguiente Muestra
FIN_INT BCLR 7,TSC ;Interrupcin Atendida
PULH
RTI
ORG $FFFA
DW IRQ ; Cuando ocurre interrupcin por IRQ

ORG RESET
DW INICIO ; Salta a INICIO cuando se energiza

ORG TIMER
DW TIM ;Salta a interrupcin por TIMER

ALFAOMEGA - FREESCALE
176 JUAN CARLOS VESGA FERREIRA

EJERCICIOS PROPUESTOS

En una empresa se desea disear un sistema que permita medir el perodo de oscilacin de un
pndulo. Este tiempo comienza a tomarse desde el momento en que el pndulo corta un haz de
luz, el cual es monitoreado mediante la interrupcin externa IRQ y finaliza la medicin de tiempo
cuando este haz es cortado por segunda vez por el pndulo indicando el final de la oscilacin. Se
deben tomar 10 muestras y visualizar el promedio de ellas mediante una pantalla de cristal lquido
configurada a 4 bits.

Disear un control de velocidad de un motor DC utilizando la modulacin por ancho de pulso sin
utilizar el mdulo que ofrece este microcontrolador para tal fin, permitiendo configurar la duracin
del ciclo en porcentaje a travs de un teclado matricial de 12 teclas.

Disear una rutina que permita generar una onda cuadrada a travs del pin PTB0, permitiendo
configurar su frecuencia mediante un teclado de 12 teclas.

RESUMEN DEL CAPTULO


CAPTULO
Los retardos se pueden realizar de dos maneras: la primera consiste en valerse
del retardo presente durante la ejecucin de una instruccin, la cual depende
del nmero de ciclos que requiere para su ejecucin y de la frecuencia del oscilador
encargado del funcionamiento del microcontrolador; teniendo en cuenta estos dos factores
es posible generar un retardo a base de instrucciones, forma que en la mayora de los casos es poco
prctica. La segunda es valerse de un poderoso recurso presente en la gran mayora de microcontroladores
existentes, y es utilizar el timer. Este se puede considerar como un registro contador que incrementa su
valor a medida que transcurre el tiempo, donde el incremento depende de varios factores: la frecuencia
del oscilador y la configuracin del prescalador. Con el mdulo de temporizacin TIM se tiene acceso a las
siguientes caractersticas:
Banderas de capturas de entrada (Input Compare) y comparacin de salidas (Output Compare).
Habilitacin de capturas de entrada y comparacin de salidas.
Seleccin de capturas de entrada, comparacin de salidas o funciones PWM.
Seleccin de flanco ascendente/descendente como valores de arranque.

ALFAOMEGA - FREESCALE
MANEJO DE LOS TIMERS CON EL MICROCONTROLADOR MOTOROLA-FREESCALE 177

Seleccin de salidas bipolares (toggle) en el rebosamiento del TIM.


Seleccin de duracin del ciclo PWM en 100%.
Habilitacin de buffers en comparacin de salidas/funciones PWM.

Una de las funciones ms importantes del mdulo TIM son las funciones Output Compare e Input
Compare.
Se puede utilizar la funcin Output Compare en una gran variedad de aplicaciones que van desde
cronometraje o temporizacin de eventos hasta control de niveles de tensin en cargas elctricas. Usando
el input capture se puede medir el ancho de un pulso de entrada, funcin semejante a la medicin de un
perodo, excepto que la segunda captura se configura para detectar el flanco de bajada en vez del flanco
de subida inicial. Cuando se requieren anchos de pulso muy cortos, se pueden utilizar los dos canales del
timer para mirar la misma seal con un canal para detectar el flanco de subida y el otro canal para detectar
el flanco de bajada permitiendo la toma de tiempos inferiores a 125 ns.

ALFAOMEGA - FREESCALE
Captulo 10
CONVERSOR
ANLOGO/DIGITAL

OBJETIVO DEL CAPTULO 10.1 INTRODUCCIN


Al finalizar el captulo el estudiante estar En muchas situaciones se requiere controlar un
familiarizado con el uso del conversor anlogo- proceso mediante un sistema digital. Las seales
digital presente en el microcontrolador, su provenientes del mundo exterior son de tipo
configuracin, manipulacin y utilizacin en analgico como, por ejemplo, presin, temperatura,
aplicaciones de tipo instrumental en donde velocidad, etc., en las cuales mediante el uso de un
comnmente se encuentra y que contribuye transductor se realiza el proceso de conversin de
con un alto valor agregado en el momento de un tipo de seal fsica a una seal elctrica. Pero un
desarrollar cualquier aplicacin. sistema de control electrnico solamente reconoce
seales de tipo digital, y por ello se requiere convertir
las seales analgicas a digitales.
CONOCIMIENTOS PREVIOS Los conversores anlogo/digital (A/D) y digital/
anlogo (D/A) son elementos que permiten a los
Para iniciar el estudio del presente captulo es sistemas digitales comunicarse con sistemas
necesario que el lector posea conceptos bsicos analgicos, tanto para recibir como para suministrar
sobre electrnica bsica, temporizacin y uso de informacin. Se debe tener en cuenta que una seal
interrupciones. digital es aquella que toma slo dos valores lgicos
(0, 1) traducidos a valores discretos de voltaje, y en
cambio una seal analgica es aquella que vara en
forma continua desde un mnimo hasta un mximo
de corriente o voltaje.
180 JUAN CARLOS VESGA FERREIRA

La conversin de una seal analgica a una digital puede realizarse mediante diferentes formas:
Conversores con salida en paralelo. Como su nombre lo indica, entregan la seal binaria en paralelo,
equivalente al valor de la variable analgica de entrada. Son los conversores comnmente usados por
su fcil acoplamiento a procesadores digitales.
Conversores de salida en serie. Tambin codifican la seal de entrada en una seal digital, entregndola
por una nica salida serie.
Cuando se desea realizar un diseo haciendo uso de un conversor anlogo digital, hay necesidad de conocer
como mnimo algunos parmetros propios del conversor, que pueden suministrar informacin valiosa en el
momento de decidir si es adecuado o no para su implementacin en el diseo. Estos parmetros son:
Caractersticas de diseo. Constituyen los parmetros bsicos de los conversores A/D.
Cdigo binario. Corresponden al tipo de cdigo que se obtiene en la salida del conversor: binario natural
o BCD.
Resolucin. Se define como el mnimo incremento necesario en la entrada analgica para que se produzca
un cambio en la combinacin binaria de salida.
Tiempo de conversin. Es el intervalo de tiempo necesario para que se produzca una conversin.
Caractersticas de funcionamiento. Las caractersticas reales de un conversor A/D tambin difieren de
las ideales, y corresponden a las mismas definidas para el conversor A/D.
A continuacin se explicarn el funcionamiento del conversor A/D y el modo de trabajarlo por medio de
los canales adjudicados para tal fin.
Algunas caractersticas del mdulo de conversin A/D son:
Tiene 12 canales con entrada multiplexada.
Utiliza el mtodo de aproximaciones sucesivas para la conversin.
Tiene 8 bits de resolucin.
Presenta conversin sencilla o continua.
Tiene bandera de conversin completa o interrupcin de conversin completa.
Cuenta con reloj de conversin A/D seleccionable.

10.2 DESCRIPCIN DEL FUNCIONAMIENTO DEL ADC


Doce canales de conversin A/D se encuentran disponibles, distribuidos en los pines PTB[0:7] y PTD[0:3]. Existe
internamente un multiplexor anlogo que se encarga de seleccionar el canal para efectuar la conversin, y este
voltaje de entrada se conoce como ADCVIN. El ADCVIN es convertido mediante el mtodo de aproximaciones
sucesivas basado en contadores, y cuando la conversin est completa la bandera de fin de conversin y la
bandera de interrupcin por fin de conversin toman el valor 1 lgico.

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 181

10.3 VOLTAJE DE CONVERSIN


Cuando el voltaje de entrada es igual a VDD, el valor de la conversin es $FF (escala completa). Si el voltaje de
entrada es igual a VSS, el valor de la conversin es $00. Tngase en cuenta que el valor del voltaje de entrada
NO debe encontrarse por fuera del rango entre VDD y VSS.

10.4 TIEMPO DE CONVERSIN


Se requieren 16 relojes internos para hacer la conversin A/D. El conversor A/D comienza la conversin en
el primer flanco ascendente del reloj interno de conversin. Si el reloj interno est seleccionado para funcionar
a 1 MHz, entonces una conversin tarda en completarse 16 s. Con un reloj de 1 MHz, la mxima rata de
muestra es de 62.5 kHz.

16 ciclos de reloj
Tiempo de conversin =
Frecuencia de reloj de ADC

10.5 REGISTRO DE CONTROL Y ESTADO DEL A/D (ADSCR)

Direccin $003C

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer COCO
Escribir AEIN ADC0 CH4 CH3 CH2 CH1 CH0

COCO: bit de conversin completa


Cuando el AIEN se encuentra en 0 lgico, se puede utilizar el bit COCO como indicador de fin de
conversin.
1: Conversin Completa (AIEN = 0)
0: Conversin No Completa (AIEN = 0)

Cuando el bit AIEN est en 1 lgico (Habilitacin de Interrupcin), el bit COCO tendr siempre el valor
0 lgico.

AIEN: Habilitacin de la Interrupcin de Conversin A/D


Cuando este bit se coloca en 1, se habilita la opcin de interrupcin al finalizar la conversin A/D. El bit de
interrupcin es limpiado cuando el dato es ledo.

ALFAOMEGA - FREESCALE
182 JUAN CARLOS VESGA FERREIRA

1: Habilitar interrupcin por fin de Conversin A/D


0: Deshabilitar interrupcin por fin de Conversin A/D

ADCO: bit de Conversin Continua


Cuando este bit se encuentra en 1, constantemente va actualizando el valor del registro ADR (registro donde se
almacena el valor de la conversin) y slo una conversin es almacenada cuando este bit est en 0 lgico.
1: Conversin A/D continua
0: Una sola conversin A/D

ADCH[4:0]: bits de seleccin de canales de conversin A/D


Se debe tener en cuenta que con slo 5 bits se configura el canal a utilizar para la conversin y adems el tipo
de seal a recibir, ya sea analgica o digital.

CH4 CH3 CH2 CH1 CH0 CANAL A/D PIN


0 0 0 0 0 ADC1 PTB0
0 0 0 0 1 ADC1 PTB1
0 0 0 1 0 ADC2 PTB2
0 0 0 1 1 ADC3 PTB3
0 0 1 0 0 ADC4 PTB4
0 0 1 0 1 ADC5 PTB5
0 0 1 1 0 ADC6 PTB6
0 0 1 1 1 ADC7 PTB7
0 1 0 0 0 ADC8 PTD3
0 1 0 0 1 ADC9 PTD2
0 1 0 1 0 ADC10 PTD1
0 1 0 1 1 ADC11 PTD0
0 1 1 0 0 SIN USAR
: : : : : (VER NOTA1)
1 1 0 1 0
1 1 0 1 1 RESERVADO
1 1 1 0 0 SIN USAR
1 1 1 0 1 VDDA (NOTA2)
1 1 1 1 0 VSSA (NOTA2)
1 1 1 1 1 OFF ADC

TABLA 10.1
Configuracin del canal para conversin A/D.

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 183

NOTA
1. Si alguno de los canales sin usar es seleccionado, el valor de la conversin
ser desconocido.

2. Los niveles de voltaje de alimentacin de los nodos especificados como


referencia en la tabla son usados para verificar la operacin de la conversin
A/D, ambos en produccin de pruebas y para uso de aplicaciones.

10.6 REGISTRO DE CONVERSIN A/D (ADR)


Direccin $003D

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
Escribir

El valor de la conversin A/D queda almacenado en este registro; el registro es actualizado cada vez que
la conversin se completa.

10.7 REGISTRO DE CONFIGURACIN DEL RELOJ


PARA EL CONVERSOR A/D (ADCLK)

Direccin $003E

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0 0
Escribir ADIV2 ADIV1 ADIV0

ADIV2:ADIV0: bits de prescalador del reloj para conversin A/D


Estos 3 bits permiten escoger el valor del prescalador para el reloj de conversin A/D. El valor del prescalador
se ajusta segn la siguiente tabla.
Hay que tener en cuenta que el reloj de conversin deber ser de aproximadamente 1 MHz.

ALFAOMEGA - FREESCALE
184 JUAN CARLOS VESGA FERREIRA

ADIV2 ADIV1 ADIV0 PRESCALADOR


0 0 0 CLK ADC 1
0 0 1 CLK ADC 2
0 1 0 CLK ADC 4
0 1 1 CLK ADC 8
1 X X CLK ADC 16
X: No importa el valor.

TABLA 10.2
Configuracin del prescalador para conversin A/D.

Cuando se desea utilizar el conversor A/D se debe efectuar los siguientes pasos para la configuracin
ptima:
1. Configurar el registro ADCLK indicando la frecuencia para el prescalador de conversin A/D. En
nuestro caso:
ADIV2 = 0
ADIV1 = 0
ADIV0 = 0

Al adjudicar estos valores, el prescalador tendr como valor 1, es decir que la frecuencia del reloj de
conversin es la misma frecuencia del bus interno.
2. Configurar el registro ADSCR, indicando lo siguiente:
a. Habilitar el bit de interrupcin, indicando fin de conversin. AIEN = 1.
b. Configurar el tipo de conversin, ya sea continua o una muestra. En este caso se desea que la conversin
sea continua, por ello ADCO = 1.
c. Definir el canal de conversin A/D, para el ejemplo se utilizar PTB7.ADCH[4:0]=00111.

El resultado de lo anterior es el siguiente:


MOV #$00,ADCLK
MOV #%01100111,ADSCR

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 185

10.8 EJERCICIOS RESUELTOS


Enunciado
Para comprender mucho ms este tema, ilustremos el siguiente ejemplo. Se desea escribir un programa que
permita obtener una seal a travs del pin PTB7. Como se mencion antes, este voltaje debe estar entre 0
y 5 voltios. El valor del voltaje aplicado se visualizar en dos displays de 7 segmentos, enviando los dgitos
en formato BCD y en forma multiplexada a travs de los pines PTB[0:3].
Solucin

5V+
1K

28 2
RST PTA0
20pF
6
PTA1
4
OSC1
1

8
4MHz + 10M PTA2
5
OSC2/PTA6
4

9
PTA3 10K 10K

220
20pF 23 220
PTA4

1 27
IRQ1 PTA5

14

14
+ 7448
0
5
0
IC1 0
7
16 21 IA A 13
MC68HC908JL3

PTD0 PTB0 1
DIS

12
IB B
2 11
IC C
18 PTD1 20 6
PTB1 ID D 10
a
b
c
d
e
f
g

a
b
c
d
e
f
g
4
BI/RB0 E 9
5
24 18 RBI F 15
1
13
10
8
7
2
11

1
13
10
8
7
2
11
PTD2 PTB2 3 14
LT G

22 PTD3 17
PTB3

26 15
PTD4 PTB4

25 12
PTD5 PTB5

14 11 +5
PTD6 PTB6

13 10
VSS

PTD7 PTB7 10k


3

FIGURA 10.1
Circuito ejemplo para conversin A/D.

ALFAOMEGA - FREESCALE
186 JUAN CARLOS VESGA FERREIRA

$ Include jl3regs.inc
FLASH EQU $ECE0
RESET EQU $FFFE
TIMER EQU $FFF2
ADC EQU $FFDE
RAM EQU $80
COPD EQU 0
ORG RAM
AUX1 RMB 1 ; byte auxiliar
AUX2 RMB 1 ; byte auxiliar
AUX3 RMB 1 ; byte auxiliar
VOLTS RMB 1 ; byte de conversin A/D temp
V_BCD RMB 1 ; byte de conversin A/D en BCD
CONTA RMB 1 ; Contador
ORG FLASH
INICIO BSET COPD,CONFIG1 ;Inhabilita el COPD
CLRA
CLRX
CLRH
MOV #$00,PORTB ; Borra el Puerto B
MOV #$0F,DDRB ; PTB[3:0] salidas, PT7 Entrada
MOV #$20,PORTA ; PTA5= 1
MOV #%00110000,DDRA ; PTA[5:4] Salidas

*Timer configurado a 1 ms con frecuencia de oscilador 4 MHz


MOV #$36,TSC ;B00110110 al TSC
MOV #$00,TMODH
MOV #$16,TMODL
MOV #$46,TSC ;B01000110 al TSC

*Configuracin del conversor A/D.


MOV #$00,ADCLK
MOV #%01100111,ADSCR
CLI ; Habilita interrupciones
ESPERA BRA ESPERA

* Rutina de interrupcin por fin de conversin A/D.


ADCONV PSHH ;Guarda H en el Stack

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 187

CLR CONTA ;Borra CONTA


LDA ADR ;A = Valor de Conversin
LDX #50T ;X = 50 decimal
MUL ;X:A = X * A
STX AUX1 ;AUX1 = X
STA AUX3 ;AUX3 = A
LDHX AUX1 ;H:X = AUX1
LDA AUX3 ;A = AUX3
LDX #255T ;X = 255 decimal
DIV ; A = (H:A)/X
STA VOLTS ;VOLTS = A
LDA VOLTS ;A = VOLTS
BNE CONV_BCD ;Si A no es 0, CONV_BCD
CLR V_BCD ;si no, V_BCD = 0
PULH ;Sacar H del Stack
RTI ;Retornar de Interrupcin
* Rutina para convertir los voltios en formato BCD.
CONV_BCD LDX VOLTS ; X = VOLTS
SALTO2 LDA CONTA ; A = CONTA
ADD #$1 ; A = A+1
DAA ; Ajustar A en BCD
STA CONTA ; CONTA = A
DECX ; X = X-1
BNE SALTO2 ; Si X no es 0, ir a SALTO2
MOV CONTA,V_BCD ;si no, V_BCD = CONTA
PULH ;Sacar H del Stack
RTI ;Regresar de Interrupcin

* Rutina de Interrupcin por timer.


TIM PSHH ;Guarda H en el Stack
LDA #%00110000 ;A = %00110000
EOR PORTA ;PTD7=0, PTD6=1 o Vicev.
STA PORTA ;Conmuta PTD[7:6]
BRSET 4,PORTA,DISP_LSB ;Si PTA4=1, ir a DISP_LSB
BRSET 5,PORTA,DISP_MSB ;Si PTA5=1, ir a DISP_MSB

* Visualiza el Display Menos Significativo.


DISP_LSB MOV V_BCD,PORTB ;PORTB = V_BCD

ALFAOMEGA - FREESCALE
188 JUAN CARLOS VESGA FERREIRA

BRA FIN_INT ;Ir a fin de Interrupcin

* Visualiza el Display ms Significativo.


DISP_MSB LDA V_BCD ; A = V_BCD
NSA ; Intercambia nibles de A
STA PORTB ; PORTB = A
FIN_INT BCLR 7,TSC ;Borra bandera de Interrup
PULH ;Saca H del Stack
RTI ;Retorna de la Interrupcin
ORG ADC ;Si ocurre Int. Por ADC
DW ADCONV
ORG TIMER ;Si ocurre Int. Por TIMER
DW TIM
ORG RESET ;Cuando se Energiza
DW INICIO

Ejercicio 2
Enunciado
DISEAR UN OSCILOSCOPIO CON EL 68HC908JL3/JK3/JK1

A continuacin se muestra la teora y gran parte del desarrollo de un osciloscopio


mediante el microcontrolador 68HC908JL3/JK3/JK1. El estudiante debe analizar la teora,
entender las rutinas que se plantean, y completar el programa del microcontrolador
para que el sistema funcione correctamente.

Teora adicional para solucionar el problema


Cuando se ha seleccionado un par de puntos para adquirir la informacin sobre alguna variable se enva
esta seal al circuito que se encarga de adaptar la seal de alta potencia a una seal donde su valor mximo
ser 5 Vpp y sin valores negativos de tensin.
Este circuito utiliza un divisor de tensin con resistencias de gran valor hmico para restringir el paso
de corrientes de gran valor y adems ofrecer al circuito una proteccin y aislamiento con el circuito de
potencia. Esta seal es enviada a un amplificador de instrumentacin que permite medir la tensin en un
determinado par de puntos de manera diferencial, tal como lo hacen los multmetros, aumentando as la
seguridad del circuito.

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 189

+12V

12 IC1D
14
13 2.2K 2.5K 1K
10K
1M
Puntas de Medida

10K IC1B 1K
8
1K 7 3 IC1A Vo
33K
100K 6 1K
1M 10K 2

10 IC1C
8
9 1K
2.2K
1K 5V
10K

FIGURA 10.2
Circuito adecuador de seal para muestreo.

La seal despus de pasar por el amplificador, tiene garantizada una amplitud mxima de 5 Vpp ( 2.5 V);
cuando la tensin entre los terminales del dispositivo a medir sea de 800 Vpp, a esta seal se le agrega un
voltaje en DC de 2.5 V por medio de un diodo Zener de este valor, para garantizar que la seal que llega al
conversor se encuentre entre 0 y 5 V. Adems, por seguridad para no sobrepasar los 5 V permitidos como
mximo y no aplicar tensiones negativas, se dispuso un diodo Zener de 5 V a la salida del circuito, el cual,
debido a sus propiedades, garantiza el cumplimiento de estos dos ltimos requisitos.
La seal antes de ser muestreada pasa por un filtro bajo de tipo Butterworth de orden 4, diseado para
una frecuencia de corte de 1 kHz. Este corresponde al siguiente esquema.
Se decidi utilizar este mtodo para el sensado de las diferentes variables, debido a factores como
economa y diversidad de formas de las seales, ya que, como se sabe, estas poseen componentes en DC
y AC que no tienen incidencia sobre sensores resistivos pero s sobre sensores inductivos y capacitivos,
provocando no slo un aumento en la parte circuital sino tambin un error en la reproduccin (forma de
onda) de la seal deseada, por lo que es necesaria la forma de onda exacta de la variable para su posterior
graficacin y cuantificacin en caso de requerirse.
Este microcontrolador posee un conversor A/D de 8 bits, con 16 relojes internos que son necesarios para la

ALFAOMEGA - FREESCALE
190 JUAN CARLOS VESGA FERREIRA

+12V

12 IC1D
14
13 2.2K 2.5K 1K
10K
1M
Puntas de Medida

10K IC1B 1K
8
1K 7 3 IC1A Vo
33K
100K 6 1K
1M 10K 2

10 IC1C
8
9 1K
2.2K
1K 5V
10K

FIGURA 10.3
Filtro Butterworth pasa bajo de orden 4 con frecuencia de corte de 1 kHz.

conversin A/D. El conversor A/D comienza la conversin en el primer flanco ascendente del reloj interno
de conversin. Si el reloj interno est seleccionado para funcionar a 1 MHz (frecuencia del oscilador = 4
MHz), entonces una conversin tarda en completarse 16 s. Con un reloj de 1 MHz, la mxima rata de
muestra es 62.5 kHz.

16 tipos de reloj
Tiempo de conversin =
Frecuencia de reloj de ADC

Considerando que el voltaje de referencia es 5 V obtenemos que:

5
Resolucin = _ = 19.6 mV
2 1
8

Error de cuantizacin
1 5
LSB = = 9.8 mV
2 2(28 _ 1)

En el proceso de adquisicin de datos se decidi tomar 140 muestras por variable para garantizar que con
el tiempo de muestreo se logre una ptima resolucin de la grfica. La frecuencia mxima de la seal a
graficar y cuantificar debe ser 1 kHz.

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 191

Solucin parcial del problema


El proceso de adquisicin de los datos, almacenamiento en la memoria RAM del microcontrolador y transporte
hacia el PC es el siguiente:
ADCONV PSHH ;Guarda H en el Stack
LDA ADR ;A = Valor de Conversin
STA $85,X ;Guardar el dato en RAM
BSR RETARDO ;Retardo entre muestras
INCX ;Incrementar X
DBNZ CONTA,FIN_INT ;Decrem. Y saltar si <> 0
BCLR 6,ADSCR ;si CONTA=0, deshab. ADC
DESOCUPA CLRX ;X = 0
MOV MUESTRAS,CONTA ;No. Muestras = CONTA
OTRO LDA $85,X ;Extraer dato de RAM
BSR ENVIAR ;Enviar Serialmente a PC

ESPERA BSR RECIBIR ;Recibe confirmacin


LDA RECEPC ;del PC para envo del
CMP #255T ;siguiente dato

BNE ESPERA
INCX ;Siguiente dato
DBNZ CONTA,OTRO ;Ya se enviaron todos?
FIN_INT PULH ;Sacar H del Stack
RTI ;Retornar de Interrupcin

Esta rutina es la misma tanto para adquirir el valor promedio, como para el muestreo de la seal a graficar.
Cuando se utiliza para adquirir muestras para graficar, la variable MUESTRAS tendr como valor 140, indicando
las 140 muestras a tomar; pero si se va a medir el valor promedio, MUESTRAS toma el valor 3.
El valor promedio de las diferentes seales se puede obtener de una manera circuital y ajustado por
software mediante esquemas que toman una seal analgica y la adecuan a una seal en DC directamente
proporcional a su respectivo valor promedio, bastando solamente multiplicarlas por un factor de correccin
debido al ajuste y conversin analgica de la seal para dar como resultado el valor esperado.
Este circuito consta inicialmente de un filtro pasa-alto que permite eliminar la componente en DC de
la seal a analizar, la seal resultante y la original son aplicadas a un circuito restador en el cual a su salida
obtenemos una seal en DC equivalente al valor promedio de la seal aplicada inicialmente. Para estabilizar y
mejorar la salida se coloc una red RC. Adems se aplic posteriormente el mismo proceso que el de la seal
analgica, garantizando que no se introduzcan valores negativos ni superiores a 5 V al conversor A/D.

ALFAOMEGA - FREESCALE
192 JUAN CARLOS VESGA FERREIRA

Seal
12 IC2D
1K
14
13
0,1u 1000u 100K
1K IC2A
0
I
10 IC2C 2
8 Vo
9 50
1M
1K 1K

FIGURA 10.4
Circuito que permite convertir una seal analgica en una seal equivalente a su valor promedio.

Este circuito consta inicialmente de un filtro pasa-alto que permite eliminar la componente en DC
de la seal a analizar; la seal resultante y la original son aplicadas a un circuito restador en el cual a su salida
obtenemos una seal en DC equivalente al valor promedio de la seal aplicada inicialmente. Para estabilizar
y mejorar la salida se coloc una red RC, adems se le aplic posteriormente el mismo proceso que el de la
seal analgica, garantizando que no se introduzcan valores negativos ni superiores a 5 V al conversor A/D.

FIGURA 10.5
Interfaz grfica con el PC para osciloscopio.

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 193

El programa correspondiente en Visual Basic es el siguiente.


Definicin de variables globales

Dim bd As Database
Dim rs As Recordset
Dim Conta, Orden

Rutina de Inicio al cargar el Formulario


Private Sub Form_Load()
Set bd = OpenDatabase(C:\Base.MDB)
Conta = 0
End Sub
Rutina para llamar clculo del valor promedio

Private Sub Promedio_Click()


Conta = 0
Orden = 1
MSComm1.Output = Chr(2) Orden de Muestreo
End Sub

Rutina para llamar grfica de Seal


Private Sub Graficar_Click()
Dim x
Conta = 0
Orden = 0
MSComm1.Output = Chr(1) Orden de Muestreo
End Sub

Rutina para limpiar pantalla y borrar base


Private Sub Limpiar_Click()
Borra Pantalla
Picture1.Cls
Picture1.PSet (0, 128)
Borra Base
bd.Execute delete from tabla
Data1.Refresh
End Sub

Rutina de Recepcin Serial

ALFAOMEGA - FREESCALE
194 JUAN CARLOS VESGA FERREIRA

Private Sub MSComm1_OnComm()


Dim DatoMIC
Select Case MSComm1.CommEvent
Case comEvReceive
DatoPIC = Asc(MSComm1.Input)

Recibir datos desde MICROCONTROLADOR


Select Case Orden
Case 0 Muestreo
Conta = Conta + 1
With Data1.Recordset
.AddNew
!x = Conta
!y = DatoMIC
.Update
End With
Picture1.Line -(Conta, 128 - DatoMIC)
MSComm1.Output = Chr(255)
Exit Sub
Case 1 Valor Promedio
Conta = Conta + 1
With Data1.Recordset
.AddNew
!x = Conta
!y = DatoMIC
.Update
End With
MSComm1.Output = Chr(255)
If Conta = 3 Then
Se calcula el promedio mediante la funcin AVG
Set rs = bd.OpenRecordset(Select AVG(Y) AS Prom From Tabla)
MsgBox El valor promedio es: + Str(rs!prom * K - B)
K:Constante de Ajuste para valor real DC
B:Constante de Ajuste para valor positivo o negativo
Ecuacin de la forma Voltaje = K(Prom) - B
End If
Exit Sub

ALFAOMEGA - FREESCALE
CONVERSOR ANLOGO/DIGITAL 195

End Select
End Select
End Sub

EJERCICIOS PROPUESTOS
Se desea disear un sistema que permita leer constantemente la temperatura
que hay en un horno. Esta informacin es visualizada a travs de una pantalla
de cristal lquido a 4 bits, con rango de temperatura entre 25 a 500 grados centgrados.
Disear un voltmetro digital que pueda leer valores de tensin entre -20 y 20 voltios de DC.
Visualizar el resultado mediante dos displays de siete segmentos y en forma multiplexada.
Disear un medidor de temperatura de 4 canales. Esta temperatura debe ser leda constantemente
y comparadas sus lecturas. La diferencia de temperatura entre dos canales debe ser visualizada en
una pantalla de cristal lquido indicando entre qu canales se est tomando la lectura.

RESUMEN DEL CAPTULO


CAPTULO
Las seales provenientes del mundo exterior son de tipo analgico, como, por
ejemplo, presin, temperatura, velocidad, etc. Mediante el uso de un transductor
se realiza el proceso de conversin de un tipo de seal fsica a una seal elctrica.
Pero un sistema de control electrnico solamente reconoce seales de tipo digital, por lo
que se requiere convertir las seales analgicas a digitales.
Cuando se desea realizar un diseo haciendo uso de un conversor anlogo digital hay necesidad de
conocer como mnimo algunos parmetros propios del conversor, que pueden suministrar informacin
valiosa en el momento de decidir si es adecuado o no para su implementacin en el diseo. Estos
parmetros son: caractersticas de diseo, cdigo binario, resolucin, tiempo de conversin y caractersticas
de funcionamiento.
Algunas caractersticas del mdulo de conversin A/D son:
Tiene 12 canales con entrada multiplexada.
Utiliza el mtodo de aproximaciones sucesivas para la conversin.

ALFAOMEGA - FREESCALE
196 JUAN CARLOS VESGA FERREIRA

Tiene 8 bits de resolucin.


Conversin sencilla o continua.
Bandera de conversin completa o interrupcin de conversin completa.
Reloj de conversin A/D seleccionable.

ALFAOMEGA - FREESCALE
Captulo 11
EL OSCILADOR
OBJETIVO DEL CAPTULO 11.1 INTRODUCCIN
El oscilador es uno de lo mdulos ms importantes
del microcontrolador, ya que sin l no podra Actualmente todos los microcontroladores disponen
funcionar. El objetivo de este captulo es ilustrar de un circuito oscilador que genera una onda
al estudiante acerca de: en qu consiste este cuadrada de alta frecuencia; este mdulo es el que
mdulo, qu partes lo componen, qu tipos est encargado de la sincronizacin de todas las tareas
de osciladores se pueden utilizar y cmo se que realice el microcontrolador, es decir, el oscilador
deben conectar y configurar para su ptimo es el circuito que permite que el microcontrolador
funcionamiento, y finalmente qu cuidados ejecute las instrucciones deseadas y funcione
se deben tener a la hora de seleccionar un correctamente.
determinado oscilador para desarrollar una Por lo general este circuito de reloj hace parte
aplicacin especfica. del microcontrolador y slo se necesitan algunos
componentes exteriores para completar el circuito
oscilador a la frecuencia de trabajo deseada. Estos
CONOCIMIENTOS PREVIOS componentes pueden ser un cristal de cuarzo y un par
de condensadores que tengan valores entre 15 y 33 pF
Para iniciar el estudio del presente captulo es
necesario que el lector posea conceptos bsicos o una red de tipo RC. Se debe tener en cuenta que al
sobre electrnica bsica y circuitos digitales con aumentar la frecuencia del reloj aumenta el tiempo de
el fin de poder comprender fcilmente cada uno ejecucin de las instrucciones, junto con un aumento
de los temas expuestos aqu. en el consumo de potencia; esto significa que a mayor
velocidad de procesamiento, mayor ser el consumo
de energa por parte del microcontrolador.
198 JUAN CARLOS VESGA FERREIRA

El mdulo del oscilador es el que suministra el reloj para el sistema MCU. Existen dos tipos de mdulos
para osciladores:
MC68HC908XXX. Est basado en un mdulo de oscilador a cristal, el cual requiere un cristal externo o
un resonador cermico; esta opcin puede ser manipulada directamente en el OSC1.

Del SIM
al SIM al SIM

20SCOUT OSCOUT

XTALCLK ..
2
SIMOSCEN

MCU

OSC1 OSC2

RS+
RB

X1

C1 C2

FIGURA 11.1
Conexin externa del oscilador a cristal.

Esta configuracin usa cinco componentes:


Cristal X1.
Capacitor fijo C1 (mnimo 2 veces la capacitancia del cristal).
Capacitor variable C2 (puede ser un condensador fijo, mnimo 2 veces la capacitancia del cristal).
Resistencia de retroalimentacin (10 M).
Resistor serie (opcional). Esta resistencia puede ser de valor cero cuando se utiliza cristal y frecuencias
altas.

ALFAOMEGA - FREESCALE
EL OSCILADOR 199

MC68HRC908XXX. Est basado en un mdulo de oscilador RC, el cual requiere externamente una red de
tipo RC solamente. Este tipo de oscilador suministra una fuente de reloj con una tolerancia inferior a 10%.

Al SIM Al SIM
Del SIM

20SCOUT OSCOUT

SIMOSCEN Ext-RC RCCLK


EN .. 2
Oscillator

PTA6
1 PTA6
I/O

MCU PTA6EN

OSC1 PTA6/RCCLK (OSC2)

VDD
REXT CEXT

FIGURA 11.2
Conexin externa del oscilador RC.

Como se mencion, este tipo de oscilador requiere dos componentes, una resistencia R y un condensador
C (min 10 pF), cada uno de los cuales deber tener una tolerancia inferior a 1%.

OSC1
Este pin es la entrada hacia el amplificador de las seales generadas por el cristal o la red RC.

OSC2/PTA6/RCCLK
Cuando se utiliza un oscilador a cristal, este pin es la salida del amplificador inversor.
Cuando se utiliza un oscilador de tipo RC, este pin puede ser configurado como pin de propsito general
(I/O) o como salida de reloj del oscilador interno generado por la red RC.

ALFAOMEGA - FREESCALE
200 JUAN CARLOS VESGA FERREIRA

OPCIN FUNCIN DEL PIN OSC2


OSCILADOR A CRISTAL OSC1 INVERTIDA
OSCILADOR RC PTAEN = 0: SALIDA DEL RCCLK
PTAEN = 1: PTA6 I/O

TABLA 11.1
Configuracin segn el oscilador.

SEAL HABILITADORA DEL OSCILADOR (SIMOSCEN)


Esta seal proviene del sistema de integracin modular, la cual habilita o deshabilita el circuito oscilador a
cristal o RC.

EL RELOJ DE OSCILACIN A CRISTAL (XTALCLK)


Es la seal correspondiente a la salida del oscilador a cristal y proviene directamente de este circuito. La duracin
de un ciclo del XTALCLK es desconocida y puede depender del cristal y de otros factores externos.

EL RELOJ DE OSCILACIN RC (RCCLK)


Esta es la seal de salida correspondiente al oscilador de tipo RC. Esta frecuencia es directamente proporcional
a la constante de tiempo de la red RC.

SALIDA DEL OSCILADOR 2 (2OSCOUT)


El 2OSCOUT es el mismo reloj de entrada (XTALCLK o RCCLK). Esta seal se usa para determinar los ciclos
del COP (perro guardin).

SALIDA DEL OSCILADOR (OSCOUT)


La frecuencia de esta seal es igual a la mitad de la seal 2OSCOUT y se usa para el reloj de la CPU y otros
mdulos en la MCU. La seal OSCOUT se divide nuevamente en el SIM y el resultado es la frecuencia del
bus interno, siendo una cuarta parte de la frecuencia del reloj de oscilacin (XTALCLK O RCCLK).

ALFAOMEGA - FREESCALE
EL OSCILADOR 201

EJERCICIOS PROPUESTOS

Con base en las grficas descriptivas de especificaciones elctricas que se encuentran en los Datasheet de
Freescale y que se ilustra a continuacin, qu valores deben tener la resistencia Rext y el condensador Cext
para provocar frecuencias de oscilacin de 4 MHz, 10 MHz y 16 MHz, respectivamente?

14

12
REXT = 10 pF MCU
10
RC frequency, fRCCLK (MHZ)

3V @ 25oC
OSC1
6

6
VDD
4 REXT CEXT

0
0 10 20 30 40 50
Resistor, REXT (K )

RESUMEN DEL CAPTULO


CAPTULO

El oscilador es uno de lo mdulos indispensables del microcontrolador, ya que


sin l no sera posible su funcionamiento. Este circuito de reloj hace parte del
microcontrolador y slo se necesitan unos pocos componentes exteriores para completar
el circuito oscilador a la frecuencia de trabajo que se quiera. Estos componentes pueden ser
un cristal de cuarzo y un par de condensadores de valores entre 15 y 33 pF o una red de tipo RC. Se debe
tener en cuenta que al aumentar la frecuencia del reloj aumenta tambin el tiempo de ejecucin de las
instrucciones, junto con un aumento del consumo de potencia, lo cual significa que a mayor velocidad de
procesamiento, mayor ser el consumo de energa por parte del microcontrolador.

ALFAOMEGA - FREESCALE
Captulo 12
RECURSOS DE
CONFIGURACIN AVANZADA

OBJETIVO DEL CAPTULO 12.1 INTRODUCCIN


Al finalizar el captulo el estudiante tendr un Uno de los parmetros importantes de esta familia
conocimiento sobre Qu es la memoria Flash?, de microcontroladores es el uso, configuracin y
para qu se utiliza?, cuales son sus principales manipulacin de la interrupcin por software y
caractersticas, procedimiento de programacin y su aplicacin correcta dentro de desarrollos que
borrado de la misma, entre otras cosas que hacen
requieran su uso. Este mdulo puede generar
parte de este interesante tema. Adicionalmente,
interrupciones, provocando un alto en la ejecucin
el estudiante debe familiarizarse con el uso,
de un determinado programa en una direccin
configuracin y manipulacin de la interrupcin
por software, aplicndolo correctamente a establecida previamente.
desarrollos en que se considere necesario. Adicionalmente, en muchas aplicaciones industriales
es necesario almacenar informacin que de ser posible
no sea borrada aun ante la ausencia de energa; tal
CONOCIMIENTOS PREVIOS es el caso de la memoria Flash, la cual debido a sus
caractersticas cada da es adoptada mayormente
Para iniciar el estudio del presente captulo es en los ltimos diseos de almacenamiento de
necesario que el lector posea conceptos bsicos informacin electrnico.
sobre el significado y uso de interrupciones en En este captulo se pretende dar una visin general
los microcontroladores. tanto de los registros de configuracin avanzados
como de la memoria Flash describindose su uso,
administracin y configuracin.
204 JUAN CARLOS VESGA FERREIRA

12.2 MEMORIA FLASH


La memoria Flash es no voltil, es decir, en ausencia de energa los datos almacenados en ella no son borrados
como ocurre con la memoria RAM; adems presenta bajo consumo de energa y puede grabarse y borrarse
elctricamente. Funciona como una ROM y una RAM pero consume menos energa y es ms pequea. La
memoria Flash tambin puede programarse en circuito; adems es ms rpida, tiene mayor densidad y
tolera ms ciclos de escritura/borrado que la EEPROM.
Esta memoria consiste en un vector de 4096 o 1536 bytes con una adicin de 48 bytes para ser usados
vectorialmente. El tamao mnimo de la memoria Flash que puede ser borrado es de 64 bytes, y el mximo
tamao que puede ser programado en un programa cclico es de 32 bytes (una fila). Las operaciones de
programar y borrar se permiten a travs del control de unos bits en el registro de control de la memoria
Flash (FLCR).
Los rangos de direcciones utilizados para esta memoria son:
$EC00 - $FBFF ; 4096 bytes ; Aplicado al JL3/JK3
$F600 - $FBFF ; 1536 bytes ; Aplicado al JK1

REGISTRO DE CONTROL DE LA MEMORIA FLASH (FLCR)

Direccin: $FE08

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0
Escribir HVEN MASS ERASE PGM

HVEN: HABILITACIN DE ALTO VOLTAJE


Este bit habilita o no la bomba de carga de alto voltaje para permitir el proceso de programacin o borrado
de la memoria Flash, dependiendo del valor de los bits PGM = 1 o ERASE = 1, respectivamente.
1: Habilita el proceso
0: Deshabilita el proceso

MASS: CONTROL DE BORRADO EN MASA


Este bit permite que la memoria Flash sea borrada en MASA o en BLOQUE.
1: Selecciona la operacin de borrado en Masa
0: Selecciona la operacin de borrado en Bloque

ERASE: CONTROL DE BORRADO


Configura la memoria para la operacin de borrado; debe tenerse en cuenta que este bit y el bit PGM no
deben estar en 1 al mismo tiempo.

ALFAOMEGA - FREESCALE
RECURSOS DE CONFIGURACIN AVANZADA 205

1: Habilita la operacin de borrado


0: Deshabilita la operacin de borrado

PGM: CONTROL DE PROGRAMACIN


Configura la memoria para la operacin de programacin; debe tenerse en cuenta que este bit y el bit PGM
no deben estar en 1 al mismo tiempo.
1: Habilita la operacin de programacin
0: Deshabilita la operacin de programacin

12.3 BORRADO DE LA MEMORIA FLASH EN BLOQUE


Un bloque consta de 64 bytes consecutivos, comenzando en la direccin $XX00, $XX40, $XX80 o $XXC0. Los
48 bytes utilizados en las interrupciones vectorizadas constituyen un bloque. Ningn bloque que se encuentre
entre $EC00 - $FBFF puede ser borrado solo, pero los 48 bytes de interrupciones sectorizadas s pueden ser
borrados solos, a menos que se escoja la opcin masa, la cual borra todo el bloque.
El procedimiento para borrar en BLOQUE es el siguiente:
1. ERASE = 1 , MASS = 0.
2. Escribir algn dato en cualquier parte de la memoria Flash dentro del rango del bloque a borrar.
3. Esperar alrededor de unos 10 s.
4. HVEN = 1.
5. Esperar alrededor de 1 ms (Tiempo de Borrado).
6. ERASE = 0.
7. Esperar alrededor de unos 5 s.
8. HVEN = 0.
9. Esperar alrededor de 1 s.
Despus de este proceso la memoria est lista para ser leda y utilizada nuevamente.
Se debe tener en cuenta que la programacin y borrado de las posiciones de la memoria Flash no puede
realizarse por cdigo mientras se est ejecutando en la memoria Flash.
El procedimiento para borrar en MASA es el siguiente:
1. ERASE = 1 , MASS = 1.
2. Escribir algn dato en cualquier parte de la memoria Flash dentro del rango del bloque a borrar.
3. Esperar alrededor de 10 s
4. HVEN = 1.
5. Esperar alrededor de 4 ms (Tiempo de Borrado)
6. ERASE = 0.
7. Esperar alrededor de 100 s
8. HVEN = 0.

ALFAOMEGA - FREESCALE
206 JUAN CARLOS VESGA FERREIRA

9. Esperar alrededor de 1 s.
Despus de este proceso la memoria est lista para ser leda y utilizada nuevamente.

12.4 PROGRAMACIN DE LA MEMORIA FLASH


La programacin de la memoria Flash es hecha a base de filas. Una fila consta de 32 bytes consecutivos
comenzando desde la direccin $XX00, $XX20, $XX40, $XX60, $XXA0, $XXC0 o $XXE0.
La accin de programar una fila de la memoria Flash se efecta de la siguiente manera:
1. PGM = 1 , configura la memoria para programacin.
2. Escribir algn dato en cualquier parte de la memoria Flash dentro del rango de la fila a programar.
3. Esperar alrededor de 10 s.
4. HVEN = 1.
5. Esperar alrededor de 5 s.
6. Escribir el dato o byte a ser programado.
7. Esperar unos 30 s.
8. Repetir los pasos 6 y 7 hasta que todos los bytes dentro de la fila sean almacenados.
9. PGM = 0.
10. Esperar alrededor de 5 s.
11. HVEN = 0.
12. Esperar alrededor de 1 s.
Despus de este proceso la memoria est lista para ser leda y utilizada nuevamente.
La secuencia anterior es repetida por toda la memoria hasta que todos los datos son programados.

12.5 PROTECCIN DE LA MEMORIA FLASH


Cuando se efectan procesos de programacin o borrado de la memoria Flash se hace necesario proteger los
bloques de memoria debido al mal funcionamiento del sistema. Esta proteccin consiste en proteger el registro
FLBPR, el cual determina el rango a ser protegido, comenzando por la direccin definida como punto inicial
en el registro FLBPR hasta la direccin $FFFF. Cuando la memoria es protegida, el bit HVEN no puede estar
en 1, ni habilitarse procesos de borrado o programacin.

Proteccin de registros en bloque


La proteccin de registros en bloque se efecta mediante registros de I/O de 8 bits. El valor del registro
determina la direccin inicial para proteccin dentro del rango de la memoria Flash.

ALFAOMEGA - FREESCALE
RECURSOS DE CONFIGURACIN AVANZADA 207

Registro de proteccin en bloque flash (FLBPR)

Direccin $FE09

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0
Escribir BPR7 BPR6 BPR5 BPR4 BPR3 BPR2 BPR1

Estos 8 bits en el registro FLBPR en los cuales el bit 0 siempre tiene como valor cero, representan los bits
[12:5] de la direccin de memoria de 16 bits. Los bits [15:13] son 1 lgico y los bits [4:0] son 0 lgico.
La direccin resultante de 16 bits se utiliza para especificar la direccin inicial del bloque de proteccin de
la memoria Flash. La memoria es protegida desde esta direccin hasta la direccin $FFFF. Se debe tener en
cuenta que las direcciones consideradas como puntos de partida pueden ser $XX00, $XX40, $XX80 o $XXC0
dentro del rango de la memoria Flash.
Para que toda la memoria Flash quede protegida, el valor del registro FLBPR puede estar entre $00 hasta
$60, y para que nada se proteja se le puede adjudicar el valor $FF.

12.6 MDULO DE RUPTURA


Hasta el momento se han mencionado todos los tipos de interrupciones, pero faltaba un tipo de interrupcin
que en muchos casos presenta un valor agregado a la hora de desarrollar cualquier aplicacin; es precisamente
cuando se puede generar una interrupcin por software, es decir, una interrupcin provocada a propsito
por el usuario para ejecutar una tarea especfica.
En esta seccin se describe el mdulo de ruptura. Este mdulo puede generar interrupciones, provocando
un alto en la ejecucin de un determinado programa en una direccin establecida previamente.
Es el mdulo encargado de permitir la funcin BREAK, capaz de generar una interrupcin que detenga
el flujo normal del programa en una direccin definida a entrar en el programa background.
Comnmente esto es muy utilizado para generar lo que se conoce como BreakPoint o punto de quiebre
en el programa del usuario durante la emulacin del mismo. Esta caracterstica es exclusiva de la familia
HC908 y permite la implemetacin de numerosos metodos de depuracin de programas y herramientas de
emulacin poderosas, sin dejar por ello de ser econmicas. Cuando se habla de background se refiere a una
rutina o programa completo, que normalmente NO SE EJECUTA, salvo que se cumpla con las condiciones
para generar un BreakPoint que permitan saltar a esta rutina. Generalmente esta funcin se utiliza para
generar rutinas de debbuging (depuracin) internas que permitan un rpido desarrollo o depuracin ante
determinadas circunstancias.
A diferencia de otras familias de microcontroladores, la familia HC908 FLASH de Freescale, al contar
con este mdulo y la ROM monitor, permite disponer de herramientas de emulacin en TIEMPO REAL a
precios muy accesibles.
Una interrupcin de ruptura es generada en las siguientes circunstancias:

ALFAOMEGA - FREESCALE
208 JUAN CARLOS VESGA FERREIRA

Cuando una direccin interna es escrita en el registro de ruptura, se provoca una interrupcin por
software (SWI).
Cuando se coloca un 1 lgico en el bit BRKA del registro de control y estado de ruptura.
La CPU comienza la ruptura:
Cuando es cargada la instruccin SWI.
Cuando al contador de programa se carga con alguna de las siguientes direcciones ($FFFC, $FFFD,
$FEFC, $FEFD) en el modo monitor.

Los registros encargados del control y monitoreo del mdulo de ruptura son los siguientes:
Registro de control y estado de ruptura (BRKSCR).
Registro de direccin de ruptura (BRKH/BRKL).
Registro de estado de ruptura (BSR).
Registro de control de bandera para ruptura (BFCR).

Durante una interrupcin por ruptura ocurre lo siguiente:


Se debe tener en cuenta que el contador del TIM se detiene.
El COP es deshabilitado.

Registro de control y estado de ruptura (BRKSCR)


Direccin $FE0E
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer 0 0 0 0 0 0
Escribir BRKE BRKA

BRKE: Bit de habilitacin de ruptura


1: Habilitacin de ruptura en direccin de 16 bits
0: Deshabilitacin de ruptura

BRKA: Bit de ruptura activa


1: Generar interrupcin de ruptura en la direccin sealada
0: No generar ruptura en la direccin sealada

Registro de direccin de ruptura (BRKH/BRKL)


Registro BRKH
Direccin $FE0C
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer
Escribir Bit15 Bit14 Bit13 Bit12 Bit11 Bit10 Bit9 Bit8

ALFAOMEGA - FREESCALE
RECURSOS DE CONFIGURACIN AVANZADA 209

Registro BRKL

Direccin $FE0D

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

Estos registros contienen la direccin en donde se desea generar la interrupcin por ruptura.

Registro de estado de ruptura (BSR)

Direccin $FE00

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer SBSW
Escribir R R R R R R NOTA 1 R

R: Reservado

SBSW: Parada o espera de ruptura del SIM


Este bit se utiliza en todas las aplicaciones que requieran un retorno de un modo WAIT/STOP, despus de
salir de una interrupcin de ruptura.
El bit puede ser ledo dentro de la rutina de interrupcin por software SWI.

Registro de control de bandera para ruptura (BFCR)

Direccin $FE03

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir BCFE R R R R R R R

BCFE: bit para habilitar el borrado de la bandera de ruptura


1: Permite borrar el estado del bit de ruptura durante la ruptura.
0: No permite borrar el estado del bit de ruptura durante la ruptura.

ALFAOMEGA - FREESCALE
210 JUAN CARLOS VESGA FERREIRA

12.7 CONFIGURACIN DEL REGISTRO CONFIG


En esta seccin se ilustrar la forma de configurar los registros CONFIG1 Y CONFIG2. La configuracin de
estos registros habilita o deshabilita las siguientes opciones:
Instruccin STOP.
Perro guardin COP.
_ _
Reiniciar el COP en perodos de COPRS, (213 24) * 2OSCOUT o (218 24) * 2OSCOUT.
Habilitar el circuito LVI.

El timer COP, tambin conocido como Watchdog timer, se basa en un contador que corre libremente y que
puede ser borrado por el usuario en cualquier momento. El COP permite a la CPU recuperarse de eventos
inesperados como el llamado runaway software (ejecucin incorrecta del software) y errores en el proceso de
software.
Para usar el COP, simplemente hay que activar y seleccionar el perodo de timeout deseado. El COP hace
un reset si no ha habido un reset dentro del perodo de timeout. El timeout es el exceso de tiempo en la espera
de una seal determinada. Lo ms importante que siempre se debe recordar es que hay que servirlo antes de
que el perodo de interrupcin expire. Si se activa el timer del COP y no se le da servicio dentro del perodo
de interrupcin, el COP har un reset a la CPU.
La configuracin de este registro se usa para la inicializacin de varias opciones. La configuracin de este
registro puede ser cambiada incluso despus de cada reset. Se recomienda que este registro sea configurado
inmediatamente despus de efectuado el reset. Este registro se encuentra localizado en la direccin $001E y
$001F, y puede ser ledo en cualquier momento.

Registro CONFIG2

Direccin $001E

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir IRQPUD R R LVIT1 LVIT0 R R R

R: Reservado

IRQPUD: bit de control de resistencias Pull-Up para el pin IRQ1


1: Resistencias de Pull-Up desconectadas.
0: Resistencias de Pull-Up conectadas entre IRQ1 y VDD.
El mdulo de restriccin de bajo voltaje (LVI) es el que se encarga de monitorear el voltaje en el pin VDD y
de reiniciar el microcontrolador cuando el voltaje de VDD se encuentra por debajo de los niveles establecidos.
(LVI trip).
Por medio de este registro es posible seleccionar los niveles de tensin para efectuar el reset del
microcontrolador y adems permitir la habilitacin del circuito LVI.

ALFAOMEGA - FREESCALE
RECURSOS DE CONFIGURACIN AVANZADA 211

Caractersticas del mdulo LVI


Mejora la fiabilidad del sistema.
Reduce el nmero de componenetes externos, bajando el costo.
Hace un reset a la MCU cuando el voltaje se encuentra por debajo de cierto nivel de tensin.
Cuando el voltaje retorna a su estado natural, la MCU continuar trabajando.
Incluye una seleccin de voltaje cuando se alimenta el sistema con 3 o 5 V.

LVIT1, LVIT0: bits de seleccin de niveles de control de VDD para que el circuito de proteccin entre en
accin.

LVIT1 LVIT0 NIVEL DE VDD


VOLTAJE
0 0 2.4 V VDD = 3.0 V
0 1 2.4 V VDD = 3.0 V
1 0 4.0 V VDD = 5.0 V
1 1 Reservado

TABLA 12.1
Niveles de configuracin de voltaje.

Registro CONFIG1

Direccin $001F

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir COPRS R R LVID R SSREC STOP COPD

R: Reservado

COPRS: bit de seleccin para el perodo de reset del COP (perro guardin).
1: COP reset = (213 - 24) * 2OSCOUT
0: COP reset = (218 - 24) * 2OSCOUT

LVID: bit habilitacin para bajo voltaje.


1= Deshabilitar circuito de restriccin para bajo voltaje.
0= Habilitar circuito de restriccin para bajo voltaje.

ALFAOMEGA - FREESCALE
212 JUAN CARLOS VESGA FERREIRA

SSREC: Recuperacin de parada corta, este registro habilita la salida de la CPU del modo Stop con un
retardo de 32*OSCXCLK ciclos a cambio de 4096*2OSCOUT ciclos.
1= Retornar del modo Stop despus de 32*2OSCOUT ciclos.
0= Retornar del modo Stop despus de 4096*2OSCOUT ciclos.
Si se usa un cristal externo, no se puede colocar el bit SSREC en 1.

STOP: bit de habilitacin de la instruccin STOP.


1: Habilitacin de la instruccin STOP.
0: La instruccin STOP ser tomada como cdigo ilegal.

COPD: bit de deshabilitacin del COP.


1: Deshabilitar el mdulo COP.
0: Habilitar el mdulo COP.

Informacin complementaria
Para mayor informacin y profundizacin sobre el manejo de la memoria Flash, programas de almacenamiento
y borrado en masa y bloque con sus respectivos cdigos fuente, se puede buscar los siguientes archivos.
AN-HK-33.pdf
AN-HK-32.pdf
AN1831.pdf
AN1770.pdf

RESUMEN DEL CAPTULO


CAPTULO
La memoria Flash es el equivalente al disco duro del microcontrolador gracias
a que es una memoria de tipo no voltil.
La memoria Flash tambin puede programarse en circuito; adems es ms rpida,
tiene mayor densidad y tolera ms ciclos de escritura/borrado que la EEPROM.
Esta memoria consiste en un vector de 4096 o 1536 bytes con una adicin de 48 bytes para ser usados
vectorialmente. El tamao mnimo de la memoria Flash que puede ser borrado es de 64 bytes, y el mximo
tamao que puede ser programado en un programa cclico es de 32 bytes (una fila).
Los rangos de direcciones utilizados para esta memoria son:

ALFAOMEGA - FREESCALE
RECURSOS DE CONFIGURACIN AVANZADA 213

$EC00 - $FBFF ; 4096 bytes ; Aplicado al JL3/JK3


$F600 - $FBFF ; 1536 bytes ; Aplicado al JK1

La programacin de la memoria Flash es hecha a base de filas. Una fila consta de 32 bytes consecutivos
comenzando desde la direccin $XX00, $XX20, $XX40,$XX60,$XXA0,$XXC0 o $XXE0.
Cuando se efectan procesos de programacin o borrado de la memoria Flash, se hace necesario
proteger los bloque de memoria debido al mal funcionamiento del sistema.
El timer COP, tambin conocido como Watchdog Timer se basa en un contador que corre libremente
y que puede ser borrado por el usuario en cualquier momento. El COP permite a la CPU recuperarse de
eventos inesperados como el llamado runaway software (ejecucin incorrecta del software) y errores
en el proceso de software.
Uno de los parmetros importantes de esta familia de microcontroladores es el uso, configuracin y
manipulacin de la interrupcin por software y su aplicacin correcta dentro de desarrollos que requieran
su uso. Este mdulo puede generar interrupciones, provocando un alto en la ejecucin de un determinado
programa en una direccin establecida previamente.
Cuando se habla de background, se refiere a ste como una rutina o programa completo, que
normalmente NO SE EJECUTA, salvo que se cumplan las condiciones para generar un Break Point
que permitan saltar a esta rutina. Generalmente esta funcin es utilizada para generar rutinas de
Debbuging (depuracin) internas que permitan un rpido desarrollo o depuracin ante determinadas
circunstancias.
Una interrupcin de ruptura es generada:
Cuando una direccin interna es escrita en el registro de ruptura, se provoca una interrupcin
por software (SWI).
Cuando se coloca un 1 lgico en el bit BRKA del registro de control y estado de ruptura.

La CPU comienza la ruptura:


Cuando es cargada la instruccin SWI.
Cuando al contador de programa se carga con alguna de las siguientes direcciones ($FFFC, $FFFD,
$FEFC, $FEFD) en el modo monitor.
Los registros encargados del control y monitoreo del mdulo de ruptura son los siguientes: registro de
control y estado de ruptura (BRKSCR), registro de direccion de ruptura (BRKH/BRKL), registro de estado
de ruptura (BSR) y el registro de control de bandera para ruptura (BFCR).

ALFAOMEGA - FREESCALE
Captulo 13
PROGRAMACIN EN C
13.1 INTRODUCCIN
AL LENGUAJE C
OBJETIVO DEL CAPTULO
Exponer las bondades de la programacin en Hasta el momento, en todos los programas desarrollados
lenguaje C, estructuras, sintaxis y su aplicacin en en el campo de la programacin de microcontroladores
la programacin de microcontroladores. el lenguaje de programacin por excelencia ha sido
Assembler. Es un lenguaje de programacin de bajo
nivel que permite interactuar de una manera fcil y
CONOCIMIENTOS PREVIOS rpida al hombre con las mquinas, en este caso, al
programador con el microcontrolador.
La forma en que un programador puede ordenarle
Para iniciar el estudio del presente captulo a un microcontrolador realizar tareas y funciones se
es necesario que el lector posea conceptos
basa en el uso de operaciones lgicas y aritmticas
bsicos sobre fundamentos de programacin
basadas en sistemas numricos como el hexadecimal,
y la estructura tanto interna como lgica del
microcontrolador es estudio el decimal y el binario. Sin embargo, una de las
dificultades que presenta es el hecho de que en muchos
casos se requiere efectuar operaciones especiales
como, por ejemplo, multiplicaciones, divisiones,
implementacin de funciones condicionales y
funciones repetitivas, y se debe incorporar una cierta
cantidad de cdigo, que la mayora de las veces se
216 JUAN CARLOS VESGA FERREIRA

puede considerar extensa y compleja, logrndose el mismo resultado con una simple instruccin utilizando
lenguajes de programacin de alto nivel como Basic o C, considerndose el lenguaje C como el lenguaje de
programacin de alto nivel predeterminado para la programacin de microcontroladores, en este caso de los
microcontroladores Motorola Freescale.
C es un lenguaje de programacin de propsito general que permite el uso de una sintaxis corta,
creacin de estructuras condicionales y repetitivas sencillas, generacin de procedimientos y subrutinas;
complementndose con el hecho de contar con un repertorio de instrucciones y operadores que ayudarn
a escribir cualquier programa de una manera fcil y corta, en comparacin con su homlogo en lenguaje
Assembler. C no se considera un lenguaje de muy alto nivel, ms bien un lenguaje pequeo y sencillo que no se
encuentra especializado en ningn tipo de aplicacin en particular, lo cual lo hace un lenguaje de programacin
muy potente a la hora de ser utilizado, rodeado de un campo de aplicacin ilimitado brindndole al usuario
no slo una gama ilimitada de posibilidades de uso en diferentes aplicaciones, sino que tambien se encuentra
al alcance de cualquier programador que desee aprenderlo en muy poco tiempo.
El lenguaje C fue desarrollado por Brian W. Kerninghan y Dennis M. Ritchie a mediados de la dcada de
1970, con el objeto de desarrollar el sistema operativo UNIX para la computadora PDP-11. Desde entonces
ha tenido una amplia aceptacin dentro del rea de la programacin debido a su flexiblidad, tamao y
portabilidad.
Una de las ventajas que presenta el lenguaje C es que trabaja con diferentes tipos de datos que son
directamente manejables por el hardware del microcontrolador, como son los caracteres, nmeros y direcciones.
Estos tipos de datos pueden ser manipulados por operaciones aritmtico-lgicas que proporciona cualquier
microcontrolador, brindndole al programador las herramientas de desarrollo base para la construccin de
estructuras ms complejas en el momento en que se requieran. Esto permite que el cdigo resultante generado
por el programador sea muy eficiente, y con ello una mayor estabilidad en el momento de su ejecucin,
considerndose lo anterior como el punto clave que le ha dado al lenguaje C el xito que ha tenido como
lenguaje de desarrollo de sistemas. C no proporciona otras alternativas de almacenamiento de informacin que
no sea la esttica y no proporciona alternativas fijas de entrada/salida, lo cual ha permitido que el lenguaje
sea reducido y los compiladores sean de fcil implementacin en diferentes modelos de microcontroladores,
brindando con ello la capacidad de solucionar las falencias presentes en el sistema en el momento de su
reduccin con el hecho de permitir incluir funciones en libreras, las cuales le permitirn al programador
realizar todas estas tareas, que normalmente dependen del sistema operativo que se est utilizando en el
momento.

En general, se podra decir que C es un lenguaje de programacin que tiene una


connotacin medio-bajo nivel, el cual le permitir al programador la opcin de acceder
al hardware del microcontrolador mediante el uso de un modelo de programacin
estructurada, de manera que se puede hacer uso eficiente de los recursos con que
cuenta el microcontrolador con un mnimo de instrucciones.

El presente captulo tiene como objetivo principal explicar de una maner rpida pero a su vez completa,
las formas de programar con este lenguaje, sus estructuras, su sintaxis y todo el grupo de recursos que rodean
a esta poderosa herramienta de trabajo.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 217

13.2 ESTRUCTURA DE UN PROGRAMA EN C


Un programa en C consta de varias secciones en donde se determinar qu variables y funciones tendr el
programa, as como la tarea que deber realizar. Su estructura est determinada por las siguientes partes:

Instrucciones para el compilador


Definicin de estructuras
Definicin de variables
Funciones
Programa principal

#include<libreria1.h>
#include<librera2.h>

declaracin de funciones
definicin (cuerpo de funciones)
declaracin variables globales

main (void)
{
cuerpo del main o programa principal
}
otras funciones

Qu es un compilador?
Un compilador es un programa que traduce el cdigo fuente de un programa escrito en un lenguaje de
programacin en particular, que para nuestro caso es C, en un cdigo que es el lenguaje por excelencia de
todo procesador, llamado lenguaje mquina, constituido simplemente por cadenas conformadas por 1
y 0.

Qu es un editor?
El compilador es simplemente la herramienta que nos sirve para efectuar las traducciones de un lenguaje
comprensible para el ser humano en un lenguaje comprensible solamente por los procesadores; pero, en
dnde se escribe el cdigo fuente o programa para el microcontrolador?, la respuesta es muy sencilla: en el
editor.
Un editor es simplemete cualquier procesador de texto en el cual se escribe el cdigo del programa
empleando la sintaxis propia del lenguaje de programacin utilizado, para ser enviado posteriormente al
compilador con el fin de ser revisado, evaluado y traducido a su cdigo final.

ALFAOMEGA - FREESCALE
218 JUAN CARLOS VESGA FERREIRA

Cuando se trata de crear programas para microcontroladores Motorola Freescale, tanto el compilador
como el editor se encuentran incluidos en la herramienta de desarrollo propia de esta familia, conocida como
CodeWarrior.
La programacin no siempre es una tarea fcil de hacer, algunas veces est llena de frustaciones, tristezas
y estrs, pero tambien est llena de alegras y recompensas y as mismo, de un sentido de orgullo por haberlo
logrado.
A continuacin se muestra una metodologia que puede ayudar a evitar las frustaciones; esta metodologia
est basada en 7 pasos:
1. Definir o redefinir el problema.
2. Disear el programa.
3. Escribir el cdigo.
4. Compilar el cdigo.
5. Pruebas y depuracin.
6. Documentacin.
7. Modificar y mantener.

Definir o redefinir el problema. Este paso define la direccin de lo que sigue en el proceso. Definir el
problema es esencialmente comprender completamente el problema. Esto probablemente al iniciar a programar
puede parecer complicado, por lo que al comienzo la definicin del problema es vaga; esto requiere redefinir
nuestro problema, incluyendo una definicin precisa de los datos de entrada, los datos dados y el resultado
deseado.

Disear el programa. Una vez que ya se tiene la idea conceptual de lo que el programa necesita hacer,
necesitamos definir cmo l va a hacerlo. Se requiere contestar preguntas como qu lenguaje utilizar?,
cmo va a estar organizado el programa?, cmo debe verse la interfaz (si se requiere)?; tambien se necesita
decidir cmo va a representar los datos en el programa o en los archivos y cules mtodos va a utilizar para
procesar los datos. Este paso no requiere ser tan especfico, es decir, no exige pensar en las lneas de cdigo
exactas. Este paso es ms para organizar ideas y pensamientos, aqu es donde se generan los algoritmos y
los diagramas de flujo para usarlos ms tarde.

Escribir el cdigo. Ya que tenemos los algoritmos y los diagramas de flujo podemos entonces traducirlos
a lneas de cdigo organizadas que sern ejecutadas por el microcontrolador.

Pruebas y depuracin. Si ya hemos logrado tener el cdigo en el lenguaje seleccionado, se requiere hacer
un conjunto de pruebas de todos los casos que se han planteado en el diseo, y si surge alguna discrepancia
tendremos que volver a la etapa del diseo para corregir el problema.

13.3 DEFINICIN DE ESTRUCTURAS INICIALES EN C


Las primeras lneas de un programa en C tienen un significado especial como, por ejemplo: la definicin de
nombres, macros e incluso adjuntar archivos, entre otras funciones.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 219

Todas estas lneas inician con el carcter #. Por ejemplo:


#include<iostream.h> /* Carga al programa la librera stdio.h
#define e 2.7182 /* Donde e es el nombre de una constante y su
valor es 2.7182 */
Toda expresin que se encuentre entre los smbolos /* y */ se toma como comentario, es decir, no se
considera una instruccin; por tanto, no se tiene en cuenta en el proceso de compilacin.

13.4 DEFINICIN DE VARIABLES


Una variable se considera como una etiqueta o un nombre con el cual se puede tener acceso a posiciones
de memoria en particular, permitiendo realizar funciones de lectura y escritura de informacin durante la
ejecucin del programa.
Las variables pueden ser de dos tipos: variables globales y variables locales.
Las variables globales son las que pueden ser llamadas desde cualquier funcin, manipuladas y mantener
los cambios en ellas dentro de todo el programa. Estas variables se definen por fuera de la estructura main
( ) o programa principal.
Las variables locales, como su nombre lo indica, son variables que solamente existen dentro de una funcin
o procedimiento, pero si son llamadas desde una funcin o un procedimiento externo no son capaces de
conservar su valor actual y son definidas dentro de la misma rutina que las utilice.
A continuacin se listan los tipos de variables que pueden ser utilizados para la programacin de
microcontroladores, el rango de valores de almacenamiento permitidos y el tamao de memoria que ocupan
dentro del microcontrolador.

Default Default value range Formats available


Type
format min max with option -T

char (unsigned) 8 bit 0 255 8bit, 16bit, 32bit


signed char 8 bit -128 127 8bit, 16bit, 32bit
unsigned char 8 bit 0 255 8bit, 16bit, 32bit
signed short 16 bit -32768 32767 8bit, 16bit, 32bit
unsigned short 16 bit 0 65535 8bit, 16bit, 32bit
enum (signed) 16 bit -32768 32767 8bit, 16bit, 32bit
signed int 16 bit -32768 32767 8bit, 16bit, 32bit
unsigned int 16 bit 0 65535 8bit, 16bit, 32bit
signed long 32 bit -2147483648 2147483647 8bit, 16bit, 32bit
unsigned long 32 bit 0 4294967295 8bit, 16bit, 32bit
signed long long 32 bit -2147483648 2147483647 8bit, 16bit, 32bit
unsigned long 32 bit 0 4294967295 8bit, 16bit, 32bit

ALFAOMEGA - FREESCALE
220 JUAN CARLOS VESGA FERREIRA

La tabla anterior puede parecer demasiado tediosa; sin embargo, no todos estos tipos de datos se utilizan
a la hora de la programacion. Un ejemplo es:

char.
unsigned char.

Estos dos tipos de datos en realidad son lo mismo, como puede darse cuenta el lector, por el rango que
manejan. De esta manera tenemos cuatro tipos de datos ms usados:
1. char.
2. int.
3. float.
4. double.

Y tenemos su contraparte, en la cual podemos manejar datos con signo donde el bit ms significativo de
cada tipo uno de estos tres tipos se utiliza como signo:

1. signed char.
2. signed int.
3. signed long.
Cuando se utilizan variables en lenguaje C, stas pueden ser de varios tipos segn la informacin que
desean manipular o procesar. Entre los tipos de variables se pueden mencionar:

* void Sin valor


* char Carcter
* short Entero corto
* int Entero
* long Entero largo
* float Flotante
* double Flotante de doble precisin
* signed Usa signo
* unsigned Sin signo

Un tipo especial de variable es el tipo void, que permite declarar funciones que realizan alguna funcin
en particular sin regresar valores (por ejemplo, una funcin que imprima un mensaje) y tambin para la
declaracin de apuntadores genricos, es decir, capaces de apuntar a cualquier tipo de variable.
La declaracin de una variable emplea la siguiente sintaxis:

Tipo de Variable Variable1, Variable2;


Cuando se definen variables en el mismo rengln, stas se consideran todas del mismo tipo, por
ejemplo:

float a,b,c;

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 221

Siempre se debe tener en cuenta que al definir variables, al finalizar la lnea se escribe punto y coma (;).
Otra propiedad til es que en el momento en que se define una variable, se le puede indicar el valor inicial
de la misma, por ejemplo:
char a = X;
float y = 10.2, x = 12.5;
Otra posible forma de definir una variables es la siguiente:

tipo nombre_variable = valor_de_inicializacin;


El nombre que puede tomar una variable puede ser de hasta 31 caracteres de largo. Los caracteres que
forman el nombre pueden ser letras maysculas y/o letras minsculas, los nmeros de 0 a 9, el carcter
_ ( guin bajo); sin embargo, la mayora de los compiladores de C y libreras utilizan el guion bajo como
primer carcter como convencin, y por tanto debe ser evitado como primer carcter ya sea del nombre de
una funcin o de una variable.

Ejemplo

La siguiente tabla muestra algunas declaraciones de variables utilizando diferentes tipos; en la segunda
columna se explica si estn bien escritas desde el punto de vista de sintaxis.

Declaracin de variable Sintaxis


char puertoA; Vlida.
int %avoid; No vlida. No se puede usar
caracteres especiales, a excepcion
del guin bajo.
unsigned char x14; Vlida.
Signed int 1a=0xFFFF; No vlida. No se puede comenzar
con nmeros.
signed char siguiente_dato=0x01 Vlida.

De todos estos tipos de datos, podemos remarcar que el tamao tipo entero (INT : integer) depende del bus
de datos del microcontrolador seleccionado. En otras palabras, debe depender de la arquitectura misma del
componente. Sin embargo, algunas herramientas de desarrollo como CodeWarrior nos permiten seleccionar
los tamaos que deseamos definir para cada tipo de dato; ver figura 1. Esto no es recomendable, porque nos
puede evitar la portabilidad de nuestro cdigo. Por si fuera poco, el estndar ANSI no define del todo el
tamao de estos tipos.

ALFAOMEGA - FREESCALE
222 JUAN CARLOS VESGA FERREIRA

FIGURA 13.1
Ventana de CodeWarrior donde se permite cambiar el tamao de los tipos de datos.

Cuando se programa sistemas embebidos es necesario guardar tanto memoria como tiempo de ejecucin.
Por esto es necesario conocer si se va a programar un microcontrolador de 8, 16 o 32 bits y tratar de usar el
mejor tamao que se adapte para el microcontrolador seleccionado. Por ejemplo, microcontroladores de 8 bits
son capaces de procesar datos de 8 bits ms eficientemente que los datos de 16 bits. Los tamaos ms grandes
debern usarse solamente cuando se requiera, como cuando ejecutamos una multiplicacin de 2 datos de 8
bits sabemos de antemano que el resultado ser 16 bits; en este caso la variable que utilicemos deber ser de
16 bits que pueda soportar y guardar el contenido.
De esta manera los tipos de datos de doble precisin y de punto flotante son particularmente ineficientes y
debern ser EVITADOS! Adems, la mayora de las aplicaciones que se desarrollan para microcontroladores
se basan en datos con punto fijo!

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 223

Existen tres reglas bsicas para poder seleccionar el tipo de datos en microcontroladores de 8 y 16 bits.
1. Utilizar siempre el tipo ms pequeo.
2. Utilizar unsigned donde sea posible.
3. Manejar casts dentro de las expresiones para reducir los tipos de datos al minimo requerido.

Podemos agregar a estas tres reglas bsicas la de utilizar typedefs para tener valores fijos, y evitar los tipos
basicos como son char, int, long en el cdigo de aplicacion.

Ejemplo

Cambiar los tipos de datos bsicos utilizando un typedef para tener nuevos tipos de datos que sean ms fciles
de entender para el programador de microcontroladores.

typedef unsigned char byte;


typedef unsigned int word;
typedef unsigned long uint_32;

ast. Como acabamos de mencionar, dentro de las tres reglas bsicas hay que utilizar casts para reducir los
tipos de datos al mnimo.

Ejemplo

Cuando se realiza una multiplicacin de dos datos de 8 bits el resultado ser 16 bits, por lo que la variable
del resultado de la multiplicacin ser de 16 bits; sin embargo, para poder manipular el dato requerimos
aplicar un cast y dejarlo en 8 bits.

char multiplica (char x, char y){

char resultadobajo, resultadoalto; /* Variable Local */


int resultado;

resultado = x * y;
resultadobajo=(char)resultado; /*Cast para convertir a CHAR de INT*/
resultadoalto=(char)(resultado>>8);

return resultadobajo;
}

En caso de utilizar varios archivos, que es una prctica comn en el lenguaje C, las variables globales
o las funciones que sean declaradas en un archivo pueden ser accesadas solamente por las funciones que
estn en el mismo archivo; en caso de ser necesario que una funcin o variable global que se encuentre en
otro archivo requiera la funcin o de la variable tendr que informrsele al compilador utilizando la palabra
reservada EXTERN.

ALFAOMEGA - FREESCALE
224 JUAN CARLOS VESGA FERREIRA

Ejemplo

En el archivo 1. Se encuentra el programa visto en el ejemplo pasado.


En el archivo 2. Se encuentra la funcin resta, la cual utiliza la variable resultado.

extern char resultado;


/*Variable global declarada en otro archivo slo se agrega extern para indicarle al compilador que tiene que
buscar la declaracin en otro archivo. */

/* Cdigo de la Funcin SUMA */


char resta (char x){

char total; /* Variable Local */

total = x - resultado;

return total; /* Aqui se pasa el parmetro del resultado de la suma*/


}

Lugares de almacenamiento de las variables


Existen algunos otros modificadores para indicarle al compilador dnde se van a almacenar las variables y
cmo se inicializan. Estos modificadores son:

Auto.
Static.
Register.
Const.
Volatile.

Las variables locales definidas dentro de una funcin utilizan el modificador AUTO, el cual no se requiere
agregarlo; una variable local automtica puede ser utilizada dentro del bloque de la funcin y su valor nunca
es inicializado cuando es creada; por lo general estas variables son almacenadas en el espacio del stack pointer,
de manera que el espacio requerido por la variable es creado en el momento en que se llama a la funcin y
es eliminado cuando se sale o termina.
Como vimos en los ejemplos anteriores, una variable puede ser inicializada en el momento en que es
declarada asignando un valor a la variable:

char x=0x55, x1=0x33; /* Esta variable es AUTO */


Una variable creada con el modificador auto cada vez que se accese a la funcin ser inicializada con el valor
que se puso en la declaracin, si no se pone ningn valor esta variable va a tomar un dato totalmente aleatorio.
Algunas veces se requiere que el valor que se asign a la variable local se mantenga para futuros llamados
de la funcin. Esto se logra agregando el modificador STATIC. Una variable creada con el modificador
STATIC puede ser utilizada solamente dentro de la funcin en la cual se declar, y son inicializadas a cero
en el momento de su creacin.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 225

Ejemplo

Una variable es declarada como sigue, dentro de una funcin:

static char zeta = 1;


Hay que hacer notar que las variables STATIC no se almacenan en el STACK aunque sean locales; en vez
de eso se guardan en una localidad de memoria separada. Como la variable zeta es STATIC, es inicializada a
cero cuando el programa es cargado, pero la primera vez que se accesa a la funcin el valor 1 es asignado a
zeta despus de este primer acceso la variable NO SER INICIALIZADA nuevamente y en cambio mantendr
el valor asignado la litma vez que fue ejecutada la funcin.

Antes de entrar en MyFunction ( ) la Esto es parte de ANSI C


primera 1era. vez, myVar = 0 startup copy down

FILE1.c FILE2.c

#include <FILE2.h> void MyFunction (void)


//includes functions in file FILE2.c {
//Definition of MyFunction in FILE2.C
void main (void)
{ static char myVar = 0;
MyFunction(); //included in FILE2.c //local variable declared static

MyFunction(); //included in FILE2.c myVar = myVar + 1;


} }

Antes de entrar en
MyFunction() la segunda myVar es una variable local pero
vez mantiene el valor porque est
declarada como static.
myVar = 1

Otro tipo de modificador para el lugar de almacenamiento es el REGISTER, cuando una variable es
declarada para ser de tipo REGISTER el compilador intentar almacenarla en un registro disponible del CPU.
Estas variables pueden ser accesadas de forma ms rpida que las variables almacenadas en memoria, de
manera que este tipo de almacenamieto puede ser para las variables que se utilicen en ciclos que requieran
rapidez. Es claro que el espacio de registro en los CPU est muy limitado, especialmente en microcontroladores
pequeos y por eso no siempre los registros del microcontrolador estarn disponibles para almacenamiento
de datos. Cuando el compilador sepa que no hay registros disponibles para el almacenamiento de datos,
har a la variable de tipo AUTO.

ALFAOMEGA - FREESCALE
226 JUAN CARLOS VESGA FERREIRA

En el caso de las variables globales stas siempre son inicializadas a cero cuando el programa es cargado.
Estas variables, como ya se mencion en la seccin pasada, pueden accesar por cualquier funcin del
programa, de manera que las variables globales se comportan como si fueran STATIC en el aspecto en que
son inicializadas a cero y despus se les puede asignar un valor cuando son creadas.
El modificador CONST se utiliza para poder crear constantes, cuando se utiliza el modificador CONST
en la declaracin de una variable se requiere que se agregue un valor de inicializacin; este valor no puede
ser cambiado por el programa por ser de una constante; un ejemplo de una declaracion sera:

const double PI = 3.14159265;


Una variable declarada como VOLATILE puede ser cambiada fuera del flujo normal del programa, es decir,
puede cambiar y no necesariamente por el programa; en los sistemas embebidos esto puede suceder por:

1. Una rutina de servicio de interrupcin. Esto se ver ms adelante en este mismo captulo.
2. Consecuencia de una accin del hardware.
Por esta ltima razn se considera como una buena prctica declarar todos los registros de los perifricos
como VOLATILE; ejemplo:

volatile unsigned char PTAD @0x0000


volatile PTADSTR _PTAD @0x0000

Ahora bien, puede existir una variable con modificador CONST y VOLATILE; esto se debe a que existen
registros dentro de los microcontroladores que son de slo lectura y que cambian por el hardware del
microcontrolador; el ejemplo que puede ser ms obvio es el registro de estatus de un puerto de comunicaciones
seriales como el SCS1. Este registro tiene varias banderas para acondicionar las seales de comunicacin, como
son la bandera de transmisin completa (SCS1_TC) y la bandera de buffer vaco de transmisin (SCS1_TE),
entre otras. Este registro se considera entonces como VOLATILE porque las banderas pueden cambiar por
HARDWARE en forma inesperada, dependiendo del estatus de la comunicacin, y tambien es de slo lectura
porque estas banderas no pueden ser escritas por programa, solamente responden al estado del mdulo.
Entonces la mejor declaracion para este tipo de registro es:

const volatile unsigned char SCS1 @0x0016

Secuencias de escape
Ciertos caracteres no son representados grficamente y se pueden representar mediante lo que se conoce
como secuencia de escape.
A continuacin vemos una tabla de las ms significativas:

\n salto de lnea
\b retroceso
\t tabulacin horizontal
\v tabulacin vertical
\\ contrabarra

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 227

\f salto de pgina
\ apstrofe
\ comillas dobles
\0 fin de una cadena de caracteres

Inclusin de ficheros
Como ya hemos mencionado, en la programacin en C es posible utilizar funciones que no estn incluidas en
el propio programa. Para ello utilizamos la directiva #include, que nos permite aadir libreras o funciones
que se encuentran en otros ficheros a nuestro programa.
Para indicar al compilador que vamos a incluir ficheros externos, podemos hacerlo de dos maneras (siempre
antes de las declaraciones).

1. Indicndole al compilador la ruta donde se encuentra el fichero.


#include misfunc.h
#include c:\includes\misfunc.h
2. Indicando que se encuentran en el directorio por defecto del
compilador.
#include <misfunc.h>

13.5 PROGRAMA PRINCIPAL

El programa principal es el encargado de organizar y recopilar de manera secuencial la ejecin del programa;
en l se encuentran las instrucciones y llamadas a funciones que se han programado previamente. La seccin
correspondiente al programa principal se identifica con la estructura main ().
El programa principal para el clculo del volumen de una esfera puede ser el siguiente:

void main(void)
{
..............
aqu se escribe la estructura secuencial del programa deseado
..............
}

ALFAOMEGA - FREESCALE
228 JUAN CARLOS VESGA FERREIRA

NOTA
Se debe tener en cuenta que cuando se escribe un programa en C, es
importante el uso de tabulaciones o sangras con el fin de comprender
mucho ms fcil a nivel de observacin la estructura de un programa,
visualizando qu partes pertenecen a una estructura en particular y cules
no.

13.6 OPERADORES

Un operador es un smbolo que representa una operacin especial, la cual puede ser de diferentes clases; los
tipos de operadores que existen son:

aritmticos
de relacin y lgicos
de incremento y decremento
para manejo de bits
de asignacin y expresiones
expresiones condicionales
A continuacin se describe en detalle cada una de las clases de operadores y su forma de
implementacin.

Operadores aritmticos
Los operadores aritmticos son aquellos que permiten realizar las funciones bsicas matemticas; estos
operadores son los siguientes:

+ Suma de dos operandos


- Resta entre dos operandos
* Multiplicacin de dos operandos
/ Divisin entre dos operandos
% Mdulo entre dos operandos. Da el residuo de la divisin
resultante entre el operando1 (numerador) y el operando2
(denominador).

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 229

La sintaxis es:

Resultado = operando1 operador operando2

Ejemplos:

Suma = Cantidad1 + Cantidad 2


Resta = Cantidad1 - Cantidad 2

Operadores de relacin y lgicos


Los operadores de relacin son aquellos que permiten realizar comparaciones entre dos cantidades, entregando
como resultado una cantidad de tipo booleano (Verdadero o Falso); stos operadores juegan un papel muy
importante en el mundo de la programacin de microcontroladores. Los tipos de operadores de relacin y
lgicos son los siguientes:
Operadores de relacin

> Mayor que


>= Mayor o igual
< Menor que
<= Menor o igual
== Idntico
!= Diferente a

Operadores lgicos

&& Y Funcin lgica AND


|| Funcin lgica OR
! NO Funcin lgica NOT

NOTA
Como se mencion antes, el resultado del uso de estos operadores puede ser
falso o verdadero. Si el resultado de la operacin es falso se representar
con un valor cero; de lo contrario, si el valor fue verdadero tomar como
valor cualquier cantidad diferente de cero.

ALFAOMEGA - FREESCALE
230 JUAN CARLOS VESGA FERREIRA

La sintaxis es:

Si se trata de un Operador de Relacin


Condicional operando1 operador operando2
If (Cantidad1 >= Cantidad2)
Si se trata de un Operador Lgico

A nivel condicional
Condicional Condicin1 operador Condicin2
If ((Cantidad1 >= Cantidad2) && (Cantidad2 >= Cantidad3))

A nivel operativo
Resultado = Cantidad1 operador Cantidad2
Resultado = Cantidad1 & Cantidad2

Hay que tener en cuenta que cuando se desea realizar una operacin no condicional, el smbolo del operador
respectivo se coloca slo una vez, de lo contrario se debe colocar dos veces.

Operadores de incremento y decremento


Entre los operadores ms utilizados en programacin se encuentran los operadores de incremento y
decremento, los cuales aumentan o disminuyen en una unidad al operando o variable que se est afectando,
respectivamente. A continuacin se ilustran algunos ejemplos de estos operadores.

Operador Sentencia Abreviada Sentencia no Abreviada


= = =
++ m++ m=m+1
-- m-- m=m-1
+= m+=n m=m+n
-= m-=n m=m-n
*= m*=n m=m*n
/= m/=n m=m/n

Los operadores ++ y pueden ir antes o despus de una expresin generando resultados diferentes; estas
expresiones se llaman pre-incrementos o post-incrementos.

Ejemplos

int x=1,y;
y=x++; /* y vale 1 y x vale 2 */

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 231

int x=1,y;
y=++x; /* y vale 2 y x vale 2 */

Operadores para manejo de bits


Dentro de los operadores que ms uso tienen en el mundo de la programacin de microcontroladores se
encuentran los que permiten manipular bits; gracias a stos se puede extraer informacin importante que
est presente, por ejemplo, en un puerto en un momento dado. Dentro de los operadores que permiten la
manipulacin de bits podemos mencionar:

& AND de bits. Ejemplo: 0x0F & 0x2A => 0x0A


| OR inclusivo de bits. Ejemplo: 0X0F | 0XF0 => 0xFF
^ OR exlusivo de bits. Ejemplo: 0xF0 ^ 0x02 => 0xF2
<< corrimiento a la izquierda. Ejemplo: 0x02 << 1 => 0x04
>> corrimiento a la derecha. Ejemplo: 0x08 >> 2 => 0x02
~ complemento a uno (unario). Ejemplo: ~0x0F => 0XF0

Operadores de asignacin y expresiones


El operador de asignacin =, permite el almacenamiento o resultado de una operacin en una variable
especfica.

Ejemplos

x = 3 + 4; /* x=7 */
x = 4; /* x=4 */
x = x + 4; /* x=x + 4 */
x += 4; /* x=x + 4*/

13.7 SENTENCIAS DE CONTROL


Dentro de las estructuras que brindan una gran ventaja a la hora de realizar funciones que desde el punto de
vista de Assembler seran demasiado largas y complejas, se encuentran las sentencias de control. El tener que
escribir rutinas de tipo repetitivo o condicional muchas veces puede resultar complejo y confuso; sin embargo,
escribir las mismas rutinas utilizando C resulta bastante fcil, corto y estable en el momento de su ejecucin.
En esta ocasin se debe tener en cuenta que a la hora de escribir rutinas de este tipo, el uso de las llaves
{, } se requiere para agrupar declaraciones y proposiciones dentro de un bloque. Las sentencias de control
son las siguientes:
if-else, else-if, switch, while, for, do-while.

ALFAOMEGA - FREESCALE
232 JUAN CARLOS VESGA FERREIRA

if-else
La proposicin if-else es la sentencia de control ms bsica que se puede utilizar; se requiere cuando es necesario
el uso de condicionales dentro de una estructura de programacin. Su sintaxis es:

if(expresin) /* Si la condicin es verdadera */


proposicin1; /* Se ejecuta la proposicin1 */
else /* De lo contrario */
proposicin2; /* Se ejecuta la proposicin2 */

Si la condicin no requiere una accin, en caso de no cumplirse la condicin se puede escribir de la


siguiente manera:

if(expresin) /* Si la condicin es verdadera */


proposicin1; /* Se ejecuta la proposicin1 */

Para los casos anteriores, tanto la proposicin1 como la proposicin2 estn constituidas por una sola
instruccin; en caso de requerirse el uso de dos o ms instrucciones dentro de un condicional, es necesario
agruparlas entre llaves; en tal caso, tanto la proposicin1 como la proposicin2 pueden ser proposiciones
compuestas o bloques. Por ejemplo:

If ( a>b )
{
mayor=a;
menor=b; /* Bloque correspondiente a Proposicin 1 */
}
else
{
mayor=b;
menor=a; /* Bloque correspondiente a Proposicin 2 */
}

else-if

Esta sentencia es complementaria con la sentencia anterior; conocida como sentencia if anidada, se utiliza
cuando solamente una de varias condiciones es vlida. Su sintaxis es:
if( expresin )
proposicin1;
else if( expresin )
proposicin2;

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 233

else if( expresin )


proposicin3;
else if( expresin )
proposicin4;
else
proposicin5;

Ejemplo:

if ( a>b ) && ( b>c )


{
mayor=a;
menor=c; /* Bloque correspondiente a Proposicin 1 */
}
else if ( a>b ) && ( c>b )
{
mayor=a;
menor=c; /* Bloque correspondiente a Proposicin 2 */
}
else if ( b>a ) && ( a>c )
{
mayor=b;
menor=c; /* Bloque correspondiente a Proposicin 3 */
}
..............
.
else
{
mayor=c;
menor=b; /* Bloque correspondiente a ltima Proposicin */
}

switch
Cuando se requiere establecer situaciones semejantes a las de un men, en donde solamente una de varias
opciones debe ejecutarse, la proposicin switch es la ideal; sta permite la decisin mltiple que prueba si una
expresin coincide con uno de los valores constantes enteros que se hayan definido previamente.

ALFAOMEGA - FREESCALE
234 JUAN CARLOS VESGA FERREIRA

Su sintaxis es:
switch( expresin )
{
case exp-const: proposiciones
break;
case exp-const: proposiciones
break;

case exp-const:
case exp-const: proposiciones
break;

default: proposiciones
}

exp-const corresponde a cada una de las opciones presentes en el abanico de posibilidades a ejecutar, y en
el momento de encontrar una constante idntica se ejecutan las proposiciones correspondientes a ese caso. Al
terminar de realizar las proposiciones de un caso en particular y se desea indicar el final de la misma, para
salir de la sentencia switch se debe usar la palabra reservada break finalizando la sentencia.
Si en ninguno de los casos se cumple con la expresin, se puede definir un caso por omisin, que permita
realizar operaciones requeridas segn la ocasin; para tales efectos se debe utilizar la opcin default.

Ejemplo

switch ( operacion ) /* Operacin contiene el valor de la funcin a utilizar


{
case 1: /* Operacion=1 , SUMAR */
{
resultado=a+b;
break;
}
case 2: /* Operacion=1 , RESTAR */
{
resultado=a-b;
break;
}
case 3: /* Operacion=1 , MULTIPLICAR */
{
resultado=a*b;
break;
}
default: /* Operacion=1 , DIVIDIR */

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 235

{
resultado=a/b;
break;
}
}

Se debe recordar que para los casos en donde las proposiciones estn constituidas por una sola instruccin,
no se usan llaves de agrupacin; en caso de requerirse el uso de dos o ms instrucciones dentro de un
condicional, es necesario agruparlas entre llaves.

while
Cuando se desea escribir rutinas repetitivas, se pueden utilizar las sentencias while o for; sin embargo, existe
una gran diferencia entre las dos. Cuando se sabe cuntas veces se debe repetir una rutina o proposicin se
pueden utilizar las sentencias for o while, en caso de no saber cuntas veces se debe repetir la proposicin,
se debe utilizar while; este ltimo permite la ejecucin de una proposicin simple o compuesta, mientras la
condicin sea verdadera. Su sintaxis es:
while( condicin )
proposicin

Por ejemplo,
While (Npersonas<20)
{
s=a+b;
Npersonas++;
}

for
La sentencia for permite la ejecucin de rutinas repetitivas, que como se mencion antes, es recomendable
cuando se conoce el nmero de veces que se desea repetir una determinada proposicin o subrutina. La
sentencia for requiere tres expresiones como argumento. La expresin 1 corresponde al punto inicial de la
variable de control, la expresin 2 corresponde a un condicional o delimitador de cul es el valor mximo
que debe alcanzar la variable de control para mantener la iteracin, y finalmente la expresin 3 corresponde
al incremento que debe sufrir la variable de control cada vez que realice una iteracin, en donde el valor por
defecto de sta ltima expresin es 1.
La sintaxis es:

for(expresin1; expresin2; expresin3)


proposicin

Ejemplo

La siguiente rutina calcula el valor de la suma de los nmeros de 1 a 10.

ALFAOMEGA - FREESCALE
236 JUAN CARLOS VESGA FERREIRA

for(i=1; i =10 ; i++) /* i inicia con el valor de 1 hasta 10 */


{ /* incrementos de 1 en 1 */
suma=suma + i;
}

do-while
Otra sentencia utilizada en rutinas repetitivas es do-while; sta es muy similar a la sentencia while,
ejecutando la proposicin o subrutina mientras se cumpla la condicin dada en expresin.
La principal diferencia entre las dos sentencias radica en que en do-while siempre se evala al menos
una vez su proposicin, mientras que en while si no se cumple la expresin no entra al ciclo.
Sintaxis:

do
proposicin
while( expresin );

Ejemplo

Calcular la suma de los nmeros de 1 a 10.

suma=0;
i=1;
do
{
suma=suma+i;
i++;
}
while( i <= 10 );

break y continue
Cuando se desea abandonar una rutina cclica en forma abrupta debido a alguna situacin en particular, se
debe usar la proposicin break; sta se utiliza en sentencias repetitivas como for, while y do-while.
Existe una instruccin que permite realizar la funcin contraria o complementaria llamada continue, en
donde su funcin es ocasionar la prxima iteracin del ciclo.

Ejemplos

Este programa permite imprimir todos los nmeros de 1 a 10 que no sean mltiplos de 3.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 237

for(i=1; i=10; i++)


{
if ( i%3 == 0 ) /* si i es mltiplo de 3 */
{
continue; /* salta hacia el siguiente valor de i */
}
cout << i /* si i no es mltiplo de 3, imprime i */
}

Este programa imprime todos los nmeros de 1 a 10; en caso de encontrarse un mltiplo de 3, el programa
finalizar abruptamente.

for(i=1; i=10; i++)


{
if ( i%3 == 0 ) /* si i es mltiplo de 3 */
{
break; /* finaliza la sentencia for */
}
cout << i /* si i no es mltiplo de 3, imprime i */
}

13.8 ARREGLOS O VECTORES

Un arreglo se define como un conjunto de localidades de memoria consecutivas, es decir, podemos definirlo
como un conjunto de variables. Un arreglo se declara igual que una variable pero despus del nombre se
utiliza un par de corchetes [ ] para indicar la cantidad de elementos que contendr el arreglo, como se
muestra a continuacin:
Sintaxis:

tipo nombre_variable[cantidad]={valores_de_inicializacin};

Arreglo Char Var1 Char Var2 Char Var3

Der. de memoria 3A00H 3A01H 3A02H

FIGURA 13.2
Asignacin de un arreglo.

ALFAOMEGA - FREESCALE
238 JUAN CARLOS VESGA FERREIRA

Ejemplos

extern int a[];


char xy[100]={0x20, 0x30,0x40};
float temperatura[1000];
char cadena[]={HOLA, MUNDO};

Como podemos ver, el tamao de un arreglo puede ser asignado despus, y se puede utilizar corchetes
vacos en el momento de la declaracin. En el primer ejemplo el arreglo a[ ] es definido como memoria global,
en un archivo externo. El argumento de un arreglo se llama a veces ndice. Este nmero permite seleccionar
uno de los elementos del arreglo. Los elementos de un arreglo siempre comienzan con cero. De manera que
cuando un arreglo es creado con 100 elementos, estos elementos pueden ser accesados utilizando el ndice
varindolo desde 0 hasta 99. El elemento correspondiente al ndice 100 no es parte del arreglo.
Los valores de inicializacin deben estar dentro de llaves, y si son varios los valores numricos, estos
debern estar separados por comas como aparece en el segundo ejemplo.

Cadenas
Una cadena es un caso especial de arreglo. Cuando se genera una cadena en C, se crea un arreglo de caracteres.
La longitud de una cadena es de uno ms que cualquier otro tipo de arreglo. Los caracteres individuales
de la cadena se guardan en cada uno de los lugares de los elementos del arreglo. Para ser considerado una
cadena en C, el arreglo debe contener en su ltimo carcter un CERO o un carcter NULO. Todas las cadenas
en C terminan con un carcter NUL (null). Si el programador crea una cadena de caracteres en su programa
debe asignar el carcter nulo para garantizar que C lo trate como una cadena de caracteres. El lenguaje C no
provee ningn tipo de chequeo de lmites; es, por tanto, responsabilidad del programador garantizar que el
ndice del arreglo no sobrepasa los lmites del mismo.
Un ejemplo de cadena es:

char mensaje[ ]={LA HORA EXACTA ES:};


char texto[6]={PAGO:};

13.9 FUNCIONES

Las funciones son conjuntos de instrucciones organizadas a nivel de procedimientos o subrutinas que realizan
tareas especficas.
Un ejemplo claro de una funcin es el siguiente: se desea escribir una funcin que lea dos nmeros y
devuelva el mayor.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 239

#include<iostream.h>

int Comparar (int a, int b) /* esta es la forma de definir una funcin*/


{
int mayor;

if (a>b)
{
mayor=a;
}
else
{
mayor=b;
}
return mayor;
}

void main (void)


{
............

resultado=Comparar(num1,num2) /* esta es la forma de utilizarla


en la cual num1 y num2 son 2 cantidades prestablecidas y al ser
comparadas en la funcin, el valor mayor quedar almacenado
en la variable resultado. */
}

Conforme aumenta el cdigo de una aplicacin se puede encontrar que existen algunos segmentos de
cdigo que se repiten en diferentes partes de la aplicacin. Estos segmentos de cdigo pueden ser agrupados
con la finalidad de que la aplicacin pueda reutilizarlos en cualquier parte del programa que lo requiera. A
estos segmentos de cdigo se les conoce como funciones. La sintaxis de una funcin es la siguiente:

< Tipo > < Nombre de la Funcin > ( Argumentos de la funcin )


{
Sentencia1;
Sentencia2;
SentenciaN;
}

El tipo de la funcin es determinado por el tipo de dato que retorna dicha funcin. Las funciones pueden
retornar cualquier tipo de dato definido dentro de la aplicacin o pueden no retornar ningn tipo de dato.

ALFAOMEGA - FREESCALE
240 JUAN CARLOS VESGA FERREIRA

Las funciones que no regresan ningn valor se conocen como funciones de tipo vaco (void). Si se quiere que
la funcin retorne un determinado tipo de dato, el tipo de dato requerido debe ser especificado en el campo
Tipo.
El nombre de la funcin puede ser formado por nmeros y letras de 1 a 32 caracteres. El nombre de la
funcin no puede empezar con un nmero o con un signo. El nico signo aceptado dentro del nombre de
una funcin es el guin bajo _.
Independientemente del tipo de dato que retorna la funcin, la funcin puede o no recibir argumentos.
Los argumentos de una funcin se conocen tambin como paso de parmetros. Los argumentos recibidos
por una funcin pueden ser de cualquier tipo de dato definido dentro de la aplicacin.
A continuacin se muestra la sintaxis de una funcin de tipo vaco (void) que no recibe ningn tipo de
parmetro.

void Funcion1(void)
{
Sentencia1;
Sentencia2;
SentenciaN;
}

Ejemplo 1

Se utiliza una funcin llamada Suma que realiza la adicin de las variables globales VarA y VarB,
almacenando el resultado de la suma en la variable global llamada Resultado. En este ejemplo las 3 variables
son declaradas como globales debido a que estn declaradas fuera de cualquier funcin. Si dichas variables
son declaradas dentro de la funcin main, sern interpretadas como variables locales debido a que estn
declaradas dentro de una funcin. En este caso el compilador generara un error dentro de la funcin suma
debido a que dichas variables slo pueden ser utilizadas por la funcin que las declar. El ejemplo almacena
en VarA un valor 15 decimal y en VarB un valor 20 decimal y posteriormente ejecuta la funcin Suma.
Despus de que se ejecuta la funcin Suma, la variable Resultado es 35.

unsigned char VarA;


unsigned char VarB;
unsigned int Resultado;

void Suma(void)
{
Resultado = VarA + VarB;
}

void main(void)
{
VarA = 15;

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 241

VarB = 20;

Suma();
For(;;);
}

Una funcin puede recibir uno o ms parmetros, los cuales pueden ser de un tipo de dato diferente, por
lo que cada argumento debe ser declarado en forma independiente. Si una funcin recibe ms de 1 parmetro,
la declaracin de cada parmetro debe ser separada por una coma ,. El o los parmetros que recibe una
funcin son interpretados como variables locales, lo que quiere decir que dichos parmetros slo existirn
dentro de la funcin que los declara. A continuacin se muestra la sintaxis de una funcin de tipo void que
recibe 2 argumentos.

void Funtion1(<Tipo de dato> < Variable1>, <Tipo de dato> < Variable2>)


{
Sentencia1;
Sentencia2;
SentenciaN;
}

Ejemplo 2
Se utiliza una funcin llamada Suma que recibe 2 parmetros. Los parmetros son VarA y VarB, los cuales
son variables de tipo unsigned char. En este ejemplo VarA y VarB son declarados cuando la funcin Suma
es ejecutada y ambos parmetros dejarn de existir cuando la funcin Suma termine. En este ejemplo, los
valores 15 decimal y 20 decimal son cargados en VarA y VarB respectivamente, cuando la funcin Suma
es llamada. El resultado de la suma de VarA y VarB es guardado en la variable global llamada Resultado,
la cual ser igual a 35 despus de que la funcin Suma termine.

unsigned int Resultado;

void Suma(unsigned char VarA, unsigned char VarB)


{
Resultado = VarA + VarB;
}

void main(void)
{
Suma(15, 20);

For(;;);
}

ALFAOMEGA - FREESCALE
242 JUAN CARLOS VESGA FERREIRA

Como se mencion antes, una funcin puede retornar o no algn valor independientemente de si la funcin
recibe parmetros. El tipo de dato que retorna la funcin se especifica desde el momento en que la funcin
es declarada. Para que la funcin pueda retornar un valor, debe ser utilizada la palabra reservada return
seguida del valor de retorno encerrado entre parntesis. Una vez que la instruccin return es ejecutada, la
funcin ser terminada. La instruccin return es siempre la ltima sentencia que es ejecutada dentro de la
funcin.
Cuando una funcin retorna un valor, dicho valor debe ser asignado a una variable del mismo tipo del
valor de retorno. Dicha asignacin debe realizarse en el momento de la llamada a la funcin.

Ejemplo 3
Se utiliza una funcin llamada Suma que recibe 2 parmetros, VarA y VarB. En este ejemplo los valores
15 decimal y 20 decimal son cargados en VarA y VarB, respectivamente, cuando la funcin Suma es
llamada. El resultado de la suma de VarA y VarB es almacenado en una variable local llamada Temporal
y posteriormente dicha variable es retornada por la funcin Suma utilizando la instruccin return. Una
vez que la funcin Suma es ejecutada, el valor de retorno es asignado a la variable llamada Resultado, en
este caso el valor de retorno es 35 decimal. Es importante mencionar que en el ejemplo no se utiliza ninguna
variable global, puesto que las entradas que utiliza la funcin son pasadas por medio de parmetros y el
resultado de la funcin es pasado a travs del valor de retorno.

unsigned int Suma(unsigned char VarA, unsigned char VarB)


{
unsigned int Temporal;
Temporal = VarA + VarB;
return(Temporal);
}
void main(void)
{
unsigned int Resultado;
Resultado = Suma(15, 20);
For(;;);
}

En el ejemplo anterior el resultado de la suma es almacenado en una variable local y posteriormente


dicha variable es pasada como valor de retorno usando la instruccin return. Dentro de los parntesis de
la instruccin return pueden realizarse directamente operaciones con variables y el resultado de dichas
operaciones ser retornado sin necesidad de ser almacenado previamente en una variable local.
El siguiente ejemplo realiza la suma de VarA y VarB directamente sobre la instruccin return. Este ejemplo
obtiene los mismos resultados que el ejemplo anterior, pero evita que la variable local llamada Temporal tenga
que ser declarada y que el resultado de la suma tenga que ser previamente asignado a dicha variable.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 243

unsigned int Suma(unsigned char VarA, unsigned char VarB)


{
return(VarA + VarB);
}
void main(void)
{
unsigned int Resultado;
Resultado = Suma(15, 20);
For(;;);
}

13.10 INTERRUPCIONES

Como se mencion anteriormente, un microcontrolador es un sistema que est constituido por 3 partes
fundamentales, el procesador (CPU), las memorias (RAM, Flash) y los perifricos. Hasta el momento el uso de
los perifricos ha sido de manera sncrona puesto que se conocen la o las lneas especficas de cdigo donde
el procesador hace mencin a algn perifrico ya sea para manipularlo o slo para conocer el estado en que
se encuentra dicho perifrico, como se muestra en el ejercicio del captulo 2.
Los perifricos son una parte esencial en el uso de microcontroladores debido a que son stos los que
permiten interactuar al procesador con el mundo real. Debido a que en el mundo real existen eventos que no
pueden ser predecibles puesto que pueden darse en cualquier momento, es necesario contar con un recurso
que le permita al procesador detectar esta clase de eventos. Esta clase de eventos se conocen tambin como
eventos asncronos.
Las interrupciones son un recurso que permite al procesador establecer un dilogo con los distintos
perifricos para poder detectar cualquier tipo de evento ya sea sncrono o asncrono. El principal objetivo de
una interrupcin ser entonces procesar eventos asncronos.
El ejemplo ms simple de un evento asncrono puede ser el de detectar que el usuario ha presionado un
botn, como se pudo ver en el ejercicio del captulo 2. Aunque este tipo de evento es asncrono, se podra
detectar sin el uso de interrupciones debido a que la velocidad en que un microcontrolador puede verificar si
determinado botn fue presionado es mucho mayor que la velocidad a la que un ser humano puede presionar y
liberar el botn. Para este caso, leer el estado del puerto (poleo) en determinada parte del cdigo sera suficiente
para detectar cundo el usuario est presionando algn botn. Pero las cosas se complican cuando se quiere
detectar eventos asncronos de gran velocidad. En este caso se vuelve prcticamente imposible detectar el
evento ejecutando una instruccin de lectura de un puerto, puesto que por cada instruccin ejecutada por el
procesador tendra que haber una instruccin para detectar el estado del puerto y as asegurar que todos los
eventos estn siendo contabilizados por el procesador.
Debido a que un evento asncrono puede generarse en cualquier momento, el procesador debe ser capaz de
detectar este tipo de eventos en cualquier momento sin importar la tarea o instruccin que est ejecutando en
ese momento. Las interrupciones pueden ser configuradas para permitir que un evento genere una interrupcin
en el flujo normal del programa obligando al procesador a suspender temporalmente su ejecucin para atender
al evento que gener dicha interrupcin.

ALFAOMEGA - FREESCALE
244 JUAN CARLOS VESGA FERREIRA

Para lograr que un evento genere una interrupcin debe tener asociada una seccin de cdigo, la cual el
procesador ejecutar cuando dicho evento se genere; esta seccin de cdigo se conoce como rutina de servicio
de interrupcin (ISR).
Una rutina de servicio de interrupcin es esencialmente una funcin con la diferencia de que dicha funcin
no necesita ser llamada dentro del flujo normal del programa, puesto que es ejecutada por un circuito de
hardware cuando el evento apropiado se genera.
Al igual que las llamadas a funcin, las rutinas de servicio de interrupcin modifican el flujo normal del
programa, por lo que el contexto actual debe ser almacenado cuando la rutina de servicio es ejecutada. De
igual manera, cuando la rutina de servicio de interrupcin termina, el contexto necesita ser recuperado para
permitir que el programa contine con las tareas que estaba ejecutando justo antes de que se generara la
interrupcin.
La siguiente figura ejemplifica cmo puede ser ejecutada una rutina de servicio de interrupcin sin importar
qu parte del programa principal est ejecutando el procesador.

Normas
Ejecucin SUBRUTINA DE
SERVICIO

Interrupcin RTI
PROGRAMA (Hardware) Regreso por
PRINCIPAL software
Normal
Ejecucin

FIGURA 13.3

La mayora de los microcontroladores tienen diferentes tipos de interrupciones, como interrupciones


externas, interrupciones de tiempo real, interrupciones peridicas, interrupciones de puerto, etc. Todas y
cada una de las interrupciones de un microcontrolador pueden ser configuradas y habilitadas en forma
independiente. Esto significa que por cada interrupcin habilitada debe existir una rutina de servicio de
interrupcin. Debido a que se pueden tener varias interrupciones habilitadas al mismo tiempo, es necesario que
el procesador sepa qu rutina de servicio de interrupcin necesita ejecutar cuando se genera una interrupcin.
La forma en que se liga un determinado tipo de interrupcin con una rutina de servicio es a travs de una
tabla de vectores. Un vector de interrupcin es una localidad dentro de la memoria de programa que se
utiliza para almacenar la direccin donde se encuentra la rutina de servicio que es ejecutada cuando dicha
interrupcin sea generada. Cada tipo de interrupcin tiene asignado un vector.
A continuacin se muestra la tabla de vectores de interrupcin de un microcontrolador de la familia
MC9S08GX.

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 245

Vector Vector
Priority Number Address (High/Low) Vector Name Module Source Enable Description

Lower 26 $FFC0/FFC1 Unused Vector Space


thorough through (available for user program)
31 $FFCA/FFCB
25 $FFCC/FFCD Vrti System control RTIF RTIE Real-time interrupt
24 $FFCE/FFCF Viic1 IIC IICIS IICIE IIC control
23 $FFC0/FFC1 Vatd1 ATD COCO AIEN AD conversion
complete
22 $FFC2/FFD3 Vkeyboard1 KBI KBF KBIE Keyboard pins
21 $FFD4/FFD5 Vsci2tx SCI2 TDRE TC TIE TCIE SCI2 transmit
20 $FFD6/FFD7 Vsci2rx SCI2 IDLE RDRF ILIE SCI2 receive
RIE
OR ORIE
NF NFIE
19 $FFD8/FFD9 Vsci2en SCI2 FE FEIE SCI2 error
PF PFIE
18 $FFDA/FFDB Vsci1tx SCI1 TDRE TIE SCI1 transmit
TC TCIE
17 $FFDC/FFDD Vsci1rx SCI1 IDLE ILIE SCI1 receive
RDRF RIE
16 $FFDE/FFDF Vsci1err SCI1 OR ORIE SCI1 error
NF NFIE
FE FEIE
PF PFIE
15 $FFD0/FFE1 VsPI1 SPI SPIF SPIE SPI
MODF SPIE
SPTEF SPTIE
14 $FFD2/FFE3 Vtpm2ovf TPM2 TOF TOIE TPM2 overlow
13 $FFE4/FFE5 V1pm2ch4 TPM2 CH4F CH4IE TPM2 channel 4
12 $FFE6/FFE7 V1pm2ch3 TPM2 CH3F CH3IE TPM2 channel 3
11 $FFE8/FFE9 V1pm2ch2 TPM2 CH2F CH2IE TPM2 channel 2
10 $FFEA/FFEB V1pm2ch1 TPM2 CH1F CH1IE TPM2 channel 1
9 $FFEC/FFED V1pm2ch0 TPM2 CH0F CH0IE TPM2 channel 0
8 $FFEE/FFEF Vtpm2ovf TPM1 TOF TOIE TPM1 overflow
7 $FFE0/FFF1 V1pm1ch2 TPM1 CH2F CH2IE TPM1 channel 2
6 $FFE2/FFF3 V1pm1ch1 TPM1 CH1F CH1IE TPM1 channel 1
5 $FFE4/FFF5 V1pm1ch0 TPM1 CH0F CH0IE TPM1 channel 0

4 $FFE6/FFF7 Vicg ICG ICGIF LOLRE/LOCRE ICG


(LOLS/LOCS)
3 $FFEB/FFF9 VIvd System control LVDF LVDIE Low-voltage detect
2 $FFEA/FFFB Vrrq IRQ IRQF IRQIE IRQ pin

1 $FFEC/FFFD Vswi Core SWI __ Software interrupt


Instruction
COP COPE Watchdog timer
0 $FFEC/FFFF Vreset System control LVD RESET pin LVDRE Low-voltage detect
Higher illegal opcode __ External pin
__ Illegal opcode

ALFAOMEGA - FREESCALE
246 JUAN CARLOS VESGA FERREIRA

Sintaxis de una rutina de servicio de interrupcin

interrupt <numero de vector> void <nombre de la rutina de interrupcin> (void)


{
Limpiar bandera de interrupcin;
Sentencia1;
}

Aunque la sintaxis de una rutina de servicio de interrupcin es muy similar a la sintaxis de una funcin,
existen varias diferencias que vale la pena mencionar.
La declaracin de una rutina de servicio de interrupcin empieza con la palabra reservada interrupt,
la cual permitir al compilador diferenciar una rutina de servicio de interrupcin de una funcin.
En la declaracin de una rutina de servicio de interrupcin se debe especificar el nmero del vector de
interrupcin al que ser ligada dicha rutina. El nmero de vector de interrupcin es especificado en la
tabla de vectores de interrupcin.
Todas las rutinas de servicio de interrupcin son de tipo void puesto que no retornan ningn
valor.
Ninguna rutina de servicio de interrupcin recibe parmetros.

El siguiente ejemplo muestra la declaracin de la rutina de servicio de interrupcin ejecutada cuando


la interrupcin del mdulo IRQ es generada. Como muestra la tabla de vectores, el nmero de vector
correspondiente al mdulo IRQ es el nmero 2.

interrupt 2 void IRQ_ISR(void)


{

Todas y cada una de las interrupciones descritas en la tabla de vectores pueden ser habilitadas o
deshabilitadas, con excepcin del vector de reset. Las interrupciones que pueden ser habilitadas y deshabilitadas
por software se conocen como interrupciones mascarables. Una interrupcin mascarable es aquella donde
el procesador puede decir si ejecuta o no dicha interrupcin. Aquellas interrupciones como el reset,
donde el procesador no puede decidir si ejecuta la interrupcin o no, se conocen como interrupciones no
mascarables.
Las interrupciones mascarables tienen un registro de configuracin donde se pueden habilitar o deshabilitar
de forma
Cada uno de los mdulos descritos en la tabla de vectores de interrupcin pueden ser habilitados o
deshabilitados en forma independiente debido a que cada mdulo tiene un registro de configuracin de
interrupciones. Adems de estos registros de configuracin existe un registro global que permite deshabilitar
todas las interrupciones habilitadas hasta el momento. La mscara que deshabilita las interrupciones
globalmente se llama I y se encuentra en el registro de cdigo de condiciones, pero puede ser llamada por

ALFAOMEGA - FREESCALE
PROGRAMACIN EN C 247

un par de macros para activarla y desactivarla en C la macro que pone esta bandera en cero que permite
DisableInterrupts. La mscara que permite la ejecucin de cualquier interrupcin habilitada hasta el
momento se llama EnableInterrupts.
Ninguna interrupcin podr ser ejecutada si la mscara EnableInterrupts no es utilizada dentro de la
aplicacin.
Debido a que un procesador ejecuta tareas en forma secuencial, dos tareas o procesos no pueden ser
ejecutados por el procesador al mismo tiempo. Lo mismo sucede con las interrupciones. Aunque se habl
de que las interrupciones pueden ser generadas en forma asncrona, al igual que cualquier otra tarea el
procesador slo puede atender una cada vez. Esto quiere decir que si dos interrupciones son generadas al
mismo tiempo, el procesador deber ser capaz de decir cul de las dos interrupciones debe atender primero.
Para resolver este problema cada una de las interrupciones tiene asignada una prioridad, de manera que si
dos interrupciones son generadas simultneamente el procesador atender primero la interrupcin de ms
alta prioridad.
En algunos sistemas la prioridad de las interrupciones puede ser configurada por el usuario y en algunos
otros sistemas dicha prioridad es fija. Por ejemplo, la prioridad de las interrupciones de los microcontroladores
de la familia MC9S08GX no puede ser cambiada. En la tabla de vectores de interrupcin mostrada antes se

RESUMEN DEL CAPTULO


CAPTULO
Hasta el momento, en todos los programas desarrollados en el campo de la
programacin de Microcontroladores, el lenguaje de programacin por excelencia
ha sido Assembler. Assembler es un lenguaje de programacin de bajo nivel que
permite interactuar de una manera fcil y rpida al hombre con las mquinas, en este caso,
al programador con el Microcontrolador.
C es un lenguaje de programacin de propsito general que permite el uso de una sintaxis corta, creacin de
estructuras condicionales y repetitivas sencillas, generacin de procedimientos y subrutinas; complementndose
con el hecho de contar con un repertorio de instrucciones y operadores que ayudarn a escribir cualquier
programa de una manera fcil y corta comparado con su homlogo en lenguaje Assembler. C no es considerado
un lenguaje de muy alto nivel, ms bien un lenguaje pequeo y sencillo el cual no se encuentra especializado
en ningn tipo de aplicacin en particular, lo cual hace de C un lenguaje de programacin muy potente a
la hora de ser utilizado, rodeado de un campo de aplicacin ilimitado brindndole al usuario no solo una
gama ilimitada de posibilidades de uso en diferentes aplicaciones, sino que tambien se encuentra al alcance
de cualquier programador que desee aprenderlo en muy poco tiempo.
Una de las ventajas que presenta el lenguaje C, es que trabaja con diferentes tipos de datos que son
directamente manejables por el hardware del Microcontrolador, como son los caracteres, nmeros y

ALFAOMEGA - FREESCALE
direcciones. Esto permite que el cdigo resultante generado por el programador sea muy eficiente y con ello
una mayor estabilidad en el momento de su ejecucin, considerndose lo anterior como el punto clave que
le ha dado al lenguaje C el xito que ha tenido como lenguaje de desarrollo de sistemas.
En general se podra decir que C es un lenguaje de programacin con una connotacin medio-bajo nivel,
el cual le permitir al programador la opcin de acceder al hardware del Microcontrolador mediante el uso
de un modelo de programacin estructurada, de manera que se puede hacer uso eficiente de los recursos
con los que cuenta el Microcontrolador con un mnimo de instrucciones .
Un programa en C, consta de varias secciones en donde se determinarn que variables y funciones
tendr el programa, as como la tarea que tendr que realizar. Su estructura est determinada por las partes
siguientes:

Instrucciones para el compilador


Definicin de estructuras
Definicin de variables
Funciones
Programa principal

Cuando se trata de crear programas para Microcontroladores Motorota-Freescale, tanto el Compilador


como el Editor se encuentran incluidos en la herramienta de desarrollo propia de sta familia conocida como
CODEWARRIOR
La programacin no siempre es una tarea fcil de hacer, algunas veces esta llena de frustaciones, tristezas
y estres, pero tambien esta llena de alegrias y recompensas y tambien de un sentido de orgullo por haberlo
logrado.
A continuacin se muestra una metodologia que puede ayudar para evitar las frustaciones esta metodologia
esta basada en 7 pasos:

1. Definir o redefinir el problema.


2. Disear el programa.
3. Escribir el Cdigo.
4. Compilar el cdigo.
5. Pruebas y Depuracin.
6. Documentacin.
7. Modificar y Mantener.
Captulo 14
INTRODUCCIN A LOS
MICROCONTROLADORES S08Q
OBJETIVO DEL CAPTULO 14.1 INTRODUCCIN
Conocer las principales caractersticas de la nueva
familia de microcontroladores Motorola-Freescale Uno de los factores que rigen el desarrollo tecnolgico
S08, familia que promete ser muy superior frente y la aparicin diaria de nuevos y sorprendentes
a sus antecesores y frente a sus competidores dispositivos de lgica programable es la competencia
no slo por los beneficios ya conocidos, como por posicionarse en el atractivo mercado de la
costo y estabilidad, sino tambin por la inclusin electrnica, la cual se intensifica cada da ms, obligando
de mdulos especializados, permitindole al a los fabricantes a ofrecer soluciones que satisfagan una
estudiante desarrollar aplicaciones tan complejas serie de requerimientos de los usuarios, entre los que
como lo desee y con la facilidad que ningn otro se encuentran la funcionalidad, el tamao, el costo, el
microcontrolador podr permitirle. consumo de potencia y la facilidad de uso.
Con el fin de dar solucin a las necesidades

CONOCIMIENTOS PREVIOS diarias de los desarrolladores y a las exigencias del


campo electrnico, Freescale Semiconductor introdujo
Para iniciar el estudio del presente captulo recientemente al mercado su nueva familia S08QG de
es necesario que el lector posea claramente MCUs bits, familia que integra en un solo chip una gran
los conceptos vistos hasta el momento para cantidad de mdulos con caractersticas especiales que
el uso, configuracin y programacin de la harn de este microcontrolador un poderoso aliado a la
familia de micrcontroladores HC08 con el fin hora de implementar aplicaciones de alta envergadura,
de lograr comprender fcilmente los mdulos y satisfaciendo con excelente resultado las exigencias
actualizaciones incluidas en las ltimas familias fundamentales de los nuevos diseos tecnolgicos
de microcontroladores Motorola-Freescale tales como son: bajo consumo de potencia, tamao reducido
como la familia S08. y un costo inferior a un dlar.
250 JUAN CARLOS VESGA FERREIRA

Los microcontroladores MC9S08QG8/QG4 ofrecen una estupenda combinacin de funcionalidad y


tamao reducido y muy bajo costo, en donde los desarrolladores de aplicaciones electrnicas ya disponen
de microcontroladores de 8 bits que brindan una atractiva combinacin de alternativas para las cuales slo la
imaginacin ser su limitante. Entre las novedades que presenta esta familia frente a otras se pueden mencionar:
8 canales con conversin analgica/digital, basados en un conversor analgico-digital (ADC) mejorado, de 10
bits de alta resolucin y velocidad de conversin elevada, brindando un mnimo consumo de potencia. Debido a
la gran integracin que presenta esta familia especial de microcontroladores, permite a los diseadores conectar
fcilmente entradas analgicas utilizando la mnima cantidad de circuitera externa posible.
Incluye adicionalmente tres mdulos especiales de comunicaciones como son: un mdulo de interfaz para
comunicaciones en serie (SCI), un mdulo para perifricos en serie (SPI) y otro mdulo para conexin de
dispositivos con comunicacin I2C, permitiendo expandir su conexin con toda una gama de dispositivos
especiales como, por ejemplo: memorias, relojes de tiempo real, conversores A/D, transceivers, entre otros
dispositivos que no slo facilitarn el diseo de aplicaciones especializadas sino que adems garantizarn
que los desarrolladores vean en esta familia de microcontroladores la solucin a todos sus problemas.
Una de las principales caractersticas que ofrece esta familia de microcontroladores consiste en una mayor
flexibilidad de temporizacin a nivel de software gracias al mdulo temporizador (MTIM) de 8 bits, as como
funciones de control del movimiento con el mdulo (Timer/PWM o TPM) de dos canales.
La integracin presente en el 9S08QG8/QG4 ofrece adems distintas fuentes de reloj. Una fuente de
reloj interna (internal clock source o ICS) modular, la cual es un generador de reloj interno de gran exactitud
y bajo consumo de potencia, que evita tener que instalar un oscilador o cristal de cuarzo, que hasta ahora era un
requerimiento especial de funcionamiento para cualquier microcontrolador existente; complementndose con el
hecho de que estos microcontroladores pueden soportar entradas externas de reloj desde 32 kHz hasta 20 MHz.

14.2 CARACTERSTICAS DE LOS MICROCONTROLADORES


MC9S08QG8/QG4
Basados en el chip HCS08
Funcionan hasta 20 MHz (bus a 10 MHz) a tensiones superiores de 2,1 V, con ciclo de instruccin mnimo
de 100 ns y a una frecuencia de 16 MHz (bus a 8 MHz) a tensiones de alimentacin inferiores a 2,1 V.
Memoria flash reprogramable de 8 K y 4 K
Mdulos de comunicacin en serie sncronos y asncronos (SPI, IIC, SCI)
Integracin de un convertidor analgico a digital de 8 canales y 10 bits de resolucin que incluye un
sensor de temperatura.
Mdulo de comparacin analgico (ACMP).
Mdulo temporizador/de gestin del consumo (TPM) de 2 canales.
Mdulo temporizador (MTIM) de 8 bits.
Mdulo interruptor de teclado (keyboard interrupt, KBI) de 8 pines con polaridad seleccionable por
software en modos flanco o flanco/igual.
Mdulo fuente de reloj interno (internal clock source, ICS) con un bucle sincronizado en frecuencia
(frequency-locked loop o FLL).
Oscilador externo que soporta fuentes de reloj externas.
Funciones de proteccin del sistema como deteccin de baja tensin (LVD), control de encendido en el
momento de reiniciar (POR) y contador COP con oscilador independiente.
Sistema de depuracin no intensivo con emulacin en el chip y en el circuito (ICE) con captura de buses
en tiempo real.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 251

Los microcontroladores de 8 bits continan siendo una opcin atractiva para una amplia gama de
aplicaciones, brindando soluciones en campos especficos como, por ejemplo: electrodomsticos, Dimmers o
controles de iluminacin, controles industriales, sistemas de seguridad, domtica y sistemas de comunicaciones,
en especial las comunicaciones inalmbricas.
La tendencia de hoy en da de los diseadores de aplicaciones electrnicas consiste en disponer de una
amplia variedad de dispositivos que brinden integracin de soluciones a un bajo consumo de potencia y a
precios al alcance de cualquier usuario, en donde la familia S08QG no solamente las satisface, sino que adems
ofrece niveles de integracin, innovacin y funcionalidad, a un precio extremadamente bajo para toda la
versatilidad de soluciones que brinda; limitndose las nuevas aplicaciones no por el costo o el tamao sino
por la imaginacin del diseador.
La familia HCS08 fue introducida por Freescale (entonces Motorola) en el ao 2003; una de sus principales
ventajas ha sido su funcionamiento con un voltaje de alimentacin de 1.8 V, familia de la cual hace parte esta nueva
referencia de microcontroladores, conformada por los dispositivos 9S08QG8 y QG4; microcontroladores basados
en un ncleo HCS08, en donde la principal diferencia radica en la cantidad de memoria disponible, mientras que
el QG4 integra 4KB de Flash y 256 bytes de RAM, el QG8 ofrece 8KB de memoria Flash y 512 bytes de RAM.

Dispositivo
Caracteristicas MC9S08Q G8 MC9S08Q G4
PAQUETE 16 PINES 8 PINES 16 PINES 8 PINES
FLASH 8K 4K
RAM 512 256
XOSC SI NO SI NO
ICS SI SI
ACMP SI SI
ADC 8 CANALES 4 CANALES 8 CANALES 4 CANALES
DBG SI SI NO
IIC SI SI
IRQ SI SI
KBI 8 PINES 4 PINES 8 PINES 4 PINES
MTIM SI SI
SCI SI NO SI NO
SPI SI NO SI NO
TPM 2 CANALES 1 CANAL 2 CANALES 1 CANAL
PINES I/O 12 4 12 4
TIPOS DE 16 PDIP 8 DFN 16 QFN 8 DFN
PAQUETES 16 QFN 8 SOIC 16 TSSOP 8 SOIC
16 TSSOP 8 PDIP

CUADRO 14.1
Resumen de las caractersticas de la familia MC9S08QG8/4.

ALFAOMEGA - FREESCALE
252 JUAN CARLOS VESGA FERREIRA

La variedad no slo se encuentra entre los recursos propios de esta familia, sino que adems la acompaa
toda una serie de herramientas de desarrollo facilitndole al usuario el desarrollo de sus aplicaciones.
Adicionalmente, los dispositivos QG8/QG4 incluyen un sistema de depuracin y un sistema de emulacin
on-chip in-circuit (ICE), con un bus de captura de datos en tiempo real, lo que permite disminuir los costos
de herramientas de depuracin.
Esta poderosa familia, debido a la recursividad que ofrece, no slo ha sido aceptada dentro del mundo
del desarrollo de aplicaciones electrnicas sino que adems promete convertirse en una de las herramientas
de desarrollo ms poderosas que se encuentren en el mercado, degustando a los diseadores no slo por su
portafolio de recursos internos sino por satisfacer las necesidades principales de cualquier diseador, como
son: el bajo costo, bajo consumo de potencia, innovacin tecnolgica e integrabilidad con otros sistemas
electrnicos disponibles en el mercado actualmente.

BKGD/MS
HCS08 CORE IRQ

CPU BDC MDULO DEPURADOR


(DBG)
TCLK
SISTEMA DE CONTROL MDULO TIMER PTA5//IRQ/TCLK/RESET
SO8 INTERRUPCIONES Y
RESET (MTIM) 8 BITS PTA4//ACMPO/BKGD/MS
MODOS DE OPERACIN SCL
PTA3//KBIP3/SCL/ADP3
MANEJO DE POTENCIA MDULO I2C SDA PTA2//KBIP2/SDA/ADP2

PORT A
RTI COP 4
MDULO DE TECLADO
4
IRQ LVD (KBI) DE 8 BITS
ACMP0
MDULO COMPARADOR ACMP-
FLASH (ACMP) PTA1/KBIP1/ADP1/ACMP_
ACMP+
(MC908QG8 = 8192 BYTES) PTA0/KBIP0/TPMCH0/ADP0/ACMP+
4
CONVERSOR A/D
PTB7/SCL/EXTAL
RAM 10 BITS PTB6/SDA/XTAL
4
(MC908QG8 = 512 BYTES)
TPMCH0
(MC908QG4 = 4096 BYTES) TIMER/PWM 16 BITS TPMCH5
MDULO (TPM)
RELOJ INTERNO 16 MHz SS
(ICS) MISO PTB5/TPMCH1/SS
SERIAL PERIFRICA PTB4/MISO
MOSI
PORT B

MDULO (SPI) SPSCK PTB3/KBIP7/MOSI/ADP7


OSCILADOR BAJO CONSUMO PTB2/KBIP6/SPSCK/ADP6
31.25 kHz to 38.4 kHz RxD
1 MHz to 16 MHz COMUNIC. SERIALES PTB1/KBIP5/TxD/ADP5
(XOSC) TxD
MDULO (SCI) PTB0/KBIP4/RxD/ADP4
VSS
VDD REGULADOR DE VOLTAJE EXTAL
XTAL
VDDA
VSSA
VREFH
VREFL

FIGURA 14.1 Esquema interno de la familia MC9S08QG8/4.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 253

PTA5/IRQ/TCLK/RESERT 1 16 PTA0/KBIPO/TPMCH0/ADPO/ACMP+

PTA4/ACMPO/BKGD/MS 2 15 PTA1/KBIP1/ADP1/ACMP-
VDD 3 14 PTA2/KBIP2/SDA/ADP2

VSS 4 13 PTA3/KBIP3/SCL/ADP3

PTB7/SCL/EXTAL 5 12 PTB0/KBIP4/RxD/ADP4

PTB6/SDA/XTAL 6 11 PTB1/KBIP5/TxD/ADP5

PTB5/TPMCH1/SS 7 10 PTB2/KBIP6/SPSCK/ADP6

PTB4/MISO 8 9 PTB3/KBIP7/MOSI/ADP7

PTB5/IRQ/TCLK/RESET 1 8 PTB0KBIPO/TPMCH0/ADPO/ACMP+

PTB4/ACMPO/BKGD/MS 2 7 PTA1/KBIP1/ADP1/ACMP-

VDD 3 6 PTA1/KBIP2/SDA/ADP2
VSS 4 5 PTA3/KBIP3/SDL/ADP3

FIGURA 14.2
Distribucin de pines de la familia MC9S08QG8/4, respectivamente.

Hasta el momento se ha estudiado cada uno de los mdulos que hacen parte de la familia HC08; sin
embargo, la nueva familia de microcontroladores S08 promete ser una familia muy superior y muy completa
frente a sus antecesores y frente a sus competidores no slo por los beneficios ya conocidos, como costo y
estabilidad, sino tambin por la inclusin de mdulos tan importantes y necesarios en la gran mayora de
aplicaciones actuales como mdulos de comunicaciones especializadas, mdulo de comparacin, mdulo
de conversin A/D mejorado, entre otras que harn de este microcontrolador una herramienta poderosa a
la hora de implementar cualquier aplicacin de ndole electrnica que lo requiera.
A continuacin se hace una explicacin introductoria de las nuevas bondades ofrecidas por esta familia
de microcontroladores Motorola-Freescale, como complemento a las expuestas hasta el momento por la
familia HC08.

ALFAOMEGA - FREESCALE
254 JUAN CARLOS VESGA FERREIRA

Modos de direccionamiento
Al programar en un lenguaje de alto nivel como C utilizamos variables para manejar los datos sin preocuparnos
mucho de su ubicacin o de la forma de accederlos. Estas variables se encuentran almacenadas en localidades
de memoria y existen diversos caminos para llegar ellas. Por ejemplo, es distinta la forma de leer de un arreglo,
de una variable local, una global, una tabla de constantes, etc. Es tarea del compilador elegir el camino ms
eficiente para llegar a los datos. A continuacin se presentan los modos de direccionamiento disponibles en
el CPU de la familia HCS08.

Inherente
Existen instrucciones que contienen en ellas mismas la informacin de los operandos que requieren. stas
normalmente involucran registros del CPU, de modo que no es necesario leer datos de una direccin de
memoria para ejecutarlas. Existen tambin instrucciones que s realizan accesos a memoria, pero el programador
no necesita especificar la direccin, esto sucede en operaciones que involucran al stack. De manera general, se
considera direccionamiento inherente siempre que el programador no requiera proveer de ningn parmetro
a la instruccin.

Relativo
Al realizar un salto en el programa debe modificarse el valor del PC para apuntar a la instruccin
correspondiente. Esto se hace sumndole un valor proporcionado por el programador, que debe ser la
diferencia entre la localidad a la que apunta el PC antes de realizar el salto y la localidad de la primera
instruccin a ejecutar posterior a ste. Se le llama direccionamiento relativo ya que la direccin resultante es
relativa a la original.

Inmediato
En muchas ocasiones, al inicializar una variable o realizar una comparacin, por ejemplo, se utiliza un valor
numrico constante. En este caso, el valor se provee inmediatamente al CPU y ste no necesita calcular
ninguna direccin extra para leerlo.

Directo
Este modo de direccionamiento se emplea para acceder a las localidades de la $0000 a la $00FF. Debido a
que la parte alta de la direccin siempre es igual a $00, slo es necesario especificar la parte baja para que el
CPU pueda accederla. Esto tiene la ventaja de ahorrar un byte de memoria de programa (el de la parte alta),
adems de que la instruccin se ejecuta ms rpido debido a que no requiere realizar esta lectura.

Extendido
En el modo extendido se proveen los dos bytes requeridos de la direccin del operando. Con esto se puede
acceder a todo el mapa de memoria.

Indexado
En este modo de direccionamiento se utiliza un registro como apuntador, ya sea H:X o SP, de modo que la
direccin de memoria a la que se desea tener acceso debe estar contenida en este registro. Existen diversas
variantes que hacen de ste un modo de direccionamiento muy flexible y poderoso.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 255

Indexado sin offset. El valor de H:X se utiliza como direccin.


Indexado sin offset con postincremento. Se utiliza el valor de H:X como direccin y se incrementa en
uno al terminar la ejecucin.
Indexado con offset de 8 bits. En la instruccin se provee un valor de 8 bits que ser sumado al del
registro H:X para generar la direccin a manipular.
Indexado con offset de 8 bits y postincremento. Esta variante es una combinacin de las dos anteriores,
calculando la direccin con la suma de H:X y el valor provisto por el programador, y posteriormente
incrementando en uno el valor de H:X.
Indexado con offset de 16 bits. En esta variante el valor sumado es de 16 bits, con lo que se puede
direccionar toda la memoria del componente.
Relativo al SP con offset de 8 bits. Mismo caso que la tercera variante, pero ahora se utiliza el registro
SP como apuntador.
Relativo al SP con offset de 16 bits.

Estos modos de direccionamiento son especialmente tiles para el manejo de arreglos y tablas de datos.
En ninguno de los casos en que se maneja un offset se altera el valor original del apuntador. Esto slo sucede
si se realiza un postincremento.

PUERTOS DE ENTRADA Y SALIDA DE PROPSITO GENERAL


De los nombres de pines
Los pines de los microcontroladores usualmente tienen asociadas mas de una funcin, por lo que se puede
observar en la hoja de especificacin nombres como PTA0/TX/TPMCH0, lo que, por ejemplo, indica que el
pin puede tener alguna de las tres funciones PTA0= puerto de entrada-salida de propsito general, Tx = pin
de transmisin del puerto de comunicacin serie, TPMCH0= pin del canal 0 del timer.

Qu es un puerto de entrada
El puerto de entrada de un microcontrolador es el medio por el cual podemos leer estmulos externos
digitales, es decir, variables que pueden tomar dos valores como alto-bajo, uno-cero, falso-verdadero, como,
por ejemplo, si un botn es presionado, o en qu posicin se encuentra un interruptor (encendido o apagado),
o recibir cualquier otra seal digital en el rango permitido por el microcontrolador y determinar si su valor
es uno o cero lgico.
Esta seal de entrada digital fsicamente esta conectada a los pines del microcontrolador y puede recibir
una seal elctrica que vara en voltaje; para el caso del MC9S08QG8 alimentado a 3.3V tenemos que:
Una seal baja o cero lgico se considera como cualquier seal de voltaje menor a 0.3Vdd

Vcero <= 0.9V

Una seal alta o uno lgico se considera como cualquier seal de voltaje mayor a 0.7Vdd

Vuno >= 2.3V

ALFAOMEGA - FREESCALE
256 JUAN CARLOS VESGA FERREIRA

Resistencias de sostenimiento (pull-up)


Las resistencias de sostenimiento en alto denominadas (en ingls) como resistencias pull-up son conectadas a
los pines de entrada del microcontrolador para asegurar que el valor ledo por el puerto sea 1 lgico cuando
no es aplicada ninguna seal externa; por ejemplo, en la figura siguiente el botn est conectado a 0V o tierra.
Si el botn no es presionado, el microcontrolador lee 1 lgico (3.3 V), y cuando el botn es presionado el
microcontrolador lee 0 lgico (0 V); este circuito es tan comn que la mayora de los microcontroladores actuales
cuentan actualmente con resistencias de pull-up internas que pueden ser habilitadas por el usuario.

Habitacion de la
resistencia de pull-up
Vdd = 3.3 V

Resistencia de
pull-up

Entrada
micro

Tierra = GND = 0 V

FIGURA 14.3 Esquema equivalente Resistencias de Pull-up.

NOTA
Es importante hacer notar que los voltajes que se aplican a la entrada deben
estar en el rango establecido en la hoja de datos del fabricante, ya que en
caso de exceder esto valores el microcontrolador resultar daado.

Los voltajes permitidos para el microcontrolador MC9S08QG8 son de voltajes permitidos en las entradas
digitales de -0,3 V a Vdd+0.3.

Qu es un puerto de salida
El puerto de salida de un microcontrolador es capaz de proporcionar una salida digital de voltaje, es decir
puede tomar dos valores alto-bajo, cero-uno.
Fsicamente el microcontrolador es capaz de entregar voltaje pero limitado en corriente, por ejemplo una
salida digital con valor de uno.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 257

Vsalida_uno Vdd-0.5 2.8 con una corriente mxima de 10mA


Y el voltaje de salida cuando es cero es:
Vsalida_cero 0.5 con una corriente mxima de 10mA

Por ejemplo en la figura siguiente esta conectado un LED, y para limitar la corriente que va a pasar
por el circuito utilizamos una resistencia R, esto nos asegura que no excederemos la capacidad del
microcontrolador.

Vdd = 3.3 V
I = (Vs - Vd) /R
Vs = 3.3 V I = (Vs - Vd) /R
Salida de
Si I deseada = 0.01A,
microcontrolador
entonces tenemos R
R = (Vs - Vd)/I
I
= (3.3 - 1.2)/0.01
= 210 Vd 1.2 V
Valor comercial = 220

FIGURA 14.4 Esquema de conexin pin de salida

NOTA
Aunque cada uno de los pines puede entregar como mximo hasta 25 mA, no es
posible exceder la corriente mxima del microcontrolador que en nuestro caso es
de 120 mA, por lo que siempre que se vaya a utilizar una salida hay que limitar
la corriente que se va a consumir. Elautor recomienda cuidar que la corriente
en cada uno de los pines no exceda de 10 mA, y estar atentos a no exceder el
mximo permitido para el microcontrolador, para evitar daarlo.

Control de los puertos de entrada y salida


El control de los puertos de entrada y salida desde el punto de vista del software es realizado a travs de
registros de control que se encuentran en la memoria del microcontrolador, en el caso de los puertos de entrada
y salida del MC9S08QG8 tenemos los registros de datos (PTAD, PTBD) y direccin PTADD y PTBDD como
se observa en la siguiente tabla.

ALFAOMEGA - FREESCALE
258 JUAN CARLOS VESGA FERREIRA

Address Register Name Bit 7 6 5 4 3 2 1 Bit 0


0x0000 PTDA 0 0 PTAD5 PTAD4 PTAD3 PTAD2 PTAD1 PTAD0
0x0001 PTADD 0 0 PTADD5 PTADD4 PTADD3 PTADD2 PTADD51 PTADD0
0x0002 PTABD PTABD7 PTABD6 PTABD5 PTABD4 PTABD3 PTABD2 PTABD1 PTABD0
0x0003 PTABDD PTABDD7 PTABDD6 PTABDD5 PTABDD4 PTABDD3 PTABDD2 PTABDD1 PTABDD0

Los otros registros de control del comportamiento del puerto son los de pull-up enable (PTAPE, PTBPE),
la de seleccin de slew rate (PTASE, PTBSE) y la de seleccin de fuerza para las salidas (PTADS, PTBDS).

Bit 7 6 5 4 3 2 1 Bit 0
0x1840 PTAPE 0 0 PTAE5 PTAE4 PTAE3 PTAE2 PTAE1 PTAE0
0x1841 PTASE 0 0 PTASE5 PTASE4 PTASE3 PTASE2 PTASE1 PTASE0
0x1842 PTADS 0 0 PTADS5 PTADS4 PTADS3 PTADS2 PTADS1 PTADS0
0x1843 Reserved --- --- --- --- --- --- --- ---
0x1844 PTBPE PTBPE7 PTBPE6 PTBPE5 PTBPE4 PTBPE3 PTBPE2 PTBPE1 PTBPE0
0x1845 PTBSE PTBSE7 PTBSE6 PTBSE5 PTBSE4 PTBSE3 PTBSE2 PTBSE1 PTBSE0
0x1846 PTBDS PTBDS7 PTBDS6 PTBDS5 PTBDS4 PTBDS3 PTBDS2 PTBDS1 PTBDS0

Descripcin de los registros de control


Cada uno de los pines de los puertos de entrada-salida puede ser configurado en forma independiente, por
ejemplo podramos tener 3 pines del puerto A como entradas, 5 como salidas, 1 entrada con pull-up, o dos
salidas con slew-rate controlado, etc.

PTAD, PTBD Registro de datos


Si el pin correspondiente es configurado como entrada, al hacer una lectura de este registro se lee el valor
actual del pin. El escribir en un pin configurado como entrada no tiene ningn efecto sobre el pin.
Si el pin correspondiente es configurado como salida, al hacer una escritura a este registro el puerto de
salida toma el valor correspondiente. 1 = 3.3 V en la salida, 0 = 0 V en la salida. Cuando se lee un pin de
salida devuelve el ltimo valor escrito en el puerto.

PTADD, PTBDD Registro de direccin


Si se escribe un valor de 1 en algunos de los bits, este bit se comportara como salida; si se escribe un 0 se
comportar como entrada.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 259

PTAPE, PTBPE Registro de habilitacin de la resistencia interna de Pull-Up


Si el pin correspondiente est configurado como entrada y se escribe un valor de 1 en algunos de los bits, este
bit tendr conectada una resistencia de pull-up, en caso contrario el pin estar en flotacin (el circuito externo
al microcontrolador deber asegurar que existen valores permitidos para esta entrada).

PTASE, PTBSE Registro de habilitacin del control de slew-rate. Si el pin correspondiente


est configurado como salida y se escribe un valor de 1 en algunos de los bits, este bit tendr control del
slew rate. Esto hace que el cambio en la salida de 1 a 0 o de 0 a 1 sea menos rpido y con esto poder controlar
las emisiones de RF generadas por el microcontrolador. Para mayor informacin sobre esta caracterstica,
refirase a la hoja de datos.

PTASE, PTBSE Registro de habilitacin del control de slew-rate. Si el pin correspondiente


est configurado como salida y se escribe un valor de 1 en algunos de los bits, este bit tendr control del
slew rate. Esto hace que el cambio en la salida de 1 a 0 o de 0 a 1 sea menos rpido y con esto poder controlar
las emisiones de RF generadas por el microcontrolador. Para mayor informacin sobre esta caracterstica,
refirase a la hoja de datos.

PTADS, PTBDS Registro de control de la fuerza de salida del puerto


Si el pin correspondiente est configurado como salida y se escribe un valor de 1 en algunos de los bits, este
bit tendr mayor fuerza, es decir, mayor capacidad para proporcionar corriente a la carga. Sin embargo, esto
no implica que debamos respetar los lmites establecidos para el microcontrolador; ver seccin de puerto de
salida. Para mayor informacin sobre esta caracterstica, refirase a la hoja de datos.

PROGRAMACIN DE LOS PUERTOS DE ENTRADA-SALIDA


La configuracin utilizando lenguaje C puede hacerse, en general, de dos formas, en paralelo o por bit.
La programacin en paralelo implica mover todos los bits del puerto al mismo tiempo, mientras que la
programacin orientada a bit slo modifica cada uno de los bits del puerto en forma independiente.
Por ejemplo: para habilitar el puerto B bit 7 y bit 6 como salidas en forma simultnea podemos escribir la
siguiente sentencia:

PTBDD = 0b11000000; /* el dato es con nmero binario */

O en hexadecimal;

PTBDD = 0xC0; /* el dato es con nmero hexadecimal */

Y para poner las salidas en 1 en PTB6 y PTB7 y las dems en 0, tendremos:

PTBD = 0xC0;

ALFAOMEGA - FREESCALE
260 JUAN CARLOS VESGA FERREIRA

Por otro lado, si quiero modificar el valor de salida del puerto B- bit 6, pero no quiero modificar el valor
de los otros datos del puerto bits 7,5,4,3,2, y 1, se puede escribir:

PTBD_PTBD6 = 1; /* pone en 1 la salida del puerto B bit6*/


PTBD_PTBD6 = 0; /* pone en 0 la salida del puerto B bit6*/

Note que en la nomenclatura de las operaciones orientadas a bit se toma el nombre del registro y luego
se duplica con el nmero de bit a modificar, lo cual aplica para todos los registros del microcontrolador y no
slo para los puertos de entrada y salida.

TEMPORIZACIONES BSICAS
En la vida cotidiana, al hablar de tiempo empleamos cantidades en nuestras unidades de medida: horas,
minutos, segundos. En electrnica, generalmente utilizamos unidades de magnitud inferior al segundo para
hablar de perodos, tiempos de respuesta, etc. De la misma manera, el microcontrolador cuenta el tiempo
en unidades adimensionales comnmente llamadas ticks, que tienen una relacin numrica con nuestras
unidades de medicin.
En su forma ms bsica, un timer es un contador, ascendente o descendente, que opera a una frecuencia
de reloj especfica. Esto quiere decir que, si se trata de un contador ascendente, la cuenta ser incrementada
con cada ciclo de la seal de reloj que se est aplicando al dispositivo. De esta forma, cada cuenta del timer
equivaldr en tiempo al perodo de esta seal. Esto se logra mediante flip-flops divisores de frecuencia colocados
en cascada, de modo que cada uno corresponde a un bit del contador.

D Q D Q D Q D Q

Q Clk Q Clk Q Clk Q


Timer
Clock
C0 C1 C2 Cn
LSB MSB

FIGURA 14.5
Arreglo de flip-flops de un contador de n bits.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 261

Al activarse un timer, ya sea por medio de algn habilitador o por la aplicacin de una seal de reloj, se
inicia el incremento o decremento del valor del contador, segn sea el caso. Este contador, como cualquier
registro, tiene una cantidad de bits definida, por lo que el rango de valores que puede almacenar se encuentra
dentro de lmites conocidos. Una vez que se alcanza uno de estos limites, al transcurrir otro ciclo de la seal
de reloj ocurre un desbordamiento u overflow. Este evento es el que puede utilizarse para determinar cuando
ha transcurrido un perodo de tiempo especfico, ya que es el que nos alerta el microcontrolador. De esta
manera, si el contador es ascendente de 8 bits, despus de FFh cuentas se realizar la transicin a 00h y el
microcontrolador avisar con una bandera que se ha producido un desbordamiento, evento que puede ser
fuente de una interrupcin del microcontrolador. A este modo de operacin en que el timer cuenta de manera
continua en todo su rango se le conoce como free running o corrida libre.
Existen infinidad de aplicaciones en las que se requiere el uso de timers, y sus principales aplicaciones
podran dividirse en tres:

Medicin de perodo. En este caso se utiliza un timer para medir el tiempo transcurrido de un evento
a otro, como pudiera ser el caso del procesamiento de una seal en un sistema de comunicacin.
Medicin de frecuencia. En este caso se mide la cantidad de eventos en un tiempo determinado, aplicado
por ejemplo, para medir velocidad a travs de un encoder.
Generacin de tiempos. A diferencia de los anteriores, en este caso se utiliza el timer para generar eventos
en tiempos determinados, ya sea para la inicializacin de un dispositivo, la generacin de algn tipo
de seal o la programacin de tareas en tiempos especficos.
El microcontrolador QG8 cuenta con tres perifricos especializados en las operaciones relacionadas con
el tiempo, cumpliendo con estas necesidades. En este captulo estudiaremos dos de estos mdulos, los ms
sencillos, que estn ms relacionados con la generacin de bases de tiempo.

14.3 MDULO TIMER INTERFACE (MTIM)

El MTIM es un timer ascendente de 8 bits, es decir que su registro contador tiene una longitud de 8 bits y su
cuenta se incrementa con cada ciclo de reloj. Este reloj puede ser una de tres seales distintas que se explicarn
ms adelante. Cuenta adems con un registro extra que permite generar tiempos de una manera mucho ms
precisa, llamado mdulo. A continuacin se muestra el diagrama a bloques del MTIM; conforme se vaya
avanzando en el captulo, el lector ser capaz de comprender la funcin de cada una de sus partes.

ALFAOMEGA - FREESCALE
262 JUAN CARLOS VESGA FERREIRA

BUSCLK
CLOCK FRESCALE AND TRST
XCLK 8 BIT COUNTER
SOURCE SELECT DIVIDE (MTIMCNT) TSTP
TOLK SYNC SELECT BY

8-BIT COMPARATOR
CLKS PS
MTIM
INTERRUPT
RESQUEST TOF
8-BIT MDULO
(MTIMMOD)
TOIE

FIGURA 14.6
Diagrama a bloques del MTIM.

Fuentes de reloj
Empezando por el primer bloque, estudiaremos ahora las fuentes de la seal de reloj disponibles para este
mdulo. El MTIM puede funcionar con tres seales de reloj distintas:

BUSCLK. Corresponde al reloj del bus del microcontrolador.


XCLK. Corresponde a un reloj interno de frecuencia fija.
TCLK. Permite la aplicacin de una seal externa a travs del pin 1 (PTA5/IRQ/TCLK/RESET) del
dispositivo. Al seleccionar esta seal, puede configurarse el flanco, positivo o negativo, en que se
realizar el incremento del contador.

La frecuencia del bus (BUSCLK) es configurable a travs de ciertos registros del microcontrolador; sin
embargo, por simplicidad utilizaremos el valor por defecto, que podemos considerar de 4 MHz. La frecuencia
del XCLK corresponde a la frecuencia del oscilador interno del microcontrolador dividido entre dos o, para
este caso, la frecuencia del bus dividida entre 256. Esta relacin vara si se modifica la frecuencia del bus.
La frecuencia de la seal de XCLK es entonces de 15.625 KHz. Para la fuente externa, la frecuencia puede
encontrarse entre 0 Hz y la frecuencia del bus dividida entre 4. Esta variedad de seales permite utilizar
distintas frecuencias de operacin, lo que produce una mayor versatilidad del perifrico, siendo capaz de
generar una gama ms amplia de tiempos.
Hasta este momento, hemos establecido que:

1
cuenta = Tclk
fclk

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 263

Es decir, que una cuenta del timer equivale directamente en tiempo al perodo de la seal de reloj, ya que
con cada ciclo se realiza una transicin en el estado del primer flip-flop de la cadena que forma el contador. Sin
embargo, antes de que la seal seleccionada llegue al contador pasa por una etapa de divisin de frecuencia,
lo que permite aumentar el perodo de tiempo entre incrementos. Esto resulta muy til en los casos en que los
tiempos requeridos son muy grandes en comparacin con el perodo del reloj seleccionado, y no se requiere
tanta precisin en el conteo. Para entender esto, supongamos que queremos que ocurra un overflow cada 256
us, lo que equivaldra a 1 us por cuenta; recordemos que el overflow ocurre en una transicin de 0xFF a 0x00.
Antes que nada, debemos seleccionar la seal de reloj adecuada. En la gran mayora de los casos se prefiere
utilizar las seales generadas internamente en el microcontrolador, de modo que se ahorre circuitera externa
innecesaria que slo hara ms complejo el diseo y por tanto, ms costoso. Descartemos entonces la posibilidad
de aplicar una seal de reloj externa y comparemos el perodo de cada seal interna con el perodo deseado
para determinar cul es la ms adecuada:

1 1
TBUSCLK = 0.25 s TXCLK = = 64 s
4MHZ 15. 625 KHz

Fcilmente se puede notar que el XCLK no es una opcin para este caso, ya que excede por mucho el
perodo requerido y transcurriran los 256 us deseados en tan slo 4 cuentas. Para el reloj del bus, en cambio,
se puede notar que se requeriran ms de 1000 cuentas para alcanzar este valor, cosa que no es posible ya que
el contador slo cuenta con 8 bits. El problema se soluciona si hacemos que el perodo del BUSCLK sea 4 veces
ms grande, es decir, si dividimos su frecuencia entre 4. De esta manera el perodo de la seal que llega al
contador es de 1 us. A continuacin se muestra un diagrama de tiempos que muestra este funcionamiento.

selected
clock source

MTIM clock
(PS=%0010)

MTIMCNT 0xA7 0xA8 0xA9 0xAA

FIGURA 14.7
Diagrama de tiempos con un prescaler de 4.

Este divisor se conoce como prescaler, o preescalador, ya que escala la frecuencia de la seal original a
una ms acorde a nuestra aplicacin antes de que sta llegue al contador. La configuracin de este prescaler,
as como de la fuente de reloj, se realiza en el registro MTIMCLK.

ALFAOMEGA - FREESCALE
264 JUAN CARLOS VESGA FERREIRA

7 6 5 4 3 2 1 0
R 0 0
CLKS PS
w

Reset 0 0 0 0 0 0 0 0

FIGURA 14.8
Registro de configuracin del reloj.

Los bits 4 y 5 se utilizan para configurar la fuente del reloj del timer, mientras que los bits del 0 al 3
determinan el factor de divisin de esta seal. Sus posibles valores se ilustran en las tablas siguientes.

CLKS Seal de reloj


00 BUSCLK
01 XCLK
10 TCLK flanco de bajada
11 TCLK flanco de subida

TABLA 14.2
Valores de configuracin de la seal de reloj.

Prescaler Divisor
0000 1
0001 2
0010 4
0011 8
0100 16
0101 32
0110 64
0111 128
1xxx 256

TABLA 14.3
Combinaciones del prescaler.
ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 265

Control del timer


Tenemos ya elementos para utilizar el MTIM en su forma ms bsica. Ahora debemos conocer cmo se controla
su funcionamiento, cmo se habilita, cmo es que podemos saber cundo se ha producido un overflow. Todo
esto se encuentra reunido en un solo registro que nos reporta el estado y nos permite controlar el MTIM. Este
registro se llama MTIMSC, por MTIM Status and Control Register.

7 6 5 4 3 2 1 0
R TOF 0 0 0 0 0
w TOIE TSTP
TRST
Reset 0 0 0 1 0 0 0 0

FIGURA 14.9
Registro de estatus y control del MTIM.

Como ya se mencion anteriormente, una vez que el contador pasa de FFh a 00h, es decir, ocurre un overflow,
el microcontrolador activa una bandera que nos permite conocer que el evento ha ocurrido. Esta bandera es el
bit TOF (Timer Overflow Flag) de este registro, y permanece en 1 despus de un overflow hasta que se realiza una
serie de pasos para regresarla a su estado inicial. Como puede observarse en la figura 14.9, este bit es de slo
lectura, de manera que no nos es posible modificarlo; slo el hardware del MTIM puede colocarlo en 1. Esto
evita que un error en la programacin afecte esta bandera y produzca un comportamiento no deseado. Para
regresar la bandera al estado de 0 se debe leer primero todo el registro MTIMSC y posteriormente escribir un
0 en este bit, lo que activa ciertos procesos internos que modifican el estado de la bandera; hay que recordar
que es de slo lectura. Mediante el bit TSTP es posible detener o activar el timer en cualquier momento, de
la misma manera que el botn de un cronmetro. Un 1 en este bit detiene el incremento del contador y un
0 lo activa. Como puede observarse en la figura 4.5, el timer siempre est detenido despus de un reset del
microcontrolador. El bit TRST es de slo escritura y su funcin es colocar en 00h el valor del contador del
timer. Al escribir un 1 en este bit el contador se resetea y contina su funcionamiento normal; un 0 no tiene
ningn efecto y siempre que sea ledo se obtendr un 0 como estado.
Podemos ahora realizar el ejemplo anterior en el microcontrolador. Antes que nada, debemos configurar
la seal de reloj deseada, que determinamos sera la seal de BUSCLK dividida entre 4. En las tablas 14.1
y 14.2 se encuentran estos valores, que deben ser escritos en el registro MTIMCLK. Una vez hecho esto, se
puede iniciar el funcionamiento del timer y esperar a que la bandera de overflow sea activada. El cdigo para
realizar esto se muestra a continuacin.

/* Programa de ejemplo de uso bsico del MTIM */


#include <hidef.h>
#include <MC9S08QG8.h>

ALFAOMEGA - FREESCALE
266 JUAN CARLOS VESGA FERREIRA

void main(void)
{
MTIM_Init(); //Funcin de inicializacin del MTIM

MTIMSC_TSTP = 0; //Se empieza a incrementar el contador

for(;;){
if(MTIM_TOF == 1) //Si ha ocurrido un overflow
{
(void)MTIMSC; //Proceso para limpiar TOF
MTIMSC_TOF = 0;
}
__RESET_WATCHDOG(); //Reinicia el watchdog
}
}
void MTIM_Init(void)
{
MTIMCLK = 0x02; /* CLKS = 00 Selecciona el BUSCLK como seal
de reloj para el contador.
PS = 0010 Divide la frecuencia del reloj entre 4.
*/
}
/* Fin del programa de ejemplo */

Modos de operacin
En el ejemplo anterior se trabaj con el timer en el modo conocido como corrida libre. En este caso, el
contador se incrementa libremente mientras se le aplique una seal de reloj, desbordndose despus del valor
0xFF y reiniciando en 0x00. Pero, qu sucede si ahora tenemos un dispositivo que enva datos al puerto B del
microcontrolador cada 100 us? Es necesario contar este tiempo de manera precisa, ya que si es considerablemente
menor puede que se haga una doble lectura del mismo dato, o si es mayor, puede que se pierda un dato. Resulta
evidente que esto no sera posible con los procedimientos utilizados hasta este momento.
Es por esto por lo que el MTIM cuenta con dos modos de operacin:

Corrida libre. El contador opera en todo su rango y se produce un overflow al pasar de FFh a 00h.
Mdulo. Se establece un lmite superior del contador diferente de FFh y se produce un overflow despus
de un valor determinado por el programador.

En el diagrama a bloques mostrado en la figura 14.10, a la derecha se encuentran tres elementos: el contador
del timer (MTIMCNT), un registro llamado Mdulo (MTIMMOD) y comparador en el que ambos convergen.
Analicemos primero el registro del contador.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 267

7 6 5 4 3 2 1 0
R
w

Reset 0 0 0 0 0 0 0 0

FIGURA 14.10
Registro contador MTIMCNT.

El contador del timer es de 8 bits, como ya se haba mencionado anteriormente. Adems, es un registro de
slo lectura, ya que slo el hardware del timer puede modificar su valor. Esto representa, de nuevo, la ventaja
de proteccin contra errores en la programacin. Revisemos ahora el registro del mdulo.

7 6 5 4 3 2 1 0
R MOD
w

Reset 0 0 0 0 0 0 0 0

FIGURA 14.11
Registro de mdulo.

Este registro es de la misma longitud del contador y sirve para establecer el valor mximo que podr tomar
el contador al irse incrementando su cuenta. Como se observa en el diagrama a bloques, estos dos registros se
cargan a un comparador, de modo que constantemente se prueba por hardware si ambos valores son iguales.
En el momento en que llegan a serlo, el contador se resetea a 00h y se produce un evento de overflow. Hay
que notar que realmente no ocurre desbordamiento alguno, ya que cualquier valor que se establezca ser
siempre posible contenerlo en los 8 bits del contador; sin embargo, dado que el efecto producido al alcanzar
este valor es el mismo que cuando ocurre un desbordamiento del contador (incremento despus de FFh), se
utiliza el mismo termino para nombrar el evento.
De esta manera, basta con escribir un valor en el registro MTIMMOD para que se produzca un overflow
cuando el valor del contador sea igual a ste. As, si se desea que ocurra un overflow cada 50 us utilizando el
BUSCLK como fuente de reloj, se escribira en el MTIMMOD un valor de 200d o CBh. Esto ya que:

1 1 1 50 s
cuenta = = = 0.25 s MTIMMOD = cuenta = = 200
fBUSCLK 4MHZ 50 s

ALFAOMEGA - FREESCALE
268 JUAN CARLOS VESGA FERREIRA

Una vez entendido esto, pudiera decirse que el modo de corrida libre es un caso especial de este modo de
operacin. Estrictamente, un overflow en un nmero de 8 bits ocurre cuando el valor se incrementa ms all
de su lmite, en este caso FFh, pues se requieren ms bits para representar el resultado. Sin embargo, en el
caso del timer, el evento de overflow se da cuando el valor del contador iguala al valor del mdulo, de manera
que el modo de corrida libre se obtiene cuando el mdulo tiene un valor de 00h.

2PS ! MTIMMOD
toverflow =
fCLK

Interrupcin
En el caso mencionado anteriormente en el que un dispositivo manda datos al microcontrolador a determinada
frecuencia, se habl de la importancia de generar tiempos con gran exactitud. En el cdigo presentado en
las pginas anteriores se utiliza la tcnica de polling (encuesta) en que se verifica cada cierto tiempo el estado
de la bandera de overflow, pero esto puede representar un problema cuando el microcontrolador tiene una
carga elevada de procesos, de modo que puede pasar mucho tiempo antes de que se verifique nuevamente
el estado de la bandera. Para evitar este retraso, que pudiera tener efectos nocivos en la aplicacin, se puede
habilitar al timer para generar una interrupcin al ocurrir un evento de overflow. De esta manera, el proceso
activo puede ser interrumpido para atender al evento en el tiempo exacto, evitando as retrasos no deseados
y prdida de datos en nuestro caso.
El habilitador de interrupcin es el bit TOIE del registro MTIMSC (figura 14.9). Al colocar este bit en 1
se habilita la generacin de una interrupcin siempre que la bandera de overflow (TOF) se encuentre en 1.
El proceso para limpiar la bandera debe ser llevado a cabo dentro de la rutina de interrupcin, y es muy
importante hacerlo, ya que si la bandera permanece activa al salir de la interrupcin, el microcontrolador
produce inmediatamente la interrupcin de nuevo, lo que genera un ciclo infinito en el programa. El vector
correspondiente al MTIM es el 12, que puede ser consultado en la tabla de vectores del componente.
Podemos entonces escribir el cdigo para la solucin del problema: recibir datos por el puerto B del
microcontrolador cada 100 us. Adems, se desea que se haga un promedio cada 8 muestras y que este valor
se guarde en una variable global para su posterior uso.

/* Programa de ejemplo de uso del mdulo e interrupcin del MTIM */


#include <hidef.h>
#include <MC9S08QG8.h>

unsigned char ucAvg; //Variable en que se guardar el promedio

void main(void)
{
MTIM_Init(); //Funcin de inicializacin del MTIM

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 269

MTIMSC_TSTP = 0; //Se activa el timer

for(;;){
__RESET_WATCHDOG(); //Reinicia el watchdog
}
}

void MTIM_Init(void)
{
MTIMCLK = 0x02; /* CLKS = 00 Selecciona el BUSCLK como seal
de reloj para el contador.
PS = 0010 Divide la frecuencia del reloj entre 4.
*/
MTIMMOD = 100; // 100 cuentas para un overflow
}

interrupt 12 void MTIM_Isr(void)


{
static unsigned int uiDatos = 0; //Acumular los datos recibidos
static unsigned char ucCont = 0; //Contador de datos

(void)MTIMSC; //Proceso para limpiar TOF


MTIMSC_TOF = 0;

uiDatos += PTB; //Suma el dato actual a los anteriores


ucCont++;
if(ucCont == 8)
{
ucAvg = uiDatos>>3; //Divide uiDatos entre 8 para sacar el promedio
ucCont = 0;
uiDatos = 0;
}
}
/* Fin del programa de ejemplo */

ALFAOMEGA - FREESCALE
270 JUAN CARLOS VESGA FERREIRA

14.4 REAL TIME INTERRUPT (RTI)


El mdulo de RTI es an ms sencillo que el MTIM para el manejo de tiempos. No cuenta con un registro contador,
mucho menos con el registro de mdulo, y sus fuentes de reloj son ms limitadas. Su funcin principal es generar
interrupciones de manera peridica, siendo posible seleccionar slo una cantidad limitada de perodos.
Como fuentes de reloj tenemos slo dos opciones: un reloj interno a 1 KHz, que es el seleccionado despus
de un reset del microcontrolador. Tenemos tambin la posibilidad de utilizar un oscilador externo, en caso de
que el componente est funcionando con uno. Esto se configura con el bit RTICLKS en el registro de estatus
y control de la interrupcin en tiempo real del sistema (SRTISC). Un 0 corresponde al reloj interno de 1 KHz
y un 1 al oscilador externo.

7 6 5 4 3 2 1 0
R RTIF 0 0
w RTICLKS RTIE RTIS
RTIACK
Reset 0 0 0 1 0 0 0 0

FIGURA 14.12
Registro de estatus y control de la RTI (SRTISC).

Una vez configurada la fuente de reloj, se configura el perodo al que se desea que ocurra la interrupcin.
Esto en el campo de RTIS, que cumple una funcin similar al prescaler del MTIM. En la tabla siguiente se
muestran todos los posibles valores de este campo y los perodos a los que corresponden.

RTIS2:RTIS1:RTIS0 Using internal 1-KHz Clock source1 2 Using External Clock Source
Period = text3
0:0:0 Disable RTI Disable RTI
0:0:0 8 ms text X 256

0:0:0 32 ms text X 1024


0:0:0 64 ms text X 2048
0:0:0 128 ms text X 4096
0:0:0 256 ms text X 8192
0:0:0 512 ms text X 16384

TABLA 14.4
Configuracin del perodo de concurrencia de la interrupcin en el Campo RTIS.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 271

Se puede notar que el valor tiene un efecto diferente si se utiliza la seal interna que si se utiliza la externa.
El multiplicador es 32 veces mayor para la seal externa que para la interna. Tambin hay que observar que,
a diferencia del MTIM que contaba con el bit TSTP para activar o detener el contador, la RTI empieza su
conteo inmediatamente despus de la seleccin de un perodo, y para desactivarla hay que escribir el valor
0 en todo el campo de RTIS.
Como en el MTIM, tenemos tambin un bit que nos alerta de que se ha cumplido el tiempo deseado; este
bit es el RTIF. El proceso para limpiar esta bandera es ms simple que en el MTIM, basta con escribir un
1 en el bit RTIACK para que la bandera vuelva a su estado 0. Escribir un 0 no tiene ningn efecto y al leer
siempre se obtendr un 0, un funcionamiento similar al TRST del MTIM. Tenemos tambin un bit que habilita
la generacin de una interrupcin cuando el tiempo configurado ha transcurrido, el RTIE. Dado que en este
caso no se cuenta con un contador, no existe la opcin de resetear la RTI.

TEMPORIZACIN AVANZADA
Aparte de los mdulos de tiempo explicados en captulos anteriores, existen otros dispositivos que pueden
ser usados no slo para generar bases de tiempo sino tambin para capturar eventos generados sobre pines
especficos provedos con esa funcionalidad o como moduladores de ancho de pulso. A este mdulo se le
conoce como mdulo de canales de tiempo (TPM).
De microcontrolador a microcontrolador podemos encontrar diferencias en la cantidad de mdulos y la
cantidad de canales por mdulo disponibles. Existen microcontroladores que tienen un solo mdulo y 2 o ms
canales, en cuyo caso cada uno de los canales puede ser configurado de forma independiente; sin embargo,
todos ellos funcionan con base en un solo contador, el contador del mdulo. Podemos encontrar tambin
microcontroladores con 2 o ms mdulos y un solo canal por mdulo. En este caso cada canal utilizar el
contador del mdulo correspondiente.
La fuente de reloj que incrementa el contador del mdulo puede ser seleccionada generalmente de 3 fuentes
diferentes: una fuente de reloj externa, el cristal que utiliza el procesador y los perifricos para operar o la
velocidad del bus generada por el mdulo multiplicador de frecuencia (FLL).
Los mdulos de tiempo pueden tener contadores de 8 bits o contadores de 16 bits. La cantidad de bits del
contador de un mdulo puede hacer mucha diferencia sobre todo cuando se utilizan los canales del mdulo
para generar bases de tiempo. Un contador de 16 bits podr alcanzar perodos de tiempo ms largos que un
contador de slo 8 bits. Por otro lado, si los canales de un mdulo estn siendo utilizados para generar bases
de tiempo con una frecuencia distinta, el rango de frecuencia que puede existir entre los diferentes canales es
mucho ms estrecho en un contador de 8 bits. Esto quiere decir que los contadores de 16 bits permiten una
mayor precisin y una flexibilidad mayor.

Fuentes de reloj
Como se mencion anteriormente, el mdulo de tiempo puede utilizar 3 distintas fuentes de reloj ya sea para
generar bases de tiempo, captura de eventos o modulacin de ancho de pulso. El mdulo permite adems
configurar un preescalador para dividir la fuente de reloj, cual quiera que haya sido seleccionada, y obtener
una frecuencia de reloj ms lenta.
La siguiente ecuacin muestra cmo calcular cualquier base de tiempo deseada con base en las
configuraciones que el mdulo permite, tales como preescalador, registro de mdulo o fuente de reloj.

ALFAOMEGA - FREESCALE
272 JUAN CARLOS VESGA FERREIRA

preescalador x registro de mdulo


Tiempo en segundos = ------------------------------------------------
frecuencia de la fuente de reloj

Como muestra la ecuacin, cuanto ms grande sea el valor del preescalador ms grande ser el perodo
de tiempo que el TPM puede generar. Por otro lado, el preescalador puede ser utilizado para generar bases
de tiempo ms precisas debido a que manipula la frecuencia de la fuente de reloj permitiendo una mayor
flexibilidad.
Como se coment anteriormente, este perifrico puede ser configurado de diferentes maneras: como
contador de mdulo para generar una nica base de tiempo o tambin se puede configurar cualquiera de los
canales disponibles para generar la misma funcionalidad.
Cuando el TPM es configurado como mdulo, el contador del perifrico contar siempre en forma
ascendente desde cero hasta alcanzar el valor almacenado en el registro de mdulo. Cuando el valor del
registro de modulo es alcanzado, un evento de sobreflujo de tiempo ser generado y el contador del perifrico
ser inicializado con un valor de cero, repitindose el proceso. Cuando el TPM es configurado como mdulo,
el registro de mdulo no necesita ser recargado cada vez que se cumpla el perodo de tiempo; bastar con
limpiar la bandera que indica que sucedi el evento.
Cuando alguno de los canales de tiempo del TPM es configurado para generar una base de tiempo, el
evento de tiempo ser generado cuando el contador del perifrico es igual al valor almacenado en el registro
de comparacin del canal. Para lograr que los canales sean independientes uno de otro, el contador del
perifrico deber ser utilizado exclusivamente para comparacin, esto quiere decir que el valor del contador
del perifrico no deber ser nunca modificado por ninguno de los canales. La forma de lograr que uno o ms
canales utilicen el mismo contador para generar perodos de tiempo independientes es almacenar el valor
actual del contador del perifrico en el registro de comparacin del canal y sumarle el valor necesario para
lograr la base de tiempo deseada. A diferencia de la configuracin de mdulo, los canales necesitan recargar
el perodo de tiempo en el registro de comparacin del canal, como se menciono anteriormente, cada vez que
un evento de tiempo es generado.
Aunque configurar el perifrico como contador de mdulo es ligeramente ms sencillo que configurar un
canal, es importante considerar lo siguiente:
El TPM slo puede ser configurado de una solo forma cada vez, como mdulo o como canal de tiempo.
Si se configura como mdulo los canales del mdulo quedaran deshabilitados permitiendo generar una sola
base de tiempo. Si el TPM es configurado como canal de tiempo, entonces se podran generar ms de una
base de tiempo cada vez, si es que el mdulo cuenta con ms de un canal.
Tambin se debe considerar que no existe diferencia significativa en cuanto a la precisin que se gana
o pierde utilizando un mdulo o un canal para generar una base de tiempo si se realiza la apropiada
configuracin. Quiz ser mas difcil configurar un canal de tiempo para alcanzar la misma precisin que un
mdulo, pero en la mayora de los casos valdr la pena debido a que se aprovechan mejor los recursos del
mdulo. Esto quiere decir que mientras un canal es usado para generar una base de tiempo, el otro podr ser
usado para una funcionalidad diferente como, por ejemplo, un modulador de ancho de pulso o una captura
de eventos.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 273

A continuacin se explicar cmo configurar el TPM como mdulo de tiempo utilizando las diferentes
fuentes de reloj.
La primera fuente de reloj puede tomarse de la frecuencia del bus (BUSCLOCK), la cual puede ser ajustada
por medio del mdulo FLL a cualquier frecuencia deseada dentro de los lmites especificados en la hoja de
datos del microcontrolador. Esta fuente es una de las ms utilizadas, sobre todo cuando se requiere generar
eventos de tiempo muy precisos o eventos de tiempo con perodos muy cortos, digamos de microsegundos.
Cabe mencionar que algunos microcontroladores pueden generar la frecuencia del bus con base en una fuente
de reloj interna (ICS). Esta configuracin es normalmente utilizada para aplicaciones donde se requiere un
consumo de potencia muy bajo. En el caso de que la frecuencia del bus sea generada utilizando la frecuencia
interna, la precisin de la frecuencia del bus podra verse afectada.
El siguiente ejemplo configura el TPM como un mdulo de tiempo para utilizar como fuente de reloj la
frecuencia del bus. Para efectos de este ejemplo se tomar la frecuencia del bus igual a 2 megahertz. El mdulo
de tiempo ser configurado para utilizar la frecuencia de la fuente de reloj dividida entre 32. Por ultimo, el
registro de mdulo ser cargado con un valor de 62500 para generar un evento de tiempo cada segundo (1
hertz). El ejemplo no utiliza interrupciones para detectar los eventos de tiempo, por lo que el evento de tiempo
ser detectado poleando la bandera TOF.
Siguiendo la ecuacin antes descrita, el clculo del ejemplo quedara de la siguiente manera:

32 x 62500
1 = ------------------
2000000

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{

TPMSC = 0b00001101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32
// | | | | | | |____ Clock source Prescaler bit1 = clk/32
// | | | | | |_____ Clock source Prescaler bit2 = clk/32
// | | | | |______ Clock source select bit0 = Bus Clock
// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt disabled

ALFAOMEGA - FREESCALE
274 JUAN CARLOS VESGA FERREIRA

// |__________ Overflow flag

TPMMOD = 62500;

PTBDD_PTBDD6 = 1;

EnableInterrupts; /* enable interrupts */

for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */

if(TPMSC_TOF == 1)
{
TPMSC_TOF = 0;

PTBD_PTBD6 ^= 1;
}
}
}

Del anterior ejemplo es importante mencionar que si los 3 bits dedicados para seleccionar la fuente de
reloj estn en ceros, el mdulo completo permanecer deshabilitado. El ejemplo configura el mdulo para
contar de 0 a 62500 una y otra vez a una frecuencia dada por la frecuencia del bus dividida por el preescalador
(2000000/32). Si el registro de mdulo es cargado con un valor igual a cero, el mdulo contar de 0 a 65535
una y otra vez generando el mayor tiempo posible.
La segunda fuente de reloj puede ser tomada directamente de la frecuencia del cristal que est conectado
al microcontrolador (XCLK). Si la tarjeta no tiene conectado ningn cristal externo esta fuente de reloj no
podr ser utilizada. Si se configura el mdulo de tiempo para funcionar con base en un cristal externo y ste
no est realmente conectado el contador del mdulo, no ser incrementado y por tanto el mdulo de tiempo
no funcionar. Esta fuente de reloj puede ser utilizada cuando se requiere que la frecuencia que emplea el
mdulo de tiempo para trabajar sea mucho ms lenta que la frecuencia del resto del microcontrolador. Un
ejemplo de esto podra ser cuando se necesita generar eventos que tienen un perodo de tiempo muy largo,
digamos de segundos.
El siguiente ejemplo configura el TPM como mdulo de tiempo para utilizar como fuente de reloj el cristal
externo conectado al microcontrolador. Para efectos de este ejemplo se utilizar un cristal externo de 16.384
kilohertz. El mdulo de tiempo ser configurado para utilizar la frecuencia de la fuente de reloj dividida entre
32. Por ltimo, el registro de mdulo ser cargado con un valor de 512 para generar un evento de tiempo
cada segundo (1 hertz). El ejemplo no utiliza interrupciones para detectar los eventos de tiempo, por lo que
el evento de tiempo ser detectado poleando la bandera TOF.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 275

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{

TPMSC = 0b00010101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32
// | | | | | | |____ Clock source Prescaler bit1 = clk/32
// | | | | | |_____ Clock source Prescaler bit2 = clk/32
// | | | | |______ Clock source select bit0 = Bus Clock
// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt disabled
// |__________ Overflow flag

TPMMOD = 512;

PTBDD_PTBDD6 = 1;

EnableInterrupts; /* enable interrupts */

for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */

if(TPMSC_TOF == 1)
{
TPMSC_TOF = 0;

PTBD_PTBD6 ^= 1;
}
}
}

ALFAOMEGA - FREESCALE
276 JUAN CARLOS VESGA FERREIRA

La tercera fuente de reloj puede tomarse directamente de una fuente de reloj externa conectada a un pin del
microcontrolador dedicado para dicha funcionalidad (TCLK). En esta configuracin debe existir una fuente de
reloj externa, la cual provee una seal cuadrada peridica que podr usar el microcontrolador como fuente de
reloj para el mdulo de tiempo. Es importante mencionar que esta fuente de reloj externa es completamente
independiente a la fuente de reloj que utiliza el procesador y algunos otros perifricos para funcionar. Esto
quiere decir que cuando el mdulo de tiempo es configurado para utilizar una fuente de reloj externa, ste
puede funcionar a una frecuencia completamente distinta de la frecuencia del resto del microcontrolador;
esta caracterstica puede usarse para bajar el consumo de potencia del microcontrolador.
El ejemplo siguiente configura el mdulo de tiempo para generar un perodo de tiempo igual a un segundo.
Para efectos de este ejemplo se utilizar una fuente de reloj externa de 10 kilohertz y un preescalador de 1.
Utilizando la ecuacin encontraremos que el valor que necesita ser almacenado en el registro del mdulo
debe ser igual a 10000 cuantas para generar un perodo de un segundo.

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{

TPMSC = 0b01011000;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/1
// | | | | | | |____ Clock source Prescaler bit1 = clk/1
// | | | | | |_____ Clock source Prescaler bit2 = clk/1
// | | | | |______ Clock source select bit0 = External Clock
// | | | |________Clock source select bit1 = External Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt enabled
// |__________ Overflow flag

TPMMOD = 10000;

PTBDD_PTBDD6 = 1;

EnableInterrupts; /* enable interrupts */


for(;;)
{

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 277

__RESET_WATCHDOG(); /* feeds the dog */


}
}
interrupt 7 void TPM_ISR(void)
{
TPMSC_TOF = 0;
PTBD_PTBD6 ^= 1;
}

Los ejemplos mostrados hasta el momento detectan cundo el evento de tiempo es generado poleando la
bandera correspondiente. El ejemplo siguiente configura el TPM como mdulo de tiempo utilizando como
fuente de reloj la frecuencia del bus (2 megahertz). Configura tambin un preescalador igual a 32 y almacena
en el registro de mdulo un valor igual a 62500 para generar un evento de tiempo cada segundo. A diferencia
de los ejemplos anteriores, el nuevo ejemplo configura la interrupcin correspondiente para detectar cundo el
evento de tiempo es generado. Cuando transcurre el perodo de tiempo prefijado, la interrupcin de sobreflujo
de tiempo es generada y el programa ejecuta la correspondiente rutina de servicio de interrupcin. Dentro
de la rutina de servicio de interrupcin la bandera de interrupcin deber ser limpiada para permitir que el
proceso se repita nuevamente.

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{

TPMSC = 0b01001101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32
// | | | | | | |____ Clock source Prescaler bit1 = clk/32
// | | | | | |_____ Clock source Prescaler bit2 = clk/32
// | | | | |______ Clock source select bit0 = Bus Clock
// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt enabled
// |__________ Overflow flag

TPMMOD = 62500;

ALFAOMEGA - FREESCALE
278 JUAN CARLOS VESGA FERREIRA

PTBDD_PTBDD6 = 1;

EnableInterrupts; /* enable interrupts */

for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */
}
}

interrupt 7 void TPM_ISR(void)


{
TPMSC_TOF = 0;
PTBD_PTBD6 ^= 1;
}

Como ya se coment, los canales del TPM pueden ser configurados en forma independiente para generar
bases de tiempo, captura de eventos o modulacin de ancho de pulso. Es importante mencionar que los
diferentes canales, aunque son independientes, comparten la misma fuente de reloj y el mismo preescalador.
Esto quiere decir que lo primero que se deber configurar antes de configurar cualquier canal es la fuente de
reloj y el preescalador que utilizar el perifrico para trabajar, tal como se hizo en los ejemplos anteriores. A
continuacin se explicar cmo configurar un canal para ejecutar cada una de las funciones anteriormente
mencionadas:

Base de tiempo (Output Compare): un canal puede ser configurado para generar bases de tiempo muy
exactas, al igual que la funcionalidad de mdulo descrita anteriormente. Cada canal cuenta con un registro de
comparacin, el cual es usado para configurar el perodo de tiempo. El contador del TPM cuenta siempre en
forma ascendente de 0 a 255 si el canal es de 8 bits, o de 0 a 65535 si el canal es de 16 bits. Cuando el contador
del TPM es igual al valor almacenado en el registro de comparacin del canal, el evento de tiempo de dicho
canal es generado habilitando la bandera del canal correspondiente. Como se coment antes el contador del
TPM debe ser utilizado slo para comparar cuando el perodo de tiempo de un canal ya transcurri.
Si se quiere generar un perodo de tiempo especfico se debe calcular el nmero de incrementos que se
tienen que dar en el contador del TPM para que transcurra el perodo de tiempo deseado. El registro de
comparacin del canal debe ser cargado con el nmero de cuentas que se necesitan para generar el perodo
deseado. Para calcular el nmero de cuentas necesarias se puede utilizar la ecuacin ya descrita. En ejercicios
anteriores se utiliz la ecuacin para calcular qu perodo de tiempo en segundos se generaba bajo un cierto
valor de preescalador, frecuencia de reloj y registro de mdulo. A diferencia de los ejercicios anteriores
ahora despejaremos de la citada ecuacin la variable Registro, puesto que conocemos las variables Perodos,
Preescalador y Frecuencia de reloj. De la mencionada obtendremos la nueva ecuacin quedando de la siguiente
manera:

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 279

tiempo en segundos X frecuencia de reloj


Registro de comparacin = -----------------------------------------------------------
preescalador

Pongamos por ejemplo, que queremos generar un evento de tiempo cada 10 milisegundos con una
frecuencia de reloj igual a 2 megahertz y un preescalador igual a 32. La ecuacin quedara de la siguiente
manera:

0.01 X 2000000
625 = -------------------------
32

Si se tuviera un canal de tiempo de 8 bits no sera posible generar dicho perodo de tiempo, puesto que
el valor resultante no se podra manejar con 8 bits. Siguiendo la nueva ecuacin se puede modificar el valor
del preescalador para intentar que el valor resultante sea menor o igual a 255 y, por tanto, que pueda ser
manejado por un canal de 8 bits. Haciendo el preescalador igual a 128 podramos obtener un valor resultante
menor a 255, quedando de la siguiente manera.

0.01 X 2000000
156.25 = --------------------------
128

Como se puede observar, el valor resultante es menor a 255 pero dicho valor contiene parte entera y parte
decimal. Como se coment anteriormente, los registros del TPM aceptan nicamente valores enteros, lo que
significa que el valor resultante que puede ser cargado en el registro de comparacin del canal puede ser 156
o 157. Ambos valores generaran un e
Si se substituye cualquiera de los 2 valores anteriormente mencionados en la primera ecuacin el perodo
de tiempo resultante ser cercano a 10 milisegundos, pero existir un porcentaje de error. Si utilizamos el
valor ms cercano al calculado (156), el perodo de tiempo resultante utilizando la misma ecuacin sera:

128 x 156
9.984 milisegundos = ------------------
2000000

Podemos concluir que hay casos donde un canal de tiempo de 8 bits puede ser suficiente para generar el
perodo de tiempo deseado; sin embargo, habr casos donde ser necesario utilizar un canal de tiempo de
16 bits para poder generar con precisin el perodo de tiempo deseado. Si utilizamos un canal de tiempo de

ALFAOMEGA - FREESCALE
280 JUAN CARLOS VESGA FERREIRA

16 bits, para el ejemplo anterior, podramos generar con exactitud un perodo de tiempo de 10 milisegundos
con una frecuencia de reloj igual a 2 megahertz y un preescalador igual a 32, puesto que el valor resultante
(625) es un nmero entero sin decimales que puede ser manejado sin problema con 16 bits.
El ejemplo 5 configura el canal 0 del TPM para generar una base de tiempo de 10 milisegundos con una
frecuencia de reloj igual a 2 megahertz y un preescalador igual a 32. El ejemplo configura la interrupcin
correspondiente, la cual ser ejecutada cuando el evento de tiempo sea generado.

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{

TPMSC = 0b00001101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32
// | | | | | | |____ Clock source Prescaler bit1 = clk/32
// | | | | | |_____ Clock source Prescaler bit2 = clk/32
// | | | | |______ Clock source select bit0 = Bus Clock
// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt disabled
// |__________ Overflow flag

TPMC0SC = 0b01010000;
// |||| ||||
// | | | | | | | |__ unused
// | | | | | | |___ unused
// | | | | | |____ Edge/level select A
// | | | | |_____ Edge/level select B
// | | | |_______ Mode select A
// | | |________ Mode select B
// | |_________ channel interrupt enabled
// |_________ channel flag
TPMC0V = 625;
PTBDD_PTBDD6 = 1;

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 281

EnableInterrupts; /* enable interrupts */


for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */
}
}

interrupt 5 void TPM_Channel0_ISR(void)


{
TPMC0SC_CH0F = 0;

TPMC0V += 625;
PTBD_PTBD6 ^= 1;
}

Captura de eventos (Input Capture): esta funcin permite capturar eventos o transiciones sobre un pin en
especfico. Cada canal de tiempo tiene asignado un pin que puede ser usado como pin de propsito general
o puede ser ligado a su respectivo canal de tiempo. El canal de tiempo puede ser configurado para detectar
transiciones positivas o transiciones negativas. La captura de eventos puede ser por poleo o por medio de
una interrupcin, donde dicha interrupcin es generada cuando se genera una transicin sobre el pin ligado
al canal de tiempo. Para lograr una deteccin mas efectiva de las transiciones es recomendable utilizar una
interrupcin. Cuando el canal es utilizado para capturar eventos, el registro de comparacin del canal puede
ser utilizado para medir la frecuencia con que las transiciones son generadas. El registro de comparacin
del canal es incrementado al mismo tiempo que el contador del mdulo de tiempo, lo que quiere decir que,
sabiendo la cantidad de veces que se increment el registro de comparacin del canal entre transicin, y
transicin se puede determinar el tiempo transcurrido.
El ejemplo siguiente configura un canal de tiempo para detectar transiciones positivas. Dichas transiciones
son detectadas por medio de una interrupcin. Dentro de la interrupcin en este nuevo ejemplo se prende y
apaga un led cada vez que se genera dicho servicio de interrupcin.

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */
void main(void)
{
TPMSC = 0b00001101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32

ALFAOMEGA - FREESCALE
282 JUAN CARLOS VESGA FERREIRA

// | | | | | | |____ Clock source Prescaler bit1 = clk/32


// | | | | | |_____ Clock source Prescaler bit2 = clk/32
// | | | | |______ Clock source select bit0 = Bus Clock
// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode disabled
// | |_________ Overflow interrupt disabled
// |__________ Overflow flag

TPMC0SC = 0b01000100;
// |||| ||||
// | | | | | | | |__ unused
// | | | | | | |___ unused
// | | | | | |____ Edge/level select A
// | | | | |_____ Edge/level select B
// | | | |_______ Mode select A
// | | |________ Mode select B
// | |_________ channel interrupt enabled
// |_________ channel flag

PTADD_PTADD0 = 0;
PTBDD_PTBDD6 = 1;

EnableInterrupts; /* enable interrupts */

for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */
}
}

interrupt 5 void TPM_Channel0_ISR(void)


{
TPMC0SC_CH0F = 0;

PTBD_PTBD6 ^= 1;
}

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 283

Modulacin de ancho de pulso (Pulse Width Modulator): La modulacin de ancho de pulso


es la variacin del ciclo de trabajo de una seal cuadrada peridica, en donde el mdulo permite
configurar qu porcentaje del perodo de la seal cuadrada estar en un nivel alto o 1 lgico y qu
porcentaje del perodo estar en un nivel bajo o 0 lgico. Dicha seal cuadrada es generada por un pin
del microcontrolador que puede ser configurado como pin de propsito general o como modulador
de ancho de pulso. Una vez que la funcionalidad de modulacin de ancho de pulso es habilitada,
una seal cuadrada ser reflejada en el pin antes mencionado. Es importante indicar que aunque el
ancho del pulso sea incrementado o decrementado, el perodo de dicha seal cuadrada se conservar
sin cambio alguno. Este mdulo permite cambiar el ancho del pulso en cualquier momento y tantas
veces como se desee. Por lo general, la mayora de los moduladores de ancho de pulso son mdulos
de 8 bits, esto significa que la precisin del incremento o decremento del ancho del pulso est dado
por 100 por ciento dividido entre 255. Esto quiere decir que el porcentaje del ancho del pulso puede
ser incrementado o decrementado con una precisin de 0.392 por ciento. Para modificar el ancho del
pulso basta con escribir un valor entre 0 y 255 en el registro del mdulo, una vez realizada la escritura
a dicho registro el ancho del pulso ser cambiado automticamente y permanecer igual hasta que un
nuevo valor sea escrito en el registro.
Existen algunos moduladores de ancho de pulso donde el perodo de la seal cuadrada generada puede
ser ajustado e incluso ser variable si se desea, al igual que el ancho del pulso. En este tipo de moduladores
la forma de calcular el ancho del pulso de salida es un poco diferente a la forma anteriormente mencionada.
El ejemplo que se presenta a continuacin configura un canal de tiempo como modulador de ancho de pulso
que permite configurar el perodo de la seal as como el ancho del pulso; para esto el perifrico cuenta con
2 registros, el primero de ellos contiene la cantidad de cuentas o escalones en que ser dividida la seal
cuadrada peridica y el segundo contiene la cantidad de cuentas o escalones donde la seal de salida estar
en un nivel alto o 1 lgico. Por ejemplo, queremos dividir la seal cuadrada en 1000 partes y que en 900 de
esas partes la seal de salida permanezca en un nivel alto o 1 lgico. Esto, dicho en otras palabras significar
que 90 por ciento del tiempo la seal de salida tendr un nivel alto o 1 lgico y slo 10 por ciento tendr un
nivel bajo o 0 lgico.
El nuevo ejemplo configura un canal de tiempo como modulador de ancho de pulso, donde la seal de
salida estar 75 por ciento del tiempo en alto o 1 lgico y slo 25 por ciento restante en bajo o 0 lgico.

Programa ejemplo

#include <hidef.h> /* for EnableInterrupts macro */


#include derivative.h /* include peripheral declarations */

void main(void)
{
TPMSC = 0b00101101;
// |||| ||||
// | | | | | | | |___ Clock source Prescaler bit0 = clk/32
// | | | | | | |____ Clock source Prescaler bit1 = clk/32
// | | | | | |_____ Clock source Prescaler bit2 = clk/32

ALFAOMEGA - FREESCALE
284 JUAN CARLOS VESGA FERREIRA

// | | | | |______ Clock source select bit0 = Bus Clock


// | | | |________Clock source select bit1 = Bus Clock
// | | |________ PWM mode enabled
// | |_________ Overflow interrupt disabled
// |__________ Overflow flag

TPMC0SC = 0b00001000;
// |||| ||||
// | | | | | | | |__ unused
// | | | | | | |___ unused
// | | | | | |____ Edge/level select A
// | | | | |_____ Edge/level select B
// | | | |_______ Mode select A
// | | |________ Mode select B
// | |_________ channel interrupt disabled
// |_________ channel flag
TPMMOD = 1000;
TPMC0V = 750;
EnableInterrupts; /* enable interrupts */

for(;;)
{
__RESET_WATCHDOG(); /* feeds the dog */
}
}

14.5 MDULO DE COMPARACIN ANALGICO


En el diseo de aplicaciones electrnicas el uso de amplificadores operacionales es muy comn, desempeando
funciones de amplificacin, comparacin, filtrado, entre otras aplicaciones, lo cual resulta muy til y prctico
a la hora de realizar desarrollos tecnolgicos; sin embargo, muchas veces, segn la aplicacin, se requiere el
uso de al menos un amplificador que en la mayora de los casos cumple las funciones de comparacin entre
niveles de tensin; el solo hecho de requerirlo obliga a que el diseador incorpore un circuito integrado que
contenga el amplificador operacional requerido, complementndose con el hecho de que para energizar el
circuito integrado del amplificador operacional se debe contar con niveles de tensin diferentes al suministrado
al microcontrolador, aumentando no slo el tamao del hardware requerido sino tambin el consumo de
potencia de la aplicacin desarrollada.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 285

Este problema presente hasta el momento ha sido superado por la familia de microcontroladores S08, gracias
a la integracin de un mdulo de comparacin analgico que permite cumplir no solamente con los fines propios
de un amplificador operacional sino que adems elimina la posibilidad de incorporar hardware adicional, evita
incluir nuevos niveles de tensin de alimentacin y, lo ms importante, con un consumo de potencia muy bajo.

MDULO DBG

TCLK
PTA5//IRQ/TCLK/RESET
MDULO MTIM
PTA4//ACMPO/BKGD/MS
SCL
PTA3//KBIP3/SCL/ADP3
MDULO I2C SDA PTA2//KBIP2/SDA/ADP2

PORT A
4
MDULO KBI 4

ACMP0
VDD MDULO COMPARADOR ACMP-
VSS
(ACMP) PTA1/KBIP1/ADP1/ACMP_
ACMP+
PTA0/KBIP0/TPMCH0/ADP0/ACMP+
4

FIGURA 14.13
Figura diagrama de bloques del modulo acmp y los pines que lo componen

Caractersticas del mdulo ACMP


Operacin del mdulo en el rango completo de alimentacin.
Menos de 40 mV de entrada de FOCET.
Menos de 15 mV de histresis.
Seleccin del tipo de flanco segn el proceso de comparacin: ascendente, descendente o ascendente-
descendente.
Opcin de comparacin con un nivel de referencia interna.
Opcin de visualizar el resultado de la comparacin a travs del pin ACMPO.

ALFAOMEGA - FREESCALE
286 JUAN CARLOS VESGA FERREIRA

BUS INTERNO
REFERENCIA ACMP
INTERNA INTERRUPT
ACBGS ACIE REQUEST
STATUS ACF
ACME
Y CONTROL
ACOPE

ACMOD

set ACF
ACMP+

+ CONTROL
_ INTERRUPCIN

ACMP_ COMPARADOR

ACMPO

FIGURA 14.14
Figura esquema interno del mdulo ACMP

Segn el esquema observado en la figura anterior, el mdulo de comparacin analgico, ACMP, cuenta con
tres pines, de los cuales dos corresponden a las entradas analgicas a comparar (ACMP+ y ACMP-) y el tercer
pin corresponde una salida digital que ilustra el resultado de la comparacin (ACMPO). En cada uno de los
dos pines de entrada se pueden aplicar niveles de tensin desde 0 V hasta el valor del voltaje de alimentacin
(VDD), teniendo en cuenta que ACMP+ corresponde a la entrada no inversora (voltaje considerado como la
referencia positiva de comparacin) y ACMP- corresponde a la entrada inversora (voltaje considerado como
la referencia negativa de comparacin).
El mdulo ACMP presenta adems un registro de control de 8 bits, el cual permitir realizar la configuracin
deseada del presente mdulo. A continuacin se explica en detalle la configuracin de este registro denominado
ACMPSC y el significado de cada uno de sus bits.

Registro control y estatus ACMPSC


Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Leer ACO
Escribir ACME ACBGS ACF ACIE ACOPE ACMOD

SIN IMPLEMENTAR

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 287

ACME: Este bit es el encargado de permitir la habilitacin del mdulo de comparacin.


1: Habilita el funcionamiento del mdulo
0: Deshabilita el funcionamiento del mdulo

ACBGS: Permite seleccionar el nivel de referencia deseado a comparar con la seal de entrada presente en
el pin correspondiente a la entrada inversora; este nivel de referencia puede ser interno o externo.
1: Habilita la opcin de establecer un voltaje de referencia interno conocido como Bandgap, el cual
puede oscilar entre 1.18 V y 1.21V, tomado como valor tpico 1.20 V. Este nivel de tensin ser
conectado a travs del pin correspondiente a la entrada no inversora del comparador (ACMP+)
de manera interna.
0: Permite establecer un nivel de referencia externo, conectado a travs del pin de la entrada no
inversora del comparador, el cual podr oscilar desde 0 hasta 3.8 V.

ACF: indica la ocurrencia de la interrupcin propia del mdulo de comparacin, tomando valores de 1 o
0, en caso de ocurrencia de comparacin entre niveles de tensin o no, respectivamente.
1: Se ha producido una comparacin
0: No ha ocurrido una comparacin

ACIE: Permite la habilitacin o no de la interrupcin propia del mdulo de comparacin analgico por
ejecucin del proceso de comparacin.
1: Interrupcin por comparacin entre niveles Habilitada
0: Interrupcin por comparacin entre niveles Deshabilitada

ACO: Permite la visualizacin del resultado de la comparacin, siempre y cuando la interrupcin por
comparacin se encuentre habilitada; de lo contrario ser leda siempre como un nivel lgico 0.
1: El nivel de tensin presente en ACMP+>ACMP-
0: El nivel de tensin presente en ACMP+<ACMP-, o la interrupcin por proceso de comparacin
se encuentra deshabilitada (ACIE=0).

ACOPE: Habilita la visualizacin externa del resultado de un proceso de comparacin.


1: Permite manejar la salida del mdulo segn la configuracin establecida y visualizar el resultado
de la comparacin en modo externo, es decir, un reflejo del valor presente en el bit ACO.
0: La salida del mdulo comparador no se encuentra habilitada.

ACMOD: Permite configurar el modo en el cual la interrupcin correspondiente al mdulo de comparacin


ser activada.
00:Salida del comparador con flanco descendente
01: Salida del comparador con flanco ascendente
10: Salida del comparador con flanco descendente
11: Salida del comparador con flanco ascendente o descendente

ALFAOMEGA - FREESCALE
288 JUAN CARLOS VESGA FERREIRA

14.6 MDULO DE CONVERSIN ANLOGO/DIGITAL

En captulos anteriores se realiz el estudio del conversor A/D existente en los modelos de la familia HC08JK1/
JK3/JL3, el cual constaba de 8 bits; este nuevo modelo ofrece la gran ventaja de realizar conversiones con
mayor precisin debido a que utiliza una cantidad de 10 bits, con la posibilidad de ofrecerle al usuario la
alternativa de conservar el formato antiguo de conversin a 8 bits, o el nuevo a 10 bits, utilizando como
mtodo de conversin la tcnica de aproximaciones sucesivas.

Caractersticas del mdulo de conversin A/D


Utiliza el mtodo de aproximaciones sucesivas para realizar la conversin A/D, con una resolucin de
10 bits.
Presenta la posibilidad de manipular hasta 28 entradas anlogas.
Respuesta de conversin ajustable a 8 o 10 bits.

PTA4//ACMPO/BKGD/MS
SCL
PTA3//KBIP3/SCL/ADP3
MDULO I2C SDA PTA2//KBIP2/SDA/ADP2

PORT A
4
MDULO KBI 4

ACMP0
MDULO ACMP ACMP-
PTA1/KBIP1/ADP1/ACMP_
ACMP+
PTA0/KBIP0/TPMCH0/ADP0/ACMP+
4
CONVERSOR A/D
PTB7/SCL/EXTAL
10 BITS PTB6/SDA/XTAL
4
TPMCH0
MDULO (TPM) TPMCH5

SS PTB5/TPMCH1/SS
MISO
MDULO (SPI) PTB4/MISO
MOSI
PORT B

SPSCK PTB3/KBIP7/MOSI/ADP7
PTB2/KBIP6/SPSCK/ADP6
RxD
PTB1/KBIP5/TxD/ADP5
MDULO (SCI) TxD
PTB0/KBIP4/RxD/ADP4
VSS
VDD REGULADOR DE VOLTAJE
VDDA
VSSA
VREFH
VREFL

FIGURA 14.15
Diagrama a bloque de los pines pertenecientes al modulo de conversin analgico/digital

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 289

Permite la configuracin de utilizar un modo de conversin para una sola conversin o realizar
conversiones continuas.
Tiempo de conversin ajustable.
Presenta la opcin de utilizar interrupciones en el momento de culminar un proceso de conversin A/D.
Seleccin de seal de reloj de entrada con la opcin de cuatro posibles fuentes diferentes.
Permite el uso de una fuente de reloj asncrona para operaciones con baja seal de ruido.
Presenta adicionalmente la posibilidad de habilitar una interrupcin cuando se presenten valores
menores, iguales o superiores a un valor programado previamente.
Entre otras caractersticas mejoradas con relacin a los mdulos de conversin A/D implementados
anteriormente.

DESCRIPCIN DEL FUNCIONAMIENTO DEL ADC


El microcontrolador tiene ocho canales de conversin A/D, se encuentran distribuidos en los pines PTA[3:0]
y PTB[3:0]. Existe internamente un multiplexor anlogo que se encarga de seleccionar el canal para efectuar la
conversin y este voltaje de entrada se conoce como ADCVIN. El ADCVIN es convertido mediante el mtodo
de aproximaciones sucesivas basado en contadores; cuando la conversin est completa la bandera de fin de
conversin y la bandera de interrupcin por fin de conversin toman el valor 1 lgico.
A continuacin se presenta el diagrama lgico interno del mdulo ADC.

Compare true
3 ADCSC 1 ADCCFG
COCO
IEN

Async
ADICLK
complete

ADLSMP
ADLPC
ADTRG
ADCO
ADCH

MODE

Clock Gen
ADIV

1 2

ADACK

MCU STOP ADCK Clock Bus Clock


Control Sequencer DMde
ADHWT +2
ALTCLK
sample

transfer
convert
Inflalizo

abort

AD0
AIEN 1 Interrupt
ADVIN SAR Convert COCO 2

AD27

VREFH Data registers


VREFL
Sum

Compare true 3
Compare
Logic
ACFGT
Value

Compare Value Registers ADCSC2

FIGURA 14.16 Modelo interno del Conversor A/D

ALFAOMEGA - FREESCALE
290 JUAN CARLOS VESGA FERREIRA

Asignacin de canales del conversor A/D

ADCH CANAL ENTRADA Pin control ADCH CANAL ENTRADA Pin control
00000 AD0 PTA0/ADP0 ADPC0 10000 AD16 VSS N/A
00001 AD1 PTA1/ADP1 ADPC1 10001 AD17 VSS N/A
00010 AD2 PTA2/ADP2 ADPC2 00010 AD18 VSS N/A
00011 AD3 PTA3/ADP3 ADPC3 00011 AD19 VSS N/A
00100 AD4 PTA0/ADP4 ADPC4 00100 AD20 VSS N/A
00101 AD5 PTA1/ADP5 ADPC5 00101 AD21 VSS N/A
00110 AD6 PTA2/ADP6 ADPC6 00110 AD22 RESERVADO N/A
00111 AD7 PTA3/ADP7 ADPC7 00111 AD23 RESERVADO N/A
01000 AD8 VSS N/A 01000 AD24 RESERVADO N/A
01001 AD9 VSS N/A 01001 AD25 RESERVADO N/A
01010 AD10 VSS N/A 01010 AD26 SENSOR DE N/A
TEMPERATURA
01011 AD11 VSS N/A
01011 AD27 BANDGAP INTERNO N/A
01100 AD12 VSS N/A
01100 --- RESERVADO N/A
01101 AD13 VSS N/A
01101 VREFH VDD N/A
01110 AD14 VSS N/A
01110 VREFL VSS N/A
01111 AD15 VSS N/A
01111 MODULO ODD NINGUNO N/A

A continuacin se explicar en detalle cada uno de los registros que hacen parte de la configuracin,
manipulacin y uso del mdulo de conversin A/D para el nuevo modelo correspondiente a la familia
S08QG.

REGISTRO DE CONTROL Y ESTADO DEL A/D (ADCSC1)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer COCO
Escribir AIEN ADCO CH4 CH3 CH2 CH1 CH0

Este registro se encarga de controlar y visualizar el estado del mdulo de conversin A/D, permitiendo
configurar parmetros importantes como son: indicadores de conversin completa, uso de interrupciones,
modo de conversin (continua o sencilla) y seleccin de canales.
El significado de cada uno de los bits bandera pertenecientes a este registro se describe a continuacin.

COCO: bit de conversin completa


Cuando el AIEN se encuentra en 0 lgico, se puede utilizar el bit COCO como indicador de fin de conversin.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 291

1: Conversin Completa (AIEN = 0)


0: Conversin No Completa (AIEN = 0)
Cuando el bit AIEN est en 1 lgico (habilitacin de interrupcin), el bit COCO tendr siempre el valor
0 lgico.

AIEN: Habilitacin de la interrupcin de conversin A/D


Cuando este bit se coloca en 1, se habilita la opcin de interrupcin al finalizar la conversin A/D. El bit de
interrupcin es limpiado cuando el dato es ledo.
1: Habilitar interrupcin por fin de Conversin A/D
0: Deshabilitar interrupcin por fin de Conversin A/D

ADCO: bit de conversin continua


Cuando este bit se encuentra en 1, constantemente va actualizando el valor del registro ADR (registro donde se
almacena el valor de la conversin) y slo una conversin es almacenada cuando este bit est en 0 lgico.
1: Conversin A/D Continua
0: Una sola conversin A/D

ADCH[4:0]: bits de seleccin de canales de conversin A/D


Se debe tener en cuenta que con slo 5 bits se configura el canal a utilizar para la conversin y adems el
tipo de seal a recibir, ya sea analgica o digital. En la tabla anterior se muestran los diferentes valores que
pueden tomar ADCH[4:0] para seleccionar el canal deseado.

REGISTRO 2 DE CONTROL Y ESTATUS

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer ADACT 0 0
Escribir ADTRG ACFE ACFGT R R

ADACT: Conversin activa


Segn el valor del bit ADACT se puede saber el estado actual del proceso de una conversin.
1: Conversin en Progreso
0: Conversin Completa

ADTRG: Seleccin de trigger en la conversin A/D


Permite la seleccin del tipo de trigger que se desea utilizar; existen dos tipos de trigger disponibles: trigger
por hardware y trigger por software.
1: Seleccin de trigger por Hardware
0: Seleccin de trigger por Software

ALFAOMEGA - FREESCALE
292 JUAN CARLOS VESGA FERREIRA

ACFE: habilitar la funcin Compare


Este bit en especial permite habilitar la funcin de comparacin del valor resultante de un proceso de conversin
A/D, con un valor programado previamente, detectando su condicin si fuese mayor, igual o menor que la
establecida por defecto.

1: Habilita la funcin Compare


0: Deshabilita la funcin Compare

ACFGT: habilita funcin de comparacin mayor que


El bit anterior habilit simplemente la funcin de comparacin, mientras que este bit (ACFGT) especifica el
tipo de comparacin a realizar entre el valor resultante y el predefinido por el usuario, indicando si es menor,
igual o mayor.
1: Habilita la comparacin si el valor resultante es mayor o igual que el preestablecido.
0: Habilita la comparacin si el valor resultante es menor que el preestablecido.

REGISTRO ADCRH

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0 0 0 ADR9 ADR8
Escribir

REGISTRO ADCRL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 ADR0
Escribir

En estos dos registros se almacena el valor correspondiente al valor resultante del proceso de conversin
A/D; como se haba mencionado antes, el mdulo permite realizar una conversin con 8 o 10 bits de resolucin,
en donde, para el caso de la conversin a 10 bits, los 8 bits de menos peso del valor resultante sern visualizados
en el registro ADCRL y los dos bits de ms peso sern adjudicados en el registro ADCRH, ubicados en los
bits ADR9 y ADR8, respectivamente.
Para el caso de la conversin a 8 bits, los 8 bits correspondientes al valor resultante sern visualizados
en el registro ADCRL y los dos bits de ms peso del registro ADCRH (ADR9 y ADR8) tomarn cada uno el
valor 0 lgico.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 293

REGISTRO: VALOR DE COMPARACIN (PARTE ALTA) ADCCVH

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0 0
Escribir ADVC9 ADVC8

REGISTRO: VALOR DE COMPARACIN (PARTE BAJA) ADCCVL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir ADVC7 ADVC6 ADVC5 ADVC4 ADVC3 ADVC2 ADVC1 ADVC0

En estos dos registros se almacena el valor con el cual el usuario podr realizar una comparacin con
el valor generado por el mdulo de conversin, tomndose como criterio, al igual que en los dos registros
anteriores, si se desea trabajar a 8 o 10 bits, respectivamente.

REGISTRO DE CONFIGURACIN ADCCFG


Este registro permite establecer la configuracin del conversor anlogo-digital en parmetros como, por
ejemplo: seleccin del modo de operacin, fuente de reloj, divisin de frecuencia del reloj y configuracin de
modo de bajo consumo de potencia.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir ADLPC ADIV ADLMSP MODE ADICLK

ADLPC: Este bit permite establecer la configuracin en modo de bajo consumo de potencia en el
microcontrolador a la hora de hacer uso del mdulo de conversin analgica-digital, mediante el control de la
velocidad de conversin; a mayor velocidad, mayor consumo de potencia, optimizando con ello el consumo
de potencia cuando no se requiere gran cantidad de muestras.
1: Configuracin de bajo consumo de potencia.
0: Configuracin de alta velocidad.

ADIV[6:5] Selector del divisor del reloj. Permite configurar el factor de divisin del reloj para realizar el
proceso de conversin A/D. En la siguiente tabla se ilustra segn el valor adjudicado a la seccin ADIV el
correspondiente factor de divisin.

ALFAOMEGA - FREESCALE
294 JUAN CARLOS VESGA FERREIRA

SELECCIN DE DIVISIN DEL RELOJ

ADIV RADIO DE DIVISIN DIVISIN DEL RELOJ


00 1 RELOJ
01 2 RELOJ/2
10 4 RELOJ/4
11 8 RELOJ/8

ADLSMP: Este bit permite habilitar el modo de configuracin de tiempo cuando se desea establecer espacios
muestrales en corto y en largo tiempo.
1: Configuracin de tiempo largo entre muestras
0: Configuracin de tiempo corto entre muestras

MODE [3:2] Seleccin del modo de conversin. Permite seleccionar entre operaciones de 8 0 10 bits. A
continuacin se ilustra una tabla con los valores correspondientes al tipo de configuracin establecido segn
el valor de los bits de la seccin MODE.

MODOS DE CONVERSIN

MODO DESCRIPCIN DEL MODO DE CONVERSIN A/D


00 CONVERSIN A 8 BITS (N = 8)
01 RESERVADO
10 CONVERSIN A 10 BITS (N = 10)
11 RESERVADO

ADICLK [1:0] Selector de reloj de entrada. Establece la seleccin de la fuente del reloj de entrada para
realizar el proceso de conversin A/D. En la siguiente tabla se muestra segn el valor del campo ADICLK
el tipo de fuente establecida para realizar el proceso de conversin.

SELECCIN DEL RELOJ DE ENTRADA

ADICLK SELECCIN DE FUENTE DE RELOJ


00 RELOJ DE BUS
01 RELOJ DE BUS DIVIDIDO POR 2
10 RELOJ ALTERNO (ALTCLK)
11 RESERVADO

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 295

REGISTRO DE CONTROL 1 PARA PINES A/D (APCTL1)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir ADPC7 ADPC6 ADPC5 ADPC4 ADPC3 ADPC2 ADPC1 ADPC0

REGISTRO DE CONTROL 2 PARA PINES A/D (APCTL2)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir ADPC15 ADPC14 ADPC13 ADPC12 ADPC11 ADPC10 ADPC9 ADPC8

REGISTRO DE CONTROL 3 PARA PINES A/D (APCTL3)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir ADPC23 ADPC22 ADPC21 ADPC20 ADPC19 ADPC18 ADPC17 ADPC16

Los registros anteriores permiten habilitar o deshabilitar los diferentes canales que se usarn como entradas
anlogas.
ADPCXX : Canales que podrn ser seleccionados como entradas anlogas
1: Canal Deshabilitado
0: Canal Habilitado

TIEMPO TOTAL DE CONVERSIN


Uno de los factores ms importante a la hora de realizar cualquier proceso de conversin analgico a digital
es el tiempo de conversin; este tiempo depende del tiempo muestral (establecido en el registro ADLSMP),
como tambin de la frecuencia del bus, del modo de conversin (si es a 8 o 10 bits) y de la frecuencia del reloj
de conversin (FADCK).
El tiempo de conversin puede variar, dependiendo de la configuracin establecida por el usuario segn
la valoracin establecida en cada uno de los parmentros antes mencionados. A continuacin se ilustra una
tabla que permite cuantificar el tiempo de conversin segn los valores establecidos.

ALFAOMEGA - FREESCALE
296 JUAN CARLOS VESGA FERREIRA

Tiempo de conversin vs. condiciones de control

Tipo de conversin ADICLK ADLSMP Tiempo de conversin mximo


Sencilla o primera continua a 8 bits 00,01,10 0 20 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 10 bits 00,01,10 0 23 Ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 8 bits 00,01,10 1 40 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 10 bits 00,01,10 1 43 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 8 bits 11 0 5 us + 20 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 10 bits 11 0 5 us + 23 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 8 bits 11 1 5 us + 40 ciclos de ADCK + 5 ciclos del reloj del bus
Sencilla o primera continua a 10 bits 11 1 5 us + 43 ciclos de ADCK + 5 ciclos del reloj del bus
Continuas posteriores a 8 bits
00,01,10,11 0 17 ciclos de ADCK
FBUS>FADCK
Continuas posteriores a 10 bits
00,01,10,11 0 20 ciclos de ADCK
FBUS>FADCK
Continuas posteriores a 8 bits
00,01,10,11 1 37 ciclos de ADCK
FBUS>FADCK/11
Continuas posteriores a 10 bits
00,01,10,11 1 40 ciclos de ADCK
FBUS>FADCK/11

Se debe tener en cuenta que el tiempo mximo de conversin es determinado por la fuente de reloj
seleccionada y el factor de divisin establecido. Como se mencion antes, la fuente de reloj es seleccionada
por ADICLK y el factor de divisin por los bits que conforman la seccin ADIV.

Inicializacin y operacin del ADC


Cuando se desea utilizar el conversor A/D se debe efectuar los siguientes pasos para la configuracin
ptima:

1. Configurar el registro ADCLK indicando la frecuencia para el preescalador de conversin A/D.


2. Configurar el registro ADSCR, indicando lo siguiente:
a. Habilitar el bit de interrupcin, indicando fin de conversin.
b. Configurar el tipo de conversin, ya sea continua o una muestra.
c. Definir el canal de conversin A/D.

Considerando que el voltaje de referencia es 5 V obtenemos que:

Resolucin = 5 19.6 mV
2 _1
8

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 297

Error de cuantizacin

1 5
= LSB = = 9.8 mV
2 2(28_1)

Ejemplo de configuracin y uso del mdulo ADC


void adc_init(void) {

ADCSC1 = 0x5F; /* Habilita interrupciones


Deshabilita conversiones continuas
Deshabilta el ADC encendiendo todos los pines de ADCH */
ADCSC2 = 0x00; /* Seleccin inicio de conversin por Software*/
ADCCFG = 0x0B; /* ADIV=input clock/8
MODE=10bit conversion
ADICLK=bus clock */
APCTL1 = 0x0E; /* Habilita pines del 1 al 3 como entradas del
ADC*/
} //end adc_init

interrupt 19 void ADC_ISR(void) {


ADC_val_H = ADCRH; // Parte alta de la conversin (Bits 8 y 9)
ADC_val_L = ADCRL; // Parte baja de la conversin (Bits 7 al 0)
}

MODULOS DE COMUNICACIONES CON EL S08


Las comunicaciones forman parte del dia a dia en caso todos los sistemas basados en microcontroladores
por poner un ejemplo quien pudiera imaginar hoy en dia una computadora personal sin un puerto serial o
simplemente el Internet. Como se puede percibir este ejemplo refleja como las comunicaciones nos permiten
mantenernos informados, y por lo cual es importante que un microcontrolador cuente no solo con una opcin
de comunicacin si no con varias.
A continuacin trataremos los tipos de comunicaciones digitales bsicas existentes en los
microntroladores

Definiciones
Existen tres tipos bsicos de sistema de comunicaciones

Simplex.
Half- Duplex.
Full- Duplex.

ALFAOMEGA - FREESCALE
298 JUAN CARLOS VESGA FERREIRA

Simplex. En este esquema de comunicaciones la informacin viaja de un sentido a otro. Un ejemplo tpico de
este esquema de comunicaciones es el de un Radio Receptor de FM o AM. Como se muestra en la figura.

Half Duplex. Este sistema es uno de los mas utilizados porque permite, comportarse en un instante de
tiempo como un transmisor y en otro tiempo pasar a ser un receptor. Ver figura.

Full- Duplex. Es el mejor esquema de comunicacion porque permite el envio de informacion todo el tiempo
en ambos sentidos, es decir funciona tanto como receptor y transmisor al mismo momento. Ver figura. El
ejemplo mas palpable de este esquema es el

Comunicacin Half-Duplex
C1 C2

Comunicacin Full-Duplex
C1 C2

Comunicacin Simplex
C1 C2

FIGURA 14.17
Sistemas bsicos de Comunicaciones.

Estos esquemas de comunicaciones como pueden darse cuenta solo nos indican como viaja el flujo de
informacin, sin embargo no nos indican el como lo realizan. En general podemos clasificar las comunicaciones
por la forma en que envian informacin en:
Seriales. En este tipo la informacin viaja bit a bit. Existen dos tipos de comunicaciones seriales:

A) Sincronas.
B) Asincronas.

Paralelas.
A diferencia del serial en este tipo la informacin se enva en grupo de bits, por lo general en paquetes de 8
bits.

Protocolo. Un protocolo es el conjunto de reglas necesarias para garantizar que la informacin pueda
enviarse de un origen a un destino. Es necesario que un protocolo cuente con la definicin del medio por el

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 299

que enviar la informacin y la lgica necesaria para lograr establecer la comunicacin. Por el enfoque de
este libro no se realizarn las definiciones del modelo de referencia OSI (Open Structure Interface) pero igual
se har referencia a este.

14.7 MDULO INTERFACE DE COMUNICACIONES SERIALES (SCI)


Uno de los principales mdulos de la familia de microcontroladores S08Q es el mdulo interface de
comunicaciones seriales, el cual brinda la posibilidad de establecer una forma fcil y rpida de establecer
interfaces de comunicacin con diferentes dispositivos y con rutinas de comunicacin de alta envergadura,
como es el caso de tcnicas de deteccin de errores debidos a diferentes fuentes como, por ejemplo: el ruido,
la paridad o errores en la trama de bits; causas frecuentes de error en este tipo de sistemas, los cuales son
detectados con gran facilidad sin requerir cdigos adicionales complicados que lo nico los cuales solamente
provocan retardos en el proceso de comunicacin y que en muchos casos resultan inefectivos.

PTB7/SCL/EXTAL
PTB6/SCL/XTAL

SS PTB5/TPMCH1/SS
MDULO INTERFACE MISO
PTB4/MISO
SERIAL PERIFRICA MOSI
PORT B

SPSCK PTB3/KBIP7/MOSI/ADP7
SPI PTB2/KBIP6/SPSCK/ADP6

MODULO INTERFACE DE RxD


PTB1/KBIP5/TxD/ADP5
COMUNICACIN SERIAL TxD
PTB0/KBIP4/RxD/ADP4
SCI

FIGURA 14.18
Diagrama a bloque de los pines del Microcontrolador que hacen parte del mdulo SCI

Caractersticas del mdulo SCI


Comunicacin Full-duplex con formato de tipo NRZ (No retorno a cero).
Doble buffer de transmisin y recepcin con la particularidad de ser habilitados o no por separado.
Posee un mdulo divisor de frecuencia programable de 13 bits.
Presenta manejador de interrupciones indicando los siguientes eventos:
Registro de transmisin vaco y transmisin completa.
Recepcin de datos completa.
Recepcin fuera de rango, error de paridad y error por ruido.

ALFAOMEGA - FREESCALE
300 JUAN CARLOS VESGA FERREIRA

Deteccin de receptor deshabilitado.


Deteccin de paridad por hardware.
Longitud del valor a transmitir programable a 8 o 9 bits.
Y muchas otras caractersticas especiales que hacen de este mdulo una herramienta valiosa a la hora
de desarrollar aplicaciones que requieran transferencia de datos serialmente.

Dentro de los modos de operacin que presenta este mdulo se pueden mencionar:
Modo de transmisin de datos a 8 o 9 bits.
Modo de parada, en el cual el mdulo SCI congela su valor actual mientras se mantenga este modo
activo.
Modo cclico o de bucle.
Modo de cableado sencillo.
A la hora de programar las rutinas de comunicaciones serie se pueden seguir dos caminos distintos: espera
activa o interrupciones. Al utilizar espera activa todas las interrupciones estn deshabilitadas. Es el propio
software el que debe determinar cundo se puede enviar un dato y cundo hay un dato recibido listo para
ser ledo; esto se realiza monitoreando el registro de estado del SCI; cuando se detecta que ha ocurrido
algn suceso se acta en consecuencia.
Cuando se realiza una rutina de comunicacin basada en el sistema de espera activa, este presenta la ventaja
de que conceptualmente es muy sencillo y los programas son fciles de realizar; sin embargo, est consumiendo
recursos de microcontrolador que pueden ser utilizados en otras tareas que lo requieran realmente. Sin embargo,
utilizando el mtodo de interrupciones se consigue liberar a la CPU de trabajos intiles, permitiendo que el
mismo sistema nos avise qu ha ocurrido, actuando de manera eficaz ante la actividad que requiera atencin
en un instante dado. Por ejemplo, cada vez que llega un dato nuevo se activa una interrupcin. La CPU deja de
hacer lo que estaba haciendo y pasa a atender la interrupcin. Se lee el carcter que ha llegado y se contina con
lo que estaba haciendo. Las interrupciones tienen el inconveniente de que son ms complicadas de entender y
los programas son un poco ms complejos, pero a cambio el programa es ms eficaz.

Fuentes de interrupciones en el mdulo SCI


Existen cuatro fuentes de interrupcin dedicadas exclusivamente al proceso de comunicacin basadas en
el mdulo SCI. Tal como se estudi anteriormente, en el manejo de las interrupciones se requieren dos bits
especiales: el primer bit, que por lo general es terminado en E, es el encargado de habilitar o no la rutina
de la interrupcin requerida para que en el momento en que ocurra sea avisado el microcontrolador y pueda
realizar la atencin requerida. El segundo bit es el que indica en qu instante ha ocurrido un evento en
particular, provocando la activacin de la interrupcin, el cual en la mayora de los casos es terminado en F;
ste deber ser limpiado tan pronto como la interrupcin sea atendida; de lo contrario, el microcontrolador
creer que la interrupcin ha ocurrido nuevamente, quedndose en un bucle infinito.
La siguiente tabla muestra las causas de interrupcin, el bit del registro de estado asociado a cada una y
el bit del registro de control 2 que las enmascara.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 301

Motivo de interrupcin Bit de estado Mscara interrupcin


Registro de transmisin vaco TDRE TIE
Registro de transmisin vaco y lnea TC TCIE
transmisin vaca
Dato recibido RDRF RIE
Dato recibido y lnea recepcin vaca (IDLE) IDLE ILIE

Registros de preescalamiento de la velocidad de transmisin


Este registro es el encargado de fijar el divisor para el generar la velocidad de transmisin de cada uno de
los bits de la trama.

REGISTRO (SCIBRH)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer 0 0 0
Escribir SBR12 SBR11 SBR10 SBR9 SBR8

REGISTRO (SCIBRL)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir SBR7 SBR6 SBR5 SBR4 SBR3 SBR2 SBR1 SBR0

El registro de velocidad permite configurar la velocidad (en baudios) de la comunicacin. Los bits 4 y 5
(SCP0 y SCP1) determinan la mxima velocidad en baudios. Esta velocidad depende del cristal que se haya
conectado al microcontrolador.
La velocidad de transmisin (baud rate) se calcula entonces de la siguiente manera:

frecuencia _ oscilador
Baud Rate =
divisor*16

Ejemplo

Si utilizamos el modo que est por default del reloj del microcontrolador, es decir, el modo con reloj interno
a 4 Mhz y deseamos obtener un Baud Rate de 9600 bps, que valor se debe colocar en el registro SCIBR? Se
escogi este valor de 9600 como ejemplo ya que cualquier computadora personal con el sistema operativo
Windows cuenta con la herramienta de comunicaciones llamada Hyperterminal que permite usar el puerto
serial de la PC a esta velocidad.

ALFAOMEGA - FREESCALE
302 JUAN CARLOS VESGA FERREIRA

Solucin

Aplicando la ecuacin que acabamos de ver,

divisor = 4 Mhz/ 16*9600 bps = 26.041, lo que es igual a un 0x1 A (hexadecimal).

De esta forma el registro SCI1BDH =0x00; y el registro SCI1BDL=0x1A para obtener los 9600 bps.

REGISTRO DE CONTROL 1 (SCIC1)


Este registro nos permite configurar el modo de operacin del mdulo en One Wire o modo normal, el tamao
de la trama para la transmisin 8/9 bits, la forma de utilizar el Wakeup Line y por ltimo la configuracin
del bit de paridad.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir LOOPS SCISWAI RSRC M WAKE ILT PE PT

LOOPS: Modo de seleccin ciclico. Permite establecer modos de comunicacin internos y externos, es
decir, se puede verificar si el mdulo se encuentra en ptimas condiciones de transmisin realizando una
comunicacin denominada Loop Back, en la cual el microcontrolador establece un puente de comunicacin
entre su propio transmisor y receptor o puede ser configurado en modo normal donde la seal puede salir
del microcontrolador hacia otros dispositivos.
0: Operacin Normal; el TX y RX usan pines de comunicacin diferentes
1: Modo de Comunicacin cclico, en donde el TX y el Rx internamente son conectados.

SCISWAI: Modo de espera o parada del mdulo SCI


0: El mdulo se mantendr en modo de espera y el reloj continuar funcionando normalmente hasta
que la fuente de interrupcin sea levantada.
1: El reloj del mdulo SCI se congelar mientras la CPU se encuentra en modo de espera.

RSRC: selector de fuente de recepcin


0: Permite establecer la comunicacin de tipo LOOP BACK
1: Permite establecer la comunicacin con un dispositivo externo.

M: Modo de seleccin de transmisin a 8 o 9 bits


0: Modo de transmisin normal a 8 bits de datos ms un bit de arranque y un bit de parada
1: Receptor y transmisor configurado a 9 bits de datos ms un bit de arranque, uno de parada.

ALFAOMEGA - FREESCALE
INTRODUCCIN A LOS MICROCONTROLADORES S08Q 303

WAKE: El mdulo SCI tiene un modo de funcionamiento especial denominado modo WAKEUP, el cual
permite aumentar la eficiencia en sistemas multirreceptores. Este modo consiste en que el receptor se queda
con las interrupciones inhibidas esperando un evento hardware externo (asociado a la lnea de recepcin),
que le devuelva al estado activo con interrupciones.
El evento externo puede ser de dos tipos y se selecciona con el bit 3 (WAKE).

0: Se espera hasta detectar que la lnea de recepcin est vaca.


1: Se espera hasta detectar una marca de direccin.

ILT: selector de lnea desocupada


Establece a partir de dnde se colocar el nivel lgico alto para indicar el estado de la lnea desocupada.

0: El bit de conteo inicia despus del bit de arranque


1: El bit de conteo inicia despus del bit de parada

PE: habilita la generacin de paridad por hardware. Cuando es habiltada, el bit de ms peso es tomado como
el bit de paridad del valor a transmitir.

0: Paridad por hardware deshabilitada


1: Paridad habilitada

PT: tipo de paridad; permite establecer el tipo de paridad a utilizar, el cual puede ser de dos tipos.

0: Paridad impar
1: Paridad par

REGISTRO DE CONTROL 2 (SCIC2)


Este registro contiene las mscaras que permiten habilitar o deshabilitar los eventos relacionados a las
interrupciones. Permite habilitar el transmisor y el receptor, la recepcion por Wakeup Line y la transmisin
del break.

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


Leer
Escribir TIE TCIE RIE ILIE TE RE RWU SBK

Es el principal registro en el que se configura la salida de la seal de comunicaciones hacia otros


dispo