You are on page 1of 73

INDICE

TEMA 1.TEMA 2.TEMA 3.TEMA 4.TEMA 5.TEMA 6.TEMA 7.-

Introduccin al sistema Altair 535.2 Primeros programas en el sistema Altair 535...3 Organizacin de Memoria.15 Convertidor A/D32 Temporizadores.49 Interrupciones y Contadores..54 Conexin de un Display LCD..70

Sistema basado en microprocesador Altair 535

TEMA 1.- INTRODUCCION AL SISTEMA BASADO EN MICROPROCESADOR ALTAIR 535 El sistema Altair 535 es un sistema basado en microprocesador. Un microprocesador no es utilizable por si solo, sino que es necesario una serie de componentes que le permitan funcionar, comunicarse con otros dispositivos auxiliares y con el exterior. En este caso el sistema completo se llama Altair 535, y el microprocesador que utiliza este sistema se llama SAB 80C535 de Siemens. Puede realizar hasta un milln de instrucciones por segundo con un cristal de 12 MHz y est fabricado con la tecnologa ACMOS, la cual permite un reducido consumo de corriente pudiendo ser alimentado por una simple batera. Trabaja slo con datos de 8 bits, lo que est muy lejos de los microprocesadores de PC actuales, la velocidad tambin es mucho ms pequea que en estos, pero en cambio ocupan muy poco espacio y son muy baratos, lo que unido a que son perfectamente capaces de realizar algunas tareas de control en la industria y en el mercado domstico, son la solucin perfecta para estas aplicaciones que hasta ahora se haban resuelto con lgica cableada. Antes de continuar es preciso aclarar un pequeo matiz que se plantea al llegar a este punto. Aunque hasta ahora hemos llamado microprocesador al SAB 80C535, sera ms correcto llamarlo Microcontrolador. Pero, Qu diferencias hay entre uno y otro?. Un microcontrolador se puede definir como un microprocesador al que se le han aadido una serie de elementos que podra tener externamente un Microprocesador, por ejemplo un convertidor Analgico/Digital,un Temporizador, un mdulo de comunicacin serie, buffers de salida y entradas digitales. Es decir, un microcontrolador es un chip que tiene integrados un microprocesador y una serie de perifricos que le permiten ser casi autosuficiente en aplicaciones de control. Estos perifricos, integrados en el microprocesador de un PC, limitaran mucho a este, ya que el trabajo de estos est ms enfocado al trabajo masivo con datos y todas estas aplicaciones de Convertidores A/D, comunicacin serie, etc, seran un estorbo y un encarecimiento de este, adems de ser aplicaciones no utilizadas por la mayora de los usuarios, por lo que se dejan para ampliaciones opcionales del PC a travs de tarjetas. En definitiva, los microcontroladores son sistemas ideales para realizar pequeas tareas de control en mltiples aplicaciones, donde solo es necesario ejecutar un pequeo programa en el que slo sea necesario medir unas pocas seales Digitales y/o Analgicas procedentes de sensores del sistema a controlar, y activar unas pocas seales tambin Digitales y/o Analgicas para activar los actuadores que permitan intervenir en el sistema fsico. Todo esto, como se ya se ha comentado, se haca anteriormente con sistemas de control basados en lgica cableada, en la que la automatizacin de un proceso se realizaba a traves de automatismos o circuitos lgicos discretos. Esto limitaba las posibilidades del sistema de control ya que no era posible disear sistemas con demasiada inteligencia y adems los diseos eran caros, voluminosos y de difcil mantenimiento.

Sistema basado en microprocesador Altair 535

TEMA 2.- PRIMEROS PROGRAMAS CON ALTAIR 535. La mejor forma de aprender a programar es programando, por ello vamos a empezar directamente realizando una serie de programas sencillos que permitan a las personas que no han programado nunca un equipo de estas caractersticas, familiarizarse con l lo antes posible. La programacin del Altair se realiza en lenguaje Ensamblador. Este se escribe en un editor de textos localizado en C:\Altair\Editor51. La utilizacin de este editor viene detallada en el tema 1 del manual de usuario, por lo que aqu solo recordaremos algunos detalles. Una vez escrito el programa se debe de seguir el siguiente proceso para envirselo al microprocesador: PROGRAMA FUENTE .S51 Ensamblar F9 PROGRAMA OBJETO .O51 PROGRAMA OBJETO COMPLETO .e51

Enlazar F8

ENVIA EL PROGRAMA AL ALTAIR Control + F9 -Programa fuente.- Es el programa o listado de texto que hacemos o vemos en el Editor. Este programa se almacena con la extensin .S51 - Programa Objeto.- Es el programa que hemos hecho en el editor pero convertido al lenguaje Cdigo Mquina que entiende el microprocesador SAB535. Tiene la extensin .o51. -Programa Objeto completo.- Es la inclusin en el programa objeto anterior de funciones y librerias utilizadas en nuestro programa. Tiene la extensin .e51 - Envo al Altair.- Se enva al Altair a travs de un puerto serie (Com1 o Com2) configurado previamente en Opciones, el archivo final .e51.

Sistema basado en microprocesador Altair 535

Cabecera de los programas. Al inicio de los programas se suelen incluir varias lneas de cdigo de cabecera. En nuestro caso siempre incluiremos las dos siguientes: include ..\fuentes\reg515.def text_org $8000

La primera se escribe para que se incluyan en el programa libreras o cdigo que nos facilitan la elaboracin del programa. La segunda lnea hace que el programa cuando sea enviado, sea colocado en la memoria del Altair a partir de una posicin fija (en este caso la $8000). Principio y final. Normalmente los programas no tienen un final determinado sino que siempre se estn ejecutando. Para que puedan hacer esto hay que tener una estructura de programa cclica: inicio: ; Etiqueta de inicio de programa

programa

sjmp inicio

; Instruccin de salto a inicio

Los primeros programas.

Programa 1: include ..\fuentes\reg515.def text_org $8000 inicio: Mov Mov R0, #30 P4, R0 Este es el cuerpo del programa, el resto ( lo que est en negrita) se va a repetir en todos los programas que se van a hacer por lo que se puede copiar de un programa a otro.

sjmp inicio .end

Sistema basado en microprocesador Altair 535

Este programa simplemente mueve el dato 30 decimal a un registro llamado R0. Los registros R0, R1, R2, R3, R4, R5, R6, R7, son registros de propsito general donde podemos guardar momentneamente algn valor. En la segunda lnea se mueve el contenido de R0 al puerto P4. Si tenemos conectado dicho puerto a unos diodos led podemos ver en ellos el contenido actual de R0 y P4. Programa 2: Tambin se puede cargar en un puerto directamente un dato en diferente tipo de numeracin: Mov Mov Mov P4, #$F0 P4, #135 P4, #%10101001 ; Carga en P4 el dato hexadecimal F0 ; Carga en P4 el dato decimal 135 ; Carga en P4 el dato binario 10101001

Instrucciones de Salto

Ya hemos visto anteriormente en el apartado principio y final una instruccin de salto sjmp, que permitia saltar al principio del programa cuando se llegua al final y volver a comenzar de nuevo para conseguir una ejecucin cclica. Un programa es una ejecucin de instrucciones ordenada y secuencial. Hay un dispositivo dentro del microprocesador que es quien lleva el control de la ejecucin de las instrucciones o lo que es lo mismo, sabe en cada momento donde est la instruccin que se est ejecutando. Este es el Contador de Programa o Program Counter (PC). Veamos esto con un ejemplo: Programa 3: include ..\fuentes\reg515.def text_org $8000 inicio: mov nop nop mov nop nop sjmp P4,#%11111111 P4, #%00000000

inicio

Sistema basado en microprocesador Altair 535

Este programa simplemente pone a 1 todos los bits del puerto 4 y tras dos nop (no operacin) que consumen un pequeo tiempo, ponen a 0 todos los bits del puerto 4. Despus de otras dos nop se vuelve a saltar a la etiqueta de inicio y se vuelve a ejecutar el programa, repitindose ste cclicamente. Veamos como trabaja en este programa el PC (contador de programa). Cuando se transmite al Altair el programa este lo almacena en la memoria RAM a partir de la direccin de memoria $8000, gracias a la segunda lnea de cdigo (text_org $8000). Esto hace que la memoria del Altair quede como se ve a continuacin:
ETIQUETAS Inicio INSTRUCCIONES Mov P4,#%11111111 Nop Nop Mov P4,#%00000000 Nop Nop Sjmp inicio DIRECCION DE MEMORIA $ 8000 $ 8001 $ 8002 $ 8003 $ 8004 $ 8005 $ 8006 $ 8007 $ 8008 $ 8009 $ 800A PC $ 8000 $ 8002 $ 8003 $ 8004 $ 8006 $ 8007 $ 8008

Vemos como cada instruccin ocupa una o ms posiciones de memoria (mov ocupa dos, nop una y sjmp tres). El contador de programa al principio se pone en el valor $8000, y entoces el micro ejecuta la instruccin a la que apunta (mov P4,#%11111111). Cuando se acaba de ejecutar esta instruccin el micro debe de ejecutar la siguiente instruccin, que debe de ser apuntada por el PC. Esto ocurre as porque a continuacin el PC tiene el valor $8002, que es la direccin del primer nop, pero Por qu ocurre as, y el PC no apunta a la siguiente direccin de memoria, la $8001?. Pues es porque el micro conoce que la instruccin a ejecutar (mov) siempre ocupa dos posiciones de memoria y cuando se ejecuta esta ordena al PC incrementarse en dos unidades en vez de en una. As se van ejecutando las instrucciones y el PC se va cargando con la direccin de memoria de la siguiente instruccin a ejecutar. Al final del programa se llegua a la instruccin de salto sjmp, donde el PC se carga con la direccin que corresponde a la etiqueta inicio ($8000), y as se vuelve a ejecutar el programa desde el principio. Es interesante ver este programa en el depurador. La instruccin de salto sjmp es una instruccin de salto absoluto , es decir, siempre que se ejecuta esa instruccin se salta a la etiqueta indicada. Pero existen lo que se llaman saltos condicionales, en los que se salta a una etiqueta si se da una condicin, y si no se da esa condicin no se salta. Veamos el ejemplo siguiente: Programa 4: Este programa enciende o apaga un led situado en P4.0 si un bit de entrada P5.0 est activo o no.
Sistema basado en microprocesador Altair 535

Inicio: jb clr Activo: setb sjmp P4.0 inicio ; Pone a uno P4.0 ; salta a inicio P5.0, activo P4.0 ; Salta a activo si P5.0 est a uno. ; Pone a 0 P4.0

Tambin existe la instruccin opuesta que salta a una direccin si el bit est a cero en vez de a uno. A continuacin se expresan estas dos instrucciones de forma genrica, tal y como aparecen en la pgina 6.17 del manual de usuario, donde adems vienen otras instrucciones de salto que es interesante consultar. Jb Jnb bit, direccin -> Salta a la direccin especificada si el bit est a uno. bit, direccin -> Salta a la direccin especificada si el bit est a cero.

Existen otras dos instrucciones de salto condicional pero en estos casos la condicin no es un determinado bit, sino el contenido de un registro. Programa 5: En este programa se ver una de estas instrucciones de salto condicional as como una instruccin de llamada a una subrutina subprograma. Se pretende que un bit de salida (P4.0) parpadee a intervalos de aproximadamente 1 segundo. inicio: cpl mov lcall sjmp esp: mov esp1: nop nop djnz djnz ret R0,esp1 Acc,esp ; Salta a esp1 mientras que R0 no valga 0 y decrementa R0. ; Salta a esp mientras que Acc no valga 0 y decrementa R0. ; Hace que se vuelva al programa principal a continuacin de donde se llam a la subrutina. R0, #248 P4.0 Acc, #200 esp inicio ;Complementa o invierte el estado de P4.0 ; Mueve al acumulador el valor 200 ; Llama a la subrutina esp ; Salta a inicio ; Empieza una subrutina o subprograma. ; Mueve el valor 248 al registro R0

En este programa hemos visto varias instrucciones nuevas: cpl bit -> Esta instruccin complementa un bit, es decir, invierte su estado.
7

Sistema basado en microprocesador Altair 535

Esto provoca el efecto de parpadeo del bit P4.0. lcall direccin -> Esta instruccin realiza una llamada o salto a un subprograma o subrutina que se encuentre en una determinada direccin (etiqueta). El trabajo con este tipo de estructura de programa facilita la comprensin y elaboracin de los programas. ret -> Esta instruccin hace que se acabe la subrutina y se vuelva a la instruccin siguiente a su lcall correspondiente, para que se ejecute el programa por donde iba. djnz registro, direccin -> Esta instruccin compara el valor del registro con el valor 0, si es 0 deja continuar al programa por donde iba, pero si no es 0, decrementa el registro en una unidad y salta a la direccin indicada. En este programa el parpadeo se consigue de un modo muy sencillo ya que existe una instruccin que invierte el estado de un bit, lo que cuesta ms trabajo es mantener al micro ocupado durante un tiempo sin hacer nada util entre cambio de estado del bit, para que se produzca el efecto visual del parpadeo. Para ello se han utilizado dos bucles con sendas instrucciones djnz que debido al alto valor de carga de sus respectivos registros (Acc=200 y R0=248) junto con el que los dos bucles estn anidados (uno dentro de otro) con lo que el nmero de veces de ejecucin de un bucle se multiplica por el del otro y el nmero total de ejecuciones del bucle es de 200x248. Programa 6: Modificar el programa anterior modificando el tiempo de parpadeo al introducir ms instrucciones nop y ms llamadas a subrutina (lcall). Hacer aumentar el tiempo metiendo otro bucle djnz con otro registro, por ejemplo el R1. Programa 7: Modificar el programa 5 para que parpadeen 3 leds con diferentes tiempos de parpadeo cada uno. Programa 8: Modificar el programa 5 para que parpadeen dos leds de forma inversa uno a otro. Programa 9: Modificar el programa anterior para que parpadee uno u otro led en funcin del estado de un bit del puerto 5, utilizando una instruccin de salto condicional jb. Programa 10: Hacer un programa que saque el estado de P5 por P4 cuando se active el bit P5.7.
Sistema basado en microprocesador Altair 535

Programa 11: Utilizando una instruccin djnz hacer que el programa vaya sacando el valor del registro R0 por el puerto 4 y que este valor se vaya decrementando a intervalos de 1 segundo. Programa 12: En el programa 5 se vi la instruccin de salto condicional con registro djnz. Existe otra instruccin de salto condicional con registro cuyo formato es: cjne cjne Acc, dato , direccin ; compara el acumulador o un registro R con un dato Acc, B , direccin ; compara el acumulador con el registro B.

Esta instruccin compara el acumulador o un registro con un dato fijo o con otro registro y salta a la direccin si los dos datos son diferentes, si son iguales no se salta y se sigue el programa por donde iba. Conociendo como funciona esta instruccin realizar un programa que active el bit P4.0 cuando se acierte una clave introducida por el puerto P5. Programa 13: Modificar el programa anterior para que el dato a adivinar pueda ser introducido por el puerto 5. Operaciones con un operando. Ya hemos visto las instrucciones : clr setb cpl bit bit bit

clr y cpl tambin funcionan a nivel de Bytes pero slo con el registro acumulador. Programa 14: Hacer un programa que muestre por P4 el estado del P5 complementado.

Sistema basado en microprocesador Altair 535

Operaciones de rotacin.Estas operaciones permiten rotar el registro Acumulador. Vienen explicadas en las pginas 6.21 y 6.22 del manual de usuario.

Programa 15: Realizar un programa que rote un led encendido por el puerto P4. Programa 16: Modificar el programa anterior para que el led invierta el sentido al activar P5.0 Programa 17: Modificar el programa anterior para que el led rebote al llegar a cada lado. Programa 18: Modificar el programa anterior para que el led cambie de velocidad al irse activando P5.0, P5.1 y P5.2. Programa 19: Hacer un programa en el que dos leds roten en sentido inverso por el puerto P4 y se crucen. Instrucciones de incremento y decremento.Estas instrucciones son: inc dec Programa 20: Hacer un programa que muestre en P4 el contenido de un registro y automticamente se vaya incrementando o decrementando a intervalos de 1 segundo en funcin de si el bit P5.0 est activado o desactivado. registro registro ; Incrementa en una unidad el contenido de un registro. ; Decrementa en una unidad el contenido de un registro.

Sistema basado en microprocesador Altair 535

10

Operaciones lgicas. Anl Onl Xrl -> Operacin AND con bits o con Bytes. -> Operacin OR con bits o con Bytes. -> Operacin EXOR con bytes.

En este tipo de operaciones cada operando tiene un nombre, el primero se llama D (destino) y el segundo O (origen), el resultado R se almacena en el registro Destino. En las operaciones a nivel de Bytes el byte Destino y por lo tanto el resultado tiene que ser siempre el Acumulador. En operaciones de bits el bit destino y por lo tanto el resultado debe ser el registro C (carry). Ejemplo: anl c, A.0 o orl c, P4.5

Con el smbolo \ se invierte el estado del operador origen. Ejemplo: anl Programa 21: Hacer un programa que realice las operaciones AND, OR y EXOR entre el dato %01101010 y el puerto P5. Programa 22: Realizar alguna funcin lgica realizada en el mdulo de electrnica digital, y comprobar que se cumple la tabla de verdad. Programa 23: Utilizando operaciones lgicas y de rotacin realizar un programa que haga correr un led por el puerto 4 desde P4.7 hasta P4.0 y se quede en el, despus otro hasta P4.1 y as hasta que se complete todo el puerto. Despus se repetir el proceso cclicamente. Operaciones aritmticas. c, B.0

Las instrucciones correspondientes a operaciones aritmticas vienen a partir de la pgina 6.28 del manual de usuario. Se pueden realizar la suma, resta, divisin y multiplicacin entre registros de 8 bits. Si se van a realizar operaciones con nmeros mayores hay que realizar subrutinas especiales que permitan operar con estos. Para estos casos se utiliza el bit C

Sistema basado en microprocesador Altair 535

11

(carry). En el manual de usuario viene un ejemplo de operaciones con 16 bits para cada operacin aritmtica.

Programa 24: Realizar cuatro programas que realicen la suma, resta, multiplicacin y divisin entre un dato fijo y el dato que exista en el P5, y el resultado sea mostrado por el puerto 4. Programa 25: Realizar un programa en el que se puedan meter datos por el puerto P5, si el dato es menor que otro fijo que abr que adivinar se activar P4.0, si es mayor P4.1, y si se acierta se activa de modo intermitente P4.7.

Diagramas de flujo.Es una forma de representar el programa. Se suele realizar antes de empezar ste para tener un esquema de lo que tenemos que hacer. Consta de:

OO lflllflfll Operacin Operacin NO

S Trama de decisin o pregunta

Terminal

Lnea de flujo

Ejemplo sencillo: Cargar un registro con el valor 38 y decrementarlo hasta que el el valor sea 0.

Sistema basado en microprocesador Altair 535

12

Inicio

Cargar un registro con el valor 38

Decrementa el contenido del registro

Es 0 el contenido del registro ? Si

No

Fin
Sistema basado en microprocesador Altair 535 13

En este caso es sencillo y el diagrama de flujo se puede adaptar muy bien al enunciado del problema, pero en caso de problemas ms complejos el diagrama se complica. Programa 26: Para alguno de los programas realizados anteriormente realizar un diagrama de flujo y despus pasarlo a programa. Compararlo con el programa primero que se hizo.

Sistema basado en microprocesador Altair 535

14

TEMA 3: ORGANIZACIN DE LA MEMORIA EN EL ALTAIR 535.El SAB 80C535 puede direccionar cuatro reas de memoria diferentes: * Hasta 64 kbytes de memoria externa de programa. * Hasta 64 k bytes de memoria externa de datos. * 256 bytes de memoria de datos. * 128 bytes que actan como rea de registros de funciones especiales (SFR). En la explicacin de cmo funcionaba el microprocesador, vimos cmo exista una zona ( las primeras posiciones de memoria ) donde estaban las instrucciones y otra zona en donde se lean y escriban datos. Normalmente en las aplicaciones, la memoria de programa es una EPROM, donde est cargado el sistema operativo Altair y el programa de la aplicacin. Despus existe una memoria RAM que se utiliza de memoria de datos ( para cargar datos que nos manden de algn equipo va serie, resultado de conversiones A/D, resultados de operaciones aritmticas y lgicas, etc. ). Estos dos mapas de memoria son independientes, es decir, existe una forma de distinguir por el programador, el acceder a la memoria de programa o a la de datos. En el Hardware, esto se puede realizar a una lnea que permite activar una memoria u otra.

SISTEMA OPERATIVO

FFFF

FFFF

PROGRAMA DE LA APLICACIN (Realizado previamente en ensamblador) 64 K

MEMORIA DE DATOS Mmm

0000 /PSEN

0000

Configuracin aprovechando la memoria al mximo ( 64K + 64K ).

Pero a nosotros esta configuracin no nos conviene, ya que tendramos que grabar mediante una grabadora de EPROMS el programa que hiciramos. Teniendo en cuenta de
Sistema basado en microprocesador Altair 535 15

que nunca salen a la primera, se perdera mucho tiempo en desarrollar un programa al tener que grabar y borrar EPROMS constantemente. Adems, ello supondra un coste econmico elevado, ya que haran falta los grabadores de EPROMS, borradores y muchas EPROMS, ya que stas no se pueden grabar y borrar indefinidamente. Para que podamos probar nuestros programas cuantas veces queramos rpida y eficazmente, el sistema Altair nos ofrece un mtodo muy til. En el sistema Altair existen dos memorias: * Una memoria de programa de 32 Kbytes, en donde se encuentra el sistema operativo. *Una memoria RAM que es compartida como memoria de programa y de datos.
64 k (Memoria de programa (EPROM).

32 K de memora de datos.

32 K de memora de Programa y datos. Se comparte, se hacen solapar los mapas de memora.

64 K (Memora de datos) (RAM).

32 K de memora de datos.

Esto ya veremos como se hace desde el punto de vista Hardware. Desde el punto de vista Software slo debemos tener en cuenta que el direccionamiento de memoria queda como se indica a continuacin:
Sistema basado en microprocesador Altair 535 16

$0000 $00FF

vectores de inte ESPACIO RESERVADO PARA APLICACIONES USUARIO. SISTEMA OPERATIVO ALTAIR.

$0000

EPROM

Slo memora de programa.

$7000 4 Kbytes $7FFF

$8000 Ejemplo. $9000 Programa prueba de aplicacin. RAM Zona de Datos del programa de prueba. $FFFF $FFFF Memora compartida de Programa y datos.

Con esta configuracin podemos tener en la EPROM el sistema operativo, el cual nos permite, unido a los programas en PC de IBERCOM, realizar programas en ensamblador y pasarlos a travs del puerto serie al ALTAIR y cargarlos en la memoria RAM compartida. El sistema operativo har correr el programa y podremos comprobar si funciona sin tener que grabar una EPROM. El programa si no ocupa todos los 32K de RAM, puede utilizar la zona que le quede libre para almacenar datos. Pero hay que tener en cuenta que estando el programa en la RAM, ste se borra si se le corta la alimentacin, aunque se le puede mantener con una batera, pero sta tiene su tiempo. Normalmente el usuario no se fa de esto, aparte de que si hay que almacenar el equipo durante demasiado tiempo, habra que volver a grabar otra vez el programa en la RAM. Por ello, lo normal en todas las aplicaciones es que, una vez depurado y comprobado el programa, ste se graba en la zona de usuario de la EPROM. Memoria de datos interna.El SAB 80C535 posee una memoria RAM interna, pequea, pero que es muy til a la hora de programar. Est dividida fsicamente en tres bloques:

$FF Bloque Sistema basado en microprocesador Altair 535 superior

Como comparten direcciones de memoria iguales, existe un modo diferente para acceder a cada una de ellas. 17

128 bytes $80

$FF

$80 $7F Bloque 128 bytes. $00 inferior Registros de funcin especial (SFR)

En el rea SFR estn los registros de funcin especial. Estos son registros de muy diversas utilidades que ya iremos viendo. Por poner un ejemplo estn: PSW: Registro de estado de programa. ACC : Acumulador. P1, P2, P3, P4, P5: Puertos. Etc.

Para acceder a ellas se podran utilizar sus direcciones de memoria ( pg. 2. 12 ) pero el lenguaje ensamblador nos permite nombrarlos por su smbolo y tener con ello un acceso directo. Ejemplo P6V P4, # 20. Hay instrucciones que permiten mover y trabajar con datos de las memorias de datos interna y externa. Hay direcciones que coinciden, incluso triplemente, ya que estn los registros de funcin especial. Esto quiere decir que el P se podra volver loco al existir direcciones de las memorias de datos interna y externa que coinciden. Por ello, debe existir algn mtodo que permita diferenciar a qu memoria se accede. Memoria de datos interna de Registros de Funcin Especial.-

En esta memoria RAM interna estn, como su propio nombre indica, los registros de funcin especial. Estos son: - ACC: Acumulador. $FF - B: Registro temporal. - SP: Stack Pointer. Acceso directo. 128 bytes - DPTR: DPL DPH. - P6,,P0: Puertos. $80 No hay problema porque ni nos enteramos a qu memoria accedemos, ya que ponemos smbolos de registros. A estos registros el acceso es directo, es decir, para realizar algo con ellos slo hay que indicar su smbolo. Ejemplo: en la instruccin MOV ( mover )
Sistema basado en microprocesador Altair 535 18

MOV P1, # 30 -> Mueve a P1 el dato 30. MOV P5, P4 -> Mueve P4 a P5. Aunque estos registros tengan una direccin de memoria en la memoria interna, sta no se menciona. Memoria de datos interna que no es SFR.$FF Parte alta. (126 bytes) $80 $7F 32 primeras posiciones. $1F $00 Parte baja. (126 bytes) Acceso directo. Acceso indirecto.

$1F

R7 R0 R7 R0 R7 R0 R7 R3 R2 R1 R0

Banco 3

Banco 2

Banco 1

$07

Banco 0

$00

Las 32 primeras posiciones contienen los registros de propsito general.(Los registros R, R0, ..,R7.). Las 32 posiciones estn divididas en grupos de 8 registros llamados bancos. Existen cuatro bancos: 0, 1, 2 y 3 pero slo uno de ellos puede estar activo al mismo tiempo, es decir, si accedemos al R5 tenemos que saber a qu banco estamos accediendo porque existen 4 registros R5. El establecimiento del banco activo se realiza mediante el registro PSW ( Registro de Estado ). Ya se ha comentado de este registro que es un registro en el que sus bits son independientes y cada uno sirve para algo diferente ( comparar, bit de paridad, ). Existen dos bits en este registro que indican el banco activo:
PSN.4 0 Sistema basado en microprocesador Altair 535 0 1 1 PSN.3 0 1 0 1 Banco 0 19

Banco 1 Banco 2 Banco 3

Ejemplo: Si

PSW = 0 y PSW = 1

est seleccionado el banco 1.

Bancos. Si realizamos la instruccin : MOV R3, #28 Cargamos el dato 28 en el registro 3 del banco 1: R3 3 2 28 1 0

Si realizamos la instruccin: MOV R3,#28, cargamos el dato 28 en el Registro 3 del banco 1. Para poder cambiar la seleccin del banco sabemos que el registro de estado ( PSW) es un registro de la memoria de registros de funcin especial y, por lo tanto se trabaja con l de un modo directo. Por ejemplo, para establecer el banco 3 podramos realizar la operacin: MOV PSW, # 24 0 0 0 1 1 0 0 0

Pero esto pondra a 0 el resto de bits que pueden estar dando una informacin en ese momento o en todo caso hay algunos que no sabemos para qu sirven y no debemos modificarlos. Podemos seleccionar bancos modificando el PSW bit a bit , ya que esto con este registro es posible. Setb Setb PSW. 3 PSW. 4

1- Realizar un programa que vaya cargando en todos los registros " R " los datos de 0 al 32, y luego los muestre en P4. Como hemos visto en muchos programas hasta ahora, la forma de utilizar los registros " R " es directa, es decir, es como los registros especiales SFR, no hay que especificar la posicin de memoria donde estn para trabajar con ellos, sino que tienen su nombre. Ej.: MOV R0, # 22
Sistema basado en microprocesador Altair 535 20

Pero si nos fijamos en el mapa de memoria de la memoria interna, queda por ver una parte de la memoria baja que es direccionable directamente e indirectamente y la memoria alta que es indirecta. De lo que queda de la memoria baja que se puede direccionar directamente nos vamos a olvidar, pero se realizara de la siguiente forma: MOV P4, $ 08 -> Con esto moveramos al acumulador lo que hay en la posicin 08 de la memoria interna.

2.- Modificar el programa anterior para realizar lo mismo pero con direccionamiento directo sin nomenclatura R0, R1, R2,etc., sino con direcciones de memoria. De este modo se podran utilizar los 128 bytes bajos de la memoria RAM interna. Otro modo de acceder a estos 128 bytes bajos y los 128 bytes altos, es lo que se llama direccionamiento o acceso indirecto. MOV R0, #$08 -> Se carga el dato 08 hexadecimal en R0. MOV P4, @R0 -> En P4 se carga lo que hay en la direccin apuntada por R0 ( $ 08 ). El registro R0 es un puntero que apunta a la direccin que se le cargue, aunque se le carga como un dato, no como una direccin.

00001000

R0

00000001

$08 $00

Cuando se quiere ver lo que hay en esa direccin se utiliza el smbolo @ seguido de R0 trasvasando a un registro SFR.
* Slo se pueden utilizar R0 y R1.

3.- Modificar el programa anterior para que las 32 primeras posiciones sean cargadas y leidas en el P4 con direccionamiento indirecto. Tener en cuenta que segn el esquema de memoria, con este sistema ( direccionamiento indirecto ) podramos acceder tambin a los 128 bytes altos. Estableciendo estas formas de direccionamiento directo o indirecto, ya el P sabe distinguir entre la memoria alta interna y la memoria SFR. La memoria baja es posible direccionarla de un modo u otro ya que slo hay una. ( Ver esquema de memoria ). Todo esto est muy bien saberlo, pero en principio, el modo de utilizar estas memorias va a ser un poco diferente. Cuando el P arranca, coloca el puntero de pila en la
Sistema basado en microprocesador Altair 535 21

direccin correspondiente a R0 del banco 1, es decir, en la posicin $08, ya que la pila utiliza la memoria RAM interna. Quiere decir esto que ya no podemos utilizar los dems bancos y no se puede hacer lo que hemos visto ?. Al arrancar, el P selecciona el banco 0 y pone el SP en la direccin $08. Si nosotros necesitamos utilizar otro banco lo especificamos en el PSW y el sistema operativo normalmente nos traslada el SP por detrs del banco.
FF

SP

R1

$08 Banco 0.

R0

4.- Comprobarlo.

Sistema basado en microprocesador Altair 535

22

Todo esto, y que adems el sistema operativo del Altair utiliza algunas zonas de memoria superiores a las de los 4 bancos y que la pila es superimportante.

Se podra desbordar la pila.

SP

Cuando se adquiere un cierto nivel se trabaja mucho con subrutinas y con la pila, por lo que el tamao de sta puede llegar incluso a ser pequeo. Por todo ello NORMAS: -> En principio utilizar el banco 0 y todo el resto de la memoria interna dejarlo para la pila. El SFR utilizarlo normalmente pero slo para los registros que conocemos y con los nombres conocidos ( P0, ACC, etc. ). -> Si nos es imprescindible, utilizar ms bancos. Acceso a la memoria externa de datos.-> Fijndose en el esquema de memoria podemos ver que es accesible indirectamente. $0000 $FFFF -> Slo puede tener como origen y destino de datos el Registro acumulador. -> En vez de los registros R0 y R1 se utiliza el registro DPTR que es de 16 bits ( $8000 a $FFFF ). -> En vez de la instruccin MOV se utiliza MOVX.
Sistema basado en microprocesador Altair 535 23

Ejemplo: 905A

DATOS

MOV DPTR, #$905 A; Carga en DPTR la direccin 905 A. $8000


ACC

DPTR $FFFF Ejemplo: Ahora vamos a ver cmo se haca lo contrario. 905A MOV DPTR, #$905 A MOVX @DPTR, ACC
ACC (DATOS)

905A

5.- Realizar un programa que cargue 20 datos ( del 0 al 19 ) a partir de la direccin $B000 y los lea mostrndolos en P4. Otra forma de acceder a la memoria de datos externa es la de direccionamiento base ms registro ndice. Este modo permite acceder a una posicin de memoria a travs de un puntero que se calcula a travs de la suma del registro base ( DPTR ) ms el ndice. El ejemplo lo vamos a ver con la instruccin MOVC que es igual que MOVX pero que trabaja slo con la memoria de programa. Como la zona $8000 - $FFFF es memoria de programa y datos, en esta zona tambin puede acceder pero slo para leer, ya que se supone en principio que de la memoria de programa o del programa, slo se va a querer leer algo. Esta instruccin y el modo de direccionamiento base ms ndice se ha establecido en este P porque muchas veces en el mismo programa se incluye una tabla de datos que es necesaria para la aplicacin. Ejemplo: Supongamos que ya sabemos manejar el Display, y queremos que al principio, nada ms arrancar el P, saque un mensaje por pantalla diciendo " Hola ". Este mensaje no lo crea el programa espontneamente. La palabra " hola " debe estar almacenada en algn sitio. Lo normal es que est en la misma memoria de programa codificada en cdigo ASCII. Podra estar en la RAM estuviera en la RAM.
PROGRAMA

$1090 $1091 $1092 $1093

H- 58 O- 32 L- 48 A- 81

EPROM

DATOS

RAM

El proceso sera el que el programa ira mandando dato a dato al display para que este lo vaya sacando en pantalla.( Se mandara al display a travs del puerto 4 ).
Sistema basado en microprocesador Altair 535 24

Se podra hacer de la siguiente forma: MOV DPTR, #$1090 MOVC ACC, @DPTR MOV P4, ACC MOV ACC, @DPTR MOV P4, ACC y as dos veces ms y tantas veces como caracteres tuviera el mensaje. MOV R0, #100 MOV DPTR, #$1090 Bucle: MOV ACC, R0 MOVC ACC, @ACC + DPTR MOV P4, ACC Djnz R0, bucle De esta forma hay que realizar tres instrucciones para cada letra, y hay que ir poniendo posicin a posicin de memoria. Lo ideal sera realizar un bucle que nos mandara todos los caracteres sin tener que escribir tanto ( imaginarse que hay que mandar 100 caracteres ).

Slo se puede realizar el incremento y la carga con el acumulador. Comprobar si tambin se puede hacer con MOVX para cargar y leer datos.

6.- Realizar un programa que lea 32 bits del mismo programa ( salida en P4 ). 7.- Realizar un programa que cargue con este modo de direccionamiento 20 datos en la parte libre de la RAM y luego los lea. SALTOS Y LLAMADAS A SUBRUTINAS.- ( pg. 6.11 ). SUBRUTINAS.Ya se ha visto el manejo de subrutinas con la instruccin lcall direccin. Esta instruccin es una forma de llamar a una especie de subprograma para que se ejecute.
PROGRAMA PRINCIPAL lcall espera ret SUBRRUTINA espera:

Lo normal cuando se realicen programas de ms envergadura es utilizar bastante las subrutinas. Es mucho ms fcil y ahorra tiempo tener las cosas ordenadas en subrutinas, por ejemplo podramos tener: -> Una subrutina que nos sume nmeros de 16 bits. -> Una subrutina de delay, que espere 1 segundo.
Sistema basado en microprocesador Altair 535 25

-> Una subrutina que nos mande un dato por el cable serie. etc. El utilizar subrutinas, adems de permitirnos tener una organizacin de programa mejor, nos ahorra tiempo en el programa que estemos realizando, ya que no hay que repetir rutinas ( ejemplo " lcall espera " ), y nos ahorra tiempo en sucesivos programas ya que podemos copiar subrutinas de programas anteriores, slo hay que tener claro lo que hacen. Pero las subrutinas pueden dar un problema:
Programa principal MOV A,#34 lcall suma ADD A,R0 Suma: ;Subrutinas que suman datos de 16 bits. Se utiliza el Acumulador ret

Si no estuviera la llamada a " suma ", se sumara a R0 el valor 34, pero esto no ocurre, ya que la subrutina suma como vimos en su momento, modifica el contenido de R0 y del Acumulador, adems de otros. Por ello debe de existir un mtodo para guardar el contenido de los registros ms importantes antes de saltar a una rutina y despus dejarlas como estaban. Esto se realiza gracias a una memoria interna del P llamada PILA. Esta tiene una estructura tipo LIFO ( Last Input First Output , ltimo que entra primero en salir ). 03 02 01 00
Dato 4 Dato 3 Dato 2 Dato 1

SP (Stack pointer) En el ejemplo primero habra que sacar el dato 4 que es el ltimo que se ha metido. (puerto de pila)

Esta rea de memoria interna de P es apuntada por un registro interno del P parecido al PC ( contador de programa ) pero en este caso se llama SP ( Stack Pointer ), y se incrementa cada vez que se mete un dato en la pila. Es decir, si se mete un dato se pone a 01, si se meten 10 se pone a 10. Cuando se saca un dato se decrementa en 1. Existen dos instrucciones para manejar la pila: Push: mete un dato en la pila e incrementa SP. Pop: saca el ltimo dato de la pila y decrementa SP.
Sistema basado en microprocesador Altair 535

26

Para que no hubiera problemas con subrutinas como en el caso anterior, deberamos hacer lo siguiente:
Suma; Subrutina que suma datos de 16 bits. Programa principal push ACC push B push R0 push R1 Guarda en la pila registros que utilice la subrutina.

mov A, #34 lcall suma ADD A, R0 pop R1 pop R0 pop B pop ACC ret

Restaura el contenido de los registros.

Pueden darse dos fallos ( ver cmo queda la pila ): 1) Si se recuperan en distinto orden a como se han introducido los registros, recuperamos datos diferentes. 2) Si ponemos distinto nmero de " pop " que de " push " la instruccin " ret ", no recoge el contenido de PC antes de saltar a la subrutina. Esto implica que cuando se llegue a " ret " se volver a una direccin de memoria aleatoria, lo que supone un error fatal.

PILA
SP

R1 R0 B ACC Contenido de PC (cont. de pg.)

Sistema basado en microprocesador Altair 535

27

1001 1002 1003 lcall

push push push push pop pop pop ret

SP B R1 R0 seses se recupera en vez de ACC 1002

push R0 push R1

lcall

pop R1 pop R0 ret

8.- Realizar un programa que muestre en P4 dos nmeros de 4 bits procedentes de dos registros diferentes. Con una entrada P5.0, deben de intercambiarse los nmeros utilizando las instrucciones push y pop. * Es importante en las subrutinas que creemos, por lo menos en las importantes, en las que sabemos que vamos a utilizar en otros programas, utilizar las instrucciones push y pop para salvar los registros que utilicemos en esa subrutina. ( Pero tampoco es bueno pasarse porque la pila es limitada ). Otro repaso a saltos y llamadas a subrutinas.- Subrutinas: Ya sabemos lo que son subrutinas, pero la nica instruccin que hemos utilizado hasta ahora ha sido LCALL. Tambin existe otra que se llama ACALL. La diferencia entre ambas es que ACALL ocupa slo dos bytes, pero slo puede saltar en la pgina de 2 Kbytes donde se est ejecutando y LCALL ocupa tres bytes pero puede saltar en todo el programa. Menos mal que si hay un fallo de eleccin nos da un mensaje el compilador. - Saltos incondicionales: Existen AJMP, LJMP, SJMP. SJMP -> Salto en + 127 bytes alrededor ( salto corto ) ( 2 bytes ). AJMP-> Salto en pgina de 2 Kbytes en donde est ( salto medio ) ( 2 bytes ). LJMP-> Salto a cualquier posicin ( salto largo ) ( 3 bytes ).
Sistema basado en microprocesador Altair 535 28

Hay una instruccin que tambin puede saltar a cualquier posicin. Ej: JMP @A + DPTR La direccin a la que salta es la suma de lo que hay en el acumulador y el registro DPTR. Ejemplo: ( pg. 6.12) ( comprobar ). inicio: mov DPTR, # tabla_de_saltos. ( carga la direccin de memoria de la etiqueta ) jmp @A + DPTR ( salto indirecto con ndice). tabla_de _saltos: ajmp programa0 ; ACC=0 ajmp programa1 ; ACC=2 ( Va de dos en dos porque la instruccin ajmp programa2 ; ACC=4 ajmp ocupa 2 bytes ).

Otra instruccin de salto absoluto o incondicional ( igual que sjmp pero tiene ms alcance ).

9.- Realizar un programa que con tres entradas del P5 elija uno de 4 programas diferentes y que cada uno muestre algo en P4 ( uno de los programas diferentes que ya hemos realizado ). - Saltos condicionales: jz -> Salta si A=0 jnz-> Salta si A0 jc -> Salta si C=1 jnc -> Salta si C=0 jb -> Salta si bit=1 jnb -> Salta si bit=0 jbc -> Salta si bit=1 y pone bit a 0. djnz -> Salta si Registro=0, si no lo decrementa. Volvamos a ver el programa de la pg. 6.20. Se utiliza la instruccin cjne para ver si el n ACC es igual o distinto que el n de B. Para ver si el n es mayor o menor se utiliza la instruccin de salto condicional jc,
Sistema basado en microprocesador Altair 535

29

ya que la instruccin cjne activa el bit de comp si el operando 1 es menor que el 2 y no lo activa si ocurre lo contrario. El bit de comp o bit CY o bit de acarreo, ya hemos visto en muchas instrucciones como utilizarlo ( ej. en instrucciones de rotacin ), pero en este caso activa lo que se llama una bandera de estado, es decir, es un indicador de lo que ocurre al realizarse una operacin, en este caso la comparacin de dos datos. El bit C est en un registro llamado PSW, Status Register o Registro de banderas de estado, donde existen otros bits que al igual que el C realizan indicaciones diferentes. REGISTRO PSW PSW.7 PSW.6 CY AC PSW.5 F0 PSW.4 RS1 PSW.3 RS0 PSW.2 OV PSW.1 F1 PSW.0 P

En la pgina 6.16 se tiene la utilidad de cada bit del registro PSW. Los registros de banderas son: - CY - AC - OV -P CY ya lo hemos visto. AC y OV lo veremos ms adelante. P es activado si la suma de los 8 bits del acumulador es impar y es desactivado cuando el resultado es par.

10.- Realizar una rutina a la que le lleguen datos de 7 bits ( 0 - 128 ) y calcule el bit de paridad y se lo aada en el bit 7. Debe mostrar los datos en P4.

Sistema basado en microprocesador Altair 535

30

11.- Problema. S0
.

S7

P5

PPP

Validacin de dato Eleccin de banco de registro R0 Dato de 3 bits. Eleccin de registro

12.- Ordenar una tabla de 10 datos de mayor a menor.

Sistema basado en microprocesador Altair 535

31

TEMA 4 : CONVERTIDOR A/D DEL ALTAIR 535.Veamos el esquema elctrico del sistema Altair 535 que est al final del tema 2. Vemos que el SAB 80C535 dispone de un puerto P6 de entradas analgicas. AN0,.AN7 o Puerto 6: En muchas aplicaciones industriales es necesario utilizar convertidores A/D. Estos convierten una seal analgica en una seal digital. El cmo lo hacen lo veremos ms adelante, ahora slo hay que tener en cuenta de que el convertidor A/D nos permite la traduccin de la informacin que suministra un sensor en forma analgica, a informacin en forma digital. Ej: Supongamos que tenemos un sensor de temperatura: SENSOR V(v) 5 3,75 2,5 1,25 0 25 50 75 100 T(C)

12 v. Registro de Datos. Registro Convertidor A/D P


D7

Al.

A/D

Sensor Temperat.

D0

Salida 0 - 5v. Lneas de comunicacin entre P y A/D.

Sistema basado en microprocesador Altair 535

32

Datos (256 posibles estados) 11111111 Convertidor A/D 10000000 00000000 0 2,5 El resultado es 0 ( en esta aplicacin ): 1111 Grfica sensor + = Grfica convertidor A/D 1000 000.0 0 50 100 T(C) Si en el registro del convertidor A/D hay un 00000000 sabemos que la temperatura que est marcando el sensor es de 0 C y puede actuar en consecuencia. En el SAP 80C535 el convertidor A/D est ya incorporado. Adems dispone de un multiplexor que permite seleccionar 8 canales de entrada.
C

V(v)

A/D

Multiplex. Analgico

AN0 (P6.0) Puerto 6 AN7 (P6.7)

U.control Registro conversin

Conmutador activado Digitalmente. 0 1


Sistema basado en microprocesador Altair 535

0 0 1 1
33

Estos terminales del C los tenemos en el CON3 convenientemente numerados. Hay que tener en cuenta que habra que introducir la tensin entre cada terminal y masa. Existen muchos tipos de convertidores con diferentes rangos de tensin de entrada ( 0 - 10v., 0 - 5v., -5 - +5v., etc. ). En este caso en modo normal, el convertidor tiene un rango de entrada de 0 - 5v. aunque se le puede modificar. Un factor importante en los convertidores es la resolucin. Es decir: Si tenemos un rango de entrada de 0 - 5v. y un solo bit de resolucin, poca informacin tendramos. 1

0 0 (0C) 5v. (100C) Si tenemos la informacin en dos bits ( resolucin ) Dato 11 10 01 00 1,7 3,33 5 v. (33,3C) (66,3C) (100C) Vemos como mientras ms bits de resolucin tengamos, ms precisa y exacta ser la informacin. Esta ecuacin responde a la siguiente frmula: Rango tensin de entrada ( voltios ) Resolucin en = voltios 2n ( n= nmero de bits de resolucin) En el caso del Altair en modo normal: Rv = 5v. 28 = 5 256 = 0,0195 voltios. Es decir, con un rango de entrada de 0 - 5 v. y una resolucin de 8 bits, el convertidor A/D del Altair puede distinguir diferentes estados en escalones de tensin de 0,0195 voltios.
Sistema basado en microprocesador Altair 535 34

Datos 11111111 00000011 00000010 00000001

( 256 datos posibles )

Entrada A/D 00000000 0,0195 0,0391 0,0586 5 v.

256 escalones de tensin

Situacin ms desfavorable. Con esto podramos hacer, por ejemplo, fcilmente un polmetro que midiera tensiones entre 0 y 5 voltios. En nuestro caso aparecera la tensin con un error de: 0,0195 2 , que sera la situacin ms desfavorable que se podra dar y es que la tensin real estuviera en medio de un escaln.

C A/D M M

+ Pinzas Displays

P4 UC P5

lectura

La patilla + VAREF y VAGND estn relacionadas con la conversin A/D. En el convertidor A/D del Altair se puede elegir el rango de entrada con la condicin de que el negativo no sea inferior a 0v. y el positivo no sea superior a 5 v. Esto se realiza para encoger el rango y as poder tener una resolucin ms alta.
Sistema basado en microprocesador Altair 535 35

Ver ejemplo:

5256 0 v. 5 v. 0 v. 4 v.

3256

Escalones ms pequeos. Esto, por supuesto, se puede realizar en unas tensiones ya previstas con unos valores determinados y con una configuracin previa para que el dispositivo conozca qu rango va a tener, de lo contrario cometeramos un error grave:

Rango Real

Rango de entrada A/D

0 v. 1 v. 4 v.

5v. No trabajar con estas zonas.

La lectura es errnea ya que el rango est encogido. En principio si estn conectados los puentes JP2 y JP3 el convertidor tiene el rango de entrada de la alimentacin que es con el que vamos a trabajar normalmente, y con una resolucin de 8 bits que es suficiente para las aplicaciones que vamos a realizar. VAREF y VAGND tambin estn en CON 3 para que pudiramos poner en estos terminales una tensin de referencia distinta a la de alimentacin como se ha comentado anteriormente. Para ello habra que tener quitados los puentes JP2 y JP3 ya que si no pondramos en la alimentacin otra fuente. Esto podra acarrear repercusiones imprevisibles. Otros motivos que se podran tener para poner una tensin de referencia interna podra ser:
Sistema basado en microprocesador Altair 535

36

-> Evitar que los ruidos y fluctuaciones de la F.A. afecten a la conversin. ( Verlo de forma exagerada suponiendo que hace bajar la tensin a 4 v. ). -> Evitar el unir masas analgicas y digitales, por el ruido en estas ltimas. Aunque en este caso no se dara demasiado al estar la masa fsicamente en la placa unida a travs de un gran conductor ( la patilla JP3 que va a masa ). Convertidor Analgico - Digital del Altair 535.- ( pg. 3.24 ) -> Ver por encima las caractersticas del convertidor A/D del SAB80C535. El registro que se utiliza para controlar el convertidor A/D es el ADCON. -> Con los tres primeros bits mx0, mx1, mx2 se elige el canal analgico: AN0,..,AN7. -> Bit ADM -> Modo de conversin. 1 -> Modo de conversin continua. 0 -> Slo realiza una conversin. -> Bit BSY -> Bandera de ocupado. ( Bit de slo lectura ). 1 -> Realizando conversin. 0 -> No hay conversin. Nos indica cuando se est realizando una conversin y cuando ha acabado. -> El resultado de la conversin lo obtenemos en el registro de funcin especial ADDAT. -> La orden de comienzo de una conversin se realiza escribiendo sobre el registro de funcin especial DAPR. Con este registro se pueden elegir los voltajes de referencia internos ( rango ), a travs de los voltajes de referencia externos. Ej: Imaginarse que tuviramos que recibir dos seales analgicas de dos sensores distintos. Uno nos d la informacin en un rango de 0 - 5 v. y otro en rango de 0 - 2,5 v. En principio, tendramos que escoger la VAREF y VAGND para adecuarlas al rango de la mayor. VAREF = 5 v. VAGND = 0 v.

S1
AN0 ( 0 - 5 v. ) ( 0 - 100 C ) Sistema basado en microprocesador Altair 535 37

S2 AN1 ( 0 - 2,5 v.) GND (0 - 100 C )

Cules seran los escalones de tensin que tendramos en ambos casos ?. S1 FF 256 00 0 5 v. GR = 100256 = 0,391 C Resolucin de grados VR = 5256 = 0,0195 v. Resolucin de tensin

0 C

100 C

S2 FF 128 VR = 2,5128 = 0,0195 v. 256 128 00 0 v.2,5 v. Zona de trabajo 0 C -> Podemos ver tres cosas: a) Ahora los rangos de temperatura estn cambiados respecto a los de tensin, por lo que hay que tener cuidado desde el punto de vista software de adecuar el rango y tener en cuenta que, por ejemplo, el dato 7F indica 100 C, no 50 C como antes.
Sistema basado en microprocesador Altair 535

VAREF.

7F GR = 100128 = 0,782 C

100 C

38

b) Vemos como los escalones de tensin son iguales en ambos casos, ya que , aunque nuestro rango es de la mitad, eso el A/D no lo sabe y l convierte con respecto a VAREF = 5 v. con lo que asigna tambin la mitad de escalones lgicos a la conversin. La mitad 7F -> FF, no se utiliza, se desaprovecha. c) La resolucin de grados que es al final lo que nos interesa que sea lo mayor posible ha disminuido, ya que ahora tiene menos valores lgicos para representar el mismo rango que antes. El SAB 80C535 aporta a esto una solucin, y es que permite adecuar el rango de entrada al rango del sensor a travs de una serie de resistencias internas. De ese modo podra dejar el voltaje de referencia externo para la conversin del canal AN0 ( Rango 0 - 5 v. ), y cuando fuera a realizar la conversin en el AN1 hacer lo siguiente: VAREF. 5v. SAB 80C535 Divisor de tensin por software. 2,5 v.
A/D Vref.

S2 AN1 Tensin de referencia Externa. de este modo:

Vin.

Tensin de referencia Interna.

FF GR = 100256 = 0,391 C 256 0 0 2,5 Volvemos a tener la mejor resolucin.

0 C

100 C

Esto tiene ciertas restricciones y limitaciones. La programacin de la tensin de la tensin de referencia interna se realiza con el registro DAPR ( pg. 3.27 ).
Sistema basado en microprocesador Altair 535

39

Nosotros todo esto no lo vamos a utilizar en principio. Tendremos tensiones de referencia externas 0 - 5 v., aprovechando la tensin de alimentacin de la placa y tendremos entradas con rango 0 - 5 v. o por lo menos lo procuraremos. Para ello iniciaremos una conversin diciendo que queremos los rangos de tensin externos ( 0 - 5 v. ); con la instruccin: mov DAPR, #00

Antes de iniciar la conversin tendremos que seleccionar el canal al que queramos realizarle la conversin A/D. Esto lo hacemos con el registro de funcin especial ADCON. En este registro en el bit 3 tenemos que elegir el tipo de conversin: 1 -> Continua. 0 -> Una sola conversin. El modo continuo se utiliza cuando se necesita conocer en cada instante el valor de una seal o cuando sta vara rpidamente y queremos conocer todas sus variaciones. Ej:

Perodo de muestreo muy corto. En estas aplicaciones el P est casi dedicado a esta tarea, al requerirse tiempos muy cortos de muestreo. En otras muchas aplicaciones, la variacin de la seal a medir es bastante lenta, por lo que no es necesario estar continuamente muestreando. Ej:

C 100

Sistema basado en microprocesador Altair 535

40

27 25 0 1 m. 1 m.

Se puede realizar una conversin cada ciclo de programa, por ejemplo:

INICIO

SELECCIN CANAL

COMENZAR CONVERSIN

RECOGER CONVERSIN

TAREA 1

TAREA 2

Hay dos formas de enterarnos de que una conversin ha terminado: - Por " polling ". - Por interrupcin. Por " polling ": Se utiliza el bit BSY ( ADCON. 4 ). Sabemos que este bit se pone a 1 mientras se realiza la conversin. Podemos mantener el programa en un bucle cerrado hasta que este bit se ponga a 0, indicando que se ha terminado la conversin.

Selecciona canal Sistema basado en microprocesador Altair 535 41

Inicia conversin

BSY= 1 ?

No

S Continuacin El bucle se puede hacer fcilmente con la instruccin: jb BSY, ! O jb ADCON. 4, !

Es lo mismo, las dos estn definidas en el include. Retiene al programa hasta que se cumpla la condicin. Nos ahorramos la etiqueta. Etiqueta: jb ADCON. 4, etiqueta

Por interrupcin: Por este mtodo el convertidor activa un bit llamado IRCON. 0 que est en un registro llamado IADC cuando se finaliza una conversin. Este registro es de banderas de estado de interrupciones de los perifricos y es chequeado continuamente por el P para vigilar que se produzca una interrupcin. Si se habilitara esta interrupcin en concreto del convertidor A/D ( ya lo veremos en el tema 4 ), cuando se produjera sta, el programa saltara a una zona de programa en la que recogeramos el resultado de la conversin y haramos lo que hiciera falta con l.

Sistema basado en microprocesador Altair 535

42

Inic. Conver. Inicio conversin T Entrada Seal


Convertidor A/D

Interrupcin A/D Recoge conversin. Almacnala en direccin $xxxx Si valor> #110 P4.0=1 Activa rel Si valor < #110 P4.0= 0

Lnea Peticin Interrup.

De este modo nos ahorramos el tiempo " t " que en el modo de " polling " en el que este tiempo habra estado " parado " el P. De todas formas, como no hemos visto todava el tema 4 de manejo de interrupciones no vamos a utilizar este ltimo mtodo. Adems el tiempo " t " es muy pequeo, 13 ciclos mquina 13seg., por lo que en la mayora de las ocasiones no merece la pena realizarlo con interrupciones. Por lo tanto ya podemos perfilar cmo se realizara una conversin A/D:

Sistema basado en microprocesador Altair 535

43

Selecciona canal

mov R0, #0 ( canal 0 ) lcall sel_canal

Selecciona modo

clr ADCON. 3 modo lecturas sueltas

Inicia conversin

mov DAPR, #00 Vref(interna)=Vref(externa)= 0 - 5 v.

jb ADCON. 4, !
Fin conver s.?

No

S
Leer la conversin

mov R1, ADDAT El resultado se carga en R1.

Tarea a realizar con el resultado de l a conversin.

Tarea

Sistema basado en microprocesador Altair 535

44

sel_canal: mov anl B, ADCON B, #F8 Deja ADCON en B, como estaba, pero con los bits de seleccin de canal a 0. Aade a ADCON los tres ltimos bits con el valor del canal elegido.

mov A, R0 add A, B mov ADCON, A ret

Con ello no se modifican los bits restantes de ADCON que no conocemos y que no tenemos por qu tocar. Problema.Realizar un programa que lea un canal analgico y lo muestre en el P4. Problema.Ahora con dos canales de entrada analgicos y que se vea uno otro en el P4 segn la entrada P 5.0 ( uno por polling y otro por interrupcin ). Problema.El sistema de la figura debe de procurar mantener las temperaturas de consigna establecidas. -> Para la sala de control se utilizar la climatizacin 1. -> Para las mquinas la climatizacin 2. -> Modo verano: si CL1 no es suficiente se puede abrir COMP1 para que CL2 ayude si y slo si sta puede mantener la temperatura. Si no puede se cierra COMP1 y se abre COMP3, entrando a funcionar CL3. CL3 tambin puede entrar a ayudar a sala de mquinas abriendo COMP2, e incluso cerrando COMP3 si el riesgo en la sala de mquinas es alto ( siempre prioridad sala de mquinas ). -> Modo invierno: entra CL1 para sala de control, tambin puede entrar CL3 si no es necesitada por la sala de mquinas. En sala de mquinas no entra nunca calor, da igual que la temperatura est muy por debajo.

P5

Indicadores de estado en P4 ( Estar activo el de ms peso activado en ese momento).

Muestran en P4: 0 -> Estado de mquinas : C / F


Sistema basado en microprocesador Altair 535 45

Estado de compuertas. 1-> Conversin A/D de S1. 2-> Traduccin a grados de S1. 3-> Conversin A/D de S2. 4-> Traduccin a grados de S2. 5-> Alarmas: Mostrarn en intermitencias en P4: -> No se puede bajar a Tc en sala mquinas. -> No se puede bajar a Tc en sala de control. -> No se puede subir a Tc en sala de control.

Tc=20 C

S2(0C-50C)

MQUINAS

SALA DE CONTROL

TC=25c

S1(0-50)

C1 F1
Climat. 1 F/C

F2 Comp.1 Comp.2 Comp.3


Climat. 3 F/C Sistema basado en microprocesador Altair 535 Climat. 2 Slo F

C3 F3

46

Problema.En cada sala: < 18 C -> C1 < 16 C -> C2 > 28 C -> V1 >30 C -> V2 < 25 C ->M/C > 25 C ->M/F -> P5.6 activo -> Sala 1 -> P5.7 activo -> Sala 2

S1 (0-50 C) V 1 V 2 SALA 1 C 1 C 2 M1

C1 F1

C 1

C 2

S2 (0-50 C) M2

C2 F2

V 1

V 2

SALA 2

P5

Eleccin de indicadores en P4. Se activar slo el de mayor peso.

En P4

Sistema basado en microprocesador Altair 535

47

M1/F
7 6 5 4 3 2 1 0

M1/F M1/C C2 C1 V2 V1 0 -> Visualizar conversin en S1. 1 -> Visualizar en P4 grados S1. 2 -> Visualizar estado Sala 1. 3 -> Visualizacin en P4 conversin S2. 4 -> Visualizacin en P4 grados S2. 5

Sistema basado en microprocesador Altair 535

48

TEMA 5.- TEMPORIZADORES.Temporizador 0 y Temporizador 1.- ( pg. 3.18) Pueden funcionar como temporizadores y como contadores. Como temporizador: cada ciclo de mquina es incrementado en una unidad ( 1 MHz ). Como contador: el registro es incrementado en flancos descendentes en las patillas de entrada T0 T1 ( P 3.4 y P 3.5 ). La velocidad de muestreo es de dos ciclos de mquina ( 500 KHz ). El estado de cuenta aparece en los registros: TH0 y TL0 para T0 TH1 y TL1 para T1 La configuracin y control de ambos se realiza mediante los registros especiales de funcin TMOD ( pg. 3.13 ) y TCON ( pg. 4.6 ). En TCON tambin estn los bits de bandera de interrupcin de estos temporizadores.

GATE C/

M1

M0

GATE

C/

M1

M0

TMOD TIMER 1 TIMER 0

TF1

TR1

TF0

TR0

TCON

Banderas de interrupcin.

Los modos 0 y 1 slo se diferencian en: Modo 0: 13 bits. Modo 1: 16 bits. En el circuito se pueden dar tres configuraciones:

Sistema basado en microprocesador Altair 535

49

OSC

%12

C/=0 C/=1 P3.4 / T0 TR0

TH6

TL0

TF0

INT T0

GATE P3.6 / -INT 0 Dispara el temporizador y el contador.

CONF. 1: C/ =0 y GATE =1 Inhabilita la entrada P 3.6 /-INT 0 Temporizador.

CONF. 2: C/ =1 y GATE =1 Contador CONF. 3: C/ =0 y GATE =1 Habilita entrada -INT 0

-INT 0

Est activado el temporizador. Se cuenta el tiempo del ancho del pulso.


Sistema basado en microprocesador Altair 535 50

.include .. \ fuentes\reg515.def .text_org $8000 1jmp inicio .ds .b $800B- ; Reserva hasta direccin de subrutina de interrupcin. interrupcion_T0 : setb TCON . 4 ; Activa TR0, es decir, vuelve a dispararT0. 65536 ciclos x 15 = 1 segundo.

inc R0 ; Incrementa R0 cjne R0 , #15, no_incrementar ; Incrementa R1 al pasar 1 segundo y mov R0 , #00 reinicializa el contador R0. inc R1 cjne R1 , #5, no_incrementar ; Incrementa R2 al pasar #dato x 1 mov R1 , #00 segundo. Reinicializa el contador R1. inc R2 no_incrementar: clr TCON. 5 reti inicio: mov P4 ,#00 mov R0 , #00 mov R1 , #00 mov R2 , #00 setb IENO.7 setb IENO.1 mov TMOD , #$01 ; Inicializa P4, R1 y R0. ; Limpia la barrera de interrupcin, TFO.

; Habilita la posibilidad de tener interrupciones. ; Habilita la interrupcin de T0. ; Establece el modo 1 ( 16 bits ), modo temporizador. Con -Int0 deshabilitada. La configuracin del temporizador no puede realizarse con operaciones de bit. ; Dispara por primera vez T0( activa TR0 ).

setb TCON.4

programa_principal_0: mov P4, R2 sjmp programa_principal_0

Sistema basado en microprocesador Altair 535

51

.include ..\fuentes\reg515.def .text_org $8000 1jmp inicio .ds.b $800B- ; Reserva hasta direccin de subrutina de interrupcin.

interrupcion_CONTO: setb clr reti inicio: mov mov setb setb mov setb P4, #00 ; Inicializa P4, R1 y R0. R0, #00 IENO. 7 ; Habilita la posibilidad de tener interrupciones. IENO. 1 ; Habilita la interrupcin de T0. TMOD, #$05 TCON. 4 ; Activa por primera vez T0 ( Activa TR0 ). TCON. 4 ; Activa TR0, es decir, vuelve a disparar T0. TCON. 5 ; Limpia la barrera de interrupcin TF0.

programa_principal_0: mov P4, TL0 sjmp programa_principal_0

Sistema basado en microprocesador Altair 535

52

Problema 1.Realizar un programa que cuente los segundos y los minutos. En P4 debe mostrar los segundos y los minutos parpadeando.
5 segundos

P4

OR

Intermitente 7 minutos. Problema 2.Programa que cuente el tiempo que se tarda en cerrar el interruptor. C / =0 S1 TR0 GATE =1 -INT 0 S0

T El disparo de TR0 se puede realizar a travs de otro interruptor. Problema 3.Sistema basado en microprocesador Altair 535 53

Hacer un reloj que ponga hora y que tenga todos los servicios de cronmetro, alarma, etc.

TEMA 6 : INTERRUPCIONES Y CONTADORES.P1.0,P1.4 y P3.2 y P3.3.Estos bits de los puertos 1 y 2 la segunda utilidad que tienen es de interrupcin. Qu es una interrupcin ? Hay muchas tareas que el C puede hacer pero le ocupan demasiado tiempo y le impiden hacer otras cosas. Ej: Analicemos el programa en el que ponamos un led intermitente:

Inicio

Invierte P4.0

Se ha cumplid o tiempo ?

No 1 segundo

Si

Este bucle lo nico que haca era perder tiempo, es decir, mantener al C ocupado un tiempo exacto para establecer un ciclo. Si queramos que el led parpadeara con unos tiempos de ciclo exactos tenamos que calcular el tiempo de ejecucin de las instrucciones. Qu pasara si esta es slo una de las 100 cosas que hacer que tiene que hacer el C?. Slo podra realizar esto ?.

Sistema basado en microprocesador Altair 535

54

Podramos empezar a pensar en meter otra tarea dentro del bucle. Por ejemplo, si se tiene que estar pendiente de P5.0 y cuando est a 1 de poner a 1 P4.1 y P 4.2. Estas instrucciones habra que incluirlas en el bucle:

Inicio

Invierte P4.0

Con esto slo se mirara P5.0 al final de cada ciclo.


Mira P5.0

Si quisiramos mirar ms frecuentemente:


Inicio

Invierte P4.0

S
?

No
Mira P5.0

De cualquier forma existen tres problemas:


Sistema basado en microprocesador Altair 535 55

1- Al incluir una tarea dentro de otra tarea que no tiene nada que ver complicamos el programa al no ser independientes y no estar en bloques separados. 2- Al querer que los tiempos de ciclo sean exactos habra que estar calculando los tiempos de ejecucin de la tarea " Mira P5.0 " y quitndoselos al bucle de espera, ya que si no ste se alargara. Y esto no sera una solucin perfecta, ya que esta tarea puede tener bifurcaciones y cada una de ellas tener un tiempo de ejecucin distinto. Tarea " Mira P5.0 "

Mira P5.0 T1

T1>T2
P5. 0= 1? S Activa P4.1, P4.2 No

T2

3- Si hay que seguir aumentando el n de tareas e ir incluyndolas dentro del bucle llegar un momento que incluso ocupen ms tiempo que el de espera, por lo que se complica mucho el programa:

Inicio Tarea 1 Tarea 2

t1= 0,2 seg. t1+t2= 1 seg. t2= 0,8 seg.

Invierte P4.0

Tarea 3. Mira P5.0

t3= 0.4 seg. t3+t4= 1 seg. t4= 0,6 seg.

Tarea 4

Invierte P4.0

Sistema basado en microprocesador Altair 535 Tarea 5

56

Para evitar que el C tenga que desaprovechar demasiado tiempo ocupado con tareas que no necesariamente tiene que realizarlas l, estn las interrupciones. Ejemplo: El C tiene incorporado un temporizador. Este a grandes rasgos funciona de la siguiente forma:

TEMPORIZADOR

Perifrico interno

Disparo

Registro 8 bits

Interrupcin interna INT 16

El temporizador se programa con un tiempo a travs de un registro interno. A travs del programa el usuario carga el registro y cuando quiere dispara el P. Mientras el temporizador est contando el tiempo establecido, el C puede estar realizando otra labor. Cuando el temporizador acabe, activar la lnea de interrupcin interna INT 16, esto hace al C dejar lo que est haciendo e irse a un programita en el que nosotros le habremos puesto una tarea. Ejemplo:
Inicio -Carga registro temporizador con 10. -Dispralo.

Tarea 1

Tarea 2

INT 16
-

INT 16 Invierte led. Vuelve a disparar el temporizador. ret.

Tarea 3

1 segundo

Tarea 4

Como una subrutina que se llama por interrupcin. 1 segundo


Sistema basado en microprocesador Altair 535 57

Esto es un ejemplo de interrupcin interna, ya que la realiza un dispositivo interno de la CPU. Pero tambin se pueden tener interrupciones externas, por ejemplo para la aplicacin de " Mira P5.0 " sera muy til.

P1.1/ INT 4

S1 Normalmente a 0.

En la aplicacin se tena un 0 en P5.0 y cuando se pasaba a 1 se deban activar P4.1 y P4.2. En este caso se conecta la seal S1 a explorar, directamente a INT 4 que es activo en alta, cuando S1 pase a 1 se activar la interrupcin INT 4 y a partir de ah se sigue el mismo proceso que con la interrupcin interna. De esta forma fijarse lo fcil, comprensible, cmodo, rpido y til que queda el programa. Es necesario decir que P1.1 no va a ser E/S digital, sino INT 4. APARTE
Configura P1.1 como INT 4 Programa interrupcin INT 4 ( P1.1 )

Inicio

Carga temporizador con dato 10. Dispralo.

Programa interrupcin INT 16 ( temporizador )

Resto del programa.

El programa acudir a estas tareas slo cuando sea necesario.


58

Sistema basado en microprocesador Altair 535

-> Las interrupciones pueden ser de dos tipos: - Externas. - Internas. -> Las internas sera como la del caso del temporizador, es decir, la peticin de interrupcin la realiza un dispositivo interno. -> Las externas seran como en el caso de entrada que debe ser vigilada. Vectores de interrupciones.Cuando se produce una interrupcin lo que ocurre se puede dividir en varios pasos: a) La interrupcin activa un bit de un registro de funcin especial. 7 6 5 4 3 2 1 0

( Registro de interrupcin 1 ) 0 -> 1 ( Registros de banderas de solicitud de interrupcin). b) El registro continuamente est siendo chequeado por un dispositivo interno llamado " servidor de interrupciones ". Cuando ste detecta la activacin de una bandera avisa al C de que se ha producido una interrupcin. c) Si esta interrupcin est habilitada: 7 6 5 4 3 2 1 0

Registro banderas de interrupcin. 7 6 5 4 3 2 1 0

Registro de habilitacin de interrupciones. El C salta al vector de interrupcin de dicha interrupcin. El que en el registro de banderas se active un bit no quiere decir que se produzca una interrupcin, ya que tiene que estar habilitada. Primeras direcciones de la EPROM d) Vectores de interrupcin
C

EPROM
Sistema basado en microprocesador Altair 535 59

Entre la primera y la segunda hay 8 posiciones de memoria. Pero esas posiciones son muy pocas para poder desarrollar el subprograma de la interrupcin, por lo que normalmente hay una instruccin de salto a otra posicin. En el sistema Altair, para que podamos utilizar las interrupciones al estar stas en las posiciones de la EPROM son " sacadas " a la memoria RAM, desplazadas $8000 posiciones ms arriba.

$0003 Interrup. 1 $000B Interrup.2 $8003 RAM $800B


ljmp $8003

EPROM

e) Una vez se salta al vector, all el programador deber tener previsto un subprograma de interrupcin o una instruccin de salto si queremos dejar libre la zona de vectores. $8003

Vector interrupcin ljmp

Interrup. externa 0

programa_intext0

$800B
ljmp programa_temp0

$8013 $806B Lmite zona de vectores si utilizamos instrucciones de $806E salto. programa_int0 programa_temp0
Sistema basado en microprocesador Altair 535 60 ltimo vector.

Fijarse cmo ya no tenemos que especificar la direccin del programa de la interrupcin, ya que ponemos como direccin de salto una etiqueta. f) Se ejecutar el programa o subprograma de la interrupcin cuando sta se produzca, teniendo en cuenta de que antes de saltar guarda el contenido del contador de programa en la pila para saber dnde tiene que volver.
Programa_int0

Slo guarda el PC, por lo que si se alteran otros registros deben ser guardados en la pila mediante instrucciones PUSH y POP. Al final del subprograma debe de estar la instruccin " Reti ", que devuelve el control del programa a la rutina principal. No confundir con instruccin " Ret " de subrutinas, ya que puede provocar fallos en el programa por razones que se explicarn ms adelante. Durante la ejecucin se debe desactivar el bit de bandera que dio origen a la interrupcin, si no es de los que se desactivan por hardware ( CPU ) al ser recogida su peticin. Niveles de prioridad.-> Puede ocurrir que cuando se est ejecutando una interrupcin la CPU reciba la peticin de ejecutar otra o que, sin estar ejecutndose ninguna, lleguen dos peticiones a la vez. -> Para solucionar estos problemas existen los " Niveles de prioridad ", es decir, el servidor de interrupciones tiene ordenadas las interrupciones segn unos niveles de prioridad que pueden verse en la pg. 4.10. Las interrupciones estn ordenadas en parejas del mismo nivel de prioridad. El orden va de mayor ( arriba ) a menor ( abajo ). -> Si se estuviera ejecutando un programa de interrupcin y se realizara la peticin de otra interrupcin, sta slo podra interrumpir a la que est ejecutndose si es de nivel superior, nunca si es de nivel inferior o igual. -> Si se solicitan ms de una interrupcin a la vez de diferente prioridad, se irn ejecutando por orden de prioridades. -> Si son de la misma prioridad se sigue el orden horizontal establecido en la figura 4.8. -> Quien anula la peticin de interrupcin en el servidor para que no entre otra rutina de nivel ms bajo es la instruccin " Reti " al terminar de ejecutarse la interrupcin, por lo que el no ponerla hace que no se atiendan en adelante interrupciones del mismo nivel o superior.

reti

Sistema basado en microprocesador Altair 535

61

Interrupciones externas.En el siguiente ejemplo se muestra el control de una interrupcin externa ( -INT0 ). Configuracin: -> setb IEN0.7 -> Se habilita la posibilidad de tener interrupciones ( pg. 4.4 ). ( EAL = 1 ) -> setb INE0.0 -> Habilita particularmente la interrupcin externa -INT0. ( EXO = 1 ) -> setb TCON.0 -> Byte de eleccin para tener la interrupcin por flanco de bajada o por nivel bajo ( al principio viene por flanco de subida ). -> clr TCON.1 -> En este ejemplo limpia la bandera aunque en el libro dice que lo hace el hardware.

mov A, b -> direccin $8001. .ds.b 5 -> Reserva 5 bytes $8002 a $8006. mov b, A -> Direccin $8007 clr A -> $8001 .ds.b $8100-! -> Reserva hasta $80FF.

Se ponen a FF.

Sirve para poner subrutinas en direcciones fijas que son llamadas directamente. Esto es muy til para utilizar los vectores de interrupcin. Problema.Transmisin Altair 1 -> Altair 2 Altair 1 Altair 2

INT1 INT0

INT1 INT0

Se activa la transmisin cuando ste reciba un 1 en su INT1 ( mientras estar parpadeando ). Comenzar a mandar dato por salida 3.

Sistema basado en microprocesador Altair 535

62

7 bits 1 segundo bit de paridad El emisor debe de ir mostrando en P4 el dato a travs de un solo led. Debe de haber otro de sincronismo que parpadee a intervalos de 1 segundo. El emisor antes de transmisin tendr bit intermitente y durante la transmisin ms intermitente. Al final debe mostrar el dato con su bit de paridad.

.include ../fuentes/reg515.def
Sistema basado en microprocesador Altair 535 63

.text_org $8000 ; Programa que utiliza una interrupcin para contar impulsos ( INTO -> P3.2 ) ; 1 versin: el estado de cuenta se muestra en el mismo programa de interrupcin. ; 2 versin: el estado de cuenta se muestra en el programa principal. direccion_8000: ljmp .ds.b inicio $8003-! ; inutiliza las direcciones ; desde donde acaba " ljmp inicio " ; hasta $8003 ( en este caso slo ; $8002, ya que ljmp utiliza ; 3 bytes. ; Comienza interrupcin ; Est en direccin $8003 ; Incrementa contador de pulsos ; 1 versin. ; El resultado de la cuenta de los ; pulsos aparece instantneamente. ; Limpia bandera de interrupcin. ; Devuelve el control a la rutina ; principal. ; Inicializa el contador de pulsos. ; EAL = 1 => Habilita ( en general ) la ; posibilidad ; de habilitar interrupciones ( aunque ; se ha probado que se habilita al ; arrancar ). ; Habilita ( particularmente ) la ; interrupcin externa -INT0 ; La interrupcin se producir por ; flanco de bajada.

interrupcion_0: inc mov clr reti inicio: mov setb R0,#00 IENO.7 R0 P4, R0 TCON.1

setb setb

IENO.0 TCON.0

programa_principal: mov setb lcall clr lcall sjmp espera: mov espera1: R1,#5 P4, R0 ; 2 versin: ; el resultado de la cuenta de los ; pulsos no aparece instantneamente .

P4.0 espera P4.0 espera programa_principal

Sistema basado en microprocesador Altair 535

64

mov espera2: mov espera3: nop nop djnz djnz djnz ret

R2,#250 R3,#250

R3,espera3 R2,espera2 R1,espera1

Problema.Sistema basado en microprocesador Altair 535 65

Detector de teclado. 5 v.

AND

-INT0

P5.0 P5.1

Que con los pulsadores desplace el led encendido para un lado o para otro. Problema.Hacer un programa que tenga en el puerto P4 dos nmeros introducidos desde teclado.

Al pulsar un nuevo nmero ste desplazar a la izquierda el 8 y se situar en la derecha. El 5 se perder. Problema.Al mismo problema anterior aadirle que con otra interrupcin INT1 se ponga a 0.

1
TECLADO * -> A- d - F
Sistema basado en microprocesador Altair 535

2 5 8 0

3 6 9
66

4 7

0 -> d- F - G # -> d- F - H 7 -> A- d - e 8 -> D- E - G 9 -> D- E - H 4 -> A- C - D 5 -> C- D - G D-H 1 -> A- B - D 2 -> B- D - G 3 -> B- D - H

A B C D E F G H

6-> C-

B-D C-D D-E D-F

comn

CONTROL DE TECLADO.
Sistema basado en microprocesador Altair 535

67

3 Comn

7 *

8 0

9 # 5V

5V F0 F1 C0 F2 INT0 F3
1 2 3

C1

C2

C0 C0 F0 F1 Comn F2 F3 C1 C2 C1 C2 F0 F1 F2 F3

0 1 2 3 4 5 6

Sistema basado en microprocesador Altair 535

68

Para simular con caja de pruebas.

F0 F1 F2 F3 C0 C1 C2 INT0

Sistema basado en microprocesador Altair 535

69

TEMA 7 : DISPLAY.El display Hitachi ( LCD -> Cristal lquido ), tiene dos lneas de 16 caracteres. El conexionado para acoplarlo al Altair viene en la pg. 8.108 ( Tomo 2 ). Pueden distinguirse tres tipos de lneas: -> Alimentacin ( 1, 2, 3 ). Se conecta a 5 voltios. La patilla 3 recibe la alimentacin a travs de un potencimetro con el que se regula el contraste. -> Control ( 4, 5, 6 ). Se utilizan para controlar el display. E -> Habilitacin del display. R/W -> Lectura o escritura en memorias internas del display. RS ->Seleccin de registro ( memoria interna de datos ) / instruccin ( el display tiene una especie de microcontrolador). -> Datos ( 7, 8, 9, 10 ) y ( 11, 12, 13, 14 ). Son ocho lneas para la comunicacin de datos. Hay una instruccin que permite reducir las lneas al grupo ( 11, 12, 13, 14 ) con lo que se deben mandar los datos en dos grupos de 4 bits. El display posee bsicamente una memoria RAM de 80 posiciones, una para cada carcter del display, y otra memoria EPROM con parte del cdigo ASCII que permite que sean representados en pantalla todos los smbolos ms usuales en un texto. Carcter inicial.

2 lneas Carcter final. 40 caracteres

Memoria Carcter final 80 bytes Carcter inicial 2 fila Carcter inicial 1 fila

Sistema basado en microprocesador Altair 535

70

Visor 2 lneas 16 caracteres En la pantalla realmente slo se ven 2 x 16 caracteres, y el resto quedan ocultos en principio, aunque se puede desplazar el display y se pueden llegar a ver todos. Los caracteres a enviar al display se suelen almacenar en la memoria del Altair con la directiva .dc. b . Ej: $9000 .dc. b $43, 82, ' E ', " ABC " , 0 $9001 -> $ 43 -> Equivalente a C mayscula. $9002 -> $XX -> 82 -> Equivalente a R mayscula. $9003 -> $45 -> Equivalente a E mayscula. $9004 -> $41 -> " " A " . $9005 -> $42 -> " " B " . $9006 -> $43 -> " " C " . $9007 -> $00 -> Valor 0. Como puede verse hay tres formas de representar los caracteres: - Por su valor del cdigo ASCII ( ya sea en hexadecimal o binario). - Por su smbolo entre comas ' E '. - Como una cadena de texto entre comillas " ABC ". El valor 0 es importante porque cuando se manda una cadena de texto al display, ste en un principio no sabe cul es el final de la cadena. En el programa que vamos a utilizar para manejar el display se espera un valor 0 como final de la cadena. Ej: .dc. b " Hola pepe " , 0 RAM Altair H O L A P E P E 0 Indicar al programa el final de cadena.

Sistema basado en microprocesador Altair 535

71

El programa va leyendo carcter a carcter del Altair y lo pasa al display. Cuando llega al valor 0 para de mandar caracteres. No confundir valor 0 del cdigo ASCII con carcter numrico 0, cuyo sitio en la tabla del cdigo ASCII es el 48.!. Es distinto 0 de ' 0' " 0 ". -> A continuacin cargar el programa Display .551 y ver lo que hace. En este programa existen varias funciones para controlar el display. En el programa de demostracin algunas de estas funciones no se utilizan. A continuacin realizar modificaciones en el programa ( salvando siempre con nombres diferentes ), para que se realicen las siguientes operaciones con el display: -> Acortar la primera lnea. Alargar la primera lnea. Alargar la segunda fila ( para que haya ms de 80 caracteres ). -> A travs de una entrada el display se desplaza a izquierda o a derecha. -> A travs de dos entradas elegir 4 textos diferentes. -> A travs de dos entradas hacer moverse a un texto hacia abajo o hacia arriba. Se puede hacer a lo bestia, es decir, escribiendo los 6 posibles mensajes en pantalla.

6 lneas

16 caracteres -> Con una entrada mover el cursor de un lado a otro de la pantalla constantemente. -> Con dos entradas mover el cursor de un lado a otro a impulsos. -> Con dos entradas situar cursor y con una tercera ordenar la escritura de un carcter ( uno por cada activacin ). Los caracteres a introducir estarn en una tabla. -> Men para modificacin de parmetros. Deben de ir saliendo de uno en uno y ser visualizados con dos interruptores a modo de cursores.
Opcin 1 Opcin 2 Opcin 3 Opcin 4

Con otro interruptor ( Enter ) se podr elegir cada una de las opciones. Las dos primeras opciones deben mostrar el mensaje: Opcin vaca. La opcin 3 debe de mostrar:
Sistema basado en microprocesador Altair 535 72

Configurar P3.5 Modo actual: 1

0 ->Apagado led. Modos: 1 -> Activado led. 2 -> Parpadeo led.

Ejemplo Pulsando Enter se deja como estaba y se sale de opcin. Pulsando cursores se recorren los posibles Modos. Cuando se tenga el modo elegido pulsar Enter para confirmar y salir de opcin. La opcin 4 debe de indicar slo el estado del led con un mensaje tipo texto.

Sistema basado en microprocesador Altair 535

73

You might also like