viernes, 27 de marzo de 2009

microprocesador

MICROPROCESADOR:

El microprocesador es un
circuito integrado que contiene algunos o todos los elementos necesarios para conformar una (o más) "unidad central de procesamiento" UCP, también conocido como CPU (por sus siglas en inglés: Central Process Unit). En la actualidad este componente electrónico está compuesto por millones de transistores, integrados en una misma placa de silicio.
Se debe distinguir entre el concepto de procesador, que es un dispositivo de hardware, y el de CPU, que es un concepto lógico. Una CPU puede estar soportada por uno o varios microprocesadores, y un microprocesador puede soportar una o varias CPU.


ESTRUCTURA DEL MICROPROCESADOR:

Unidad de control:

Tendrá que ser capaz de ir siguiendo, paso a paso lo que está descripto en los microprogramas. Saber que cables poner activos y cuales no.
Tendra que saber:
En que relglon o linea está parda.
Que instrucción tiene que ejecutar.
Tener en cuenta los flags de memoria.
tiene un contador: tiene sieryas entradas que son pulsos de un reloj, los cuales son contados, para decir en que renglon o linea está parada.
Otra serie de entradas le dira que instrucción ejecutar, otras entradas serán los flags de la ALU.
Cada microoperacion será un cablecito.
Cada cablesito es la salida de una compuerta, tendremos tantas compuertas como microoperaciones.
El contador nos indica donde está parada, es puesto en cero cada vez que se ejecuta un END, o se hace un RESET.
El tamañ o de dicho contador, debe ser capaz de contener los renglones de las instrucciones mas largas.
Otra de las enradas será que instrucción debe ejecutar, esta instrucción está en el Campode Operaciones del RI, es un numer binario que indicará la instrucción y el modo de direccionamiento. Hay un decodificador que decodifica el C Op. de RI si tiene 8 entradas tendra 256 salidas 28, que se activará de a una por vez. Un cable activado indicará que instrucción realizar.
Mediante una ecuacion, usando compuertas AND y OR, podemos describir un circuito para la generacion de los microprogramas. Tenemos una ecuacion para cada microoperacion .
Lo que se hace es reconocer todas las intrucciones y ver en que renglon están, se escribe en que condicion se puede dar es microoperacion. Es decir el tiempo (Tn) y el nombre de la instrucción (renglon).
RBM out= T2+T4 . LD AC + T3 . ADDDIR+.......
Caracteristicas: es muy rigida, pero es mas rapida.
Falencia cada vez que queremos sacarle o agregarle algo, tenemos que cabiar todo.
Unidad de Control Microprogramada
Tomo todas las instrucciones y las unió con las microoperaciones y formó los microprogramas.
Todo renglon es una microinstruccion y las lineas verticales las microoperaciones.
El microprograma se divide en modulos.
El registro guarda las direcciones de la proxima microinstruccion y se decocifica quedando activada una linea horizontal con una linea vertical automaticamente.
Las fuentes de direcciones de cada microinstruccion son 2
El campo que indica la proxima microinstruccion (celda de dir.).
El codigo de operaciones del RI
multiplexor contrario a un decodificador, cuatro entradas dos salidas, tiene una llave rotativa que conecta en funcion de las dos entradas.
C0, C1 a A B C D
Se colocó para solucionar el problema de los saltos condicionales, se conecto el campo de direcciones del RI al MPC.
No se pudo llevar a la practica, devido a impedimentos electronicos del momento.
En realidad este fue el modelo de una memoria de lectura, es decir una memoria ROM.


Unidad Aritmetica Logica:

Complemento a la Base
Lo que le falta al numero para llegar a la base.
Se utiliza para realizar la resta, en si lo que se realiza con un circuito sumador, es hacer la resta sumando el complemento del numero que resta.
A-B = A+CB Base = A+ 2n -B
Si A>=B el numero queda dentro del rango A-B = A+2n -B= 2n+(A-B)
Si A
Si el bits de carry es 1 la resta esta bien
es 0 el resultado dio negativo
A>=B 9-6 = 3
1001 1001
- +
0110 complemento 1010
10011 el bits de carry dio 1 resultado correcto
A
0101 0101
- +
0111 complemento 1001
0110 el bits de carry dio 0 resultado negativo
base -(B-A)
16-(7-5)= 14
2 = 14
14 = 2 = A-B
Complemento a la Base-1
Es lo que le falta al nro para llegar al nro mas grande que se puede escribir en el registro.
CNB-1= 2n -1- A = CNB-1
CNB = CNB-1+1
Se reemplazan los ceros por unos y los unos por ceros. Sacando el complemento a la base-1 podemos obtener el complemento a la base sumandole 1 al complemento a la base-1.
Resta
A-B = A+ CNB-1 = A+2n-1-B = 2n+(A-B)-1
Si A>= B => A-B = A+ CNB-1 = A+2n+1-B = 2n+(A-B)-1
Si A< b =""> A-B = A+ CNB-1 = A+2n -1-B = 2n-(B-A)-1
Si el carry es 1 al resultado debo sumarle 1
es 0 me queda el complemento a la base-1 dando buelta los operandos al resultado siempre le sumo el carry.
A>=B 10-6 = 4
1010 1010
- +
0110 complemento 1001
a la base-1 10011 le sumo el carry 1
+ 1
0100 = 4
A
1011 1011
- +
1101 complemento 0010
a la base-1 01101 => 1101 CB-1 0010
Overflow: el flags de carry no me sirve para detectar overflows. Podemos decir que para que no haya overflow en los dos transportes, de la penultimaa la ultima etapa y de la ultima etapa hacia fuera deben ser iguales para que no haya overflow o 0,0 o 1,1 de lo contrario será overflow 0,1 o 1,0.



Bus:

Es un conjunto de cables que transportan información.

bus de datos:

conjunto de lineas de un bit cada una que conforman la capacidad de transmision de datos del sistema.

bus de direcciones:

conjunto de lineas de un bit que conformn la capacidad de transmision de direccionamiento del dispositivo.

bus de control:

conjunto de lineas encargadas de la gestion del sistema, lectura, escritura,etc.

Registro:

Lugar donde se puede guardar temporalmente un nro. binario (palabra de memoria), los registros no tienen un direccionamiento, sino que son controlados por una unidad de control. Su tiempo de acceso es mucho más rápido.
Registros específicos:
PC, RDM, RBM, RI, SP, IX
Registros generales: R0.......Rn

MICROCONTROLADOR:

Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: CPU, Memoria y Unidades de E/S.

Un microcontrolador difiere de una CPU normal, debido a que es más fácil convertirla en una computadora en funcionamiento, con un mínimo de chips externos de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a la fuente de energía y de información que necesite, y eso es todo. Un microprocesador tradicional no le permitirá hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips. Hay que agregarle los modulos de entrada/salida (puertos) y la memoria para almacenamiento de información


ESTRUCTURA DEL PIC

Veamos la estructura interna de un microcontrolador, en concreto el PIC16F84:

Memoria de Programa (Program Memory). Su función es almacenar el programa. Las instrucciones se almacenan de forma ordenada para su ejecución. Es tan importante la instrucción en sí misma como la posición que ocupa en la memoria, es decir, la dirección. Cuando comienza el programa, la primera instrucción que se ejecuta es la que se encuentra en la dirección 0x00. A esta dirección se le llama vector de reset (Reset Vector). También existe el vector de interrupción (Interrupt Vector) que corresponde a la dirección 0x04. Cuando se produce una interrupción, el programa pasará a ejecutar la instrucción de la dirección 0x04. La capacidad de la memoria de programa es variable según el microcontrolador. Suele estar entre 512 instrucciones para los más pequeños hasta 8K (y más) para los más grandes. Existen varios tipos de memoria de programa. Las familias que contienen la F como el PIC16F84 tienen memoria de programa FLASH, que es reprogramable. Y las familias C como el 12C508 tienen memoria EPROM, que sólo la podemos programar una vez.


Puntero de programa (Program Counter, PC). Es un registro de 13 bits que apunta a la memoria de programa. Contiene la dirección de la siguiente instrucción a ejecutar. Cuando se produce un reset, el PC pasa al valor 0 y de este modo apunta a la dirección 0 de la memoria de programa; la instrucción que se encuentre en esta dirección será extraída para su ejecución. Después de ejecutar la instrucción, el PC se incrementa automáticamente para apuntar a la siguiente instrucción y así sucesivamente. Existen instrucciones para variar el valor del PC y lograr así crear bucles y saltos en el programa. Estas instrucciones son, por ejemplo, GOTO, CALL, interrupciones e instrucciones que sobreescriban el propio PC. En el caso de una interrupción el PC pasará al valor 0x04 que es la dirección del vector de interrupción, a partir de esta dirección debemos colocar el código asociado a la interrupción.


Pila del PC (Stack). En el transcurso normal de un programa, el PC se va incrementando y va apuntando cada vez a la siguiente instrucción. Sin embargo, Cuando se produce un salto en el programa, como por ejemplo una interrupción o llamada a subrutina, el PC cambia de valor para saltar a otro lugar del programa. En ese caso, se guarda el valor del PC para poder continuar la ejecución del programa donde lo dejó. Para ello el microcontrolador utiliza la Pila, guarda el valor del PC antes de saltar a otro lugar del programa y lo recupera cuando termina el salto. En el caso del PIC16F84, la pila tiene una capacidad de 8 niveles esto quiere decir que podemos hacer hasta 8 llamadas a subrutinas una dentro de la otra.


Memoria de Datos o registros (RAM file registers). Esta memoria se usa para almacenar datos con los que operar durante la ejecución del programa. En la RAM guardaremos, variables, contadores, y otros datos de trabajo. El PIC16F84 dispone de 68 bytes de RAM para uso general. A la posición que ocupa un dato en la RAM se le llama dirección. En cada dirección de RAM podemos guardar un dato de 8 bits (un valor desde 0 hasta 255). Cuando queramos guardar un dato en RAM, especificaremos la dirección donde queremos escribirlo y el valor que queremos escribir en ese lugar. Del mismo modo, al leer un dato de RAM, especificaremos qué dirección queremos leer.

El PIC16F84 dispone de 68 bytes de RAM para uso general. Estos datos están dispuestos en dos bancos de memoria. El siguiente gráfico es el mapa de la memoria RAM, en la cual, también se encuentran los registros especiales que se explicarán más adelante.


Modos de direccionamiento. Los datos se almacenan en la memoria RAM. Guardar un dato en RAM El acceso a la memoria RAM puede realizarse de dos formas:

  • Direccionamiento directo: Se accede a la RAM de forma inmediata. La dirección de RAM a la que se quiere acceder está implícita en la propia instrucción. Por ejemplo: MOVWF 0x20 realiza una operación de escritura en la dirección 0x20. Este modo de direccionamiento es el más habitual.

  • Direccionamiento indirecto: En este modo de direccionamiento se utilizan dos registros especiales: FSR y INDF. FSR es un puntero de RAM, es decir, contiene la dirección de memoria a la que se desea acceder. El registro INDF, utiliza el valor del registro FSR para acceder al registro deseado. Por ejemplo: si escribimos 0x20 en FSR y después escribimos 215 en INDF, habremos escrito un 215 en la dirección de memoria 0x20 (que era la que contenía FSR). El direccionamiento indirecto se usa para manejar tablas ó manipular segmentos de memoria. Por ejemplo, Podemos programar un bucle, en el cual, incrementamos el valor de FSR para acceder a unas direcciones de memoria consecutivas.


Registros especiales (Special Function Registers, SFR). Son registros que controlan e informan sobre el estado de las características especiales del microcontrolador, como los temporizadores, convertidores analógico-digital, puertos, puertos serie, etc. Se encuentran en la propia RAM y son accesibles como cualquier otro dato de la RAM. Cada uno de estos registros tiene un mobre especial, por ejemplo, TMR0, STATUS, OPTION, etc. y cada uno de ellos tiene su función específica. En la tabla anterior podemos ver un mapa de memoria con los nombres de los registros especiales, sus direcciones y el banco de memoria al que pertenecen. Los registros especiales son la clave para obtener el máximo rendimiento a un microcontrolador, pues es a través de ellos se controlan todas sus características especiales.


El registro STATUS. Informa sobre el estado de la unidad aritmeticológica, el motivo de RESET y los bits de selección del banco de memoria RAM. Cada bit de este registro tiene su finción específica. Por ejemplo, para saber si el resultado de una suma ha superado el rango de valores de un byte (es decir, si es mayor de 255) consultaremos el estado del bit Carry. Si dicho bit está a 1 habremos superado el rango y si está a 0 no lo habremos superado. En la siguiente tabla vemos la función de cada bit del registro STATUS:

BIT Nombre Función

7-6

IRP, RP1

No se usan en el PIC16F84, deben mantenerse a 0.

5

RP0

Selecciona el banco de memoria RAM a direccionar.
1: selecciona el banco 1.
0: selecciona el banco 0.

4

TO

Bit de Time-Out.
1: después de RESET, instrucción CLRWDT ó instrucción SLEEP.
0: al sobrepasar WDT (temporizador llamado "perro guardián").

3

PD

Bit de Power-Down.
1: después de RESET, instrucción CLRWDT.
0: al ejecutar la instrucción SLEEP.

2

Z

Bit de Cero (ZERO).
1: cuando el resultado de una instrucción aritmeticológica es 0.
0: cuando el resultado de una instrucción aritmeticológica es distinto de 0.

1

DC

Bit de Digit_Carry (Carry significa "me llevo una" cuando sumamos o restamos).
1: cuando el 4º bit ha sobrepasado por una operación de suma o resta.
0: cuando el 4º bit no ha sobrepasado por dichas operaciones.

0

C

Bit de Carry ("me llevo una").
1: cuando el 8º bit sobrepasa por una operación de suma o resta.
0: cuando el 8º bit no sobrepasa por dichas operaciones.


El registro W (también llamado acumulador). Este registro es de vital importancia. La mayoría de las instrucciones aritmeticológicas utilizan este registro. Observar en el gráfico de la estructura que está situado justo debajo de la unidad artitmeticológica. Cuando ejecutemos una instrucción, podremos guardar el resultado en este registro, bien para volver a operar con él inmediatamente o bien para guardarlo en RAM.


Unidad aritmeticológica (ALU). Es la encargada de realizar las operaciones. A ella le llegan los datos a operar y se le indica el tipo de operación que debe realizar con ellos. El resultado de la operación se guardará en el registro W o en algún registro de la RAM. La ALU puede ejecutar diversas instrucciones: aritméticas (sumar y restar), lógicas (AND, OR, XOR), orientadas a bits (activar o desactivar un bit, mover bits), etc. El registro STATUS se ve modificado por el resultado de una operación de la ALU. Por ejemplo, el bit Z (zero) del registro STATUS cambiará a 1 cuando el resultado de una operación sea 0; Del mismo modo el bit C (carry, que significa "me llevo una") cambiará a 1 cuando el resultado de una suma sea superior a 255 (que es el valor máximo).


Puertos de Entrada/Salida (I/O Ports). Son registros especiales que conectan el microcontrolador con el mundo exterior, a través de las patillas del integrado. Al escribir un dato en un puerto, por ejemplo en el registro PORTB, cada bit que hemos escrito, aparece en las patillas del microcontrolador. Del mismo modo, al leer un puerto, estamos leyendo el estado de las patillas y guardando este valor en RAM. Antes de poder usar un puerto para escribir en él o leer de él, debemos configurarlo. Configurar un puerto consiste en definir si el puerto será de entradas o de salidas o de forma combinada. Para ello se utilizan los registros TRISA y TRISB. Cada bit de estos registros configura el bit correspondiente del puerto A o B como entrada o salida.


El TMR0, Temporizador/Contador. EL TMR0 es un registro perteneciente a la RAM. Puede ser configurado como temporizador o contador. En modo temporizador, se incrementará automáticamente en cada instrucción. En modo contador se incrementa a través de la patilla RA4. El vuelco de 0xFF a 0x00 puede producir interrupción si configuramos las interrupciones de modo apropiado. También disponemos de un divisor (prescaler) para aumentar el rango de valores. Si configuramos el prescaler a un valor de 8, por ejemplo, el incremento de TMR0 se producirá cada 8 pulsos de señal (ya sea como contador o temporizador). La configuración del TMR0 se realiza mediante el registro OPTION.

Si queremos utilizar la interrupción del TMR0, deberemos confirgurar el registro INTCON activando el bit GIE y el bit T0IE. El bit T0IF indica el vuelco del TMR0 y es el responsable de la interrupción. Antes de salir de la interrupción debemos poner este bit a 0 para que no se produzca inmediatamente otra interrupción.


Reloj del sistema. El microcontrolador necesita de una señal de reloj para funcionar. Esta señal marca el ritmo de trabajo, es decir, la velocidad de proceso. Podemos configurar el reloj de formas distintas. Generalmente se utiliza un oscilador de cuarzo de 4MHz. También puede usarse un oscilador tipo RC, resistencia-condensador. Algunos microcontroladores disponen de oscilador interno y simplifican el montaje por no necesitar componentes externos que generen esta señal. El tipo de reloj utilizado se configurará cuando programemos el PIC.



No hay comentarios: