TESIS QUE PARA OBTENER EL TÍTULO DE

137
INSTITUTO TECNOLÓGICO DE SONORA INGENIERO EN ELECTRÓNICA PRESENTA BRICEIDA PÉREZ MASCAREÑO CD. OBREGON, SON JULIO DEL 2009 DISEÑO DE UN SISTEMA SIMULADO BASADO EN MICROCONTROLADOR DE ARQUITECTURA VON NEUMANN TESIS QUE PARA OBTENER EL TÍTULO DE

Transcript of TESIS QUE PARA OBTENER EL TÍTULO DE

Page 1: TESIS QUE PARA OBTENER EL TÍTULO DE

INSTITUTO TECNOLÓGICO DE SONORA

INGENIERO EN ELECTRÓNICA

PRESENTA

BRICEIDA PÉREZ MASCAREÑO

CD. OBREGON, SON JULIO DEL 2009

DISEÑO DE UN SISTEMA SIMULADO BASADO EN MICROCONTROLADOR DE ARQUITECTURA

VON NEUMANN

TESIS

QUE PARA OBTENER EL TÍTULO DE

Page 2: TESIS QUE PARA OBTENER EL TÍTULO DE

DEDICATORIA

A mis padres Tomás Pérez Romero y Célida Mascareño Araujo

A mi hermana Marlén Pérez Mascareño

A mis abuelos maternos Humberto Mascareño Rojo y Elvia Araujo Miramontes

A mi abuela paterna Cruz Romero Meza

A mi tía Delia Mascareño Araujo y primos Isael y Paola Quiñones Mascareño

Y a mi novio Zimri Solet Rodríguez Acosta

Page 3: TESIS QUE PARA OBTENER EL TÍTULO DE

AGRADECIMIENTOS

A dios por haberme regalado todo lo que tengo en esta vida, por la perseverancia,

por la habilidades, por la dedicación y sobre todo por el gran amor que ah reflejado

tenerme durante todos los años que eh vivido.

A mis padres Tomas Pérez Romero y Célida Mascareño Araujo por todos los

esfuerzos y dedicación con los que me han formado; por darme siempre lo mejor.

Gracias por todo su amor. Los amo.

A mis abuelos Humberto Mascareño Rojo, Elvia Araujo Miramontes y Cruz Romero

Meza, por estar siempre a mi lado apoyándome en cada una de las cosas que haga.

A mi hermana Marlén Pérez Mascareño por ser siempre una persona muy especial

en mi vida. Te quiero mucho hermana.

A mis tíos y primos que son un gran apoyo debido a su unión y cariño. Los quiero a

todos.

A mis amigos y amigas, tanto de la infancia como los de los nuevos tiempos. A mis

amigas de siempre Cecilia y Marisol por ser siempre mis mejores amigas, por

compartir momentos increíbles juntas. Tambien a mis amigos y compañeros de

universidad Genadis, Ulises, David, Raul (Rulas), Xavier (Cano), Carlos (Compita),

todos son un gran apoyo para mí porque sé que se puede contar con ellos tanto en

los buenos tiempos como en los malos. Gracias por haberme escogido como amiga.

Page 4: TESIS QUE PARA OBTENER EL TÍTULO DE

También a mi prima Yuritza por darme ánimos y apoyarme en los momentos de

presión gracias por las palabras de aliento.

A mi novio Zimri Solet Rodríguez Acosta, le agradezco todo el apoyo y amor que

demuestra tenerme, por haberse convertido en una persona esencial para mí.

A mi asesor M.C. Oswaldo García Sánchez por haber contado con el tiempo para

apoyarme y guiarme en la elaboración de mí trabajo. Gracias por ser siempre un

excelente profesor y amigo.

Al instituto Tecnológico de Sonora por haberme brindado gran parte de los

conocimientos que hoy poseo y por darme las bases para formarme como

profesionista.

Briceida Pérez Mascareño

Page 5: TESIS QUE PARA OBTENER EL TÍTULO DE

i

CONTENIDO

Pág.

LISTA DE FIGURAS………………………………………………………………….. iii

LISTA DE TABLAS…………………………………………………………………… vi

RESUMEN……………………………………………………………………………… vii

I INTRODUCCIÓN A LA PROBLEMÁTICA PLANTEADA Y ALCANCES

DEL TRABAJO.................................................................................................

1

1.1 Antecedentes……………………………………………………………….. 1

1.2 Planteamiento del Problema……………………………………………… 3

1.3 Objetivo general……………………………………………………………. 3

1.4 Objetivos particulares……………………………………………………… 4

1.5 Justificación………………………………………………………………… 4

1.6 Delimitación………………………………………………………………… 5

II METODOLOGÍA……………………………………………………………………. 6

2.1 Estructura del trabajo……………………………………………………… 6

2.2 Estructura de los programas……………………………………………… 7

2.3 Elección del entorno de desarrollo……………………………………….. 8

2.4 Requerimientos de infraestructura y material…………………………… 9

III RESULTADOS……………………………………………………………………... 10

IV CONCLUSIONES………………………………………………………………….. 12

V REFERENCIAS…………………………………………………………………….. 14

APENDICE A: PROGRAMACIÓN Y SIMULACIÓN DE

MICROCONTROLADOR DE ARQUITECTURA VON NEUMANN.............

15

Programa 1 Diseño y simulación de circuitos con microcontrolador

Page 6: TESIS QUE PARA OBTENER EL TÍTULO DE

ii

MC68HC11 en software computacional PROTEUS………. 16

Programa 2 Diseño de programas en modo single ship…………………. 28

Programa 3 Diseño y simulación de circuitos en modo expandido…….. 34

Programa 4 Saltos y Bifurcaciones………………………………………… 42

Programa 5 Configuración del PPI (Interfaz Periférica Programable)…. 53

Programa 6 PROGRAMAS BÁSICOS: Suma de dos datos de un

Byte de longitud ……………………………………………….

61

Programa 7 PROGRAMAS BÁSICOS: Complemento a 1 y

Complemento a 2 de un dato…………………………………

67

Programa 8 Multiplicación por el método de sumas sucesivas………… 79

Programa 9 Configuración de la pantalla de cristal líquido (LCD)……… 88

Programa 10 TIMER: Entrada por Captura…………………………………. 99

Programa 11 TIMER: Salida por Comparación…………………………….. 105

Programa 12 Convertidor Analógico Digital (ADC)………………………… 112

ANEXO A: Set de instrucciones para el Microcontrolador MC68HC11………….

ANEXO B: Registros de control del Microcontrolador MC68HC11……………...

120

124

Page 7: TESIS QUE PARA OBTENER EL TÍTULO DE

iii

LISTA DE FIGURAS

Pág.

Figura 1 Arquitectura Von Neumann…………………………………………. 2

Figura 2 Arquitectura Harvard…………………………………………………. 2

Figura 1.1 Inicio de programa Proteus Professional………………………….. 16

Figura 1.2 Ventana principal de Proteus……………………………………….. 16

Figura 1.3 Partes de la pantalla principal………………………………………. 17

Figura 1.4 Ventana de selección de dispositivos……………………………… 17

Figura 1.5 Muestra de los elementos en la ventana de vista completa…….. 18

Figura 1.6 Posición de los dispositivos dentro de la zona de trabajo……….. 18

Figura 1.7 Terminales…………………………………………………………….. 19

Figura 1.8 Ventana de edición de componentes………………………………. 19

Figura 1.9 Barra de herramientas para girar dispositivos…………………….. 19

Figura 1.10 Esquemático del problema 1 en forma no expandido……………. 20

Figura 1.11 Ventana para seleccionar la opción “Add/Remove Source Files”. 22

Figura 1.12 Ventana para cargar el archivo .ASM……………………………… 22

Figura 1.13 Ventana para seleccionar la opción “Define Code

Generation Tools”……………………………………………………..

23

Figura 1.14 Ventana para la elección del compilador…………………………... 23

Figura 1.15 Ventana BUILD LOG…………………………………………………. 24

Figura 1.16 Cuadro de edición de componentes………………………………... 24

Figura 1.17 Ventana de código de programa……………………………………. 25

Figura 1.18 RAM interna de MCU………………………………………………… 26

Figura 1.19 Registros internos del MCU…………………………………………. 26

Figura 2.1 Esquemático con LEDs en el puerto D del microcontrolador……. 30

Figura 2.2 Imagen del esquemático después de un tiempo transcurrido…… 31

Figura 2.3 Ventana de registros internos de HC11……………………………. 31

Figura 2.4 Ventana de registros internos del HC11 con N=0………………… 32

Figura 2.5 Ventana de la memoria interna del HC11…………………………. 32

Page 8: TESIS QUE PARA OBTENER EL TÍTULO DE

iv

Figura 3.1 Esquemático con LED y switch en el puerto A del

Microcontrolador………………………………………………………

36

Figura 3.2 Ventana de edición de componentes………………………………. 37

Figura 3.3 Ventana que muestra como indicarle al microcontrolador

que tiene conectados otros dispositivos externos…………………

37

Figura 3.4 Ventana de edición de componente de la EPROM………………. 38

Figura 3.5 LED del PA6 encendido y bandera Z del registro CCR en 0……. 39

Figura 3.6 LED del PA6 apagado y bandera Z del registro CCR en 1……… 40

Figura 4.1 Sistema mínimo………………………………………………………. 45

Figura 4.2 Ruta de acceso para visualizar contenidos de memoria…………. 46

Figura 4.3 Ventana que muestra el código fuente…………………………….. 47

Figura 4.4 Ventana del contenido de memoria de la EPROM externa……… 48

Figura 4.5 Ventana del contenido de memoria de la RAM interna…………... 48

Figura 4.6 Ventana que muestra el código fuente del programa…………….. 51

Figura 5.1 Esquemático con adaptaciones para programa…………………... 55

Figura 5.2 Zoom del área modificada del esquemático………………………. 55

Figura 5.3 Esquemático que muestra las entradas y salidas del PPI……….. 56

Figura 5.4 Ventana del estado interno del PPI 8255A………………………… 57

Figura 5.5 Ventana de registros internos del HC11…………………………… 57

Figura 5.6 Ventana del contenido de la memoria EPROM externa…………. 58

Figura 5.7 Ventana de contenidos de memoria de la SRAM interna………... 58

Figura 6.1 Esquemático para programa de sumas……………………………. 63

Figura 6.2 Zoom del área modificada del esquemático………………………. 63

Figura 6.3 Ventana que muestra los resultados de las 4 sumas…………….. 65

Figura 7.1 Esquemático para el programa de complemento a uno…………. 69

Figura 7.2 Imagen que muestra el dato de entrada y el resultado…………... 70

Figura 7.3 Ventana del contenido de memoria de la SRAM…………………. 70

Figura 7.4 Resultado para dato 1……………………………………………….. 74

Figura 7.5 Contenido de la memoria SRAM para dato 1……………………... 74

Figura 7.6 Resultado para dato 2……………………………………………….. 75

Page 9: TESIS QUE PARA OBTENER EL TÍTULO DE

v

Figura 7.7 Contenido de la memoria SRAM para dato 2……………………... 75

Figura 7.8 Resultado para dato 3……………………………………………….. 76

Figura 7.9 Contenido de la memoria SRAM para dato 3……………………... 76

Figura 8.1 Esquemático para programa de multiplicación por sumas

sucesivas………………………………………………………………

81

Figura 8.2 Interruptores conectados al puerto A y B del PPI………………… 82

Figura 8.3 Ventana que muestra el contenido de las variables

establecidas en la SRAM interna……………………………………

82

Figura 8.4 Procedimiento de la multiplicación…………………………………. 83

Figura 8.5 Ventana de visualización de dispositivos………………………….. 84

Figura 8.6 Ventana de visualización……………………………………………. 85

Figura 9.1 Ventana de selección de microcontrolador………………………... 92

Figura 9.2 Ventana que muestra la estructura del simulador dividida

en secciones…………………………………………………………..

92

Figura 9.3 Ventana que muestra el programa cargado……………………….. 93

Figura 9.4 Figura que muestra las 2 localidades de memoria deseadas…… 94

Figura 9.5 Comparación entre contenido de EPROM y archivo S19………... 95

Figura 9.6 Carga del STACK al apuntador de la pila………………………….. 95

Figura 9.7 Ventanas que muestran los dos estados del bit Z………………... 96

Figura 9.8 Ventana que muestra el despliegue del primer caracter

en la LCD………………………………………………………………

97

Figura 10.1 Esquemático adaptado para programa de capturadores………… 101

Figura 10.2 Diagrama ejecutándose el programa………………………………. 102

Figura 11.1 Selección del osciloscopio…………………………………………... 107

Figura 11.2 Esquemático para programa de comparadores…………………... 108

Figura 11.3 Osciloscopio con señal generada de 30Hz………………………... 109

Figura 12.1 Esquemático para simulación del programa de ADC…………….. 113

Figura 12.2 Zoom a área modificada del esquemático…………………………. 114

Figura 12.3 Figura que muestra los dos estados posibles…………………….. 115

Page 10: TESIS QUE PARA OBTENER EL TÍTULO DE

vi

Figura 12.4 Ventana Watch Window que muestra el contenido

de registros...................................................................................

115

Figura 12.5 Imagen que muestra tres estados que puede

tomar el programa…………………………………………………….

117

LISTA DE TABLAS

Pág.

Tabla 1 Estructura del trabajo……...…………………………………………. 7

Tabla 2.1 Configuración del modo de arranque………………………………. 27

Tabla 3.1 Configuración del modo de arranque en forma expandida..…….. 33

Tabla 6.1 Resultados de sumas…………….………………………………….. 64

Tabla 7.1 Datos de entrada y resultado.………………………………………. 69

Tabla 7.2 Resultados para complemento a dos……………………………… 73

Page 11: TESIS QUE PARA OBTENER EL TÍTULO DE

vii

RESUMEN

Este trabajo presenta un análisis del funcionamiento interno de un microcontrolador

que utiliza arquitectura Von Neumann como lo es el MC68HC11 de la familia

Motorola. Aun cuando el microcontrolador antes mencionado cada día se encuentra

más remplazado por microcontroladores de arquitectura Harvard, es de suma

importancia que el alumno cuente con conocimientos de la arquitectura Von

Neumann.

El presente trabajo está basado en la arquitectura Von Neumann, para ello se

seleccionó el microcontrolador MC68HC11, con el se realizaron una serie de

programas en lenguaje ensamblador y se realizó la simulación de dichos programas

haciendo uso de algunos recursos de simulación como lo son AVSIM11 y PROTEUS.

Cabe mencionar que para utilizar el AVSIM11 es necesario realizar otras etapas

como son primero la compilación del código de los programas, para ello se utilizó el

programa ensamblador AS11 y en otro caso el PROTEUS genera por su cuenta

todos los archivos necesarios para simular programas en el mismo.

El capítulo I muestra una descripción general, en la cual se plantea el problema en

cuestión además se encuentran antecedentes, objetivos tanto particulares como

generales, justificación y delimitaciones; este capítulo tiene como objetivo mostrarle

al alumno una breve descripción del por qué se eligió realizar este trabajo.

El capítulo II brinda información acerca de la metodología que se empleó para llevar

a cabo este trabajo, dentro de él se muestra la forma en la que se estructura todo el

Page 12: TESIS QUE PARA OBTENER EL TÍTULO DE

viii

material, es decir el orden de cada uno de los programas y la complejidad con la que

cuenta cada uno de ellos. Además se presenta la estructura interna con la que

cuentan los programas. También se presentan todas las herramientas que se usaron,

en este caso de software.

En el capítulo III se localizan los resultados obtenidos en la realización de este

trabajo y en el capítulo IV se muestran las conclusiones y recomendaciones que el

autor brinda al alumno.

Dentro del capítulo V se ilustra la bibliografía que se utilizó como referencia y de

apoyo en la elaboración del trabajo.

Para concluir en el capítulo VI se hallan todos los programas realizados, los cuales

se encuentran acomodados de una forma estratégica ya que la complejidad percibida

con cada uno de ellos debe de ser de menor a mayor, para que alumno capte cada

uno de los puntos específicos primordiales en la elaboración de programas en

lenguaje ensamblador.

Page 13: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPÍTULO I

INTRODUCCIÓN A LA PROBLEMÁTICA PLANTEADA Y

ALCANCES DEL TRABAJO

1.1 ANTECEDENTES.

El desarrollo de la tecnología ha causado un gran impacto en el hombre y en todo lo

que lo rodea, el cual ha obtenido provecho de ésta para mejorar sus condiciones de

vida de manera íntegra y eficaz. Hoy en día una de las tecnologías más utilizadas es

la de los microcontroladores, debido a que son dispositivos que se pueden encontrar

en la industria, en el hogar y en sí en nuestra vida diaria como por ejemplo en

computadoras, teléfonos celulares, hornos de microondas, televisores, automóviles,

videojuegos, reproductores de vídeo, sistemas de alarmas, etcétera.

Un microcontrolador es un sistema cerrado, físicamente es un circuito integrado que

contiene todos los elementos del microprocesador básico además de otras funciones

especializadas en un solo chip. Dentro de los microcontroladores existen dos tipos de

arquitecturas las cuales son la arquitectura Harvard y la arquitectura Von Neumann.

Arquitectura Von Neumann

La arquitectura Von Neumann es la que se adoptó en el desarrollo de este trabajo;

dicha arquitectura se caracteriza por disponer de una sola memoria principal donde

Page 14: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO I: Introducción a la problemática planteada y alcances del trabajo 2

se almacenan datos e instrucciones de forma indistinta. A dicha memoria se accede

a través de un sistema de buses único (direcciones, datos y control), tal como se

muestra en la Figura 1.

Figura 1: Arquitectura Von Neumann.

Arquitectura Harvard

Este tipo de arquitectura esta desplazando a la arquitectura Von Neumann y a

diferencia de ésta, permite una mayor velocidad de proceso y utiliza dispositivos de

almacenamiento físicamente separados para las instrucciones y para los datos como

se puede observar en la Figura 2. El término proviene de la computadora Harvard

Mark I, que almacenaba las instrucciones en cintas perforadas y los datos en

interruptores. Dispone de dos memorias:

• Memoria de datos

• Memoria de Programa

Figura 2: Arquitectura Harvard.

Page 15: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO I: Introducción a la problemática planteada y alcances del trabajo 3

1.2 PLANTEAMIENTO DEL PROBLEMA.

En la industria o en cualquier otro campo de trabajo, actualmente es de suma

importancia la utilización de dispositivos que ayuden a realizar con mayor facilidad

los procesos industriales, es por ello que en algunos sectores como en el de la

educación, se imparten materias a alumnos de ingeniería en electrónica relacionadas

con el estudio de microcontroladores, en las cuales se pueden desarrollar temas que

ayuden a los estudiantes a obtener un conocimiento más amplio sobre la tecnología

y sus aplicaciones; es por ello que los temas analizados en cada materia deben estar

siendo actualizados de acuerdo con el paso de la tecnología.

Debido a lo anteriormente mencionado, en el instituto Tecnológico de Sonora se

consideró necesario contar con un material didáctico de apoyo, que fuera capaz de

mostrarle al alumno algunas tecnologías existentes en el ámbito laboral necesarias

para la integra formación académica del estudiante de ingeniería, es por ello que en

el presente documento se realizaron algunas simulaciones, con las que el alumno

podrá practicar de manera independiente los procesos internos del microcontrolador

MC68HC11 y además observara la arquitectura empleada en dicho sistema, basado

en una máquina CISC (Computadoras con un conjunto de instrucciones complejo),

como una alternativa de comparación a las máquinas RISC (Computadoras con un

conjunto de instrucciones reducido); además de poder analizar el tipo de lenguaje de

programación que requiere dicho microcontrolador (lenguaje ensamblador). mediante

simulador electrónico por software.

1.3 OBJETIVO GENERAL.

Realizar un sistema mínimo virtual en modo expandido mediante el software

computacional PROTEUS con el microcontrolador MC68HC11 de Motorola que

permita al alumno de ingeniería en electrónica apoyarse en él para analizar de

manera detallada la arquitectura Von Neumann, realizar simulaciones de códigos en

lenguaje ensamblador ya editados o bien poder realizar sus propios códigos.

Page 16: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO I: Introducción a la problemática planteada y alcances del trabajo 4

1.4 OBJETIVOS PARTICULARES.

Mostrar el código de cada uno de los programas realizados de manera

explícita para que el alumno comprenda con mayor facilidad la estructura de

un programa en lenguaje ensamblador.

Exponer en forma clara cada una de las herramientas utilizadas tanto en el

diseño, programación y simulación de los programas.

Describir lo que está ocurriendo de manera interna al momento de la

simulación de cada programa.

1.5 JUSTIFICACIÓN.

El microcontrolador MC68HC11 de Motorola ha representado una parte muy

importante de la tecnología de los microcontroladores, debido a que es un dispositivo

que cumple las funciones de cerebro en cualquier aplicación computarizada.

El MC68HC11, en la actualidad sigue formando parte de una de las tecnologías mas

importantes, pero como es de esperarse la tecnología evoluciona muy rápidamente

con el paso del tiempo, es por ello que hoy en día el MC68HC11 esta siendo

competido por los PIC’s, ya que son dispositivos RISC (Computadoras con un

conjunto de instrucciones reducido) de arquitectura Harvard que se encuentran

representando una alternativa al MC68HC11, por este motivo se considero

necesario contar con un material de apoyo para que el alumno pueda conocer el

funcionamiento de microcontroladores CISC (Computadoras con un conjunto de

instrucciones complejo); y así puedan relacionarse con los dos tipos de arquitecturas

(Von Neumann y Harvard) para que así cuenten con un mejor nivel de conocimiento

global en el campo de los microcontroladores.

Dicho material será empleado como apoyo en la materia de “Sistemas digitales III”, la

cual en planes de estudios pasados, contaba dentro de su programa analítico, el

estudio de la programación del MC68HC11.

Page 17: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO I: Introducción a la problemática planteada y alcances del trabajo 5

1.6 DELIMITACIONES.

El trabajo que a continuación se muestra esta formado por un sistema mínimo

realizado de manera virtual en el software computacional PROTEUS; además de

contar también con una serie de programas realizados en lenguaje ensamblador, los

cuales se simularán en dicho sistema mínimo.

La realización de este sistema se optó por hacerlo exclusivamente en el software

anteriormente mencionado, debido a las herramientas con las que cuenta y que son

necesarias para una óptima simulación del sistema realizado.

También algunos de los programas elaborados serán simulados en AVSIM11 para

que el alumno cuente con más herramientas para el dominio y el conocimiento sobre

este tipo de programación.

Page 18: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPÍTULO II

METODOLOGÍA

Considerando que el estudio del microcontrolador MC68HC11 de la familia Motorola

es muy extenso, se optó por realizar una cantidad representativa de programas, para

así poder tener una cobertura más amplia del tema.

El método que se utilizó para la realización y selección de los programas a emplear

fue la de introducir al principio de este trabajo los programas mas sencillos, para que

así el alumno pueda relacionarse primero con las instrucciones mas básicas

utilizadas por el microcontrolador. Y posteriormente ir aumentando de manera

gradual la complejidad de los programas hasta llegar a un nivel donde el alumno

pueda realizar programas más sofisticados haciendo uso de la mayoría de las

herramientas en conjunto, que le fueron brindadas en este trabajo.

2.1 ESTRUCTURA DEL TRABAJO.

La selección de los programas que forman parte de este trabajo y el orden en el que

se presentan fue basado en la estructura del programa de clases de la materia de

Sistemas digitales III. Además se realizó un análisis de la complejidad de las

instrucciones con las que cuenta cada programa elaborado, para así poder

ordenarlos de una forma estratégica para que al alumno no se le presenten

dificultades a la hora de ejecutarlos.

Page 19: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO II: Metodología

7

A continuación se muestra la Tabla 1, en la cual se expone el orden de cada uno de

los programas que contendrá este trabajo.

Tabla 1: Estructura del trabajo.

No. DE PROGRAMA

NOMBRE

Programa 1 “Diseño y simulación de circuitos con microcontrolador

MC68HC11 en software computacional PROTEUS”

Programa 2 “Diseño de programas en modo single ship”

Programa 3 “Diseño y simulación de circuitos en modo expandido”

Programa 4 “Saltos y Bifurcaciones”

Programa 5 “Configuración del PPI (Interfaz Periférica

Programable)”

Programa 6 “PROGRAMAS BÁSICOS: Suma de dos datos de un

Byte de longitud cada uno”

Programa 7 “PROGRAMAS BÁSICOS: Complemento a 1 y

complemento a 2 de un dato”

Programa 8 “Multiplicación por el método de sumas sucesivas”

Programa 9 “Configuración de la pantalla de cristal liquido (LCD)”

Programa 10 “TIMER: Entrada por Captura”

Programa 11 “TIMER: Salida por Comparación”

Programa 12 “Convertidor Analógico Digital (ADC)”

2.2 ESTRUCTURA DE LOS PROGRAMAS.

Debido a que este trabajo se realiza con un fin sumamente didáctico para el alumno,

la elaboración de la estructura de cada uno de los programas, es muy importante

porque de ello depende que el alumno comprenda con mayor facilidad cada tema

expuesto. Cada uno de los programas contará con una estructura como a

continuación se indica:

Page 20: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO II: Metodología

8

• Introducción. Contará con una pequeña introducción relacionada con el tema

principal con el que cuenta cada programa.

• Desarrollo. El desarrollo es la parte más extensa del programa y se encuentra

dividido en varias secciones, las cuales muestran herramientas que le van

dando la pauta al alumno para comprender con mayor rapidez y facilidad el

programa. Las secciones en las que se divide son las siguientes:

o Programa

o Diagrama de flujo

o Código del programa

o Adaptaciones de hardware

o Simulación del programa

• Anexos. Aquí se enlistan todos los archivos necesarios para cada uno de los

programas

2.3 ELECCIÓN DEL ENTORNO DE DESARROLLO.

Para simular programas en lenguaje ensamblador es necesario contar con varias

herramientas que son fundamentales para ello, en este trabajo se optó por la

selección del software computacional PROTEUS 6 PROFESIONAL debido a su fácil

aplicación de circuitos realizados con microcontroladores, además de que cuenta con

las herramientas necesarias para la compilación de códigos .S19 y todos los

archivos que son necesario generar para simular un programa.

También se decidió simular algunas prácticas en la herramienta de simulación

AVSIM11 que es un programa diseñado exclusivamente para simular completamente

a la familia de microcontroladores MC68HC11. Pero para poder utilizar esta

herramienta también son necesarios otros software computacionales como son

basicamente un editor de texto sin formato y el software ensamblador AS11 también

de Motorola, ya que se tiene que editar el código del programa, compilarlo para crear

Page 21: TESIS QUE PARA OBTENER EL TÍTULO DE

CAPITULO II: Metodología

9

el archivo .S19 y posteriormente simularlo.

2.4 REQUERIMIENTOS DE INFRAESTRUCTURA Y MATERIAL.

Para poder hacer uso de este material didáctico es solo necesario contar con una PC

o equivalente, la cual debe tener instalado entre sus programas las herramientas que

a continuación se enlistan:

• Editor de texto sin formato

• PROTEUS 6 PROFESIONAL

• Ensamblador AS11

• AVSIM11 de Avocet

Page 22: TESIS QUE PARA OBTENER EL TÍTULO DE

RESULTADOS

En el capítulo que a continuación se presenta se realiza un análisis del proceso que

se efectuó para llevar a cabo este trabajo.

Primero se realizó una lluvia de ideas entre asesor y tesista para elaborar un

borrador de la lista de temas que se tratarían en cada programa, una vez hecha la

lista propuesta el tesista elaboró un sistema mínimo virtual en el software

computacional PROTEUS y realizó los códigos de los programas propuestos y

efectuó las pruebas necesarias para comprobar el correcto funcionamiento de cada

uno de ellos.

Posteriormente el asesor revisó cada uno de los programas para analizar su

estructura y complejidad y así realizar entre tesista y asesor una segunda lista para

la secuencia adecuada que llevarían los programas, esto tomando en cuenta el tipo

de instrucciones que se utilizaba en cada uno de ellos y la complejidad del tema a

tratar. Una vez realizado este proceso el asesor propuso cambios en algunos

programas y mejoras para éstos.

También se eligió emplear alguna otra herramienta para tener una cobertura más

amplia en el estudio y dominio de programación en lenguaje ensamblador para

microcontroladores con arquitectura Von Neumann; esta nueva herramienta a utilizar

es el simulador AVSIM11 debido a que para utilizarla es fundamental que el alumno

haga uso de otros recursos como son el compilar manualmente los archivos a usar.

Page 23: TESIS QUE PARA OBTENER EL TÍTULO DE

Resultados

11

Una vez que el asesor aprobó los códigos de los programas se continuó con la

propuesta del formato con el que contarían los programas, por lo que se presentó un

primer programa ya editado, el cual el asesor analizó y aprobó.

Por último se prosiguió a realizar la edición de cada uno de los capítulos que forman

parte de este trabajo.

Page 24: TESIS QUE PARA OBTENER EL TÍTULO DE

CONCLUSIONES

Este trabajo brinda al alumno de ingeniería en electrónica los conocimientos básicos

para que él por si solo sea capaz de elaborar programas en lenguaje ensamblador

utilizando el microcontrolador MC68HC11. Debido a que el microcontrolador antes

mencionado ha salido de los contenidos de materia como sistemas digitales III, se

considero de suma importancia que el alumno cuente con este material de apoyo

didáctico como referencia para tener conocimientos básicos de programación con

arquitectura Von Neumann ya que son necesarias para un mayor desarrollo como

profesionista, porque aunque existan otras alternativas como lo son los PIC’s

siempre es importante conocer la arquitectura Von Neumann.

Una vez que el alumno utilice este trabajo como material de apoyo será capaz tanto

de elaborar códigos de todo tipo, utilizando los recursos con los que cuenta el

MC68HC11, ya sean códigos sencillos como manipulación de bits, como operaciones

matemáticas, logarítmicas o programas más complejos con interrupciones.

Con la elaboración de este trabajo se obtuvieron muchas cosas positivas, ya sea

para los alumnos que utilizarán este trabajo como para la tesista, debido a que

reforzó sus conocimientos sobre el tema.

Además se pudo observar la gran diferencia que existe entre las dos herramientas

utilizadas para la simulación de programas elaborados en lenguaje ensamblador

como lo son el software computacional PROTEUS y el AVSIM11.

Page 25: TESIS QUE PARA OBTENER EL TÍTULO DE

Conclusiones

13

Utilizando las herramientas que brinda el PROTEUS es mucho más fácil para el

usuario poder analizar los programas de una forma más sencilla, además se puede

interactuar con el programa ejecutado ya que cuenta con dispositivos que se pueden

manipular como lo son interruptores, también posee con una gran variedad de

dispositivos de despliegue como LEDs, displays, LCDs, osciloscopio, generador de

funciones entre otras herramientas que se utilizan de manera real..

El AVSIM11 aunque es una herramienta muy útil es un simulador donde el usuario

tiene que contar con la habilidad necesaria para poder interpretar los datos que se

reflejan en él, debido a que es un simulador poco didáctico.

Page 26: TESIS QUE PARA OBTENER EL TÍTULO DE

REFERENCIAS

[1] Hugo G. García Guerra. MICROPROCESADORES teoría y práctica

Limusa, 1er Edición, México 1988.

[2] Gonzales Vázquez José Adolfo. Introducción a Microcontroladores

[3] Ronald J. Tocci. SISTEMAS DIGITALES Principios y aplicaciones

Prentice-Hall, 6ta Edición, México 1996.

[4] Microbótica. MICROCONTROLADOR MC68HC11 Fundamentos, recursos y

programación

[5] Han-Way Huang. MC68HC11 AN INTRODUCTION Software and Hardware

Interfacing West, USA 1996.

[6] www.ieeproteus.com

[7] www.alldatasheet.com

.

Page 27: TESIS QUE PARA OBTENER EL TÍTULO DE

APÉNDICE A

PROGRAMACIÓN Y SIMULACIÓN DE MICROCONTROLADOR

DE ARQUITECTURA VON NEUMANN

Page 28: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 1

DISEÑO Y SIMULACIÓN DE CIRCUITOS CON

MICROCONTROLADOR MC68HC11 EN SOFTWARE

COMPUTACIONAL PROTEUS

INTRODUCCIÓN.

El software computacional PROTEUS, es una herramienta muy útil en la simulación

de circuitos electrónicos complejos incluyendo sistemas realizados con varias

familias de microcontroladores; además de contar con herramientas utilizadas para

despliegues gráficos. La estructura con la que cuenta es similar al SPICE, la cual

está basada en arrastrar los componentes de las barras de herramientas hacia el

área de trabajo. Se compone de tres módulos básicos:

ISIS (“Intelligent Schematic Input System”): Módulo de captura de esquemas.

VSM (“Virtual System Modelling”): Módulo de simulación, incluyendo PROSPICE.

ARES (“Advanced Routing Modelling”): Módulo para realización de circuitos

impresos (PCB).

Dicho software computacional, tiene entre sus utilidades el poder realizar el diseño y

la simulación de los esquemas realizados mediante el módulo PROTEUS ISIS. Una

parte fundamental es la simulación de circuitos que incluyen microcontroladores

como el MC68HC11 de la familia de motorola, con el cual es posible realizar

cualquier tipo de proyecto en todas sus etapas; ya sea, diseño, simulación,

depuración y construcción.

Page 29: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 17

DESARROLLO: (PARTE I: Diseño de circuitos)

1.1.- Introducirse en el software computacional PROTEUS seleccionando el botón de Inicio > Programas > Proteus Professional > ISIS Professional.

Figura 1.1: Inicio de programa Proteus Professional.

Una vez realizados los pasos anteriores se muestra la pantalla de la Figura 1.2

Figura 1.2: Ventana Principal de PROTEUS.

Una vez abierto el programa es necesario empezar a elaborar el esquema; para ello es necesario seleccionar el botón con la letra P (Pick Devices), que se encuentra en

Page 30: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 18

la parte superior izquierda del área de listado de componentes, la cual se muestra en la Figura 1.3. Una vez seleccionado el botón anteriormente mencionado se desplegara una ventana como la de la Figura 1.4

Figura 1.3: Partes de la pantalla principal.

Figura 1.4: Ventana de selección de dispositivos.

En la ventana Pick Device realice la selección de cada uno de los dispositivos a utilizar para el diseño del programa.

Page 31: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 19

En el espacio de Keywords se introduce el tipo de dispositivo que se requiere, en este caso el microcontrolador MC68HC11A8.EXP, se pulsa OK y dicho dispositivo se agregara automáticamente a la ventana de vista completa y simultáneamente a la lista de componentes; esta acción ocurrirá con cada uno de los dispositivos seleccionados como se muestra en la Figura 1.5.

Figura 1.5: Muestra de los elementos en la ventana de vista completa.

Posteriormente se arrastran cada uno de los dispositivos hacia la zona de trabajo de la misma forma que los de la Figura 1.6.

Figura 1.6: Posición de los dispositivos dentro de la zona de trabajo.

Page 32: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 20

Para seleccionar las terminales de polarización es necesario dar click en el icono

Inter-Sheet Terminal , el cual contiene las terminales tanto de voltaje como de tierra, además de entrada, salida, default, etc. Como se puede observar en la Figura 1.7.

Figura 1.7: Terminales.

Tanto los valores como las etiquetas de cada uno de los dispositivos, se pueden modificar seleccionando el elemento con el botón derecho y posteriormente dándole un click con el botón izquierdo del ratón e inmediatamente se mostrará una ventana para editar las propiedades de dicho dispositivo, la cual se muestra en la Figura 1.8.

Figura 1.8: Ventana de edición de componentes.

Cuando es necesario girar la posición de los dispositivos ya sea en forma horizontal, vertical, en dirección de las manecillas del reloj o inversamente, se selecciona el dispositivo con el botón derecho del ratón (el dispositivo se mostrará de color rojo) y posteriormente se utilizan los botones de la barra de herramientas inferior que se muestran en la Figura 1.9.

Figura 1.9. Barra de herramientas para girar dispositivos.

Page 33: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 21

Para finalizar con la realización del esquemático, se realizan las conexiones entre cada uno de los elementos como se muestra en la Figura 1.10. Si se llegara a cometer un error y que se necesite borrar un componente, basta con hacer doble click con el botón derecho del ratón en dicho componente o línea y estos se suprimirán.

Figura 1.10: Esquemático del Problema 1 en forma no expandido.

(PARTE II: Simulación de circuitos) PROGRAMA Para realizar la simulación de un circuito es necesario tener el código del programa editado en bloc de notas y se requiere que se guarde el archivo con una extensión .ASM. En este caso se realizará un programa que activa y desactiva el bit 6 del puerto A del MC68HC11.

Page 34: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 22

DIAGRAMA DE FLUJO

CÓDIGO ************************************************************* *** PROGRAMA QUE ACTIVA Y DESACTIVA EL BIT 6 DEL PUERTO A *** ************************************************************* ************ ASIGNACIÓN DE VARIABLES Y CONSTANTES *********** PORT_A EQU $1000 ;Dirección correspondiente al puerto A. ********************* PROGRAMA PRINCIPAL ******************* ORG $0000 INICIO: LDAA $1000 ;Carga en A el valor del puerto A. EORA #$40 ;Cambia el estado el bit PA6. STAA $1000 ;Almacena en el puerto A. LDY #$FFFF ;Realiza una pausa. DEC: DEY ;Decrementa valor FFFF que se encuentra en Y. CPY #0 ;Compara si es igual a cero. BNE DEC ;Si no es igual salta a etiqueta DEC. BRA INICIO ;Si es 0 salta a INICIO y Repite el proceso. *********************** VECTOR RESET *********************** ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin del programa.

INICIO

Declaración de variables y constantes

Configuración del STACK

Realiza pausa.

Cambia el edo. de PA6

Page 35: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 23

ESQUEMÁTICO El esquemático que se utilizará en este programa es el que se mostró anteriormente en la Figura 1.10. SIMULACIÓN Posteriormente se carga el código en el esquemático realizado anteriormente, para ésto es preciso dar click en el menú Source > Add/Remove Source Files… como se muestra en la Figura 1.11.

Figura 1.11: Ventana para seleccionar la opción “Add / Remove Source Files”.

Una vez hecho lo anterior se desplegará una ventana como la de la Figura 1.12, pulsando el botón New se generara una ruta de acceso a los archivos de la PC para así poder cargar el archivo .ASM. Después en el rectángulo de Code Generation Tool se selecciona el compilador que se utilizará, en este caso como se está trabajando con el microcontrolador MC68HC11 se selecciona el ASM11 y por último se pulsa OK.

Figura 1.12: Ventana para cargar el archivo .ASM

A continuación se selecciona la opción Define Code Generation Tool del menú Source como se muestra en la Figura 1.13.

Page 36: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 24

Figura 1.13: Ventana para seleccionar la opción “Define Code Generation Tools”.

Consecutivamente se despliega en la pantalla una ventana en la cual se selecciona de nuevo el compilador (ASM11) como se puede observar en la Figura 1.14. Además de las extensiones necesarias para la compilación de los archivos. NOTA: La información de las áreas de Make Rules y Debug Data Education cambian automáticamente con la selección del compilador.

Figura 1.14: Ventana para la elección del compilador.

Para compilar el programa se utiliza la herramienta Build All del menú Source, la cual despliega una ventana que indica si el programa se compiló correctamente o si tiene algunos errores. Si la compilación se realizó de forma correcta aparecerá un mensaje como se muestra en la Figura 1.15.

Page 37: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 25

Figura 1.15: Ventana BUILD LOG.

A continuación se selecciona el microcontrolador con el botón derecho del ratón y sucesivamente con el botón izquierdo para que se despliegue una ventana, la cual tiene una sección llamada Program File en la que se carga el archivo del programa con extensión .S19, éste contiene el código en hexadecimal del programa ya compilado y en la sección de Clock Frecuency se introduce el valor del oscilador que se está utilizando, en este caso 8MHz como en la Figura 1.16.

Figura 1.16: Cuadro de edición de componentes.

Por último para realizar la ejecución del programa elaborado existen dos formas diferentes de hacerlo.

Page 38: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 26

De forma completa:

Con este modo se realiza la simulación totalmente de un solo paso global, es decir no se realizan pausas y para ello es necesario solo pulsar el botón run

.

Paso a paso:

Para este tipo de simulación, es necesario pulsar el botón paso a paso

del control de simulación que se encuentra en la parte inferior izquierda de la pantalla. Este modo de simulación realiza el proceso como su nombre lo indica paso a paso, es decir en partes y ejecuta el programa en una forma pausada.

Una vez iniciada la simulación, ésta se pausa cada determinado tiempo y se muestran los registros internos del microcontrolador, para asi poder visualizar el funcionamiento interno del sistema mínimo.

Como se puede comprobar en la simulación, el programa que ha sido editado y cargado en el microcontrolador se encarga de activar y desactivar de manera periódica el bit 6 del puerto A del microcontrolador MC68HC11. Al momento de ejecutar el programa en el modo paso a paso se muestran las ventanas de la memoria RAM interna del MC68HC11, la de los registros internos del microcontrolador y la ventana donde se muestra el código del programa. En ellas se pueden observar el funcionamiento interno del microcontrolador y el curso que va tomando el programa cargado.

Figura 1.17: Ventana del código del programa.

Page 39: TESIS QUE PARA OBTENER EL TÍTULO DE

Introducción al software computacional Proteus 27

Figura 1.18: RAM interna del MCU. Figura 1.19: Registros internos del MCU.

En la ventana que se muestra en la Figura 1.17 se puede ver el código del programa y se resalta la instrucción que se va realizando. En la ventana de la Figura 1.18 se observa la información que se guardó dentro de la memoria interna del MC68HC11; dicho código se encuentra en hexadecimal. La información que contienen los registros internos del microcontrolador se muestran en la ventana de la Figura 1.19. En dicha ventana se brinda información de las banderas, registros y contadores de programa. ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 1.dsn • Bit.asm

Page 40: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 2

DISEÑO DE PROGRAMAS EN MODO SINGLE SHIP

INTRODUCCIÓN.

El microcontrolador MC68HC11 puede funcionar en 4 modos diferentes: normal ó

Single chip, expandido, bootstrap y special test. En cada modo se dispone de un

mapa de memoria diferente. En el modo simple (single ship) el mapa de memoria del

68HC11 está constituido por la memoria RAM, la memoria EEPROM, los registros de

control y la memoria ROM. Este modo está pensado para funcionar cuando existe un

programa grabado en la ROM, de tal manera que al arrancar se comience a ejecutar

el programa indicado por los vectores de interrupción que se encuentran en ROM.

Los modos de funcionamiento se pueden configurar de dos formas diferentes:

configuración hardware y configuración software. La configuración hardware consiste

en colocar unos determinados niveles lógicos en los pines moda y modb del

MC68HC11. En la Tabla 2.1 se muestra la forma de configuración el

microcontrolador.

Tabla 2.1: Configuración del modo de arranque. MODA MODB MODO DE ARRANQUE

0 0 Especial (Bootstrap) 0 1 Normal (Single ship) 1 0 Especial extendido (Special Test) 1 1 Expandido (Expanded)

Page 41: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño de programas en modo single chip. 29

DESARROLLO. PROGRAMA El siguiente programa realiza una rotación hacia la izquierda de los bits del puerto D del microcontrolador MC68HC11. DIAGRAMA DE FLUJO

INICIO

Asignación de variables y constantes

Configuración del puerto D como salida

Cargar valor en el puerto D

Realizar rotación hacia la izquierda

¿Se realizo la última rotación?

No

Si

Page 42: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño de programas en modo single chip. 30

CÓDIGO

****************************************************************** ** PROGRAMA QUE ACTIVA DE FORMA ROTATORIA LOS BITS DEL PUERTO D ** ****************************************************************** ********************** ASIGNACIÓN CONSTANTES ********************* PORT_D EQU $1008 ; Dirección del Puerto D del Microcontrolador. DDRD EQU $1009 ; Dirección del registro DDRD. ************************ PROGRAMA PRINCIPAL ********************** ORG $0000 ;El programa inicia en la dirección $0000. INICIO: LDAA #$3F ;Carga en acumulador A un $3F para configurar ;el puerto D como salida.

STAA DDRD ;Almacena el dato en el registro DDRD. NUEVO: LDAA #$01 ;Carga un $01 en el acumulador A. SIGUE: STAA PORT_D ;Almacena el dato del acumulador A en el ;puerto D para activar el bit que toca. BSR PAUSA ;Salta a subrutina de Pausa. ROLA ;Rotar acumulador A hacia la izquierda CMPA #0 ;¿Se hizo la ultima rotación ? BNE SIGUE ;Si No se hizo la ultima rotación salta a ;la etiqueta SIGUE. BRA NUEVO ;Si ya se hizo la ultima rotación salta a ;etiqueta NUEVO para comenzar de nuevo. *********************** SUBRUTINA DE PAUSA************************ PAUSA: PSHA ;Introduce acumulador A en la pila. LDY #$FFFF ;Carga en el acumulador Y el dato $FFFF. ESPERA: DEY ;Decrementa el dato del registro Y. CPY #0 ;Compara si el dato es igual a 0. BNE ESPERA ;Salta a espera. PULA ;Saca el acumulador A de la pila.

RTS ;Regresa a Programa Principal. **************************** VECTOR RESET ************************ ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin del programa.

Page 43: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño de programas en modo single chip. 31

ESQUEMÁTICO Las modificaciones que se le realizaran al diagrama básico para la elaboración de este programa serán mínimas; ya que solo será necesario colocar diodos emisores de luz (LEDs), en el puerto D del microcontrolador MC68HC11, cada led deberá contar con su respectiva conexión a tierra, tal como se muestra en la Figura 2.1.

Figura 2.1: Esquemático con LEDs en el puerto D del Microcontrolador.

SIMULACIÓN La simulación se realiza mediante el mismo proceso que se ha utilizado en los programas anteriores; Esto es mediante los botones de la barra de herramientas de

simulación run o paso a paso . Al correr la simulación se puede observar que los leds conectados al puerto D del microcontrolador, realizan una rotación de derecha a izquierda. Cada led enciende con un pequeño retardo para así poder hacer de manera visible la rotación de los bits. En la Figura 2.2 se observa el estado de los LEDs después de haber transcurrido algún tiempo.

Page 44: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño de programas en modo single chip. 32

Figura 2.2: Imagen del esquemático después de un tiempo transcurrido.

En la ventana de registros internos se observa en el acumulador A, el dato que se encuentra reflejado en el puerto D, tal como se muestra en la Figura 2.3.

Figura 2.3: Ventana de registros internos del HC11.

También de igual manera se puede observar el registro CCR; en el que es notorio el cambio de estado que sufre la bandera N, la cual indica que el programa está realizando una pausa para así encender el bit siguiente. Esta acción se puede observar al realizar una comparación entre las Figuras 2.3 y 2.4.

LSB MSB

Dato del puerto D N=1 hasta que

realiza la pausa, antes de encender el

siguiente LED.

Page 45: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño de programas en modo single chip. 33

Figura 2.4: Ventana de registros internos del HC11 con N=0.

El código en hexadecimal del archivo .s19 generado por el compilador utilizado (en este caso el ASM11), se carga en la memoria RAM interna del HC11, debido a que el programa se inicializó en la dirección $0000, correspondiente a dicha memoria interna. Lo mencionado anteriormente se puede observar en la Figura 2.5.

Figura 2.5: Ventana de la memoria RAM interna del HC11.

ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 2.dsn • Rotar.asm

N=0 Cuando el Programa se prepara

para hacer la rotación.

Page 46: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 3

DISEÑO Y SIMULACIÓN DE PROGRAMAS EN MODO EXPANDIDO

INTRODUCCIÓN.

El modo expandido es una de las cuatro formas de funcionamiento del MC68HC11

que existen. Además del mapa de memoria del modo single chip, es posible acceder

al resto de las posiciones de memoria conectando memorias externas, pero para ello

es necesario sacrificar dos puertos de E/S, los cuales son, el puerto B y C, que se

utilizarán como líneas de buses del sistema: el puerto B se convierte en las líneas

altas del bus de direcciones (A8 - A15) mientras que el puerto C contiene las líneas

bajas multiplexadas con las líneas de datos (AD0 - AD8). La terminal AS (Address

Strobe) permite demultiplexar estas líneas: indica con un “1” que en ellas se

encuentra una dirección y con un “0” cuando se trata de un dato. Para dicha

demultiplexación se emplea un registro latch 74LS373 que retiene el valor bajo del

bus de direcciones antes de que aparezca por las mismas líneas el dato de 8 bits del

bus de datos. El reloj E es el encargado de realizar la sincronización del sistema; los

accesos a memoria externa se hacen efectivos mediante un “1” en la terminal E.

Para indicarle al microcontrolador que su funcionamiento es en modo expandido, es

necesario realizar la configuración de las terminales MODA y MODB como se indica

en la tabla 3.1.

Tabla 3.1: Configuración del modo de arranque en forma expandida.

MODA MODB MODO DE ARRANQUE 1 0 Especial extendido (Special Test)

Page 47: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 35

DESARROLLO. PROGRAMA El programa que a continuación se presenta refleja el estado de bit 0 del puerto A del microcontrolador sobre el bit 6 del mismo puerto. DIAGRAMA DE FLUJO

Asignación de variables y constantes

Leer el puerto A

Cargar en A el bit PA0 A PA0

Desactiva PA6 PA6 PA0

¿PA0 =0?

INICIO

Si

Activa PA6

No

Page 48: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 36

CÓDIGO ********************************************************** ** PROGRAMA QUE REFLEJA EL ESTADO DEL BIT PA0 (ENTRADA) ** ** SOBRE EL BIT PA6 (SALIDA) ** ********************************************************** ***************** ASIGNACIÓN DE CONSTANTES *************** PORT_A EQU $1000 ;Dirección del Puerto A del Microcontrolador. ******************* PROGRAMA PRINCIPAL ******************* ORG $0000 ;inicia en la dirección $0000. INICIO: LDAA $1000 ;Leer puerto A. ANDA #$01 ;Dejar en A el estado del bit PA0. CMPA #$00 ;Compara A con cero BEQ DESACT_PA6 ;Si es igual desactiva PA6. LDAA #$40 ;Si es diferente activa PA6. STAA $1000 ;Almacena en el puerto A. BRA INICIO ;Inicia de nuevo el programa. DESACT_PA6: LDAA #$00 ;Borra A y lo almacena en puerto A para STAA $1000 ;desactivar PA6. BRA INICIO ;Salta a INICIO para comenzar de nuevo. ********************* VECTOR RESET ********************** ORG $FFFE ; Dirección del vector reset. FDB INICIO ; Salta a INICIO. END ; Fin del programa.

ESQUEMÁTICO Es necesario colocar un switch en el bit 0 del puerto A del microcontrolador, el cual trabajara como bit de entrada. También se colocará un diodo emisor de luz (LEDs) en el bit 6 de dicho puerto (bit de salida). Las modificaciones correspondientes se pueden observar en la Figura 3.1.

Page 49: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 37

Figura 3.1: Esquemático con LED y switch en el puerto A del Microcontrolador.

SIMULACIÓN Para la simulación de programas en modo expandido es necesario realizar unos arreglos en el proceso de carga de los programas. Una vez ya cargado el programa editado reflejar.asm y seleccionado el compilador utilizado (ASM11), es necesario indicarle al microcontrolador que cuenta con otros dispositivos externos conectados a el, como son memorias externas o periféricos de entrada/salida, etc. Para realizar lo anteriormente mencionado, es preciso seleccionar el microcontrolador MC68HC11 del esquemático, esto se hace dándole clic con el botón derecho del ratón, posteriormente dar otro clic con el botón izquierdo del ratón, para poder acceder a la ventana de edición de componente (Edit Component). En esta ventana se carga el archivo del código del programa con extensión .S19 (Reflejar.s19), que se genera cuando se compila el programa, en la casilla etiqueta como Program File, tal como se muestra en la Figura 3.2.

Page 50: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 38

Figura 3.2: Ventana de edición de componentes.

Como en este caso el programa se inicializara en la ROM externa, será necesario indicar el mapeo de memoria que le corresponde a cada uno de los dispositivos utilizados. Dicho proceso también se realiza en la misma ventana de edición de componentes, en la casilla etiquetada como Advanced Properties. En esta casilla se pueden observar varias opciones como lo son: External ROM Map: Bloque de direcciones correspondientes dentro del mapeo de memoria, en este caso de la dirección $E000 a la dirección $FFFF. External RAM Map: Dirección correspondiente a la memoria RAM externa - $4000. Lo anteriormente mencionado se realiza tal como se muestra en la Figura 3.3.

Figura 3.3: Ventana que muestra como indicarle al microcontrolador que tiene conectados otros

dispositivos externos.

Page 51: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 39

Además es preciso cargar el archivo Rotar.s19 en la memoria EPROM del sistema mínimo; para esto es necesario seleccionar el C.I. 27C128 dándole clic con el botón derecho del ratón y consecutivamente con el botón izquierdo. Dentro de la ventana desplegada se encuentra también la casilla del Program File, en la cual, se cargara igualmente el archivo con extensión .S19, como se puede observar en la Figura 3.4.

Figura 3.4: Ventana de edición de componente de la EPROM.

Una vez realizado todo el proceso de carga del programa y de haberle hecho la especificación al microcontrolador que se encontrara trabajando con dispositivos externos, es decir, en modo expandido; es posible empezar con la simulación de dicho programa. Para ello se le da clic en el botón run y automáticamente el led que se encuentra conectado en el bit 6 del puerto A del microcontrolador, tomará el estado lógico con el que cuente el interruptor conectado al bit 0 del mismo puerto. NOTA: se puede jugar con el interruptor para ver el cambio de estado del PA6. La observación mas notable que se puede realizar es que cuando el led se encuentra apagado (nivel lógico 0), la bandera Z (cero) del registro CCR que se encuentra en la ventana de registros internos del HC11, está en 1 y cuando se hace el cambio del interruptor para que el led se encienda (nivel lógico 1), la bandera Z cambia a 0. Esto se puede observar el las Figuras 3.5 y 3.6.

Page 52: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 40

Figura 3.5: LED del PA6 encendido y bandera Z del registro CCR en 0.

Bandera Z =0

Page 53: TESIS QUE PARA OBTENER EL TÍTULO DE

Diseño y simulación de circuitos en modo expandido 41

Figura 3.6: LED del PA6 apagado y bandera Z del registro CCR en 1.

ANEXOS. Archivos a consultar en el CD-ROM adjunto.

• Programa 3.dsn • Reflejar.asm

Bandera Z =1

Page 54: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 4

SALTOS Y BIFURCACIONES

INTRODUCCIÓN.

Las instrucciones de salto y bifurcación condicional permiten tomar decisiones que

afectan la secuencia de ejecución de un programa, o bien establecer bucles que

repiten una sección del programa, un número determinado de veces.

Saltos (Jump):

Estos son los saltos que se pueden realizar a cualquier dirección de memoria

sin importar la distancia. Sus Mnemónicos pueden ser:

• JMP: Salta incondicional a cualquiera de las 64 K posiciones de

memoria.

• JSR: Salto incondicional a una subrutina.

Bifurcaciones (Branch):

Son también llamados saltos condicionales, puesto que a diferencia de los

saltos solo permiten brincar a posiciones de memoria que se localizan a una

distancia comprendida a 128 bytes hacia atrás o 127 bytes hacia delante. Las

bifurcaciones condicionales, bifurcan a la dirección especificada cuando se le

da una determinada condición en el registro del estado CCR.

Page 55: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 43

DESARROLLO. PROGRAMA El programa que a continuación se presenta realiza una suma del número de bits encendidos de cada byte dentro de un arreglo FUENTE y el resultado lo deposita dentro de otro arreglo llamado DESTINO. Aquí se analizarán dos tipos de instrucciones de suma importancia dentro del set de instrucciones del microcontrolador MC68HC11, dichas instrucciones son las de SALTOS y BIFURCACIONES. DIAGRAMA DE FLUJO

Programa principal:

INICIO

Declaración de variables y constantes

Configuración del STACK

Carga en el registro X el arreglo FUENTE

XFUENTE

Carga en el registro Y el arreglo DESTINO

YDESTINO

ENVIA

Limpiar variables NUM1 y NUM2

FIN

Page 56: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 44

Subrutina:

ENVIA

Carga en acumulador A

Desplaza A un bit hacia la izquierda

Carga en acum. B la variable NUM1

Incrementa la variable NUM1

¿A = EOT?

No

¿Hay acarreo? No

Si

¿B = #8?

No

Si Almacena en Y la variable NUM1

Incrementa los registros X y Y

RTS

Incrementa la variable NUM2

Almacena en A el registro Y

Limpia variables NUM1 y NUM2

Si

Page 57: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 45

CÓDIGO ***************************************************************** ** PROGRAMA QUE SUMA EL NUMERO DE BITS ENCENDIDOS DE CADA BYTE ** ** DENTRO DE UN ARREGLO FUENTE Y EL RESULTADO LO DEPOSITE EN UN** ** ARREGLO DESTINO ** ***************************************************************** ******************** CONSTANTES DE ASIGNACIÓN ******************* EPROM_EXT EQU $E000 ;Dirección de la memoria EPROM externa. SRAM_EXT EQU $4000 ;Dirección de la memoria SRAM externa. EOT EQU $04 ;Valor correspondiente a EOT, el cual es un símbolo

;que indica el fin de cadena o alguna serie de ;caracteres.

******************** DECLARACIÓN DE VARIABLES ******************* ORG $0000 ;Las variables se almacenan a partir de la dirección ;$0000 correspondiente a la memoria SRAM interna. DESTINO RMB 10 ;La variable DESTINO tiene una longitud de 10 bytes. NUM1 RMB 1 ;La variable NUM1 tiene una longitud de 1 byte. NUM2 RMB 1 ;La variable NUM2 tiene una longitud de 1 bytes. STACK RMB 100 ;La longitud del STACK es de 100 bytes. ********************* CONSTANTES EN MEMORIA ********************* ORG $E000 ;El arreglo FUENTE se almacena en la EPROM_EXT FUENTE FCB $FF,$2F,$03,$5A,$3A,$4B,$35,$02,$11,EOT ;Datos que

;contiene el ;arreglo FUENTE ********************** PROGRAMA PRINCIPAL *********************** ORG $4000 ;El programa se ejecuta en la SRAM_EXT. INICIO: LDS #STACK+99 ;Carga el STACK. LDX #FUENTE ;Carga en el registro X el arreglo FUENTE. LDY #DESTINO ;Carga en el registro Y el arreglo DESTINO. CLR NUM1 ;Limpia la variable NUM1. CLR NUM2 ;Limpia la variable NUM2. JSR ENVIA ;Salta a la subrutina ENVIA. FIN: BRA FIN ;El programa entra en un ciclo ocioso. *********************** SUBRUTINA ENVIA ************************ ENVIA: LDAA ,X ;Carga en acum. A el contenido del registro X CMPA #EOT ;Compara con el valor de fin de cadena EOT. BEQ FIN_RUTINA ;Si es igual a EOT salta a etiqueta FIN_RUTINA SIGUE: LSLA ;Si no es igual dezplaza un bit hacia la

;izquierda el valor del acumulador A. BCC APAGADO ;Si no hay acarreo salta a etiqueta APAGADO. INC NUM1 ;Incrementa el contenido de variable NUM1. APAGADO: INC NUM2 ;Incrementa el contenido de la variable NUM2. LDAB NUM2 ;Carga en acum. B el contenido de NUM2. CMPB #8 ;Compara el acum. B con el dato #8 (cantidad ;máxima de unos que tiene un dato de 1 byte.).

BNE SIGUE ;Si no es igual a 8 salta a la etiqueta SIGUE. LDAB NUM1 ;Carga en B el contenido de la ;variable NUM1. STAB ,Y ;Almacena B en la localidad de ;memoria correspondiente a Y (DESTINO).

Page 58: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 46

INX ;Incrementa el registro X. INY ;Incrementa el registro Y. CLR NUM1 ;Limpia la variable NUM1. CLR NUM2 ;Limpia la variable NUM2. BRA ENVIA ;Salta a la etiqueta ENVIA. FIN_RUTINA: STAA ,Y ;Almacena el acum. A en la localidad de ;memoria correspondiente a Y (DESTINO). RTS ;Retorno de subrutina al programa principal. *********************** VECTOR DE RESET ************************* ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

ESQUEMÁTICO

En esta ocasión el esquemático a utilizar será solo el diagrama del sistema mínimo base, como el que se muestra en la Figura 4.1.

Figura 4.1: Sistema mínimo.

Page 59: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 47

SIMULACIÓN La simulación de este programa se realizara poniendo breakpoints en cada una de las líneas del código, ya que es necesario que el programa se ejecute línea por línea, debido a que se requiere observar los saltos que se realizan en dicho programa. Para hacer lo anteriormente mencionado es preciso correr el programa del modo

Paso a Paso . Posteriormente hacer clic en el menú Debug > HC11 > Source

Code-MICRO, para que de esta forma sea posible observar en pantalla la ventana HC11 Source Code - MICRO. Consecutivamente se solicita seleccionar la primera línea de código del programa principal y hacer clic con el botón izquierdo del mouse en el icono de Toggle breakpoint al Source line off on disabled, con ésto los breakpoints quedarán establecidos en cada línea de código. También es necesario solicitar que tanto la ventana que muestra el contenido de la memoria RAM interna del HC11, como la que muestra el contenido de la memoria EPROM externa se encuentren visibles en pantalla; el proceso es el mismo que se menciona en el párrafo anterior Debug > HC11 > Internal RAM-MICRO y Debug >

HC11 > EXTROM [E000-FFFF]-MICRO, tal como se muestra en la Figura 4.2.

Figura 4.2: Ruta de acceso para visualizar contenidos de memoria.

Page 60: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 48

Una vez especificados los breakpoints como se muestra en la Figura 4.3 se inicia con

la simulación del programa, para ello es necesario hacer clic en el botón Run una y otra vez hasta que el programa se ejecute completamente.

Figura 4.3: Ventana que muestra el código fuente.

Para poder comprender los resultados que se presentarán, es necesario saber que el programa realizado contará con un arreglo llamado FUENTE, el cual contará con una serie de datos almacenados en la memoria EPROM externa y de cada uno de los datos serán sumados la cantidad de bits encendidos que contenga y dicho resultado será almacenado en otro arreglo llamado DESTINO que se encuentra en la memoria SRAM interna. Por ejemplo si uno de los datos con los que cuenta el arreglo FUENTE es $7C el dato que se almacenara en el arreglo DESTINO será 5, ya que son 5 el número de bits que se encuentran encendidos.

$7C % 01111100 5 bits

Icono para establecer

Breakpoints

Los óvalos rojos indican

que el breakpoint

quedó establecido

Page 61: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 49

Una vez teniendo en pantalla la ventana que muestra el contenido de la memoria EPROM externa, en la cual se observa el arreglo FUENTE es posible observar lo que va sucediendo conforme se ejecuta cada línea del código del programa; tal como se muestra en la Figura 4.4.

Figura 4.4: Ventana del contenido de memoria de la EPROM externa.

Dentro de la ventana que muestra el contenido de la memoria RAM interna se pueden observar varias cosas, una de ellas como ya lo mencionamos anteriormente es el arreglo DESTINO, pero también muestra las variables NUM1 y NUM2. En la variable NUM2, la cual se establece en la localidad de memoria $0B se van almacenando la cantidad de bits que conforman el dato analizado del arreglo FUENTE y en la variable NUM1 que se encuentra en la localidad de memoria $0A se realiza el conteo de bits encendidos con los que cuenta dicho dato. Lo que anteriormente se mencionó puede ser observado en la Figura 4.5.

Figura 4.5: Ventana del contenido de memoria de la RAM interna.

Ahora es posible empezar con la explicación de las instrucciones que se pretende dominar en este trabajo, las cuales son SALTO y BIFURCACION. Hay que correr de nuevo el programa y observar los saltos que hay en el código. El primer salto que se ejecuta en el programa está dentro del programa principal y se trata de un salto incondicional (JUMP) a la subrutina llamada ENVIA; la instrucción JSR hace que el programa salte automáticamente a dicha subrutina, la cual en este caso es la que realiza el conteo de los bits encendidos.

Arreglo DESTINO

Variable NUM1 Variable NUM2

Page 62: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 50

CLR NUM1 CLR NUM2 JSRJSRJSRJSR ENVIAENVIAENVIAENVIA

FIN: BRA FIN

La segunda instrucción de este tipo que se encuentra dentro del programa es una instrucción de bifurcación BEQ; es decir, un salto condicional y se encarga de realizar una bifurcación, si al realizar la comparación entre el contenido del acumulador A y el símbolo EOT, esta resulta que ambos contienen la misma información el salto condicional hacia la etiqueta FIN_RUTINA se lleva a cabo y si al hacer la comparación los contenidos son diferentes simplemente el programa sigue su curso y efectúa la siguiente instrucción.

CMPA #EOT

BEQ FIN_RUTINABEQ FIN_RUTINABEQ FIN_RUTINABEQ FIN_RUTINA

SIGUE: LSLA

NOTA: Para que la instrucción BEQ se cumpla la bandera Z del registro CCR debe estar a uno (Z=1).

Posteriormente hay otra instrucción de bifurcación y esta es BCC, la cual realiza una bifurcación o salto condicional si no hay acarreo; es decir, si la bandera de acarreo C del registro CCR está a cero. Dentro de este programa si no existe acarreo dicha instrucción realiza la bifurcación a la etiqueta APAGADO y al igual que con la instrucción BEQ si la condición para BCC no se cumple el programa realiza la siguiente instrucción.

BCCBCCBCCBCC APAGADOAPAGADOAPAGADOAPAGADO

INC NUM1 APAGADO: INC NUM2

Si se continúa con la ejecución del programa se encuentra con la instrucción BNE, la cual es otra instrucción de bifurcación y ésta es similar a la instrucción BEQ que se explicó anteriormente solo con la diferencia que esta bifurca si la comparación que se realiza anterior a ella resulta que no es igual; es decir, si la comparación que se realiza en este programa entre el contenido del acumulador B y el número 8 resulta que son diferentes la bifurcación a la etiqueta SIGUE se realiza y asi se genera un ciclo hasta que al realizar la comparación resulte que dichos datos sean iguales y así el programa continúa con la siguiente instrucción.

Page 63: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 51

CMPB #8 BNEBNEBNEBNE SIGUESIGUESIGUESIGUE

LDAB NUM1 NOTA: Para que la instrucción BNE se cumpla la bandera Z del registro CCR debe estar a cero (Z=0). Por último la instrucción de este tipo que se encuentra en el programa es la instrucción BRA; esta instrucción realiza un salto incondicional a una etiqueta específicamente, en este caso realiza la bifurcación a la etiqueta ENVIA; es decir, al inicio de esta subrutina y así genera un ciclo y la instrucción posterior a la de BRA se realiza hasta que la subrutina llega a su fin.

CLR NUM2

BRABRABRABRA ENVIAENVIAENVIAENVIA

FIN_RUTINA: STAA ,Y La instrucción BRA también es muy usual para realizar ciclos ociosos en los cuales el programa se encuentra en estos ciclos ociosos hasta que el mismo programa lo manda a ejecutar otra tarea como el que se encuentra dentro del programa principal de este código. *************PROGRAMA PRINCIPAL*************** ORG $4000 INICIO: LDS #STACK+99 LDX #FUENTE LDY #DESTINO CLR NUM1 CLR NUM2 JSR ENVIA FIN:FIN:FIN:FIN: BRABRABRABRA FINFINFINFIN Las instrucciones de saltos y bifurcaciones que se encuentran en este programa se observan en la Figura 4.6.

Page 64: TESIS QUE PARA OBTENER EL TÍTULO DE

Saltos y Bifurcaciones 52

Figura 4.6: Ventana que muestra el código fuente del programa.

ANEXOS. Archivos a consultar en el CD-ROM adjunto.

• Programa 4.dsn • Bits.asm

Page 65: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 5

CONFIGURACION DEL PPI (INTERFAZ PERIFÉRICA

PROGRAMABLE)

INTRODUCCIÓN.

El circuito PPI 8255A de Intel, es un dispositivo programable de entrada/salida de

propósito general diseñando para ser usado con microprocesadores. Cuenta con 24

terminales de entrada/salida las cuales forman 3 puertos paralelos de 8 bits

configurables de distintas maneras ya sea para transmitir o recibir datos a través de

ellos. Los modos de operación que pueden ser seleccionados por el software del

sistema son los que a continuación se mencionan.

Modo 0: Modo básico de entrada/salida.

Modo 1: Modo de "Strobe" de entrada/salida.

Modo 2: Modo de bus bidireccional.

El concepto de puerto aquí es el de un lugar a través del cual el procesador transmite

o recibe datos. Una vez configurado el chip, el procesador puede enviarle un dato al

PPI, para hacérselo llegar a un dispositivo conectado a él. El PPI mantiene el dato

disponible todo el tiempo que el dispositivo necesite para leerlo y luego puede avisar

al procesador para que le envíe el siguiente dato.

Page 66: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 54

DESARROLLO. PROGRAMA Programa que configura el puerto A del PPI como entrada y el puerto B como salida y a su vez refleja los datos que se encuentran en el puerto A hacia el puerto B. DIAGRAMA DE FLUJO

Programa Principal: Subrutina:

INICIO

Asignación de variables y constantes

Subrutina INI_PPI

Almacena en la variable 1 el contenido del puerto A del PPI

VAR1 PPI_A

Almacena en la variable 2 el contenido de la variable 2.

VAR2 VAR1

Carga al puerto PPI_B el contenido de la variable 2.

PPI_B VAR2

INI_PPI

Carga la palabra de control en acumulador A.

A #$90

Almacena el contenido del acum. A en PPI_CONTROL.

PPI_CONTROL A

RTS

Page 67: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 55

CÓDIGO ************************************************************************ ** PROGRAMA PARA VERIFICAR EL CORRECTO FUNCIONAMIENTO DEL PPI MUESTRA ** ** EN EL PUERTO B DEL PPI, EL ESTADO DE LOS MICROSWITCHS DEL PUERTO A ** ************************************************************************ *********************** ASIGNACIÓN DE CONSTANTES *********************** SRAM_EXT EQU $4000 ;Dirección de la SRAM externa. EPROM_EXT EQU $E000 ;Dirección de la EPROM externa. PPI EQU $8000 ;Dirección del PPI en el mapeo de memoria. PPI_A EQU $8000 ;Dirección que corresponde al puerto A Del PPI PPI_B EQU $8001 ;Dirección que corresponde al puerto B Del PPI PPI_C EQU $8002 ;Dirección que corresponde al puerto C Del PPI PPI_CONTROL EQU $8003 ;Dirección que corresponde al registro de ;control Del PPI. ********************** DECLARACIÓN DE VARIABLES ************************ ORG SRAM_EXT ;Almacena variables en la SRAM externa. VAR1 RMB 1 ;El tamaño asignado a VAR1 es 1 Byte. VAR2 RMB 1 ;El tamaño asignado a VAR2 es 1 Byte. STACK RMB 20 ;El tamaño del Stack es 20 Bytes. ************************* PROGRAMA PRINCIPAL *************************** ORG EPROM_EXT ;Inicia en la EPROM externa dirección $E000. INICIO: LDS #STACK+19 ;Carga el Stack y se le suman los 20 Bytes de ;Longitud que tiene menos 1. JSR INI_PPI ;Salta a la subrutina de inicio del PPI. CICLO: LDAA PPI_A ;Carga en acumulador A el contenido o estado ;de los switchs que están en el puerto A. STAA VAR1 ;Almacena el acumulador A en la variable 1. LDAB VAR1 ;Carga en el acumulador B lo que hay en la VAR1. STAB VAR2 ;Almacena el acumulador B en la variable 2. STAB PPI_B ;Almacena en el PPI_B lo que hay en VAR2. BRA CICLO ;Salta a la etiqueta CICLO. **************** SUBRUTINA QUE CONFIGURA AL PUERTO A DE **************** ************ EL PPI COMO ENTRADA Y AL PUERTO B COMO SALIDA ************* INI_PPI: PSHA ;Introduce el acumulador A en la pila. LDAA #$90 ;Carga en acumulador A La palabra de control ;que configura los puertos del PPI ;PPI_A=entrada PPI_B=Salida. STAA PPI_CONTROL ;Almacena el contenido del acumulador A en el ;registro de control del PPI PULA ;Sacar el acumulador A de la pila. RTS ;Retorna al Programa Principal. *************************** VECTOR DE RESET **************************** ORG $FFFE ;Dirección del Vector RESET FDB INICIO ;Salta a INICIO. END ;Fin de programa.

Page 68: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 56

ESQUEMÁTICO El esquemático a utilizar en este programa será el mismo diagrama básico, solo que será necesario realizarle adaptaciones, para asi poder observar detalladamente el funcionamiento de dicho programa. Para esto es preciso colocar switchs a cada uno de los pines del puerto A del C.I. 8255A (PPI); dichos switchs deberán contar cada uno con una resistencia limitadora de 3.9 kΩ y con su respectiva conexión a tierra. Estos switchs son los que determinarán el nivel lógico que tomará el puerto de entrada. También se deberán colocar diodos emisores de luz (LEDs) en el puerto B, ésto para poder observar los datos que se presenten en la salida de dicho puerto. Las conexiones necesarias se muestran en las Figuras 5.1 y 5.2.

Figura 5.1: Esquemático con adaptaciones para programa.

Figura 5.2: Zoom del área modificada del esquemático.

Page 69: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 57

SIMULACIÓN Para dar inicio a la simulación del programa es necesario cargar el archivo .ASM de la forma mostrada en el programa numero 1. Una vez ya cargado el programa se

selecciona la opción run para la simulación de forma completa o la opción

paso a paso , para asi poder observar el movimiento de los registros internos. Al momento que inicia la simulación del programa podemos observar que los leds que se encuentran en el puerto B, toman el nivel lógico que les están introduciendo los switchs al puerto A. en la Figura 5.3 se puede observar lo que anteriormente se menciona.

Figura 5.3: Esquemático que muestra las entradas y salidas del PPI.

Al momento de la simulación se puede observar en la ventana Internal Status Window del PPI la palabra de control con la que fue configurado dicho dispositivo; además de la forma en la que se encuentran configurados sus puertos, en este caso el puerto A como entrada y el puerto B como salida. Tal como se observa en la Figura 5.4.

Page 70: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 58

Figura 5.4: Ventana del estado interno del PPI 8255A.

También se muestra la ventana de los registros internos del microcontrolador; en dicha ventana se pueden observar el contenido de los acumuladores A y B, la instrucción siguiente que se ejecutará en el programa, el contador de programa y las banderas. En pocas palabras se puede observar en él, lo que sucede a nivel interno dentro del microcontrolador como se muestra en la Figura 5.5.

Figura 5.5: Ventana de registros internos del HC11.

En la Figura 5.6 se muestra la ventana de las direcciones de memoria que ocupa el mapeo de la EPROM externa y su contenido tanto en código hexadecimal como en código ASCII. Dicho contenido es el generado por la compilación en el archivo PRUPPI .S19.

Palabra de control en este caso $90

Puerto A Configurado

como entrada

Puerto B Configurado como salida

Parte Alta y baja del puerto C configurados como salida

Contador de Programa

Siguiente Instrucción del programa que se

ejecutará

Dato que se le introduce al

acumulador A

Dado que se encuentra en el acumulador B

Banderas

Page 71: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 59

Figura 5.6: Ventana del contenido de la memoria EPROM externa.

Al momento de la simulación también se despliega una ventana llamada Memory Contents - SRAM, la cual muestra el contenido de la memoria SRAM interna del microcontrolador y en ella se puede observar los datos tanto del acumulador A como los del acumulador B (cada uno en la dirección que le corresponde). Además también se puede visualizar el dato del contador del programa. Como se muestra en la Figura 5.7.

Figura 5.7: Ventana de contenidos de memoria de la SRAM interna.

NOTA: El contenido de los acumuladores A y B que se muestran en la Figura 5.7 varían de acuerdo con el dato que se le introduzca al puerto A del PPI y ambos serán siempre iguales entre si, debido a que el programa elaborado refleja el dato del puerto A al puerto B.

Dirección de la $E000 a la

$FFFF Contenido de la memoria EPROM

Externa en hexadecimal

Contenido de la

memoria en código

ASCII

Contenido del acumulador A. Situado en la

dirección $0000

Contenido del acumulador B. Situado en la dirección $0001

Contenido del contador de programa.

Situado en la dirección $0014 y $0015 (ocupa 2 localidades

de memoria)

Page 72: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración del PPI (Interfaz Periférica Programable) 60

ANEXOS. Archivos a consultar en el CD-ROM adjunto.

• Programa 5.dsn • Pruppi.asm

Page 73: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 6

PROGRAMAS BÁSICOS:

“SUMA DE DOS DATOS DE 1 BYTE DE LONGITUD”

INTRODUCCIÓN.

Dentro del sistema numérico binario se puede realizar cualquier cantidad de

operaciones como con el sistema numérico decimal; Entre las operaciones básicas

se encuentra la suma entre números binarios.

La suma de dos números binarios se calcula empleando las mismas reglas de la

suma decimal, excepto que los dígitos solo pueden ser 0 ó 1. Si se genera un

acarreo (carry) se le suma al siguiente par de dígitos que se encuentra en la

siguiente posición significativa más alta; es decir si se tienen que sumar dos unos su

resultado es 2 pero como dicho resultado excede el valor de la base del sistema

numérico, que en este caso es 2, se le resta la misma base dando así un resultado

de cero y esta situación es la que genera el acarreo.

Ejemplo: Carry: 11

Sumando: 10100110

Sumando: + 01010111

Suma: 11111101 Carry

1 + 1 = 2 – 2 = 0 1 1 + 1 +1 = 3 – 2 = 1 1

Page 74: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Suma de dos datos. 62

DESARROLLO. PROGRAMA

El programa que en esta parte del trabajo se analiza, es uno que realiza la suma entre dos números de 1 byte de longitud cada uno y el resultado de dicha operación se almacena en una variable llamada RESUL. DIAGRAMA DE FLUJO

Programa Principal: Subrutina

INI_PPI

Carga la palabra de control en acumulador A.

A #$92

Almacena el contenido del acum. A en PPI_CONTROL.

PPI_CONTROL A

RTS

INICIO

Declaración de variables y constantes

Configuración del STACK

Cargar en acumulador B el valor del puerto A

del PPI APPI_A

Realizar suma entre el acumulador B y el puerto

B del PPI y almacena resultado en B. B = B + PPI_B

Limpiar variables y acumuladores

INI_PPI

Almacena contenido de acum. B en RESUL+1

Añadir el bit de acarreo al valor de RESUL+1 y

almacenarlo en RESUL. RESUL= (RESUL+1) + C

Page 75: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Suma de dos datos. 63

CÓDIGO

*************************************************************************** **PROGRAMA QUE REALIZA LA SUMA ENTRE DOS DATOS DE 1 BYTE DE LONGITUD CADA** **UNO Y SE UTILIZAN LOS PUERTOS A Y B DEL PPI COMO DATOS DE ENTRADA Y EL ** ** RESULTADO SE ALMACENA EN LA VARIABLE RESUL. ** *************************************************************************** ************************* ASIGNACIÓN DE CONSTANTES ************************ SRAM_EXT EQU $4000 ;Dirección de la SRAM externa. EPROM_EXT EQU $E000 ;Dirección de la EPROM externa. PPI EQU $8000 ;Dirección del PPI en el mapeo de memoria. PPI_A EQU $8000 ;Dirección que corresponde al puerto A Del PPI PPI_B EQU $8001 ;Dirección que corresponde al puerto B Del PPI PPI_C EQU $8002 ;Dirección que corresponde al puerto C Del PPI PPI_CONTROL EQU $8003 ;Dirección que corresponde al registro de ;control Del PPI. ************************ DECLARACIÓN DE VARIABLES ************************* ORG $0000 ;Las variables se almacenan en la RAM interna. RESUL RMB 2 ;La variable RESUL tiene 2 Bytes de longitud. STACK RMB 30 ;El STACK tiene una longitud de 30 Bytes. *************************** PROGRAMA PRINCIPAL **************************** ORG $E000 INICIO: LDS #STACK+30-1 ;Inicialización Del STACK. JSR INI_PPI ;Salta a rutina que configura el PPI. CLR RESUL ;Limpia variable RESUL CLR RESUL+1 ;Limpia Variable RESUL+1. CLRA ;Limpia acumulador A. LDAB PPI_A ;Carga en B el dato que hay en PPI_A. ADDB PPI_B ;Suma acumulador A con el dato de PPI_B. STAB RESUL+1 ;Almacena resultado en variable RESUL+1. ADCA RESUL ;Añado el bit de acarreo. STAA RESUL ;Almaceno en la variable RESUL CLRA ;Limpia acum. A. BRA INICIO ;Salta a inicio ******************* SUBRUTINA DE CONFIGURACIÓN DEL PPI ******************* INI_PPI: PSHA ;Introduce el acumulador A en la pila. LDAA #$92 ;Carga en el acumulador A el valor $92. STAA PPI_CONTROL ;Almacena el valor en el registro de ;control del PPI. PULA ;Sacar el acumulador A de la pila. RTS ;Retorna al programa principal. ****************************** VERTOR RESET ****************************** ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

Page 76: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Suma de dos datos. 64

ESQUEMÁTICO Las modificaciones que se hacen al esquemático base en este caso es conectar interruptores a cada uno de los pines tanto del puerto A del PPI como del puerto B de dicho dispositivo tal y como se muestra en la Figura 6.1.

Figura 6.1: Esquemático para programa de sumas.

Figura 6.2: Zoom del área modificada del esquemático.

Page 77: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Suma de dos datos. 65

SIMULACIÓN Como ya es sabido existen dos formas básicas para simular un programa, una de ellas es corriendo la simulación de un solo paso y esto se logra mediante la

utilización del icono run y la otra manera es con el icono paso a paso . Una vez ya cargado y compilado el programa se ejecuta la simulación paso por paso, esto es solo para observar si el código del programa realiza la operación determinada. Para comprobar si es correcto el funcionamiento de dicho programa se toman algunos datos de forma aleatoria; por ejemplo los que se muestran en la Tabla 6.1. Ejemplos:

Tabla 6.1: Resultado de sumas.

DATOS DE SUMA RESULTADOS

DATO A DATO B BINARIO HEXADECIMAL DECIMAL

SUMA 1 00000101 00000101 %00001010 $ 0A 10

SUMA 2 00001111 11110000 %11111111 $ FF 255

SUMA 3 10101010 10101010 %101010100 $154 340

SUMA 4 11111111 11111111 %111111110 $1FE 510

Los resultados que muestra la Tabla 6.1 se pueden observar en la ventana del contenido de la memoria RAM interna donde se encuentra la variable RESUL, tal como se muestra en la Figura 6.3.

00001111

+ 11110000

11111111

00000101

+ 00000101

00001010

10101010

+ 10101010

101010100

11111111

+11111111

111111110

Page 78: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Suma de dos datos. 66

Figura

Figura 6.3: Ventana que muestra los resultados de las 4 sumas.

ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 6.dsn • Suma.asm

RESULTADO DE SUMA 1

RESULTADO DE SUMA 3

RESULTADO DE SUMA 4

RESULTADO DE SUMA 2

Page 79: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 7

PROGRAMAS BÁSICOS:

“COMPLEMENTO A UNO Y COMPLEMENTO A DOS DE UN DATO

DE 1 BYTE”

INTRODUCCIÓN.

En las computadoras digitales se utilizan complementos para simplificar la operación

de resta y efectuar manipulaciones lógicas. Existen dos tipos de complementos; el

complemento a uno y el complemento a dos.

Complemento a uno.

El complemento a uno de un número binario se obtiene restando cada digito a uno;

es decir, si se tiene un 1 se realiza la operación 1-1=0 y si se tiene un 0 la operación

en 0-1=1, lo que ocasiona que el número binario cambie de 1 a 0 ó de 0 a 1.

• El complemento a uno de 1011000 es 0100111.

Complemento a dos.

El complemento a dos de un número binario se obtiene calculando el complemento a

uno de número y sumándole un 1; es decir, se invierte el dato cambiando unos por

cero y ceros por unos y al resultado se le suma un 1.

• El complemento a dos de 1101100 es 0010100.

Dato: 1101100 ((0010011) +1) 0010100

Page 80: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 68

DESARROLLO: (PARTE I: Complemento a 1) PROGRAMA

En esta parte del trabajo se realizarán dos programas básicos dentro de la programación del lenguaje ensamblador, los cuales son obtener el complemento a uno y el complemento a dos de un dato de un byte de longitud. DIAGRAMA DE FLUJO

Programa Principal: Subrutina:

INI_PPI

Carga la palabra de control en acumulador A.

A #$90

Almacena el contenido del acum. A en PPI_CONTROL.

PPI_CONTROL A

RTS

Almacenar RESUL en PPI_B

Almacenar en RESUL

INICIO

Declaración de variables y constantes

Configuración del STACK

Cargar en A e valor del puerto A del PPI

APPI_A

Complementar DATO

Limpiar variables

Almacenar A en la variable DATO

INI_PPI

Page 81: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 69

CÓDIGO ******************************************************************* **PROGRAMA QUE REALIZA EL COMPLEMENTO A UNO DE UN DATO DE UN BYTE** ******************************************************************* ********************* CONSTANTES DE ASIGNACIÓN ******************** SRAM_EXT EQU $4000 ;Dirección de la memoria SRAM externa. EPROM_EXT EQU $E000 ;Dirección de la memoria EPROM externa. PPI EQU $8000 ;Dirección correspondiente al PPI. PPI_A EQU $8000 ;Dirección asignada al puerto A del PPI. PPI_B EQU $8001 ;Dirección asignada al puerto B del PPI. PPI_C EQU $8002 ;Dirección asignada al puerto C del PPI. PPI_CONTROL EQU $8003 ;Dirección asignada al registro de ;control del PPI.

ORG SRAM_EXT ;Las variables se almacenan en la memoria RAM. DATO RMB 1 ;La variable DATO tiene 1 byte de longitud. RESUL RMB 1 ;La variable RESUL tiene 1 byte de longitud. STACK RMB 30 ;La longitud del STACK es el valor estándar de ;30 bytes.

************************ PROGRAMA PRINCIPAL *********************** ORG $E000 ;El programa inicia en la EPROM_EXT. INICIO LDS #STACK+29 ;Carga el STACK. JSR INI_PPI ;Salta a la subrutina que configura el PPI. CLR RESUL ;Limpia la variable RESUL. CLR DATO ;Limpia la variable DATO. CICLO LDAA PPI_A ;carga el dato del puerto A del PPI en A. STAA DATO ;Almacena acum. A en variable la DATO. COMA ;Complementa el dato del acum. A. STAA RESUL ;Almacena en la variable RESUL. STAA PPI_B ;Almacena en el puerto B del PPI. BRA CICLO ;Salta a la etiqueta CICLO. **************** SUBRUTINA DE CONFIGURACIÓN DEL PPI *************** INI_PPI: PSHA ;Introduce el acum. A en la pila. LDAA #$90 ;Carga en acumulador A La palabra de control ;que configura los puertos del PPI. ;PPI_A=entrada PPI_B=Salida. STAA PPI_CONTROL ;Almacena el contenido del acumulador A en el ;registro de control del PPI. PULA ;Sacar el acum. A de la pila. RTS ;Retorna al Programa Principal. *************************** VECTOR RESET ************************** ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

Page 82: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 70

ESQUEMÁTICO

En el esquemático base se agregan switches conectados al puerto A del C.I. PPI, los cuales serán los que den el valor de entrada para realizar la operación especificada y en el puerto B del mismo C.I. se conectan leds para observar el resultado que arroja el programa, tal y como se muestra en la Figura 7.1.

Figura 7.1: Esquemático para el programa de complemento a uno.

SIMULACIÓN El programa se correrá de la forma en la que se han simulado los programas anteriores. Una vez realizado todo el proceso de carga y compilación del programa se manipulan los interruptores conectados al puerto A del PPI y en los leds conectados en el puerto B del PPI, se observa el dato del puerto A ya complementado. Para mostrar un ejemplo del funcionamiento del programa utilizaremos como dato el valor en binario %10101010.

Tabla 7.1: Datos de entrada y resultado

DATO DE ENTRADA %10101010

DATO COMPLEMENTADO %01010101

En el momento que corremos en modo paso a paso el programa e introducimos el dato %10101010 con los interruptores, se puede observar en la ventana del contenido de memoria de la SRAM el dato introducido, el cual se encuentra en la primera localidad de memoria y también se observa el dato ya complementado y éste

Page 83: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 71

se encuentra en la localidad de memoria consecutiva. Dichos acontecimientos se pueden observar en la Figura 7.2 y 7.3.

Figura 7.2: Imagen que muestra el dato de entrada y el resultado.

Figura 7.3: Ventana del contenido de memoria de la SRAM.

Así como se observaron los puntos anteriores, también se puede introducir cualquier combinación posible con una longitud de 8 bits. DESARROLLO: (PARTE II: Complemento a 2) PROGRAMA El programa que realiza el complemento a dos de un dato es básicamente el mismo código en lenguaje ensamblador que el programa que realiza el complemento a uno; la diferencia que existe es solo una instrucción más.

Dato del puerto A %10101010 $AA

Dato complementado %01010101 $55

Page 84: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 72

DIAGRAMA DE FLUJO

Programa Principal: Subrutina:

INI_PPI

Carga la palabra de control en acumulador A.

A #$90

Almacena el contenido del acum. A en PPI_CONTROL.

PPI_CONTROL A

RTS

Almacenar RESUL en PPI_B

Almacenar en RESUL

INICIO

Declaración de variables y constantes

Configuración del STACK

Cargar en A e valor del puerto A del PPI

APPI_A

Complementar DATO

Limpiar variables

Almacenar A en la variable DATO

INI_PPI

Page 85: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 73

CÓDIGO ******************************************************************* **PROGRAMA QUE REALIZA EL COMPLEMENTO A DOS DE UN DATO DE UN BYTE** ******************************************************************* ******************** ASIGNACIÓN DE CONSTANTES ********************* SRAM_EXT EQU $4000 ;Dirección de la SRAM externa. EPROM_EXT EQU $E000 ;Dirección de la EPROM externa. PPI EQU $8000 ;Dirección del PPI en el mapeo de memoria. PPI_A EQU $8000 ;Dirección que corresponde al puerto A Del PPI PPI_B EQU $8001 ;Dirección que corresponde al puerto B Del PPI PPI_C EQU $8002 ;Dirección que corresponde al puerto C Del PPI PPI_CONTROL EQU $8003 ;Dirección que corresponde al registro de ;control Del PPI. ******************** DECLARACIÓN DE VARIABLES ********************* ORG SRAM_EXT ;Las variables se almacenan en la memoria RAM. DATO RMB 1 ;La variable DATO tiene 1 byte de longitud. RESUL RMB 1 ;La variable RESUL tiene 1 byte de longitud. STACK RMB 30 ;La longitud del STACK es el valor estándar de ;30 bytes. *********************** PROGRAMA PRINCIPAL ************************ ORG $E000 ;El programa inicia en la EPROM_EXT. INICIO LDS #STACK+29 ;Carga el STACK. JSR INI_PPI ;Salta a la subrutina que configura el PPI. CICLO CLR RESUL ;Limpia la variable RESUL. CLR DATO ;Limpia la variable DATO. LDAA PPI_A ;carga el dato del puerto A del PPI en A. STAA DATO ;Almacena A en variable la DATO. NEGA ;Obtiene el complemento a dos del dato que se ;encuentra en el acumulador A. STAA RESUL ;Almacena en la variable RESUL. STAA PPI_B ;Almacena en el puerto B del PPI. BRA CICLO ;Salta a la etiqueta CICLO. *************** SUBRUTINA DE CONFIGURACIÓN DEL PPI **************** INI_PPI: PSHA ;Introduce el acumulador A en la pila. LDAA #$90 ;Carga en acumulador A La palabra de control ;que configura los puertos del PPI. ;PPI_A=entrada PPI_B=Salida. STAA PPI_CONTROL ;Almacena el contenido del acumulador A en el ;registro de control del PPI. PULA ;Sacar el acumulador A de la pila. RTS ;Retorna al Programa Principal. ************************** VECTOR RESET *************************** ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

Page 86: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 74

ESQUEMÁTICO El esquemático en este programa es el mismo que el que se utilizó en el programa anterior del complemento a 1. SIMULACIÓN Una vez realizado el proceso de carga y compilación del programa se introduce el mismo dato que en el programa simulado anteriormente para observar la diferencia que existe entre ambas operaciones (complemento a 1 y complemento a 2). Dicho dato es %10101010 y además se introducirán algunos otros datos, los cuales a continuación se muestran.

10101010 00001111 11110000 01010101 11110000 00001111

+ 1 + 1 + 1 01010110 11110001 00010000

Tabla 7.2: Resultados para complemento a dos.

DATO INTRODUCIDO DATO COMPLEMENTADO

DATO 1 %10101010 %01010110

DATO 2 %00001111 %11110001

DATO 3 %11110000 %00010000

Cada uno de los datos que se muestran en la Tabla 7.2 son algunos de los que fueron introducidos en el programa para realizar las pruebas necesarias y analizar el funcionamiento del programa. La Figura 7.4 muestra el estado de los interruptores conectados al puerto A del PPI para poder introducir el dato 1 y el estado de los leds conectados al puerto B del PPI muestran el resultado que nos arroja al ejecutarse el programa. También en la Figura 7.5 se observa la ventana que muestra el contenido de memoria de la SRAM, en la cual se encuentran tanto la variable DATO como la variable RESUL. Además tanto la Figura 7.6 como la Figura 7.7 muestran los resultados para el dato 2 que se encuentra en la Tabla 7.2. Y las Figuras 7.8 y 7.9 muestran los resultados para el dato 3, los cuales también se encuentran en dicha tabla.

Page 87: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 75

Dato 1:

Figura 7.4: Resultado para dato 1.

Figura 7.5 : Contenido de la memoria SRAM para dato 1.

Dato 1 del puerto A %10101010 $AA

Dato 1 complementado %01010101 $56

Page 88: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 76

Dato 2:

Figura 7.6: Resultado para dato 2.

Figura 7.7: Contenido de la memoria SRAM para dato 2.

Dato 2 complementado %11110001 $F1

Dato 2 del puerto A %00001111 $0F

Page 89: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 77

Dato 3:

Figura 7.8: Resultado para dato 3.

Figura 7.9: Contenido de la memoria SRAM para dato 3.

NOTA: Además de las operaciones que se plasmaron en este programa también existen otras operaciones que se realizan directamente mediante un solo mnemónico del set de instrucciones utilizado por el HC11; dichas operaciones son las básicas como la suma, resta, multiplicación, entre otras y algunas de ellas se mostrarán en próximos programas.

Dato 3 del puerto A %11110000 $F0

Dato 3 complementado %00010000 $10

Page 90: TESIS QUE PARA OBTENER EL TÍTULO DE

Programas Básicos: Complemento a 1 y 2. 78

ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

o PARTE I: • Programa 7.1.dsn • Complem1.asm

o PARTE II:

• Programa 7.2.dsn • Complem2.asm

Page 91: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 8

“MULTIPLICACIÓN POR EL MÉTODO DE SUMAS SUCESIVAS”

INTRODUCCIÓN.

Dentro de la programación del 68HC11 existen dos formas de realizar

multiplicaciones entre dos datos, la primera y más sencilla es realizarlo mediante el

mnemónico MUL, el cual realiza la multiplicación directa entre los dos acumuladores

donde se encuentran almacenados los datos a multiplicar y la segunda es mediante

el método de sumas sucesivas.

La multiplicación por sumas sucesivas, como su nombre lo indica, se realiza

efectuando adiciones sucesivas y acarreos. Este proceso consiste en examinar los

bits sucesivos del multiplicador, empezando con el LSB. Si el bit multiplicador es 1, el

multiplicando se copia y si se trata de un 0 se escriben ceros pero debido a que en

las máquinas digitales el sumador binario está diseñado para sumar solo 2 números

binarios a la vez, en lugar de sumar todas las líneas al final, se suman de dos en dos

y su suma se acumula en un registro. Además cuando el bit multiplicador es 0, no

necesita desarrollar la operación ni sumar ceros ya que no afecta el resultado final.

Page 92: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 80

DESARROLLO. PROGRAMA

El programa que a continuación se presenta realiza la multiplicación de dos datos de 1 byte de longitud, mediante el método de sumas sucesivas y el resultado lo almacena en la variable llamada RESUL, la cual cuenta con una longitud de 2 bytes. DIAGRAMA DE FLUJO

INICIO

Declaración de variables y constantes

Configuración del STACK

Almacena DATO2

Limpiar variables

INI_PPI

Almacena DATO1

Limpiar acumuladores

Decrementa DATO2

Suma al DATO1 el DATO2 decrementado

Almacena B en RESUL +1

1

1

Suma al acumulador A RESUL + acarreo

Almacena en variable RESUL

Limpiar acumuladores

¿DATO2 es cero?

Decrementa DATO2

No

Si FIN

Page 93: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 81

CÓDIGO ******************************************************************** ** MULTIPLICACIÓN DE DOS DATOS DE 1 BYTE MEDIANTE SUMAS SUCESIVAS ** ******************************************************************** ********************* ASIGNACIÓN DE CONSTANTES ********************* SRAM_EXT EQU $4000 ;Dirección de la SRAM externa. EPROM_EXT EQU $E000 ;Dirección de la EPROM externa. PPI EQU $8000 ;Dirección que corresponde al PPI. PPI_A EQU $8000 ;Dirección que corresponde al puerto A Del PPI PPI_B EQU $8001 ;Dirección que corresponde al puerto B Del PPI PPI_C EQU $8002 ;Dirección que corresponde al puerto C Del PPI PPI_CONTROL EQU $8003 ;Dirección que corresponde al registro de ;control Del PPI. ********************* DECLARACIÓN DE VARIABLES ********************* ORG SRAM_INT ;Las variables se almacenan en RAM interna. DATO1 RMB 1 ;La variable DATO1 es de un byte de longitud. DATO2 RMB 1 ;La variable DATO2 es de un byte de longitud. RESUL RMB 2 ;La variable RESUL tiene 2 bytes de longitud. STACK RMB 40 ;La longitud del STACK es de 40 bytes. ************************* PROGRAMA PRINCIPAL *********************** ORG $E000 ;El programa inicia en la EPROM externa. INICIO: LDS #STACK+39 ;Carga el STACK. JSR INI_PPI ;Salta a la subrutina que configura el PPI. CLR RESUL+1 ;Limpia la variable RESUL+1 CLR RESUL ;Limpia la variable RESUL LDAA PPI_B ;Carga el contenido del PPI_B en acumulador A. STAA DATO2 ;Almacena A en la variable DATO2. LDAB PPI_A ;Carga el contenido del PPI_A en acumulador B. STAB DATO1 ;Almacena B en la variable DATO1. CLRA ;Limpia acumulador A. CLRB ;Limpia acumulador B. LDAB DATO1 ;Carga en acumulador B el contenido de DATO1. DEC DATO2 ;Decrementa el valor de DATO2. SUMAS: ADDB DATO1 ;Suma el DATO1 al acumulador B. STAB RESUL+1 ;Almacena B en la variable RESUL+1. ADCA RESUL ;Suma al acumulador A el contenido de la ;variable RESUL y el bit de acarreo. STAA RESUL ;Almacena acumulador A en la variable RESUL. CLRA ;Limpia acumulador A. DEC DATO2 ;Decrementa el contenido de la variable DATO2. BEQ FIN ;si el contenido de DATO2 es igual a 0 salta a ;la etiqueta FIN y si no es igual continua con ;la ejecución de la siguiente instrucción. BRA SUMAS ;Salta a la etiqueta SUMAS. FIN: BRA FIN ;Salta a la etiqueta FIN (ciclo ocioso). ***************** SUBRUTINA DE CONFIGURACIÓN DEL PPI *************** INI_PPI: PSHA ;Introduce el acumulador A en la pila. LDAA #$92 ;Carga en el acumulador A el valor $92. STAA PPI_CONTROL ;Almacena el valor en el registro de control ;del PPI. PULA ;Sacar el acumulador A de la pila.

Page 94: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 82

RTS ;Retorna al programa principal. ************************** VECTOR DE RESET ************************* ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

ESQUEMÁTICO Las modificaciones que se le realizan al esquemático son solo interconectarle interruptores tanto en el puerto A como en el puerto B del C.I. del PPI, los cuales introducirán los datos que se multiplicarán.

Figura 8.1: Esquemático para programa de multiplicación por sumas sucesivas.

SIMULACIÓN Para iniciar con la ejecución del programa es necesario cargar el archivo que contiene el código del programa de la misma forma que en todos los programas anteriores; una vez realizado esto, se manipulan los interruptores para introducir los datos que se deseen multiplicar así como se muestra en la Figura 8.2 .

Page 95: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 83

Figura 8.2 : Interruptores conectados al puerto A y B del PPI.

El dato que se observa en ambos grupos de interruptores es un %00000011, que es lo mismo que un $03. En la Figura 8.3 se muestra el contenido de la RAM interna donde se encuentran almacenados los datos 1 y 2.

Figura 8.3: Ventana que muestra el contenido de las variables establecidas en la SRAM interna.

Como ya es sabido la multiplicación está compuesta por tres elementos, los cuales son multiplicando, multiplicador y producto.

256 Multiplicando x3 Multiplicador

768 Producto

Interruptores Conectados al puerto A del

PPI (DATO1)

Interruptores Conectados al puerto B del

PPI (DATO2)

DATO1 DATO2

Page 96: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 84

La multiplicación por medio de sumas sucesivas o repetidas se suma consigo mismo el multiplicando la cantidad de veces que indique el multiplicador; es decir, si se toma el ejemplo que se muestra anteriormente el 256 se suma consigo mismo 5 veces. En el programa que aquí se analiza como ya se mencionó se utiliza este método de sumas sucesivas y el DATO1 se tomó como el multiplicando y el DATO2 como el multiplicador; es decir, el DATO2 es la cantidad de veces que se suma el DATO1 y esto se puede observar en la Figura 8.4.

Figura 8.4: Procedimiento de la multiplicación.

Dentro de este programa se puede realizar cualquier multiplicación, siempre y cuando los datos sean cantidades que no se excedan de 1 byte de longitud, para que de esa forma el resultado no se exceda de 2 bytes de longitud. A continuación se presenta un ejemplo de multiplicación con las máximas cantidades posibles. Como ya se sabe, la máxima cantidad de 1 solo byte es $FF (%11111111), por lo tanto se realiza la multiplicación de $FF por $FF.

DATO1 FF DATO2 x FF RESUL FE01

256

256 + 256

768

RESULTADO

Page 97: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 85

La multiplicación de dichos datos da como resultado $FE01 (%1111111000000001),

Para que sea posible almacenar un resultado con esta longitud (2 bytes), es

necesario que se declare la variable RESUL como una variable de 2 bytes, esto se

hace en la sección de declaración de variables al inicio de código, para que así el

código del programa primero almacene el resultado en la parte baja de la variable

llamada RESUL+1 y si el resultado de la operación resulta que excede el byte de

longitud se le añade al dato guardado en RESUL+1 el bit de acarreo y se almacena

en la variable RESUL, quedando así el resultado con una longitud de 2 bytes.

En esta ocasión se utilizará otra herramienta del software computacional PROTEUS,

esta es una ventana llamada Watch Window, en esta ventana se declaran registros,

variables y las direcciones de memoria que se desean observar. Una vez echado a

correr el programa ya sea en forma completa o paso por paso la ventana Watch

Window se obtiene del menú Debug > Watch Window, posteriormente con el botón

secundario del mouse se da clic dentro de dicha ventana y se selecciona Add Items

(By Address)… y se abre una ventana llamada Add Memory Item como la que se

muestra en la Figura 8.5, donde se especifica el nombre y dirección correspondiente

a la variable o registro que se desea ver en pantalla.

Figura 8.5: Ventana de visualización de dispositivos.

Una vez realizado todo el proceso anterior y declaradas todas las variables del

programa que se quieren observar la ventana Watch Window queda como se

muestra en la Figura 8.6.

Page 98: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 86

Figura 8.6: Ventada de Visualización.

El dato que se observa en la Figura 8.6 resaltado es la variable DATO2 y su contenido como se puede ver es 0x00 (formato hexadecimal) y esto se debe a que es el multiplicador y este dato en la multiplicación por sumas sucesivas es el dato que muestra la cantidad de veces que se suma el multiplicando y dentro del código del programa se va decrementando hasta llegar a ser cero. RESUL (parte alta) y RESUL+1(parte baja) conforman entre las dos partes el resultado de la operación; es decir, el resultado de este ejemplo es 0xFE01.

$FE + $01

$FE01 NOTA: También es posible elaborar un programa que multiplique dos datos de forma rápida o directa, utilizando el mnemónico MUL. Esta es una forma muy sencilla ya que sólo es necesario cargar los datos en los acumuladores A y B y el mnemónico realiza la operación directamente entre los contenidos de estos dos acumuladores y el resultado lo almacena en el registro D, ya que es un registro de 2 bytes de longitud. Los archivos para simularlo también se encuentran incluidos en el CD-ROM adjunto.

Page 99: TESIS QUE PARA OBTENER EL TÍTULO DE

Multiplicación por sumas sucesivas. 87

ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

o SUMAS SUCESIVAS: • Programa 8.dsn • Multisum.asm

o RAPIDA:

• Programa 8 rapida.dsn • Multirapida.asm

Page 100: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 9

“CONFIGURACIÓN DE LA PANTALLA DE CRISTAL LÍQUIDO (LCD)”

INTRODUCCIÓN.

Las pantallas de cristal líquido (LCD) son dispositivos de despliegue, las cuales son

muy útiles en una gran variedad de tareas principalmente en el área digital.

El LCD dispone de dos tipos de memorias independientes: la DD RAM y la CG RAM

• DD RAM (Display Data Ram):

En esta memoria se almacenan los caracteres que están siendo visualizados o que

se encuentran en posiciones no visibles. El display almacena en esta memoria dos

líneas de 40 caracteres pero sólo se visualizan 2 líneas de 16 caracteres. Por ello la

DD RAM tiene un tamaño de 2x40=80 bytes.

• LA CG RAM (Character Generator RAM):

La CG RAM es la memoria que contiene los caracteres definibles por el usuario. Está

formada por 64 posiciones, con direcciones $00-$3F. Cada posición es de 5 bits. La

memoria está dividida en 8 bloques, correspondiendo cada bloque a un carácter

definible por el usuario. Por ello el usuario puede definir como máximo 8 caracteres,

cuyos códigos van del 0 al 7.

Page 101: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 89

DESARROLLO.

PROGRAMA

En este programa se realizará el programa que configura la LCD para que despliegue un mensaje. Pero a diferencia de los programas anteriores, este se simulará en AVSIM11, el cual se ejecuta en un ambiente MSDOS. Se muestra como otra alternativa de simulación. DIAGRAMA DE FLUJO

Subrutinas:

RETARDO

Carga en X #$FFFF

RTS

Decrementa valor

¿X = EOT?

Si

No

CONFIG_LCD

LCD_CONTROL%00111000

RTS

RETARDO

LCD_CONTROL%00001110

RETARDO

LCD_CONTROL%00000110

RETARDO

LCD_CONTROL%00000001

RETARDO

LCD_CONTROL%10000000

Page 102: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 90

Programa principal:

INICIO

Cargo en X el MSG

Desplaza A un bit hacia la izquierda

Incrementa acumuladores X y Y

Despliegar caracter

¿A = EOT?

No

¿Hay acarreo? Si

No

¿B = #8?

No

Si Almacena #%11000000 en LCD_CONTROL

RTS Si

CONFIG_LCD

Cargo apuntador 1X en acumulador A

RETARDO

Page 103: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 91

CÓDIGO ********************************************************************* ********** PROGRAMA QUE PRUEBA EN EL SISTEMA MÍNIMO LA LCD*********** ********************************************************************* ********************* DECLARACIÓN DE CONSTANTES ********************* EPROM_INT EQU $B600 ;Localidad de memoria asignada a la EPROM_INT. RAM_INT EQU $0000 ;Localidad de memoria asignada a la RAM_INT. RAM_EXT EQU $4000 ;Localidad de memoria asignada a la RAM_EXT. LCD_CONTROL EQU $2000 ;Localidad de memoria asignada al registro de ;control de la LCD. LCD_DATOS EQU $2001 ;Localidad de memoria asignada al registro de ;datos de la LCD. ********************** CONSTANTES EN MEMORIA ************************ ORG RAM_INT MSG FCC "HOLA, BIENVENIDOS:" ;Mensaje que desplegará la LCD. EOT FCB $04 ;Fin de cadena. ************************ PROGRAMA PRINCIPAL ************************* ORG RAM_EXT ;El programa se inicializa en la memoria RAM. INICIO: LDS #$1FF ;Carga Stack. JSR CONFIG_LCD ;Salta a subrutina de configuración de la LCD. LDY #$00 ;Carga en el registro Y un cero. LDX #MSG ;Carga en el registro X. LETRA: LDAA ,X ;Carga en A el primer carácter del mensaje. CMPA #04 ;Compara el caracter con el fin de cadena. BEQ SALIR ;Si es igual al EOT termina el programa. REPETIR: LDAB LCD_CONTROL ;Si no es igual cargo en B el contenido del ;registro de control de la LCD. ASLB ;Desplazo bit a la izquierda del acumulador B BCS REPETIR ;Si hay acarreo salta a etiqueta REPETIR. STAA LCD_DATOS ;si no hay acarreo despliega caracter. JSR RETARDO ;Salta a subrutina de RETARDO. INX ;Incrementa X. INY ;Incrementa Y. CPY #$08 ;Compara Y con $08. BNE SALTO ;Si no es igual brinca a etiqueta SALTO. LDAA #%11000000 ;Cargo en A el dato STAA LCD_CONTROL ;Lo almacena en el registro de control. SALTO: BRA LETRA ;Salta a etiqueta LETRA para enviar otra letra SALIR: BRA SALIR ;Salta a etiqueta SALIR. (Ciclo ocioso). ************************** CONFIGURAR LCD ************************** CONFIG_LCD: PSHA ;Introduce el acumulador A en la pila. LDAA #%00111000 ;Carga en A el dato y almacena en el registro STAA LCD_CONTROL ;de control para la función SET. JSR RETARDO ;Salta a subrutina RETARDO. LDAA #%00001110 ;Carga en A el dato y almacena en el registro STAA LCD_CONTROL ;de control para encender/apagar la LCD. JSR RETARDO ;Salta a subrutina RETARDO. LDAA #%00000110 ;Carga en A el dato y almacena en el registro STAA LCD_CONTROL ;de control para configurar el desplazamiento ;del cursor de la pantalla. JSR RETARDO ;Salta a subrutina RETARDO. LDAA #%00000001 ;Carga en A el dato y almacena en el registro

Page 104: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 92

STAA LCD_CONTROL ;de control para limpiar display JSR RETARDO ;Salta a subrutina RETARDO. LDAA #%10000000 ;Carga en A el dato y almacena en el registro STAA LCD_CONTROL ;de control para mandar a desplegar en la ;segunda línea. PULA ;Sacar el acumulador A de la pila. RTS ;Retorna al Programa Principal. ******************************* RETARDO **************************** RETARDO: PSHX ;Introduce el acumulador X en la pila. LDX #$FFFF ;Carga en X FFFF para generar pausa. OTRA: DEX ;Decrementa el valor de X. BNE OTRA ;Si no es igual a 0 Salta a etiqueta OTRA. PULX ;Sacar el acumulador X de la pila. RTS ;Retorna al Programa Principal. **************************** VECTOR RESET ************************** ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin del programa.

SIMULACIÓN Para utilizar AVSIM11 es necesario primero que nada ensamblar el archivo editado en bloc de notas (LCD.ASM) usando el programa AS11.EXE el cual es un ensamblador desarrollado por Motorola y es otra de las herramientas que es fundamental conocer su manejo adecuado, es por ello que se decidió ensamblar y simular este programa de dicha manera. La sintaxis que se requiere para ensamblar el programa es el siguiente: c:>as11 LCD.asm - L s > LCD.prn Esto generará tanto el archivo con extensión .S19 como un archivo con extensión .PRN, el cual muestra el listado y el código generado por éste, que es llamado archivo de impresión. Una vez que contamos con el archivo LCD.S19 proseguimos a abrir el simulador con extensión .bat. Posteriormente se despliega en la pantalla una ventana de color negro que muestra diferentes opciones de microcontroladores tanto, en modo single-chip como en modo expandido, la opción que se seleccionará en esta ocasión es la opción A y esto se hace pulsando la letra A del teclado. Tal como se puede observar en la Figura 9.1.

Page 105: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 93

Figura 9.1: Ventana de selección de microcontrolador.

Una vez dentro del simulador AVSIM11 se puede observar cada una de las partes en las que se divide la pantalla tal como se muestra en la Figura 9.2, las cuales a continuación se describen.

Figura 9.2: Ventana que muestra la estructura del simulador dividida en secciones.

Sección 1: A esta sección se le llama fragmento del programa y en ella se encuentran las direcciones, etiquetas, códigos de operación y los argumentos de la porción del programa que está siendo ejecutado, además muestra en video invertido la siguiente instrucción a ejecutarse. Sección 2: Aquí se pueden observar tanto registros como banderas y su contenido se muestra en la mayoría de los casos en más de un formato por ejemplo en binario, hexadecimal y código ASCII. Sección 3: En esta área se visualiza el estado actual del simulador.

Page 106: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 94

Sección 4: Se le denomina segmentos de memoria y en estas dos áreas son utilizadas por el comando DUMP para mostrar el contenido de la memoria en hexadecimal y ASCII. Sección 5: Es llamada área de comandos y en ella se despliegan los menús usados para controlar el simulador. Esta área está formada por las dos últimas líneas de la pantalla.

Para cargar el programa es necesario que en la carpeta donde se encuentra guardado el simulador también se encuentre el archivo del programa con extensión .s19, ya que ese será el archivo que ejecutará dicho simulador. El proceso de carga de un programa es el siguiente:

• Seleccionar el comando Load tecleando la letra (L). • Posteriormente pulsar la tecla (P) para seleccionar la opción Program. • Una vez realizado este proceso aparecerá un mensaje pidiendo el nombre del

programa que se cargará en el simulador (el archivo debe ser el que cuenta con extensión .S19).

Load (L) > Program (P) > Nombre de archivo.s19 (en este caso “LCD.S19”).

Con el proceso anterior se cargó el programa en la memoria del simulador y ahora es necesario que se realice un proceso de inicialización (Reset), Para ésto se selecciona el comando Reset (R) y posteriormente CPU (C). Inmediatamente aparecerá el listado del código del programa en el extremo izquierdo de la pantalla, el cual es el área correspondiente al contador del programa, donde puede apreciarse el valor de la dirección de inicio del programa acompañado del código máquina del mismo, tal como se muestra en la Figura 9.3.

Figura 9.3: Ventana que muestra el programa cargado.

Page 107: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 95

Para declarar el mapa de memoria se selecciona el comando SET (S), después se elije la opción Memory-map (M) y a continuación la opción random-Access (A) y consecutivamente se introducen las direcciones de memoria que forman el rango dentro del mapa de memoria que debe ser tomado en cuenta al momento de la simulación, en esta ocasión se definirá entre $0000 a $FFFF. NOTA: Primero se introduce la dirección inicial (RAM LOWER Address $0000) y después la dirección final (RAM UPPER Address $FFFF). Antes de iniciar a correr el programa es preciso visualizar las localidades de memoria reservadas para la LCD para poder visualizar lo que se desplegaría en ella, para ésto, se requiere que se seleccione el comando Dump (D), al hacer ésto el simulador pregunta en cuál de las dos regiones del segmento de memorias se desea utilizar para desplegar las localidades de interés, en este caso la localidad de memoria asignada a la LCD ($2000). Al momento de seleccionar alguno de los dos números aparecerá un submenú en el que se seleccionará el comando Absolute (A), consecutivamente aparece un mensaje pidiendo la dirección inicial de la región de memoria que se deséa observar.

Dump (D) > 1 > Absolute (A) > $2000

Inmediatamente en el segmento de memoria seleccionado (1) se desplegará el contenido que existe en dicha dirección, como se puede observar hasta este momento su contenido son FF, esto quiere decir que no existe ningún dato aun debido a que el programa no ha sido ejecutado. Esto se puede observar en la Figura 9.4. Siguiendo el procedimiento anterior también se puede desplegar en el otro segmento de memoria en contenido de la memoria EPROM ($E000), que es donde se encuentra almacenado el programa. Solo que en este caso se selecciona el área 2 y el contenido de esta localidad de memoria se ve como en la Figura 9.4.

Dump (D) > 2 > Absolute (A) > $E000

Figura 9.4: Figura que muestra las 2 localidades de memoria deseadas.

1

2

Page 108: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 96

NOTA: Si se analiza bien el contenido que hay en la dirección correspondiente a la de la memoria EPROM (Área 2) y se compara con el contenido del archivo LCD.S19, se puede observar que es el mismo en ambas partes. En la Figura 9.5 se realiza una comparación entre los dos contenidos.

Figura 9.5: Comparación entre contenido de EPROM y archivo S19.

En la Figura 9.5 la parte sombreada del archivo .S19 es solo la parte del contenido que se alcanza a mirar en el segmento de memoria 2 del simulador pero si se desea mirar todo el contenido del archivo, se van seleccionando las localidades de memoria siguientes con el comando Dump, como ya se explicó anteriormente. Se sugiere que en el área 2 se observe el contenido de la memoria SRAM externa, que es donde se encuentra almacenado el mensaje que se desplegara en la LCD. Una vez realizadas todas las especificaciones anteriores se procede a correr el programa, ésto se puede hacer de dos formas; la primera es corriendo el programa de forma completa; es decir, que ejecutará las instrucciones del programa consecutivamente hasta llegar al final del programa, esta opción se lleva a cabo pulsando F1 y la segunda opción es ejecutando el programa paso a paso, pudiendo así observar de una forma más clara que es lo que va sucediendo internamente en el microcontrolador y se realiza mediante F10 y es necesario pulsarlo en cada línea de código, para que así pase a la siguiente instrucción. También cuenta con la opción de la F9 que ayuda a regresar el programa a la instrucción anterior. La primera instrucción que ejecuta el programa al pulsar por primera vez F10 es cargar el STACK y se puede ver en el apuntador de la pila SP que se encuentra en la sección 2 de la pantalla como se aprecia en la Figura 9.6. Posteriormente salta a la subrutina de configuración de la LCD y dentro de esa subrutina almacena un $38 en el registro de control de la LCD.

Page 109: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 97

Figura 9.6: Carga del STACK al apuntador de la pila.

En la simulación de este programa es necesario manipular algunos bits para que el programa pueda continuar de una manera más rápida, es por ello que se optó simular este programa en este simulador, para que así el alumno comprenda con mayor facilidad que es lo que ocurre en el microcontrolador internamente. El primer bit que se debe manipular en este programa es el bit Z del registro CCR, cuando entra a la subrutina llamada CONFIG_LCD y a su vez esta subrutina lo envía a otra subrutina de RETARDO. El bit Z permanece en un 0 lógico y para que el programa continúe con la ejecución sin esperar a que la comparación del contenido del acumulador X llegue a 0, se le pone un 1 lógico a dicho bit y de esta manera el programa continúa ejecutando la siguiente instrucción y de esta manera sale de la subrutina RETARDO. Cuando Z = 0 Cuando Z = 1

Figura 9.7: Ventanas que muestran los dos estados del bit Z.

La simulación del programa continua de la misma forma, hasta que termina con la configuración de la LCD, así que es necesario seguir cambiando el bit Z cada vez que el programa mande llamar a la subrutina CONFIG_LCD. Cuando la ejecución regresa al programa principal y ejecuta las líneas de código que se muestran a continuación, se necesita de nuevo recurrir a la manipulación de otro bit, pero en esta ocasión es el bit de acarreo, debido a que el programa permanece en un ciclo hasta que dicho bit cambie su estado de 1 a 0 y para ahorrar tiempo se produce manualmente. Esta acción se realiza las veces que sean necesarias. REPETIR LDAB LCD_CONTROL ASLB BCS REPETIR STAA LCD_DATOS

Page 110: TESIS QUE PARA OBTENER EL TÍTULO DE

Configuración de la Pantalla de Cristal Líquido (LCD) 98

Cuando se cambia el bit C de 1 a 0 el programa envía al registro de datos de la LCD el primer carácter del mensaje a desplegar. En la Figura 9.8 se puede ver dicha tarea.

Figura 9.8: Ventana que muestra el despliegue del primer caracter en la LCD.

Así sucesivamente se corre el programa hasta terminar con el último carácter del mensaje. En la pantalla del simulador dentro de los segmentos de memoria se puede observar tanto el mensaje en valor hexadecimal como en código ASCII, que es con el código que trabajan las pantallas de cristal líquido (LCD’s). NOTA: Para moverse con el cursor por todas las áreas de la pantalla del simulador, se utiliza la tecla ESC y con ésto se conmuta al llamado modo de edición. Como este programa no fue simulado en el software computacional PROTEUS se anexaron los archivos del programa para realizar también la simulación en dicho software además se utilizó otro tipo de pantalla para poder observar la diferencia que existe entre ambas. ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

o SIMULACION EN AVSIM11:

• Lcd.asm • Lcd.prn • Lcd.s19

o SIMULACION EN PROTEUS:

• Programa 9.dsn • Lcd2.asm

Page 111: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 10

TIMER:

“ENTRADAS POR CAPTURA (IC’s)”

INTRODUCCIÓN.

Las Entradas por Captura o también llamadas Capturadores son instrumentos que

forman parte del MC68HC11 y permiten detectar el instante exacto en el que se ha

producido algún suceso; es decir, se encargan de registrar cualquier cambio de nivel

que se produzca en la circuitería exterior.

Los capturadores con los que cuenta en microcontrolador son 3 (IC1, IC2, IC3). Cada

capturador está constituido por un registro de 16 bits, lógica de detección de flancos

y lógica de generación de interrupciones. Su funcionamiento consiste en que cada

vez que por la entrada del capturador se detecte un flanco ya sea de subida o de

bajada según su configuración, se almacena el valor del temporizador principal en el

registro correspondiente al capturador y se produce una interrupción.

Las entradas por captura son utilizadas principalmente para medir la anchura de

pulsos, midiendo los instantes de un flanco de subida y otro de bajada consecutivos y

también se usan como contadores de pulsos.

Page 112: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Entradas por Captura (IC’s) 100

DESARROLLO. PROGRAMA Este programa consiste en cambiar el estado del LED cada vez que en el pin PA0 se detecte un flanco de bajada. DIAGRAMA DE FLUJO Programa principal: Rutina de interrupción:

Ini_ic3

Poner a cero la bandera del capturador

Leer el estado del puerto A

Conmutar puerto A al estado contrario.

XOR

Almacena nuevo estado en puerto A

RTI

INICIO

Declaración de variables y constantes

Configuración del STACK

Carga #$1000 en X para direccionamiento

indexado

Configura capturador 3 (IC3)

TCTL2 #$03

Permitir interrupciones CLI

FIN

Page 113: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Entradas por Captura (IC’s) 101

CÓDIGO ************************************************************************ **PROGRAMA QUE CADA VEZ QUE SE OBTENGA UN FLANCO YA SEA DE SUBIDA O DE** ** BAJADA POR EL PIN PA0 SE CAMBIARÁ EL ESTADO DEL LED ** ************************************************************************ ********************** CONSTANTES DE ASIGNACIÓN ************************ TFLG1 EQU $23 ;La dirección correspondiente al TFLG1 es $1023. TCTL2 EQU $21 ;La dirección correspondiente al TCTL2 es $1021. TMSK1 EQU $22 ;La dirección correspondiente al TMSK1 es $1022. PORTA EQU $00 ;La dirección correspondiente al Puerto A es $1000. *********************** DECLARACIÓN DE VARIABLES *********************** ORG $B600 ;La variable STACK se almacena en la EPROM interna STACK RMB 100 ;Longitud del STACK es de 100 Bytes. ************************** PROGRAMA PRINCIPAL ************************** ORG $0000 ;El programa inicia en la dirección $0000. LDS #STACK+99 ;Carga el STACK. LDX #$1000 ;Carga en X para direccionamiento indexado. LDAA #$03 ;Configurar capturador 3 para flanco de STAA TCTL2,X ;de subida y de bajada. LDAA #$01 ;Carga $01 en A y lo almacena en TMSK1 para STAA TMSK1,X ;Permitir la interrupción del capturador 3. CLI ;Permite las interrupciones. FIN: BRA FIN ;Ciclo ocioso. ********* RUTINA DE SERVICIO DE INTERRUPCIÓN DEL CAPTURADOR 3 ********* ic3: BSET TFLG1,X,$01 ;Escribe un 1 en el registro TFLG1 para

;Poner a cero la flag del capturador 3 LDAA PORTA,X ;Carga en Acum. A el valor que se encuentra

;en el puerto A del uc. EORA #$40 ;Realiza una operación lógica XOR para

;Cambiar el edo. del LED. STAA PORTA,X ;Almacena resultado en el puerto A del uC. RTI ;Retorno de la interrupción. *********************** DECLARACIÓN DE VECTORES *********************** ORG $00E2 ;Vector de interrupción para IC3. FDB ic3 ;Salta a rutina de servicio de la interrupción END ;Fin de programa.

ESQUEMÁTICO En el diagrama básico solo es necesario conectar el generador de señales al pin del puerto A del microcontrolador, debido a que la entrada por captura IC3 se encuentra asociada a este pin. También se conecta el osciloscopio a dicho pin para observar los cambios de nivel de la señal introducida. Además se conecta un LED en el pin PA6 que es donde se observará la salida.

Page 114: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Entradas por Captura (IC’s) 102

Figura 10.1: Esquemático adaptado para programa de capturadores.

SIMULACIÓN La simulación de este programa es sencilla debido a que solo se observará en el LED el cambio de estado, cada vez que la IC3 detecte un flanco ya sea de bajada o de subida y para poder apreciar si es correcto este programa se apoyará con el osciloscopio para ir monitoreando la señal de entrada. Una vez echado a andar el programa se abren las ventanas tanto del generador de funciones como la del osciloscopio. En el generador de funciones se puede manipular la frecuencia de la señal introducida según la apreciación deseada.

Page 115: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Entradas por Captura (IC’s) 103

Figura 10.2: Diagrama ejecutándose el programa.

El funcionamiento de este programa consiste en ejecutar una rutina de interrupción; es decir el programa después de realizar la configuración de todos los registros involucrados entra en un ciclo ocioso y cuando detecta la IC3 que a su entrada hay un flanco ya sea de subida o de bajada manda llamar la rutina de interrupción llamada ic3 y manda al puerto A del microcontrolador ejecutar una instrucción XOR para que así, el valor del puerto conmute al otro estado; es decir si se encuentra a 1 conmute a 0 ó viceversa. ic3: BSET TFLG1,X,$01 LDAA PORTA,X EORA #$40 STAA PORTA,X RTI

Page 116: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Entradas por Captura (IC’s) 104

Una vez ejecutada la interrupción el programa regresa al lugar donde se quedó que es al ciclo ocioso y ahí permanece hasta que detecta otro cambio en la IC3. ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 10.dsn • Capture.asm

Page 117: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 11

TIMER:

“SALIDAS POR COMPARACIÓN (OC’s)”

INTRODUCCIÓN.

Las salidas por comparación o comparadores se encuentran asociados al puerto A

del MC68HC11, son una herramienta básica con la que cuenta el microcontrolador

debido a su versatilidad para realizar pausas de tiempo, generar señales TTL a

diferentes frecuencias, se pueden utilizar mediante interrupciones o por espera

activa.

El MC68HC11 cuenta con 5 salidas por comparación independientes entre si, cada

una cuenta con una longitud de 16 bits. Su funcionamiento básico consiste en

introducir un valor en sus registros correspondientes y a su vez el temporizador

principal se va incrementando, en el momento que el valor del temporizador coincide

con el valor de alguna salida por comparación se genera una acción determinada en

el pin sobre el que está actuando la salida por comparación. Las salidas por

comparación se pueden manejar de 4 formas diferentes, las cuales pueden ser:

• No afectar el pin correspondiente.

• Cambiar de estado el pin correspondiente.

• Poner a cero el pin correspondiente.

• Poner a uno el pin correspondiente.

Page 118: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 106

DESARROLLO. PROGRAMA El programa que a continuación se presenta utiliza las salidas por comparación (OC2) del TIMER para generar una señal TTL con una frecuencia fija de 30Hz y con un ciclo de trabajo de 50%. Este programa no se realiza mediante interrupciones. DIAGRAMA DE FLUJO

INICIO

Declaración de variables y constantes

Activar OC2 para que cambien de estado el

pin. TCTL1 $40

Almacenar en TOC2 el conteo para la

frecuencia de 30Hz. TOC2 Conteos

¿OC2F =1?

Borrar Bandera OC2F

Leer el contador de carrera libre D TCNT

Formar el nuevo valor de comparación.

TOC2TCNT+Conteos

No

Si

Page 119: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 107

Antes de realizar el código del programa es necesario hacer unos cálculos, debido a que es un programa que genera una señal cuadrada a una frecuencia determinada, es preciso saber cuántos conteos necesita el contador de carrera libre para obtener la señal de dicha frecuencia; para ello es necesario realizar los cálculos que a continuación se presentan.

HzF 30=

msegsegHzF

t 3.330333.030

11====

msegsegmsegt

65.1601665.02

3.33

2====λ mseg65.16

21== λλ

Conteosnseg

msegX 33300

500

65.16==

Por lo tanto para generar una señal de 30Hz es necesario que el contador de carrera libre realice 33300 Conteos utilizando el preescalador configurado por default que es de 500nseg. CÓDIGO ************************************************************************ ** ESTE PROGRAMA GENERA UNA SEÑAL TTL DE FRECUENCIA FIJA = 30HZ ** ** A TRAVÉS DE LA PATITA OC2 DEL TIMER, CON CICLO DE TRABAJO DEL 50% ** ************************************************************************ ************************* CONSTANTES DE ASIGNACIÓN ********************* TCNT EQU $100E ;La dirección correspondiente al TCNT es $100E. TOC2 EQU $1018 ;La dirección correspondiente al TOC2 es $1018. TCTL1 EQU $1020 ;La dirección correspondiente al TCTL1 es $1020. TFLG1 EQU $1023 ;La dirección correspondiente al TFLG1 es $1023. TMSK2 EQU $1024 ;La dirección correspondiente al TMSK2 es $1024. CONTEOS EQU 33300 ;Número de conteos necesarios para 30Hz. ************************ PROGRAMA PRINCIPAL **************************** ORG $0100 ;El programa inicia en la dirección $0100 INICIO LDAA #$40 ;Activa el bit 6 del registro TCTL1 (OC2) para STAA TCTL1 ;que el pin cambie de estado. LDD #CONTEOS ;Carga CONTEOS para una frecuencia de 30 hertz STD TOC2 ;y lo almacena en el registro TOC2. CICLO LDAA TFLG1 ;Checa si ya alcanzó el valor de comparación ANDA #$40 ;OC2F=1? BEQ CICLO ;Si es 0 el valor de OC2F salta a CICLO. STAA TFLG1 ;Si es 1 el valor de OC2F lo almacena en TFLG1 LDD TCNT ;Lee el contador de carrera libre ADDD #CONTEOS ;Le suma el divisor para formar el nuevo valor STD TOC2 ;de comparación y lo almacena en TOC2. BRA CICLO ;Salta a CICLO.

Page 120: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 108

ESQUEMÁTICO

Para realizar la simulación de este programa solo es necesario que del botón Virtual

Instruments que se encuentra en la barra de herramientas del lado izquierdo de la pantalla, se seleccione la opción OSCILLOSCOPE, como se muestra en la Figura 11.1.

Figura 11.1: Selección del osciloscopio.

El osciloscopio se conecta en el pin del puerto A al que se encuentra asociado la salida por comparación que se maneja, en este caso es el pin PA6, debido a que se utiliza la OC2. Con ésto se puede observar y analizar la señal generada por el microcontrolador. Además se conecta un LED al mismo pin para así poder apreciar el cambio de estado de la OC2. Dichas conexiones se pueden ver en la Figura 11.2.

Page 121: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 109

Figura 11.2: Esquemático para programa de comparadores.

SIMULACIÓN El programa se carga de la misma forma que todos los programas anteriores; una vez hecho este proceso se corre la simulación también de la forma tradicional. Al momento de correr el programa se despliega en la pantalla la ventana que muestra al osciloscopio y en él la señal que se genera, tal como se muestra en la Figura 11.3.

Page 122: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 110

Figura 11.3: Osciloscopio con señal generada de 30Hz.

Una vez que se observa la señal en el osciloscopio se realizan los cálculos necesarios para comprobar que la señal cuenta con la frecuencia fijada. Datos:

Divisiones3.3 msegTimebase 10=

( )( ) msegDivt Div

mseg33103.3 ==

HzHzmsegt

F 3030.3033

11≈===

Estos cálculos reflejan que el programa funciona correctamente, ya que la señal generada si tiene una frecuencia fija de 30Hz. Las salidas por comparación son una herramienta con la que cuenta el MC68HC11, que es de mucha utilidad para generar señales cuadradas de cualquier frecuencia deseada, ya sean simétricas o no; para ello solo es necesario realizar los cálculos precisos para la frecuencia establecida. NOTA: Tanto el contenido que se muestra en este programa como en el programa 10, es de suma importancia para la realización de códigos que pueden ser muy útiles en el desarrollo del alumno como Ingeniero en Electrónica; por ejemplo la elaboración de programas generadores de señales PWM, los cuales necesitan de estas dos herramientas (entradas por captura y salidas por comparación) y así como este ejemplo el MC68HC11 cuenta con una amplia gama de herramientas.

Page 123: TESIS QUE PARA OBTENER EL TÍTULO DE

TIMER: Salidas por comparación (OC’s) 111

ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 11.dsn • OC.asm

Page 124: TESIS QUE PARA OBTENER EL TÍTULO DE

PROGRAMA No. 12

“CONVERTIDOR ANALÓGICO DIGITAL (ADC)”

INTRODUCCIÓN.

En el mundo real existen procesos que producen señales analógicas cuya variación

es continua y no resulta fácil guardar, manejar, comparar, calcular o recuperar datos

de manera precisa utilizando para ello tecnología analógica. En cambio, las

computadoras tienen la capacidad de realizar estas tareas de una forma muy rápida;

son capaces de trabajar prácticamente con una ilimitada cantidad de información, de

manera muy precisa, empleando para ello técnicas digitales.

Los convertidores (ADC y DAC) surgieron por la necesidad que existía de contar con

dispositivos que sirvieran para vincular entre sí a los mundos analógico y digital.

Mediante los convertidores analógicos a digital (ADC) el mundo analógico se puede

comunicar con las computadoras.

El microcontrolador 68HC11 tiene una serie de convertidores analógicos digitales

que son muy útiles y que le han dotado de su gran popularidad. Una característica de

68HC11 es que proporciona dos entradas de referencia (VRL, VRH) para las

conversiones. VRH corresponde al valor máximo y VRL al valor mínimo.

Page 125: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 113

DESARROLLO. PROGRAMA En este programa se hace uso de uno de los convertidores con los que cuenta el microcontrolador 68HC11. Utilizando como entrada analógica el primer canal y Vcc y GND como los niveles de referencia VRH y VRL respectivamente se elaboró el programa para que cuando la tensión supere los 2.5 volts se encienda un LED en el pin PA6 del microcontrolador. DIAGRAMA DE FLUJO

INICIO

Declaración de variables y constantes

Configuración del STACK

Carga #$1000 en X para direccionamiento

indexado

Encender y configurar el conversor

¿Termino conversor?

No

Si

Leer resultado

1 1

1

¿Resultado > 127?

No

Si

Enciende LED

A p a g a

L E D

Page 126: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 114

CÓDIGO *************************************************************************** ** PROGRAMA DONDE SE UTILIZA EL ADC. CUANDO EL VOLTAJE QUE SE INTRODUCE ** ** AL BIT PE0 ES MAYOR A 2.5 VOLTS, SE ENCIENDE EL BIT PA6 DEL MC Y ** ** CUANDO EL VOLTAJE INTRODUCIDO ES MENOR A LOS 2.5 VOLTS EL BIT SE APAGA** **SE UTILIZA COMO ENTRADA EL BIT PE0 PORQUE SE USA COMO ENTRADA ANALÓGICA** ** EL CANAL 1 ** *************************************************************************** ************************** CONSTANTES DE ASIGNACIÓN *********************** SRAM_EXT EQU $4000 ;Dirección correspondiente a la SRAM_EXT. EPROM_EXT EQU $E000 ;Dirección correspondiente a la EPROM_EXT. OPTION EQU $39 ;Dirección correspondiente al registro OPTION. ADCTL EQU $30 ;Dirección correspondiente al registro ADCTL. PORTA EQU $00 ;Dirección correspondiente al puerto A. ADR1 EQU $31 ;Dirección correspondiente al registro ADR1. ************************* DECLARACIÓN DE VARIABLES ************************ ORG $4000 ;El STACK se almacena en la SRAM externa STACK RMB 30 ;La longitude del STACK es de 30 Bytes. ***************************** PROGRAMA PRINCIPAL ************************** ORG $E000 ;El programa inicia en la EPROM externa. INICIO LDS #STACK+29 ;Carga en STACK.

LDX #$1000 ;Carga en X un $1000 para ;direccionamiento indexado.

LDAA #$80 ;Carga en A $80 y almacena en registro STAA OPTION,X ;OPTION para encender el conversor. LDAA #$20 ;Carga $20 para configurar conversor: STAA ADCTL,X ;SCAN=1 MULT=0 ;ADR1 para seleccionar el primer canal. Sigue: BRCLR ADCTL,X,$80,sigue ;Espera a que termine conversión LDAA ADR1,X ;Leer el resultado de la conversión CMPA #$7F ;Comparar con la mitad (127) que ;Corresponde a 2.5v de entrada.

BLO menor ;Si es menor apagar el led LDAA #$40 ;Si es mayor encender el LED. STAA PORTA,X ;Almacena en puerto A el resultado. BRA sigue ;Realizar la siguiente conversión Menor: CLRA ;Limpia acumulador A STAA PORTA,X ;Apagar el LED. BRA sigue ;Realizar la siguiente conversión. ************************* DECLARACIÓN DE VECTORES ************************* ORG $FFFE ;Dirección correspondiente al vector reset. FDB INICIO ;Salta a INICIO. END ;Fin de programa.

Page 127: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 115

ESQUEMÁTICO En el esquemático se realizarán unas adaptaciones muy simples para poder realizar la simulación de este programa. Primero que nada se conectará un potenciómetro al bit menos significativo del puerto E del microcontrolador (PE0) y al mismo pin se conectará un voltímetro, esto para monitorear el voltaje que se le introducirá. También los voltajes de referencia del microcontrolador VRH y VRL se conectarán a Vcc y GND respectivamente y por último se conectara un diodo emisor de luz (LED) al bit 6 del puerto A del microcontrolador (PA6) para así poder observar el cambio de nivel. Todas estas adaptaciones se pueden observar en la Figura 12.1, la zona resaltada es donde se realizaron los cambios.

Figura 12.1: Esquemático para simulación del programa de ADC.

Page 128: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 116

Figura 12.2: Zoom a área modificada del esquemático.

Las conexiones con el microcontrolador se realizaron mediante un elemento llamado default, el cual podemos encontrar dentro del comando Inter-sheet Terminal y su símbolo es como los que se encuentran dentro de los rectángulos que se muestran en la Figura 12.2. Esta modalidad se utiliza para ahorrar circuitería y hacer el diagrama un poco más estético sin tener tanto cableado. Para interconectar dos terminales de este tipo es necesario ponerle la misma etiqueta a los 2 o más puntos de unión. SIMULACIÓN El programa se cargará y compilará de la forma tradicional utilizada en los programas anteriormente simulados. Una vez realizado el proceso de carga y compilación del programa se ejecuta la

simulación utilizando el botón run y posteriormente se manipula el potenciómetro conectado al bit 0 del puerto E del microcontrolador, el cual comparte pin con el canal 0 del convertidor analógico a digital. El valor del voltaje que proporcione el potenciómetro se observa en el voltímetro conectado también a la entrada del canal utilizado. Se puede observar que cuando el valor del potenciómetro es menor a 2.5 Volts el led conectado al bit 6 del puerto A (PA6) se encuentra apagado y cuando el voltaje es

Page 129: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 117

mayor a 2.5 Volts; es decir, se encuentra entre 2.5 y 5 Volts el LED permanece encendido. Estas observaciones se pueden apreciar en la Figura 12.3.

Figura 12.3: Figura que muestra los dos estados posibles.

Para analizar el funcionamiento interno del programa es preciso desplegar en pantalla la ventana Watch Window con la información de los registros ADCTL ($1030), OPTION ($1039) y ADR1 ($1031) tal como se muestra en la Figura 12.4.

Figura 12.4: Ventana Watch Window que muestra el contenido de registros.

Los registros que se muestran son básicos en el funcionamiento del convertidor analógico a digital y a continuación se hace una explicación de cada uno de ellos y de su contenido. Cabe señalar que el registro ADCTL es exclusivo del sistema conversor y en la Figura 12.4 se observa que contiene un $A0, esto significa que los bits 5 y 7 (SCAN y CCF respectivamente) tienen un 1 lógico y los bits restantes contienen 0 lógicos. Estos dos bits se encuentran en 1 lógico porque el programa se encuentra diseñado para realizar conversiones continuamente (SCAN=1) y además la bandera CCF indica que la conversión está completa (CCF=1). Los bits del 0 al 3 muestran que se seleccionó el canal 0 para mostrar el resultado de la conversión.

MENOR A 2.5 V MAYOR A 2.5 V

Page 130: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 118

En el registro OPTION se observa un $80, esto indica que el bit 7 del registro se encuentra a 1 lógico (ADPU=1), lo cual muestra que el conversor analógico a digital esta encendido. Por último se muestra el registro ADR1, en este registro durante la simulación del programa se apreciará que su contenido varía de acuerdo a como se manipula el potenciómetro, esto se debe a que en este registro se guardan los resultados de la conversión. Los resultados que en este caso puede tomar dicho registro pueden ser los siguientes. ADR1 = $00 Cuando la entrada analógica es 0 volts. ADR1 = $1A Cuando la entrada analógica es 0.5 volts. ADR1 = $33 Cuando la entrada analógica es 1 volt. ADR1 = $4C Cuando la entrada analógica es 1.5 volts. ADR1 = $66 Cuando la entrada analógica es 2 volts. ADR1 = $7F Cuando la entrada analógica es 2.5 volts ADR1 = $99 Cuando la entrada analógica es 3 volts. ADR1 = $B2 Cuando la entrada analógica es 3.5 volts. ADR1 = $CC Cuando la entrada analógica es 4 volts. ADR1 = $E5 Cuando la entrada analógica es 4.5 volts. ADR1 = $FF Cuando la entrada analógica es 5 volts. Como ya es sabido el rango de los voltajes de referencia que tomará el microcontrolador será de los 0 volts a los 5 volts, es por ello que el ADC tomará el valor de 0 volts como un valor de $00 y el valor de 5 volts como $FF pero el programa necesita considerar el valor de 2.5 volts, el cual realizando la conversión de analógico a digital toma un valor de $7F que corresponde exactamente a la mitad del rango entre 0 y 5 volts y cuando el programa identifica que su entrada analógica es $7F manda encender el led debido a corresponde a los 2.5 volts. Debido a la explicación que se acaba de dar es por ello que dentro del código del programa se realiza la comparación con el dato $7F.

LDAA ADR1,X ; leer el resultado de la conversión CMPA #$7F ; comparar con la mitad (127) que ; corresponde a 2.5v de entrada.

Para demostrar que el valor del registro ADR1 varía conforme se manipula la entrada analógica (valor del potenciómetro) se muestra su contenido en la Figura 12.5. En dicha figura se miran 3 de los estados que puede tener el programa.

Page 131: TESIS QUE PARA OBTENER EL TÍTULO DE

Convertidor Analógico Digital (ADC) 119

Figura 12.5 .Imagen que muestra tres estados que puede tomar el programa.

NOTAS: Los valores 0.01 y 4.99 volts corresponden a 0 y 5 volts respectivamente. Es recomendable tener precaución con los niveles de voltaje que se introducen, ya que una entrada de voltaje fuera de los niveles de referencia prefijados puede provocar corto interno y una gran posibilidad de que se destruya, al menos, el canal en cuestión. ANEXOS.

Archivos a consultar en el CD-ROM adjunto.

• Programa 12.dsn • ADC.asm

Page 132: TESIS QUE PARA OBTENER EL TÍTULO DE

ANEXO B

REGISTROS DE CONTROL DEL MICROCONTROLADOR

MC68HC11

Page 133: TESIS QUE PARA OBTENER EL TÍTULO DE

AEXO B 125

REGISTROS

Page 134: TESIS QUE PARA OBTENER EL TÍTULO DE

ANEXO A

SET DE INSTRUCCIONES PARA EL MICROCONTROLADOR

MC68HC11

Page 135: TESIS QUE PARA OBTENER EL TÍTULO DE

AEXO A 121

LISTADO DE MNEMÓNICOS. ABA: Añadir el contenido del acumulador B al acumulador A ABX: Añadir el contenido del acumulador B (sin signo) al contenido del registro X ABY: Añadir el contenido del acumulador B (sin signo) al contenido del registro Y ADCA: Añadir al acumulador A un dato y el bit de acarreo. ADCB: Añadir al acumulador B un dato y el bit de acarreo. ADDA: Añadir un dato al registro A ADDB: Añadir un dato al registro B ADDD: Añadir un dato de 16 bits al registro D ANDA: Realizar una operación lógica AND entre un dato y el acumulado A. Resultado en A ANDB: Realizar una operación lógica AND entre un dato y el acumulador B. Resultado en B ASLA: Desplazar un bit a la izquierda el acumulador A. ASLB: Desplazar un bit a la izquierda el acumulador B ASLD: Desplazar un bit a la izquierda el acumulador D ASRA: Desplazar un bit a la derecha el acumulador A ASRB: Desplazar un bit a la derecha el acumulador B BCC: Saltar si no hay acarreo BCLR: Poner a cero bits de la memoria BCS: Saltar si hay acarreo BEQ: Saltar si igual BGE: Saltar si mayor que o igual a cero BGT: Saltar si mayor que cero BHI: Saltar si es mayor BHS: Saltar si mayor o igual BITA: Comprobar el bit especificado del acumulador A BITB: Comprobar el bit especificado del acumulador B BLE: Saltar si menor que o igual a cero BLO: Saltar si menor (Mismo que BCS) BLS: Saltar si menor o igual BLT: Saltar si menor que cero BMI: Saltar si negativo BNE. Saltar si no es igual BPL: Saltar si es positivo BRA: Salto incondicional BRCLR: Saltar si los bits especificados están a cero BRN: No saltar nunca (Equivalente a una operación NOP de 2 bytes) BRSET: Saltar si los bits especificados están a uno BSET: Poner los bits especificados a uno BSR: Saltar a una subrutina BVC: Saltar si no ha habido overflow BVS: Saltar si ha habido overflow CBA: Comparar el acumulador A con el B CLC: Poner a cero bit de acarreo CLI: Permitir las interrupciones CLR: Poner a cero el contenido de memoria especificado CLRA: Poner a cero el acumulador A CLRB: Poner a cero el acumulador B CLV: Poner a cero el bit de overflow

Page 136: TESIS QUE PARA OBTENER EL TÍTULO DE

AEXO A 122

CMPA: Comparar el acumulador A con un dato CMPB: Comparar el acumulador B con un dato COMA: Complementar a uno el acumulador A COMB: Complementar a uno el acumulador B COM: Complementar a uno el contenido de memoria especificado CPD: Comparar el registro D con un dato CPX: Comparar el registro X con un dato CPY: Comparar el registro Y con un dato DAA: Ajuste decimal DEC: Decrementar una posición de memoria especificada DECA: Decrementar el acumulador A DECB: Decrementar el acumulador B DES: Decrementar el puntero de pila SP DEX: Decrementar el registro X DEY: Decrementar el registro Y EORA: Operación XOR entre un dato y el acumulador A EORB: Operación XOR entre un dato y el acumulador B FDIV: División IDIV: División entera INC: Incrementar el contenido de una posición de memoria INCA: Incrementar el acumulador A INCB: Incrementar el acumulador B INS: Incrementar el puntero de pila SP INX: Incrementar el registro X INY: Incrementar el registro Y JMP: Salto incondicional JSR: Salto a una subrutina LDAA: Cargar un dato en el acumulador A LDAB: Cargar un dato en el acumulador B LDD: Cargar un dato de 16 bits en el registro D LDS: Cargar un dato de 16 bits en el puntero de pila SP LDX: Cargar un dato de 16 bits en el registro X LDY: Cargar un dato de 16 bits en el registro Y LSL: Desplazamiento de un bit hacia la izquierda del contenido de una posición de Memoria. LSLA: Desplazar el acumulador A un bit hacia la izquierda LSLB: Desplazar el acumulador B un bit hacia la izquierda LSLD: Desplazar el acumulador D un bit hacia la izquierda LSR: Desplazar el contenido de una posición de memoria un bit hacia la derecha LSRA: Desplazar el acumulador A un bit hacia la derecha LSRB: Desplazar el acumulador B un bit hacia la derecha LSRD: Desplazar el registro D un bit hacia la derecha MUL: Multiplicación sin signo NEG: Complementar a dos el contenido de una posición de memoria NEGA: Complementar a dos el contenido del acumulador A NEGB: Complementar a dos el contenido del acumulador B NOP: No operación ORAA: Realizar la operación lógica OR entre un dato y el acumulador A ORAB: Realizar la operación lógica OR entre un dato y el acumulador B PSHA: Meter el acumulador A en la pila PSHB: Meter el acumulador B en la pila

Page 137: TESIS QUE PARA OBTENER EL TÍTULO DE

AEXO A 123

PSHX: Meter el registro X en la pila PSHY: Meter el registro Y en la pila PULA: Sacar el acumulador A de la pila PULB: Sacar el acumulador B de la pila PULX: Sacar el registro X de la pila PULY: Sacar el registro Y de la pila ROL: Rotación a la izquierda del contenido de una posición de memoria ROLA: Rotar a la izquierda el acumulador A ROLB: Rotar a la izquierda el acumulador B ROR: Rotar a la derecha el contenido de una posición de memoria RORA: Rotar a la derecha el contenido del acumulador A RORB: Rotar a la derecha el contenido del acumulador B RTI: Retorno de interrupción RTS: Retorno de subrutina SBA: Restar un dato al acumulador A SBCA: Restar un dato y el bit de acarreo al acumulador A SBCB: Restar un dato y el bit de acarreo al acumulador B SEC: Poner a uno el bit de acarreo SEI: Inhibir las interrupciones SEV: Poner a uno el bit de overflow STAA: Almacenar el acumulador A en una posición de memoria STAB: Almacenar el acumulador B en una posición de memoria STD: Almacenar el registro D STOP: Para el reloj del sistema STS: Almacenar el puntero de pila SP STX: Almacenar el registro X STY: Almacenar el registro Y SUBA: Restar un dato al acumulador A SUBB: Restar un dato al acumulador B SUBD: Restar un dato al registro D SWI: Provocar una interrupción software TAB: Transferir el acumulador A al acumulador B TAP: Transferir el acumulador A al registro CCR TBA: Transferir el acumulador B al acumulador A TEST: Instrucción de test. Sólo se puede ejecutar en el modo de test TPA: Transferir el registro CCR al acumulador A TST: Comprobar si una posición de memoria está a cero TSTA: Comprobar si el acumulador A está a cero TSTB: Comprobar si el acumulador B está a cero TSX: Transferir el puntero de pila al registro X TSY: Transferir el puntero de pila al registro Y TXS: Transferir el registro X al puntero de pila TYS: Transferir el registro Y al puntero de pila WAI: Esperar a que se produzca una interrupción XGDX: Intercambiar los valores de los registro X y D XGDY: Intercambiar los valores de los registros Y y D