Sei sulla pagina 1di 17

PROGRAMACION DE MICROCONTROLADORES Microcontrolador Microchip PIC 16F84

Microchip fabrica una serie de microcontroladores llamados PIC. Puedes ver toda la gama de sus microcontroladores aqu . Los hay disponibles de distintas capacidades, desde algunos tipos bsicos con poca memoria, hasta los que tienen convertidores Analgico a Digital (ADC) incluidos o incluso los que llevan dentro PWMs (Pulse Width Modulators = Moduladores de Ancho de Pulso). Voy a concentrarme en el PIC 16F84. Una vez que aprendas como programar un tipo de PIC, aprender el resto ser fcil. Hay diversas formas de programar el PIC, - usando BASIC, C, o Lenguaje Ensamblador. Voy a mostrarte el Lenguaje Ensamblador. No te asustes. Solo hay 35 instrucciones que aprender, y es la manera ms econmica de programar los PICs, ya que no necesitas ningn otro software extra que no sea de los gratuitos.

Los pines del 16F84


Mas abajo vers el diagrama de patillas(pines en adelante) del PIC 16F84. Pasar por cada pin, explicando para que se utiliza cada uno.

RA0 a RA4

RA es un puerto bidireccional. Eso quiere decir que puede ser configurado como entrada o como salida. El nmero que hay despus de RA indica el numero de bit (0 a 4). Por tanto, tenemos un puerto bidireccional de 5 bits donde cada bit puede ser configurado como entrada o como salida.

RB0 a RB7

RB es un segundo puerto bidireccional. Se comporta exactamente de la misma manera que RA, excepto que este tiene 8 bits.

VSS y VDD

Estos son los pins de alimentacin. VDD es la alimentacin positiva, y VSS es el negativo de la alimentacin, o 0 Voltios. La tensin mxima de alimentacin que puedes utilizar son 6 Voltios, y el mnimo son 2 Voltios.

OSC1/CLK IN y OSC2/CLKOUT

Estos pines son donde conectaremos el reloj externo, microcontrolador disponga de algn tipo de temporizacin.

para

que

el

MCLR

Este pin se utiliza para borrar las posiciones de memoria dentro del PIC (p.ej. cuando quiero reprogramarlo). Durante el funcionamiento normal est conectado a la alimentacin positiva.

INT

Este es un pin de entrada que puede ser monitorizado. Si el pin se pone a nivel alto, podemos hacer que el programa se reinicie, se pare o cualquier otra funcin de deseemos. No lo utilizaremos mucho.

TOCK1

Esta es otra entrada de reloj, que opera con un temporizador interno. Opera aisladamente del reloj principal. De nuevo, este tampoco lo utilizaremos mucho.

Como Programar el PIC Bien, espero que no te hayas asustado mucho. Ahora, querrs conocer como programar el PIC, pero adems de aprender las instrucciones de cdigo de ensamble, como programas realmente ese cdigo y lo metes en el PIC? Pues hay dos maneras, la sencilla y la "Hazlo tu mismo". La manera sencilla es comprar un programador de PIC, que se conecte a tu PC, que trae un software con el que puedes programar el PIC. La "Hazlo t mismo" se trata de que construyas tu propio programador y utilices software gratuito de Internet y lo programes de ese modo. Si prefieres el mtodo "hazlo tu mismo", te recomendara este sitio. Pulsa sobre "Supported Programmers" para ver los circuitos. El ms econmico es el "TAIT Classic Programmer". El software para programar el PIC tambin lo puedes bajar de esa pgina, ves a "Download". Si quieres ir por la va fcil, echa un vistazo a este sitio: (falta el sitio, el del texto original no funciona). Otro buen sitio de software gratuito es este. Este permite utilizar cualquier programador, puesto que el software es completamente configurable. Cualquier mtodo funcionar, ya que ambos darn el mismo resultado, programar el PIC. Lo siguiente que necesitas es un ensamblador. Este convertir el programa que escribas en un formato que el PIC comprende. El mejor es del propio Microchip, llamado MPLAB. Es un programa de ventanas, que incluye un editor, un simulador y el ensamblador. Este es un software escrito por los propios fabricantes del PIC, y por encima de todo es gratuito !!!

La siguiente imagen ilustra el proceso de programacin de un PIC.

Tambin recomiendo utilizar una placa de insercin para hacer tus circuitos, mientras juegas con el PIC. Hay varios tamaos disponibles. A continuacin veremos como conectar un circuito simple para el desarrollo con el PIC. Conectarse al microcontrolador PIC Una placa de entrenamiento sencilla Bien, ahora ya tienes tu programador, y uno o dos PICs. Es muy simple conocer la teora para saber como programar el PIC, pero el verdadero aprendizaje viene cuando intentas probar tu cdigo en un PIC y ves los resultados en tu propio circuito. He incluido el diagrama de un circuito que muestra una placa de entrenamiento muy bsica y econmica. Por supuesto, le puedes aadir LEDs y switches, pero yo he dejado las patillas sin conectar. Puedes monitorizar los pines de entrada/salida conectando LEDs directamente a los pines, y se encendern cuando los pines se pongan a nivel alto. Tambin, puedes aadir switches a los pines, para poder seleccionar que pines poner a nivel alto, y cuales a nivel bajo. Bsicamente, lo que estoy diciendo es que si comienzas con este circuito, puedes aadir lo que creas necesario.

La linea de alimentacin est puesta a 6 Voltios, que es el mximo voltaje para el PIC. Puedes utilizar cualquier voltaje inferior, hasta un mnimo de 2 Voltios. C3 es conocido como un condensador de 'bypass'. Todo lo que se hace C3 es reducir el ruido de la linea de alimentacin. X1 es un cristal de 4 MHz. Puedes utilizar un circuito RC (resistencia y condensador) (Nota de edicin: crear enlace aqu), pero el precio del cristal es insignificante, y es mas estable. C1 y C2 ayudan a reducir cualquier desviacin en la oscilacin cristal, y a eliminar cualquier ruido no deseado antes de que la seal llegue al PIC.

Buenas tcnicas para programar Antes de meternos en harina con la programacin del PIC, creo que ahora es un buen momento para explicar algunas tcnicas para programar bien. Si escribes un ; (punto y coma) en cualquier punto de tu programa, el compilador ignorar cualquier cosa que haya detrs de l, hasta llegar al retorno de carro. Esto significa que podemos aadir comentarios a nuestro programa que nos recuerden que estbamos haciendo en ese punto. Esta es una buena prctica incluso para los programas ms sencillos. Ahora mismo puede que entiendas completamente qu es lo que hace tu programa, pero dentro de unos meses, puede que te acabes tirando de los pelos. Por tanto, utiliza comentarios donde puedas , no hay lmites. Segundo, puedes asignar nombres a las constantes va los registros (hablaremos de estos ms adelante). Hace lo que ests escribiendo mucho ms sencillo de leer, para saber de que valor se trata, mas que intentar entender que significan todos esos nmeros. As que utiliza nombres reales como CONTADOR. Date

cuenta de que hemos puesto el nombre en letras maysculas. Esto lo hace destacar, y tambin significa (por convencin) que se trata de una constante. Tercero, aade algn tipo de cabecera en tus programas utilizando los punto y coma. Un ejemplo sera algo as:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Autor: ; ; Fecha: ; ; Versin: ; ; Titulo: ; ; ; ; Descripcin: ; ; ; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Hemos hecho una especie de caja utilizando puntos y comas. Esto es simplemente para hacerlo ms pulcro. Finalmente, prueba y documenta el programa sobre papel tambin. Puedes usar o bien diagramas de flujo o bien algoritmos o lo que tu quieras. Esto te ayudar a escribir tu programa paso a paso. Bien, eso es todo al respecto, vamos a entrar en materia. Los Registros Un registro es un lugar dentro del PIC que puede ser escrito, ledo o ambas cosas. Piensa en un registro como si fuese un trozo de papel donde tu puedes ver la informacin o escribirla. La figura de ms abajo muestra el mapa de registros del interior del PIC16F84. No te preocupes si no has visto nada parecido antes, es solo para mostrar donde estn los diferentes bits y piezas dentro del PIC, y nos ayudar a explicar unos cuantos comandos.

La primera cosa que notars es que est dividido en dos - Banco 0 y Banco 1. El Banco 1 es utilizado para controlar las propias operaciones del PIC, por ejemplo para decirle al PIC cuales bits del Puerto A son entradas y cuales son salidas. El Banco 0 se utiliza para manipular los datos. Un ejemplo es el siguiente: Digamos que queremos poner un bit del puerto A a nivel alto. Lo primero que necesitamos hacer es ir al Banco 1 para poner ese bit o pin en particular en el puerto A como salida. Despus volvemos al Banco 0 y enviamos un 1 lgico a ese pin. Los registros que vamos a usar mas comunes en el Banco 1 son STATUS, TRISA y TRISB. El primero permite volver al Banco 0, TRISA nos permite establecer los pines que sern entradas y los que sern salidas del Puerto A, TRISB nos permite establecer los pines que sern entradas y los que sern salidas del puerto B. Vamos a ver con ms detenimiento estos tres registros.

STATUS

Para cambiar del Banco 0 al Banco 1 utilizamos el registro STATUS. Hacemos esto poniendo el bit 5 del registro STATUS a 1. Para cambiar de nuevo al Banco 0, ponemos el bit 5 del registro STATUS a 0. El registro STATUS se localiza en la direccin 03h (la 'h' significa que el nmero es hexadecimal).

TRISA y TRISB

Estn localizados en las direcciones 85h y 86h respectivamente. Para programar que un pin sea una salida o una entrada, simplemente enviamos un 0 o un 1 al bit en cuestin en el registro. Ahora, podemos hacer esto ya sea en binario o en hexadecimal. Personalmente uso ambos, ya que el binario ayuda mucho a

visualizar el puerto. Si no ests familiarizado con el paso de binario a hexadecimal y viceversa, utiliza una calculadora cientfica. Entonces en el puerto A tenemos 5 pines, por tanto 5 bits. Si deseamos poner uno de los pines como entrada, enviamos un 1 al bit en cuestin. Si deseamos poner uno de los pines como salida, ponemos un 0 en ese bit. Los bits estn definidos de manera correspondiente con los pines, en otras palabras el bit 0 es el RA0, el bit 1 es el RA1, el bit 2 es el RA2, y as sucesivamente. Vamos a tomar un ejemplo. Si queremos poner RA0, RA3 y RA4 como salidas, y RA1 y RA2 como entradas, enviamos esto: 00110 (06h). Date cuenta de que el bit cero est a la derecha, como se muestra aqu: Pin del Puerto A RA4 RA3 RA2 RA1 RA0 Numero de bit Valor Binario Lo mismo se aplica para TRISB. 4 0 3 0 2 1 1 1 0 0

PORTA y PORTB

Para poner uno de nuestros pines de salida a nivel alto, simplemente ponemos un 1 el bit correspondiente en nuestro registro PORTA o PORTB. El formato es el mismo que para los registros TRISA y TRISB. Para leer si un pin est a nivel alto o nivel bajo en los pines de nuestro puerto, podemos ejecutar un chequeo para ver si el bit en particular correspondiente esta puesto a nivel alto (1) o est puesto a nivel bajo (0). Antes de dar un ejemplo de cdigo, tenemos que explicar dos registros mas - W y F.

El registro W es un registro de propsito general al cual le puedes asignar cualquier valor que desees. Una vez que has asignado un valor a ese registro, puedes sumarle cualquier otro valor, o moverlo. Si le asignas otro valor a W, su contenido es sobrescrito. Un ejemplo de cdigo Un ejemplo de cdigo sobre lo que acabamos de aprender. No intentes compilar esto todava, lo haremos cuando hagamos nuestro primer programa. Simplemente estamos intentado mostrar como se hace la programacin de lo anterior y de paso presentando un par de instrucciones. Vamos a poner el Puerto A como en el ejemplo anterior. Lo primero, necesitamos cambiar del banco 0 al banco 1. Hacemos esto modificando el registro STATUS, que est en la direccin 03h, poniendo el bit 5 a 1.
BSF 03h,5

La instruccin BSF significa en ingles "Bit Set F" (Poner a 1 un bit de la Memoria). La letra F significa que vamos a utilizar una posicin de memoria, o un registro en memoria. Vamos a utilizar dos nmeros despus de esta instruccin - 03h, el cual se refiere a la direccin del registro STATUS, y el nmero 5 que corresponde al nmero de bit. Por tanto, lo que estamos diciendo es "pon a 1 el bit 5 de la direccin de memoria 03h". Ahora ya estamos en el banco 1.
MOVLW b'00110'

Estamos poniendo el valor binario 00110 (la letra 'b' significa que el nmero est en binario) en nuestro registro de propsito general W. Podramos haber hecho esto en hexadecimal, en cuyo caso nuestra instruccin hubiese sido:
MOVLW 06h

Cualquiera de las dos funcionar. La instruccin MOVLW significa en ingles "Move Literal Value into W", en castellano, mover un valor literal directamente al registro W. Ahora necesitamos poner este valor en el registro TRISA para configurar el puerto:
MOVWF 85h

Esta instruccin significa "poner los contenidos de W en el registro cuya direccin viene a continuacin", en este caso la direccin 85h, que apunta a TRISA. Nuestro registro TRISA ahora tiene el valor 00110 o mostrado grficamente : Pin del Puerto A RA4 RA3 RA2 RA1 RA0 Valor Binario Entrada/Salida 0 S 0 S 1 E 1 E 0 S

Ahora tenemos que configurar los pines del Puerto A, y para ello necesitamos volver al banco 0 para manipular cualquier dato.
BCF 03h,5

Esta instruccin hace lo contrario a BSF. Significa en ingles "Bit Clear F" (en castellano, poner a 0 un bit de la memoria). Los dos nmeros que le siguen son la direccin del registro, en este caso del registro STATUS, y el nmero de bit, es este caso el 5. As que lo que hemos hecho ahora es poner a 0 el bit 5 del registro STATUS. Ya estamos de vuelta en el Banco 0. Aqu est el cdigo en un solo bloque:
BSF MOVLW MOVWF BCF 03h,5 06h 85h 03h,5 ; ; ; ; Ve al banco 1 Pon 00110 en W Mueve 00110 a TRISA Vuelve al Banco 0

Cmo escribir en los puertos En el apartado anterior, hemos mostrado como configurar los pines de un puerto del PIC como entradas o como salidas. En este apartado, vamos a mostrar como enviar datos a los puertos. En el siguiente apartado terminaremos haciendo que un LED parpadee incluyendo el listado completo del programa y un diagrama de un circuito simple para que puedas ver al PIC haciendo exactamente lo que esperamos que haga. No intentes compilar o programar tu PIC con estos listados de aqu, ya que son solo ejemplos. Primero, pongamos el bit 2 del puerto A como salida:
bsf movlw movwf salidas. bcf 03h,5 00h 85h 03h,5 ;Ir al Banco 1 ;Poner 00000 en W ;Mover 00000 al TRISA todos los pines como ;volver al Banco 1

Esto te sonar del apartado anterior. La nica diferencia es que hemos puesto todos los pines del Puerto A como salidas, poniendo 0h en el registro tri-estado (TRISA). Ahora lo que tenemos que hacer es encender el LED. Hacemos esto poniendo uno de los pines (aquel que tenga el LED conectado) a nivel alto. En otras palabras, enviamos un 1 al pin. As es como se hace (Mira los comentarios de cada linea):
movlw ; Escribe 02h en el registro W. En binario es 00010, ; ...lo cual pone a 1 el bit 2 (pin 18) mientras mantiene los otros pines a 0. movwf 05h ; Ahora mueve los contenidos de W (02h) al puerto A, cuya direccin es 05h. 02h

Por tanto, ahora tu LED est encendido, y ahora queremos apagarlo:


movlw 00h ; Escribe 00h en el registro W. Esto pone a 0 todos los pines. movwf 05h ; Ahora mueve todos los contenidos de W (0h) al puerto A, cuya direccin es 05h.

As que lo que hemos hecho ha sido encender y apagar el LED una vez. Lo que queremos es que el LED se encienda y se apague continuamente. Para hacer esto tenemos que volver al principio del programa. Para conseguir esto lo primero que hacemos es poner una etiqueta al comienzo de nuestro programa, y dicindole al programa que vaya a ese punto constantemente. Definimos una etiqueta muy simple. Escribimos un nombre, digamos INICIO, entonces el cdigo queda:
Inicio movlw es 00010, 02h ; Escribe 02h en el registro W. En binario

; ...lo cual pone a 1 el bit 2 (pin 18) mientras mantiene los otros pines a 0. movwf 05h ; Ahora mueve los contenidos de W (02h) al puerto A, cuya direccin es 05h. movlw 00h ; Escribe 00h en el registro W. Esto pone a 0 todos los pines. movwf 05h ; Ahora mueve todos los contenidos de W

(0h) al puerto A, cuya direccin es 05h. goto Inicio ; ve donde est Inicio.

Como puedes ver, primer decimos la palabra 'Inicio' justo al comienzo del programa. Despus, justo al final del programa decimos simplemente 'goto Inicio', ves a Inicio. La instruccin 'goto' significa en ingles 'ir a', y eso es lo que hace. Este programa encender y apagar el LED constantemente, desde el momento que le demos alimentacin al circuito, y se detendr cuando le quitemos la alimentacin.

PROGRAMACION DE MICROPROCESADORES Un microprocesador es un semiconductor programable que es usado para ejecutar instrucciones para procesar datos digitales, y conseguir un nivel de control sobre otros dispositivos. En el mundo de la informtica, se le conoce comnmente como unidad de procesador central o CPU, y viene ya instalada en el sistema del ordenador cuando lo compramos. La complejidad de los microprocesadores en la actualidad hace difcil dar una explicacin precisa de

cmo han evolucionado desde sus primeros das. Por este motivo, lo mejor para comprender como funciona es dar una arquitectura general de un tpico microprocesador simple. De este modo, podremos tener un entendimiento razonable de cmo funcionan en general. Un microprocesador es usado para ejecutar una serie de pasos o instrucciones, lo cual de una forma colectiva constituye un programa. Cada microprocesador tiene un nico conjunto de instrucciones que puede ejecutar. Cada una de las instrucciones hace algo nico y hace diferentes requerimientos en trminos de qu partes del microprocesador utiliza o qu datos usar para trabajar. Un circuito bsico en estos dispositivos tiene las siguientes partes: Una unidad lgica aritmtica, que es donde las operaciones lgicas y de clculo tienen lugar, una unidad de control para organizar la ejecucin del programa en el dispositivo, y un registro de instrucciones, donde las rdenes son cargadas una a la vez y son interpretadas. Tambin se incluye un contador, que indica la direccin de la memoria de donde la siguiente instruccin vendr. Para terminar, se incluyen registros y punteros que ayudan a que el microprocesador pueda hacer su trabajo correctamente.

Un microprocesador ejecuta un programa almacenado en memoria cogiendo las instrucciones del programa (y cualquier dato que sea requerido), y lo hace usando una instruccin a la vez y realizando lo que se le va diciendo. La memoria en este contexto bsicamente hace referencia a los dispositivos externos de memoria que complementan el microprocesador u los dispositivos de entrada / salida del sistema del ordenador. La manera en que la siguiente instruccin ser ejecutada depende del resultado de la ltima operacin. Por eso, la salida del microprocesador depende de las instrucciones y los datos de entrada que le son entregados. Los microprocesadores con diferentes diseos en la unidad lgica y aritmtica, tienen diferentes capacidades. Por ejemplo, algunos pueden manejar las funciones bsicas aritmticas directamente, mientras que algunos ms simples solo pueden realizar operaciones simples (como de sumar), que son tambin las pasos usados para emular otras funciones aritmticas como multiplicar y dividir. La capacidad lgica tambin vara entre este tipo de dispositivos, pero la mayora pueden realizar operaciones de AND, OR y EXOR. Las instrucciones que un microprocesador sigue vienen en forma de cdigo. Su ejecucin no puede hacerse aleatoriamente y debe se controlado de una forma precisa segn ocurre. La unidad de control es el responsable de controlar la secuencia de ocurrencias

necesarias para la ejecucin de las instrucciones, como tambin el tiempo de secuencia que tienen. La unidad de control es complementada por un reloj o temporizador que ayuda a activar cada ocurrencia de cada paso en el punto correcto y en su momento exacto. Por ltimo, el contador del programa de un microprocesador indica donde est la siguiente instruccin de bytes localizada en memoria. Es colocada en un ndice por la unidad de control cada vez que un cdigo con instrucciones es transferido desde la memoria al microprocesador. Cmo ocurre esto? Como se ha comentado, el registro de instrucciones es almacenar el cdigo que ha sido cogido de la memoria. El primer byte del cdigo es entregado al decodificador de instrucciones que lo lee para determinar qu operacin debe ser llevada a cabo, cuantos bytes de datos van a ser procesados, y donde obtener estos datos. Despus de la codificacin de las instrucciones, la ejecucin de las instrucciones tiene lugar. Los registros son elementos compuestos donde los datos son almacenados temporalmente para su posterior procesamiento o transferencia, segn se van ejecutando las instrucciones de forma ordenada. El acumulador es un registro especial usado por el microprocesador para mantener operaciones o datos para que sean manipulados por la unidad lgica y aritmtica. Aparte del acumulador tambin hay varios registros disponibles para guardar los datos mientras se ejecutan otras operaciones. Tambin disponen de unas etiquetas de estado, que son realmente registros especiales para almacenar el estado de una condicin como resultado de otra operacin. Los microprocesadores han estado entre nosotros por unos cuantos aos, y ahora los tenemos en varias formas, tamaos y niveles de sofisticacin, donde pueden funcionar con todo tipo de aplicaciones que se basan en el control mediante un ordenador. Aunque es la unidad de procesamiento central de un sistema computarizado, tambin necesita interactuar con otros dispositivos semiconductores para poder realizar sus funciones. Estos otros dispositivos incluyen la memoria y elementos de entrada / salida, que constituyen el resto del sistema del ordenador. PROGRAMACIN DE UN MICROPROCESADOR DE 16 BITS 1. Instrucciones de transferencia de datos 2. Instrucciones lgicas 3. Instrucciones aritmticas 4. Instrucciones de operacin en BCD 5. Instrucciones de desplazamiento y rotacin 6. Instrucciones de manipulacin de bits 7. Instrucciones de ramificacin y salto 8. Instrucciones para gestin de subrutinas 9. Modos supervisor y usuario 10.Excepciones: interrupciones y trampas

1. INSTRUCCIONES DE TRANSFERENCIA DE DATOS - Transmisin de informacin entre dos elementos de almacenamiento del computador.

2. INSTRUCCIONES LGICAS - Operaciones booleanas.

3. INSTRUCCIONES ARITMTICAS - Operaciones aritmticas entre datos de tipo entero.

4. INSTRUCCIONES DE OPERACIN EN BCD - Operaciones elementales en cdigo BCD.

5. INSTRUCCIONES DE DESPLAZAMIENTO Y ROTACIN

6. INSTRUCCIONES DE MANIPULACIN DE BITS - Acceso a bits individuales del operando.

7. INSTRUCCIONES DE RAMIFICACIN Y SALTO - Modificacin de la secuencia de ejecucin de instrucciones del programa.

- Instrucciones de ramificacin y condiciones de salto BEQ: saltar si es igual a 0 (equal). BNE: saltar si no es igual a 0 (not equal). BCS: saltar si hay acarreo (carry C set). BCC: saltar si no hay acarreo (carry C cleared). BHI: saltar si es mayor que 0 (higher) para nmeros sin signo. BLS: saltar si es menor o igual que 0 (lower or same) para nmeros sin signo. BMI: saltar si es negativo (minus). BPL: saltar si es positivo (plus). BVS: saltar si hay desbordamiento (overflow V set). BVC: saltar si no hay desbordamiento (overflow V cleared). BGT: saltar si es mayor que 0 (greater than) para nmeros con signo. BGE: saltar si es mayor o igual que 0 (greater or equal than) para nmeros con signo. BLT: saltar si es menor que 0 (lower than) para nmeros con signo. BLE: saltar si es menor o igual que 0 (lower or equal than) para nmeros con signo.

8. INSTRUCCIONES PARA GESTIN DE SUBRUTINAS - Se encargan de guardar en la pila el valor de retorno de la subrutina en la llamada a la misma, y de restaurarlo en el PC a la salida.

9. MODOS SUPERVISOR Y USUARIO - Modo supervisor: Ejecucin de instrucciones privilegiadas. Gestin de excepciones. Puntero de pila: SSP. - Modo usuario: normal. Puntero de pila: USP.

10. EXCEPCIONES: INTERRUPCIONES Y TRAMPAS - Se producen cuando se alcanzan ciertas situaciones especiales. - Requieren un tratamiento especial a travs de rutinas de servicio de excepcin. Las rutinas de servicio de excepcin se ejecutan en modo supervisor. - Vectores de excepcin: Situados en zonas concretas de memoria. Contienen las direcciones de comienzo de las rutinas de servicio de excepcin. Hay una direccin por cada excepcin. Hay un vector para interrupciones y otro para trampas.

Excepciones externas: interrupciones - Las interrupciones se emplean como un mecanismo de entrada salida. - El perifrico lanza una peticin de interrupcin cuando tiene algo que comunicarle a la UCP. - La UCP comprueba si hay alguna peticin de interrupcin al final de la ejecucin de cada instruccin. - Niveles de interrupcin: desde I1 hasta I7 (interrupcin no enmascarable). Nivel actual de prioridad (CPL) : indicado por los bits C1, C2 y C3 del registro de estado.

Excepciones internas: trampas (traps) - Se pueden producir por los siguientes motivos: Ejecucin de ciertas instrucciones (trampas explcitas). Errores detectados internamente (error de direccionamiento, divisin por cero, desbordamiento, instruccin ilegal, etc).

Potrebbero piacerti anche