MICROCONTROLADORES
La situación actual en el campo de los microcontroladores se ha producido gracias al desarrollo de la tecnología de fabricación de los circuitos integrados. Este desarrollo ha permitido construir las centenas de miles de transistores en un chip. Esto fue una condición previa para la fabricación de un microprocesador. Las primeras microcomputadoras se fabricaron al añadirles periféricos externos, tales como memoria, líneas de entrada/salida, temporizadores u otros. El incremento posterior de la densidad de integración permitió crear un circuito integrado que contenía tanto al procesador como periféricos. Así es cómo fue desarrollada la primera microcomputadora en un solo chip, denominada más tarde microcontrolador.Los principiantes en electrónica creen que un microcontrolador es igual a un microprocesador. Esto no es cierto. Difieren uno del otro en muchos sentidos. La primera y la más importante diferencia es su funcionalidad. Para utilizar al microprocesador en una aplicación real, se debe de conectar con otros componentes, en primer lugar con la memoria. Aunque el microprocesador se considera una máquina de computación poderosa, no está preparado para la comunicación con los dispositivos periféricos que se le conectan. Para que el microprocesador se comunique con algún periférico, se deben utilizar los circuitos especiales. Así era en el principio y esta práctica sigue vigente en la actualidad.
Por otro lado, al microcontrolador se le diseña de tal manera que tenga todas las componentes integradas en el mismo chip. No necesita de otros componentes especializados para su aplicación, porque todos los circuitos necesarios, que de otra manera correspondan a los periféricos, ya se encuentran incorporados. Así se ahorra tiempo y espacio necesario para construir un dispositivo.
MICROCONTROLADOR PIC
JUEGO DE INSTRUCCIONES
El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones en total. La razón para un número tan reducido de instrucciones yace en la arquietectura RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de la velocidad operativa, la sencillez de la arquitectura y la compacidad del código. La desventaja de la arquitectura RISC es que se espera del programador que haga frente a estas instrucciones. Por supuesto, esto es relevante sólo si se utiliza el lenguaje ensamblador para la programación. Este libro se refiere a la programación en el lenguaje de alto nivel Basic, lo que significa que la mayor parte del trabajo ya fue hecho por alguien más. Así, sólo se tienen que utilizar instrucciones relativamente simples.
TIEMPO DE EJECUCIÓN DE INSTRUCCIONES
Todas las instrucciones se ejecutan en un ciclo. La únicas excepciones pueden ser las instrucciones de ramificación condicional o las instrucciones que cambian el contenido del contador de programa. En ambos casos, dos ciclos de reloj son necesarios para la ejecución de la instrucción, mientras que el segundo ciclo se ejecuta como un NOP (No operation). Las instrucciones de un ciclo consisten en cuatro ciclos de reloj. Si se utiliza un oscilador de 4 MHz, el tiempo nominal para la ejecución de la instrucción es 1mS. En cuanto a las instrucciones de ramificación, el tiempo de ejecución de la instrucción es 2µS.
Juego de instrucciones de los microcontroladores PIC de 14 bits:
| INSTRUCCIÓN | DESCRIPCIÓN | OPERACIÓN | BANDERA | CLK | * |
|---|---|---|---|---|---|
| Instrucciones para la transmisión de datos | |||||
| MOVLW k | Mover literal a W | k -> w | 1 | ||
| MOVWF f | Mover el contenido de W a f | W -> f | 1 | ||
| MOVF f,d | Mover el contenido de f a d | f -> d | Z | 1 | 1, 2 |
| CLRW | Borrar el contenido de W | 0 -> W | Z | 1 | |
| CLRF f | Borrar el contenido de f | 0 -> f | Z | 1 | 2 |
| SWAPF f,d | Intercambiar de nibbles en f | f(7:4),(3:0) -> f(3:0),(7:4) | 1 | 1, 2 | |
| Instrucciones aritmético - lógicas | |||||
| ADDLW k | Sumar literal a W | W+k -> W | C, DC, Z | 1 | |
| ADDWF f,d | Sumar el contenido de W y f | W+f -> d | C, DC ,Z | 1 | 1, 2 |
| SUBLW k | Restar W de literal | k-W -> W | C, DC, Z | 1 | |
| SUBWF f,d | Restar W de f | f-W -> d | C, DC, Z | 1 | 1, 2 |
| ANDLW k | AND W con literal | W AND k -> W | Z | 1 | |
| ANDWF f,d | AND W con f | W AND f -> d | Z | 1 | 1, 2 |
| IORLW k | OR inclusivo de W con literal | W OR k -> W | Z | 1 | |
| IORWF f,d | OR inclusivo de W con f | W OR f -> d | Z | 1 | 1, 2 |
| XORWF f,d | OR exclusivo de W con literal | W XOR k -> W | Z | 1 | 1, 2 |
| XORLW k | OR exclusivo de W con f | W XOR f -> d | Z | 1 | |
| INCF f,d | Sumar 1 a f | f+1 -> f | Z | 1 | 1, 2 |
| DECF f,d | Restar 1 a f | f-1 -> f | Z | 1 | 1, 2 |
| RLF f,d |
Rotar F a la izquierda a través del bit de Acarreo
| C | 1 | 1, 2 | |
| RRF f,d | Rotar F a la derecha a través del bit de Acarreo | C | 1 | 1, 2 | |
| COMF f,d | Complementar f | f -> d | Z | 1 | 1, 2 |
| Instrucciones orientadas a bit | |||||
| BCF f,b | Poner a 0 el bit b del registro f | 0 -> f(b) | 1 | 1, 2 | |
| BSF f,b | Poner a 1 el bit b del registro f | 1 -> f(b) | 1 | 1, 2 | |
| Instrucciones de control de programa | |||||
| BTFSC f,b | Saltar si bit b de registro f es 0 | Skip if f(b) = 0 | 1 (2) | 3 | |
| BTFSS f,b | Saltar si bit b de reg. f es 1 | Skip if f(b) = 1 | 1 (2) | 3 | |
| DECFSZ f,d | Disminuir f en 1. Saltar si el resultado es 0. | f-1 -> d skip if Z = 1 | 1 (2) | 1, 2, 3 | |
| INCFSZ f,d | Incrementar f en 1. Saltar si el resultado es 1. | f+1 -> d skip if Z = 0 | 1 (2) | 1, 2, 3 | |
| GOTO k | Saltar a una dirección | k -> PC | 2 | ||
| CALL k | Llamar a una subrutina | PC -> TOS, k -> PC | 2 | ||
| RETURN | Retornar de una subrutina | TOS -> PC | 2 | ||
| RETLW k | Retornar con literal en W | k -> W, TOS -> PC | 2 | ||
| RETFIE | Retornar de una interupción | TOS -> PC, 1 -> GIE | 2 | ||
| Otras instrucciones | |||||
| NOP | No operación | TOS -> PC, 1 -> GIE | 1 | ||
| CLRWDT | Reiniciar el temporizador perro guardián | 0 -> WDT, 1 -> TO, 1 -> PD | TO, PD | 1 | |
| SLEEP | Poner en estado de reposo | 0 -> WDT, 1 -> TO, 0 -> PD | TO, PD | 1 | |
*1 Si un registro de E/S está modificado, el valor utilizado será el valor presentado en los pines del microcontrolador.
*2 Si la instrucción se ejecuta en el registro TMR y si d=1, el pre-escalador será borrado.
*3 Si el contador de programa está modificado o el resultado de prueba es un uno lógico (1), la instrucción tiene una duración de dos ciclos. El segundo ciclo se ejecuta como un NOP
*2 Si la instrucción se ejecuta en el registro TMR y si d=1, el pre-escalador será borrado.
*3 Si el contador de programa está modificado o el resultado de prueba es un uno lógico (1), la instrucción tiene una duración de dos ciclos. El segundo ciclo se ejecuta como un NOP
Arquitectura de los microcontroladores PIC de 8 bits. Cuáles de estos módulos pertenecerán al microcontrolador, dependerá del tipo de microcontrolador.