MICROPROCESADORES

 En la programación de bajo nivel es preferible un programa independiente de posición a uno dependiente de posición (aun cuando el programa independiente de posición es de un 5% a 10% mas lento que el dependiente de posición). En un ?P MC6809 se cuenta con modos de direccionamiento relativo, relativo extendido e indexado relativo que facilita la elaboración de programas independientes de posición. En especial el indexado relativo del contador de programa (PCR) puede ser usado para apuntar a cualquier localidad relativa al programa no importando su posición en memoria. El PCR (indexado relativo del contador de programa) es una forma de direccionamiento indexado que permite el acceso a tablas dentro del espacio del programa en forma independiente de posición a través del uso de las instrucciones "carga dirección efectiva".

 Un programa que es independiente de posición tiene necesidad de utilizar localidades absolutas para dispositivos de E/S. En este caso se pueden grabar estas localidades en el stack como almacenamiento global en una rutina de inicialización antes de la ejecución del paquete independiente de posición. De esta forma en el programa se pueden llamar a los dispositivos de E/S como apuntadores como almacenamiento global, permitiendo que el hardware pueda ser fácilmente cambiado si se desea, ya que solo se necesita reescribir la pequeña rutina de inicialización para cada diferente configuración.

 Los datos temporales, globales y permanentes también deben estar disponibles en forma independiente de posición. Las instrucciones LEA permiten el acceso a datos, tablas o valores de texto en forma independiente de posición.

PROGRAMACIÓN REENTRANTE

 En sistemas que trabajan con interrupciones es posible que alguna interrupción utilice la subrutina que se estaba trabajando en el momento de la interrupción. En ese caso si el almacenamiento local y global se utiliza de manera arbitraria entonces en la interrupción se alterarían estas memorias y al regresar de la interrupción los resultados de la primer rutina serian erróneos. Por esto es necesario que el almacenamiento local se haga en distinto lugar cada vez que se entre en el modulo. Esto se logra usando el stack para transferir parámetros globales, resultados y para hacer el almacenamiento local.

PROGRAMACIÓN RECURSIVA

 La misma técnica que permite la programación reentrante, permite también la programación recursiva. Una subrutina recursiva se define como aquella que se llama así misma. Estas subrutinas son diseñadas para simplificar la solución de ciertos tipos de problemas que tienen una escritura de datos cuyos elementos pueden ser a su vez otra escritura o problema por resolver. En estos casos los parámetros pueden ser transferidos a través del stack como en el caso de los programas reentrantes. Un ejemplo muy simple de este tipo de programa se da en la solución de un modulo de transmisión serie por medio del adaptador interface de comunicaciones asinconas.

TÉCNICAS DE PROGRAMACIÓN
DIVISIÓN EFICIENTE DE 8 BITS

 La división puede hacerse de dos maneras con el 6809: restando sucesivamente el divisor del dividendo con lo que el número de veces que sea posible restar será el cociente; o por medio del algoritmo de resta y cambio que es el método de la casita que se aprende en primaria. Este último es mas eficiente porque en promedio es mas rápido que el de restas sucesivas.

 En el algoritmo que se da a continuación los datos deben alimentarse en "A" y "B". A la entrada del programa estos datos se depositan en memoria local (por el PUSH) para ser usados como numerador y denominador respectivamente, quedando "A" y "B" libres para registros de trabajo. "B" entonces se usa como contador del número de veces que vamos a separar una cifra (binaria) y verificar si toca o no toca. "A" se usa para recibir cifra por cifra del dividendo y realizar la comparación contra el divisor para ver si toca. Al final contendrá el residuo. El esquema del algoritmo quedaría así:
 

               *      ***SUBRUTINA división

               *      * DIVIDE A/B POR EL MÉTODO DE RESTA Y CAMBIO

               *      * TARDA DE 186  A 274 CICLOS DEPENDIENDO DEL NUMERO DE
               *      * VECES QUE "TOQUE" (NUMERO DE UNOS EN EL COCIENTE).
               *      * CON CRISTAL DE 5 Mhz LA VELOCIDAD SERIA DE 149 A 219?S.

               *      * EL COCIENTE RESULTA EN "A" Y EL RESIDUO EN "B"

               *      * ES MODULAR, REENTRANTE E INDEPENDIENTE DE POSICIÓN

0000 34           06  DIV        PSHS  A,B  ; DATOS A MEMORIAS LOCALES (S)=A (S+1)=B
0002 CC      0008                 LDD   #8    ; INICIALIZAR REGISTRO DE TRABAJO
0005 68 E4          DIVIDE   LSL    ,S     ; SEPARA 1 DÍGITO PARA DIVIDIR Y PREPARAR COCIENTE
0007 49                                ROLA        ; REGISTRO DE TRABAJO (DENTRO DE LA CASILLA)
0008 A1 61                          CMPA 1,S  ; CONTRA EL DIVISOR. TOCA?
000A 25         04                  BLO           ; NO TOCA
000C 6C E4                         INC     ,S     ; COCIENTE LOCAL. Lsb =1(SI TOCA)
000E A0 61                         SUBA  1,S   ; RESTA DEL PROCEDIMIENTO TOCA
0010 5A             NOTOCA  DECE         ; CONTADOR DE BITS QUE SE BAJAN O SEPARAN
0011 26          F2                 BNE            ;  DIVIDE 32 (TOCA), 21 (NO TOCA)
0013 A7 61                          STA    1,S   ; RESIDUO A LA POSICIÓN DE B
0015 35          86                 PULS A,B, PC ; RECOBRAR LOCALES Y RETORNO DE SBR.
                                           END
 

APLICACIÓN
DE
MICROPROCESADORES

EL MICROPROCESADOR

 La cuarta generación de computadoras basa su funcionamiento en el microprocesador, dispositivo que agrupa a miles de elementos lógicos en un circuito integrado y que es capaz de realizar operaciones lógicas, aritméticas, de control y de toma de decisiones.

 En realidad el microprocesador por si solo no puede resolver problema alguno ya que necesita de varios elementos auxiliares para poder operar. Así pues un microcomputador está formado por el microprocesador y sus elementos auxiliares tal como se muestran en la figura:
 
 
 

 1.- UNIDAD PROCESADORA CENTRAL (CPU).

 Constituida por el microprocesador definido anteriormente. Es el elemento operativo del sistema y esta formado por una serie de elementos quienes en conjunto realizan las funciones asignadas según  especificamente por el microprocesador. En ella el microprocesador almacena datos de interés temporal tanto de los programas que efectúa como para su propio funcionamiento.

 4.- UNIDADES DE ENTRADA Y SALIDA. (E/S).
 Son el medio a través de que el microcomputador recibe información del exterior. Las unidades E/S incluyen una interface y un periférico. La interface se encarga de acoplar la información ya sea en niveles, códigos o velocidad, mientras que el periférico es el elemento final que aprovecha dicha información.

 Como puede apreciarse los bloques que forman al microcomputador están ligados por una línea de comunicación denominada "BUS".

 En el ámbito de las computadoras un "BUS" se define como un grupo de conductores por los que se transfiere información de un lugar a otro. En muchos casos la información proviene de cualquiera de las varias fuentes y puede transferirse a uno de varios destinos. Aun mas en algunos buses la información puede transferirse en cualquiera de dos sentidos. Estos son llamados buses bidireccionales. Desde luego para un bus dado solo puede transferirse información en un solo sentido en un instante dado.

 La siguiente figura muestra el arreglo de un bus de datos en una microcomputadora típica. Generalmente en este tipo de sistema de transferencia de información involucra necesariamente al microprocesador. Así puede intercambiarse información entre el ?P y la memoria RAM, transferirse de la memoria ROM o el dispositivo de entrada al ?P, o también del ?P al dispositivo de salida.
 


 
 
 

 En un arreglo como este aparecen dos detalles importantes. Primero, se debe asegurar que en cualquier instante dado pretenda solo una transmisión de datos. Esto se logra asignando a cada destino o fuente una dirección diferente. Por ejemplo: cada uno de los bloques RAM, ROM, puerto de entrada y de salida poseen uno o más habilitadores. Un nivel lógico apropiado en estos contactos activa el circuito.

 De aquí que asignando a cada circuito diferente dirección, aseguramos que solo un circuito se habilitará a la vez. A esto se le conoce como direccionar.

 La siguiente figura muestra como se logra esta capacidad. Como puede apreciarse se agrega un decodificador de direcciones para cada circuito. Las entradas de este decodificador provienen del ?P a través del bus de direcciones. Las salidas van a las líneas habilitadoras de los circuitos que requieran comunicación con el ?P a través de la línea de datos. Dado que en un instante determinado solo puede aparecer una dirección se habilita a un solo circuito.
 
 


 
 
 

 A las memorias se les asigna muchas direcciones dado que cada byte debe tener su propia dirección. Por ejemplo si se usa una RAM de 2k posiblemente se le asignen las direcciones de la 0000 a la 07FF. Cuando cualquiera de estas direcciones aparecen en el bus de direcciones la RAM se habilita a través de la línea proveniente del decodificador. Nótese además que una parte de las líneas de direcciones se conecta directamente a la RAM, mismas que sirven para seleccionar los bytes individualmente dentro de la RAM.

 En la misma forma se asigna un rango de direcciones a la ROM. Si se conecta una memoria de 4k se podrían asignar direcciones de la F000 a la FFFF. El ROM debe ser habilitado cuando cualquiera de estas direcciones aparezcan en el bus de direcciones .

 Los puertos de entrada y salida tienen una dirección única (para cada uno). Así el ?P se comunica con los medios de entrada y salida poniendo la dirección apropiada en el bus.

 El segundo punto es mas fundamental, y aparece debido a la naturaleza de los estados de los circuitos digitales; la salida de una compuerta estándar tiene siempre un estado lógico, esto es, un cero o un uno. El problema es: ¿que estados tendrían las salidas de los circuitos conectados al bus de datos cuando no están habilitados? Independientemente del estado que asuman interferirían con el estado de salida del circuito seleccionado. Por ejemplo si la salida del circuito deshabilitado tiene un estado alto interferirá con el estado bajo del circuito habilitado. Es decir, un circuito trata de poner un nivel alto mientras que otro trata de forzarlo a cero. Desde el punto de vista eléctrico esto es un corto que de permanecer así dañaría las compuertas involucradas.

 Este problema se resuelve dotando de lógica de tercer estado a todos los elementos que se conectan al bus. Así cuando un dispositivo este deshabilitado el estado que presenta es el llamado "tercer estado" o de alta impedancia que prácticamente significa "desconectado".

PROGRAMA ALMACENADO

 Dependiendo del microprocesador que se utilice en un microcomputador, este podría realizar uno o varios cientos de operaciones diferentes que se pueden combinar para realizar operaciones mas complejas.

 A diferencia de todas sus capacidades el microprocesador no puede hacer nada por su propia cuenta. Solo hace exactamente lo que se le dice que haga. Es necesario indicarle las operaciones y el orden en que debe realizarlas. Estas operaciones son llamadas instrucciones.

 Un conjunto de instrucciones que permita al microcomputador realizar un trabajo especifico es llamado programa. En general el tamaño de un programa es proporcional al grado de complejidad de la función que realiza el microcomputador. Un programa para sumar una serie de datos requerirá algunas decenas de instrucciones mientras que un programa que realiza el análisis y diagnostico de una señal electrocardiografica requiere de miles de instrucciones.

 De aquí se desprende la necesidad de crear un programa y almacenarlo en la memoria del microcomputador para que este pueda realizar alguna función especifica. Por lo que el programa almacenado define la función que realiza el microcomputador.



 regreso