Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Micro-controladores PIC
Introducción
Micro-controladores PIC.
QUÉ ES UN MICRO-CONTROLADOR
Son pocos los componentes electrónicos externos que se necesitan para hacer
funcionar este dispositivo.
Bajo consumo.
Un buen precio.
Un conjunto de instrucciones de fácil manejo (Reducido juego de instrucciones RISC).
ALGUNAS DEFINICIONES.
ROM: (Read Only Memory ó Memoria de solo lectura) Son memorias de un número
mayor de bits (de 12 bits o más) para contener el programa, no es posible alterar ninguna
posición. La más leve alteración produciría un error en el funcionamiento del micro-controlador.
EEPROM: Este tipo de memoria es similar a la EPROM pero más fácil y simple de
utilizar, ya que se puede grabar, regrabar o borrar completamente su contenido mediante
procedimientos eléctricos. Este proceso es más rápido y se puede reiterar tantas veces como se
desee. Su precio además es más barato que la EPROM.
Figura 1-1.
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
Como podemos observar un pin de un puerto consiste en dos MOSFET de salida
complementaria uno del tipo N y otro del tipo P (configurado como salida).
Si el MOSFET P está conduciendo la salida estará en ‘1’ ó + 5V, en este caso el pin
no puede suministrar más de 20mA como fuente (I source).
Si el MOSFET N está conduciendo la salida estará en ‘0’ o 0V, en este caso el pin no
puede drenar más de 25mA como sumidero (I sink).
FAMILIA PIC
Veremos a continuación en primer lugar algunas características que hacen esta familia
muy completa a la hora de decidirse por un micro-controlador.
Todos los PIC tienen códigos de protección que pueden habilitarse por programa para
hacerlos inmunes a la lectura y como consecuencia a su copia ilegal.
Figura 1-2
DETALLE DE PINES
Los pines o terminales, son los elementos físicos mediante los cuales el micro-
controlador tiene acceso al y desde el exterior, puede recibir o enviar señales y cumplir el
cometido para el que fue diseñado. En la figura 1-3 se observa las líneas de pines del micro-
controlador 16F84.
Figura 1-3
TIPOS DE RESET
Figura 1-4.
Como puede observarse en la figura 1-5 se puede implernentar un reset muy simple
conectando un pulsador normalmente abierto y luego presionarlo para que el pin MCLR tome el
valor de cero voltios, de esta manera se puede resetear manualmente el micro-controlador
mientras esté en funcionamiento.
Figura 1-5
Es importante conocer qué valores toman todos los registros, tanto especiales como
generales, en el momento de conectar la alimentación (POR). De esta manera, sabiendo el
estado inicial, se interpretará mejor de qué forma comenzará el programa su ejecución. Para tal
fin se ha esquematizado una tabla, que permite observar la aleatoriedad de valores en algunos
registros cuando se conecta la alimentación. La interpretación correcta de estos valores, nos
guiará en las previsiones que se deben tomar para evitar un desempeño deficiente del programa.
Dicha tabla se verá más adelante.
PRECAUCIONES EN LA ALIMENTACIÓN
Normalmente en los circuitos industriales, donde los niveles de ruido eléctrico son
elevados, usualmente se registran disturbios en la alimentación. Es importante lograr eliminar o
filtrar estos espurios. Uno de los métodos para lograr este cometido, es desacoplar mediante
capacitores de bajas pérdidas. Los terminales se deben soldar lo más cerca posible de las patillas
de la alimentación del circuito integrado. Desgraciadamente están cruzadas y para cumplimentar
este requisito por ejemplo para el PIC 16F84, es necesario soldarlos debajo del CI, entre las
patas 5(-) y 14(+) respectivamente.
A lo largo de todo el libro se insistirá acerca de la incidencia del ruido eléctrico y sus
consecuencias en circuitos con micro-controladores. La reiteración de este tema en varios
párrafos se debe al convencimiento de que resolviendo esta problemáticas el producto resultante
puede ser la diferencia entre un equipo que funcione bien y otro que no está exento de fallar
bajo determinadas circunstancias.
Se logran excelentes resultados soldando cerca de las patas del CI, un capacitor de
tantalio de alrededor de 10µF o más si es posible.
Figura 1-6
Tome esta recomendación como regla en el diseño de equipos electrónicos con micro-
controladores.
Esta forma en la conexión de los filtros trae aparejada una seria eventualidad:
ALIMENTACIÓN
CLASES DE OSCILADORES
La familia de los PIC utiliza para su funcionamiento y generar la señal del reloj de
instrucción, diferentes tipos de osciladores. Las características comunes a todos ellos es que el
oscilador se conecta siempre en los pines OSC1/CLKIN y OSC2/CLKOUT (excepto en el
oscilador RC que se conecta sólo en OSC l/CLKINT. La elección del tipo de oscilador en las
versiones OTP, se debe realizar en el momento de la compra del chip virgen.
En las versiones con memoria EEPROM y en aquellos con ventana para borrarlo con
luz ultravioleta, el tipo de oscilador se puede seleccionar programando los bits de un registro
especial accesible al momento de programar el micro-controlador.
Cuanto más rápido sea el oscilador más velozmente se ejecutarán las instrucciones.
Si los niveles de ruido son elevados use el oscilador RC, NO el oscilador XT.
Figura 1-8
Se describe una tabla de frecuencia del rango de oscilación, en función de los valores
de resistencia y condensador a utilizar. Los valores consignados en la tabla 1-1, son sólo
orientativos y aproximados.
Esta tabla nos permite determinar la frecuencia a la que trabajará nuestro micro-
controlador, en correspondencia con el resistor y capacitor asociado.
Tabla 1-1
En los osciladores a cristal es este el que fija la frecuencia de oscilación, por lo que
directamente se compra el cristal a la frecuencia que se requiera para hacer funcionar el
oscilador del micro-controlador. El conexionado se muestra a continuación.
Figura 1-9
Modo Frecuencia C
32kHz 68pf-100pf
LP
200kHz 15pf-33pf
100kHz 100pf-150pf
XT 2MHz 15pf-33pf
4MHz 15pf-33pf
4MHz 15pf-33pf
HS
10MHz 15pf-33pf
RELOJ DE INSTRUCCIÓN
La señal que proviene del oscilador externo, conectado a los pines OSC1I CLKIN y
OSC2/CLKOUT del micro-controlador, se divide, en cuatro ciclos, obteniéndose así la señal
requerida por el procesador interno para realizar las operaciones. Este procedimiento permite el
montaje en paralelo de la búsqueda y ejecución de la instrucción. Llámese reloj de instrucción,
al ciclo interno que posee el micro-controlador para cronometrar el tiempo de ejecución de las
instrucciones. Las fases de esta tarea se muestran en el diagrama de la figura 1-9.
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
Figura 1-10
Los pulsos entrantes del reloj son divididos por 4, generando diferentes señales
denominadas Q1, Q2, Q3 y Q4. El estado Q1 hace incrementar el contador de programa, Q2 y
Q3, se encargan de la decodificación y ejecución de la instrucción y por último, Q4 es la fase de
búsqueda de la instrucción, además el código se almacena en el registro de instrucciones. Por
consiguiente, cada instrucción se ejecuta en un ciclo llamado ciclo de instrucción.
Es decir que si no se tuviese una estructura Hardvare y se trabajase con una estructura
de Von Neumann, una instrucción se demoraría 8 ciclos de reloj (se demoraría el doble de
tiempo en ejecutarse la instrucción), pero por contar con una estructura Hardvare, cada
instrucción se demora 4 ciclos de reloj. Al periodo que demora en ejecutarse una instrucción
simple se denomina ciclo de instrucción y demora 4 ciclos de reloj en ejecutarse. El tiempo de
instrucción se calcula como sigue:
Donde:
Figura 1-11
MEMORIAS
2. EPROM
3. EEPROM
Cuando una aplicación requiera que la señal o excitación externa sea atendida en
forma inmediata, necesitaremos utilizar un programa de interrupción de tiempo real. Este
recurso es muy importante en muchas aplicaciones.
Micro-controladores PIC
PIC 16F84
SÍNTESIS
El contador de programa posee una longitud de 13 bits (0-12), por lo que tendría una
capacidad como para direccionar una memoria de 8192 instrucciones. Microchip ha
implementado a este popular micro-controlador (como también es válido para el PIC 16F71)
con una memoria de 1K. Es decir que puede almacenar hasta 1024 instrucciones.
Por lo tanto los tres bits de mayor peso del contador de programa PC, no son tenidos
en cuenta, es decir que si se pretende llegar a esas direcciones, se producirá un solapamiento con
la posición 03FF, ya que los mencionados 3 bits se ignoran.
Capacidad de Cantidad de
memoria bits del PC
256 8bits
512 9bits
1024 10bits
2048 11bits
4096 12bits
8192 13bits
Tabla 2-1
Rango Uso
00h-0Bh Registro de funciones especiales.
0Ch-4Fh Registros de propósito general.
80h-8Bh Registro de funciones especiales.
8Ch-CFh Registros de propósito general.
Tabla 2-1
Figura 2-2
Este registro incrementa su contenido en una unidad por cada cierto número de ciclos,
proveniente de una señal externa al micro-controlador o bien del ciclo de reloj interno. El
divisor será el resultado de cómo se haya elegido (cargado) el pre-escalador interno. Posee la
flexibilidad de incrementar su cuenta con la señal del flanco descendente o ascendente.
Recuerde cargar nuevamente los valores del temporizador TMR0 cada vez que se
desborda, si desea repetir la división escogida.
La configuración de los bits de este registro puede dar una gran cantidad de
combinaciones. No es el propósito de este libro explicarlos a todos, sino más bien servir de
orientación para configurar este registro correctamente.
Según se pretenda utilizar el TMR0 ó el WDT, será como debamos configurar los bits
en el registro OPTION. Para que el lector los pueda individualizar fácilmente, se les ha asignado
un nombre mnemotécnico que permite recordar la función que realizan.
Este registro especial ocupa la posición 81h de la memoria de datos, es decir que se
ubica en la posición 01h, del banco 1.
Figura 2-3
• PS0, PS1, PS2: Estos tres bits sirven para definir el factor de división (pre-
escalador) que se le aplicará al registro TMR0, o al WDT. Observe que los
factores a aplicar no son iguales.
Tabla 2-3
• INTEDG: Bit que determina qué tipo de flanco de la señal provocará una
interrupción en el pin RB0/INT (pata 6).
• RBPU: Bit que permite habilitar, o no, una conexión interna mediante una
débil corriente a positivo (transistor MOS de canal P), siempre y cuando el
puerto haya sido configurado como entrada. Esta característica es muy útil, ya
que permite dejar libre los pines, eliminando la necesidad de colocar las
resistencias de las líneas del puerto B a positivo (PULL-UP).
El contador de programa de la gama media tiene una longitud de 13 bits, decir que es
posible direccionar hasta 8 K de palabras. Se muestra en la tabla 2-4 la relación entre el tamaño
del PC y el de los STACK.
Tamaño de
Tamaño del contador de
memoria de
programa
programa
512 9bits (0-8)
1024 10bits (0-9)
2048 11bits (0-10)
4096 12bits (0-11)
8192 13bits (0-12)
Tabla 2-4
El contador de programa del PIC l6F84, posee un tamaño de 13 bits pero dado el
tamaño de su memoria de programa, de solamente 1K, es decir media página de programa,
bastan 10 bits de longitud del contador de programa PC para abarcar esa media página.
Dado que el contador de programa tiene una longitud de 13 bits, se hace necesario
recurrir a un registro auxiliar para conformar la sección de los bits más altos. Entonces, el
contador de programa está dividido en dos, una parte baja de 8 bits alojados en la dirección 02h
denominada PCL, que se puede acceder perfectamente y otra sección de bits de mayor peso,
llamada PCLATH, ubicada en la dirección 0Ah. Veamos mediante la figura 2-4 lo expresado.
Como ya se mencionó, los bits de mayor peso, l0, 11 y 12 se ignoran, puesto que el
PIC 16F84 tiene sólo 1K de memoria de programa, o sea un total de 1024 posiciones (comienza
en la posición 0000h y se extiende hasta la 03FFh).
El PIC 16F84 utiliza para direccionar el programa, sólo los primeros diez bits del
contador de programa PC.
Figura 2-5
BIT DESCRIPCION
C Acarreo
DC Acarreo decimal
Z Indicador de resultado cero
PD Bit de bajo consumo
T0 Bit de temporización WDT
Bit de selección de bancos en el
RP0, RP1
direccionamiento directo
Bit de selección de pares de
IRP bancos en el direccionamiento
indirecto
Tabla 2-5
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
A continuación pasaremos a definir la función que cumplen cada uno de los bits que
componen el registro STATUS.
RP0 Banco
0 Banco 0
1 Banco 1
Veamos qué sucede con el registro STATUS cuando se intenta borrarlo con la
instrucción CLRF. Los bits señalizadores de estado, TO y PD son de lectura únicamente. Luego
de la ejecución de una de las instrucciones especiales SLEEP ó CLRWDT, el micro-controlador
automáticamente coloca estos bits en ‘1’ ó ‘0’ dependiendo del tipo de instrucción ejecutada.
Debido a que estos bits nos reflejan un determinado estado del micro es imposible borrarlos.
Después de la instrucción el registro estado queda de la siguiente manera.
STATUS 000XX100
Estos registros especiales corresponden a los puertos de entrada y/ó salida. Se llaman
respectivamente Puerto A y Puerto B. Mediante el control de programa se pueden leer o escribir
como cualquier otro registro. Ante un reset, todos los pines de los puertos quedan definidos
como entradas.
Mediante los registros de configuración TRIS, cada bit ó pin de los puertos, se puede
configurar como entrada o salida de acuerdo a la configuración de unos o ceros en el registro.
Resumiendo, los ‘1’ previamente cargados en el registro TRIS definirán los pines
como entradas. Los ‘0’ configurarán a los pines del puerto como salidas.
Recuerde la regla:
Los unos 1 serán entradas (In). Los ceros 0 serán salidas (Out)
El PIC 16F84 tiene 13 pines que pueden definirse como entradas o como salidas. Un
pin de cada puerto, además de las particularidades comunes del puerto, presenta una función
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
adicional. El pin RA4 puede usarse como entrada de impulso para TMR0 y el pin RB0 puede
emplearse como entrada o línea de interrupción.
El puerto B es un registro completo de 8 bits, sus pines pueden programarse para que
se comporten como entrada o salida. Determinados pines (RB0 y RB4 a RB7), tienen una
conducta muy diferente cuando se los configura como entrada, éstos pueden utilizarse para
producir una interrupción de acuerdo a la señal que se presente en sus entradas. Por supuesto
siempre que se haya habilitado la autorización para utilizarlas, mediante un registro que controla
las interrupciones.
Según las características extraídas del manual, soporta hasta un 1.000.000 de ciclos de
escritura o los datos pueden quedar retenidos hasta 40 años.
Si bien este tema se trata con mayor profundidad más adelante, veremos brevemente
los pasos a seguir para leer y escribir en la EEPROM.
PROCESO DE ESCRITURA
MOVLW H’55’
MOVWF EECON2
MOVLW H’AA’
MOVWF EECON2
BSF EECON1, WR
Para asegurar una correcta escritura, existen pasos adicionales que utilizan otros bits
de control. Además habrá que esperar el aviso (10 ms de demora aproximadamente) de que la
escritura se efectúo. Este tiempo es variable y depende de la temperatura y de las características
de fabricación.
Para la escritura, es el dato a ser ubicado en algún lugar del bloque de memoria
EEPROM. Concluida la fase de escritura en la EEPROM, tanto el registro EEDATA y la
dirección seleccionada (una de las 64 posiciones de memoria de la EEPROM) contendrá el valor
de EEDATA.
Figura 2-6
• Bit RD (Reed Data ó Lectura de dato): Este bit establece el modo de lectura
en la EEPROM. Le toma solamente un ciclo de instrucción.
Es importante aprender a utilizar este registro, puesto que el empleo del mismo es
esencial para almacenar datos en una zona especial de memoria. El uso de este registro auxiliar
es imprescindible para lograr la escritura de la EEPROM con éxito. Está ubicado en la zona de
los registros especiales, pero no está imple- mentado en forma física. Ante un intento de leerlo
su lectura da cero.
Este registro es como una clave que habilita y permite posteriormente grabar un dato
en la EEPROM. No se podrá grabar si con anterioridad, como hemos visto, no se escriben en
este registro una serie correlativa de datos:
Movlw H’ 55’
Movwf EECON2
Movlw H ‘AA’
Movwf EECON2
Es el registro que contiene la parte alta del contador de programa. Cuando el contador
de programa es destino de una instrucción, se requiere que se compaginen los dos bits menos
significativos de PCLATH que se transferirán al contador de programa. Para mayor información
remítase a lo visto anteriormente.
Este registro está duplicado en el otro banco de memoria. Si por cualquier motivo
debemos utilizarlo, no será necesario cambiar de banco al hacerlo.
De la figura 2-7 se desprende que los tres bits de menor peso (0, 1 y 2) corresponden
a los avisos de señalización de los sucesos y los coloca el procesador (una vez atendida la
interrupción deberá borrarlos el programador). Los bits 3, 4, y 5 son los utilizados para habilitar,
o no, los modos de interrupción, estos bits se configuran a voluntad del programador.
Figura 2-7
Veremos la función que cumple cada uno de los bits de este registro.
• RBIF: Bit que nos indica que ha existido un cambio de estado en los pines
RB4, RB5, RB6 y/o RB7 del puerto B. El retomo a su valor original es
colocándole un cero y deberá realizarse por programa.
INTF = 1: Cuando este bit sea ‘1’, significa que ha existido un cambio de
flanco de la señal en el pin 6 (RB0/INT).
• TOIF: Bit que nos informa que el temporizador TMR0 llegó a cero (por
desbordamiento, es decir, pasa de ‘FFh’ a ‘00h’).
DIFERENTES INTERRUPCIONES
• Atender la interrupción.
• Determinar la causa que la origina, mediante la inspección de INTCON.
• Ejecutar la subrutina de servicio.
• Retornar al programa principal, para continuar la secuencia correspondiente.
Para que se genere una interrupción deben manifestarse con anterioridad dos
situaciones bien definidas, que se exteriorizan en el registro INTCON.
Por disponer de un solo vector de interrupción, es necesario evaluar los estados de los
bits de señalización, para determinar cuál ha sido la causa de la interrupción y poder, de este
modo, elegir la rutina apropiada (esta tarea sería más sencilla y directa, si se dispusiese de más
vectores de interrupción).
Según se desprende de dicha figura, existe una serie de acciones que el micro-
controlador realiza cuando se produce una interrupción, en concordancia con las previsiones que
se deben tomar en la elaboración del programa.
Figura 2-8
Para habilitar las interrupciones que desee utilizar, coloque un ‘1’ en los bits
correspondientes (los ‘0’ las inhiben).
El PIC 16F84 posee cuatro modos de interrupciones, las que son atendidas con el
mismo vector de interrupción. Estas son:
Se desea utilizar una interrupción aprovechando el pin 6 (RB0), del puerto B. Para
lograrlo es necesario, como primera medida, cargar convenientemente el registro TRIS, como
por ejemplo B’ 11110001’, con este binario se configura la pata RB0 como entrada (por el ‘1’
del bit de menor peso del registro TRIS). Todos los pines configurados como entradas,
presentan histéresis en los niveles de tensión (característica SCHMITT-TRIGGER).
Se ordena que desactive las PULL-UP interna, colocando el bit 7 en ‘1’, es decir que,
deberemos conectar resistencias a positivo para no dejar entradas libres. Se ha elegido esta
opción para seleccionar la constante de tiempo que se utilizará, en correspondencia con un
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
capacitor de bajo valor para producir el pulso deseado. Por las características del sensor
utilizado, se supone que nos interesa usar el descendente de la señal para activar la interrupción.
Escribiendo un ‘0’ en el bit 6 del registro OPTION se determina que el flanco sea descendente.
Ver figura 2-9.
Cuando el pin RB0/INT cambie de estado con el flanco descendente, aparecerá un ‘1’
en el bit 1, del registro de control INTCON. Este hecho nos informa del suceso acaecido y es
independiente de que los bits de habilitación estén colocados en ‘l’ ó en ‘0’.
Inmediatamente se comprueba qué valor posee el bit general GIE, si es ‘0’, el micro-
controlador seguirá ejecutando el programa principal, ignorando la interrupción. De ser igual a
‘1’, significa que todas las interrupciones están habilitadas. Además comprueba que el bit INTF
sea igual a ‘1’. De cumplirse esta condición, se estará en presencia de una interrupción que hay
que atender.
El procesador coloca GIE en ‘0’, para evitar que atienda otras interrupciones.
Almacena el contador de programa (STACK) y salta al vector de interrupción en la posición
04h, iniciándose la rutina de servicio. Cumplimentada esta subrutina de servicio, regresará al
programa principal, continuando con el desarrollo normal.
Figura 2-9
Figura 2-10
De la figura 2-10, se muestran los pasos que se deben seguir para habilitar la
interrupción correspondiente a los bits RB4-RB7, del puerto B.
1) Configurar los puertos para que los pines RB4, RB5, RB6 y RB7 actúen
como entrada. Para ello debemos tener la precaución de colocar ‘1’ en los
bits correspondientes del registro TRISB.
2) Se coloca un ‘0’ en el bit 7 del registro OPTION, para aprovechar las
resistencias internas del micro-controlador y utilizarlas como referencias del
teclado.
3) Se coloca un ‘1’ en el bit 3 del registro INTCON, de este modo, con RBIE =
l se activa esta modalidad de interrupción del Puerto B.
4) Recuerde que con la configuración de GIE = l (bit 7 en 1’), se habilitan todas
las interrupciones (caso contrario, se inhiben todas).
Si desea obtener un tiempo de 5rns utilizando el registro TMR0, usaremos como reloj,
un oscilador a cristal de 4MHz. Empleado como temporizador, TMR0 puede contar desde 00h
hasta FFh (255). Para generar una interrupción, debe existir un rebasamiento de este registro,
entonces, la cantidad de ciclos efectivamente contados es de 256. Si cargamos TMR0 con un
valor predeterminado (para este caso 178), la cuenta ya no comenzará desde cero, sino desde
este valor, es decir que, la máxima cantidad de pulsos a contar, será la diferencia entre 256 y el
valor cargado de TMR0. Si se multiplica este número, por el valor del pre-divisor y por el ciclo
de instrucción, se obtendrá el tiempo total en microsegundos.
El pre-divisor se carga con los bits PS0 (1), PS1 (0) y PS2 (l) del registro OPTION.
El reloj/4 es un microsegundo.
Figura 2-11
En la figura 2-12 se puede observar cómo la interrupción por escritura necesita de dos
registros diferentes. En realidad el proceso de lectura y escritura presenta algunas variantes, por
lo que más adelante analizaremos ejemplos más complejos que nos permitan entender en
profundidad este tema.
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
Figura 2-12
Micro-controladores PIC
Set de instrucciones
Set de instrucciones
Cada instrucción, para los PIC 16F84, es un bloque compacto de una palabra de 14
bits. Esto permite codificar en una sola unidad, la orden, el operador y la ubicación ó salto. Los
bits que actúan como datos de la memoria EPROM se reciben en un lugar llamado
decodificador de instrucciones, que trabajando en conjunción con el contador de programa y el
registro W, permiten acceder a lugares muy específicos del micro-controlador. Uno de ellos es
la unidad ALU para las operaciones aritméticas y lógicas.
Todos los bits que conforman por completo la palabra (bloque), son generados por el
ensamblador a partir de la sintaxis y mnemónico de la instrucción.
Figura 3-1
CÓDIGO DE OPERACIÓN: Los seis bits de mayor peso (bits 8 al 13) definen la
operación que va a realizas la instrucción de acuerdo a lo solicitado. Este campo define una
orden que el PIC interpreta que debe ejecutar sobre un operando en particular, cuya dirección la
busca según lo indicado por los bits (0 al 6) de menor peso.
Figura 3-2
Figura 3-3
Figura 3-4
Figura 3-5
Dos de ellas se encargan de imponer, que algún bit en particular de un registro, tome
un valor ‘0’ o ‘1’.
Para su mejor comprensión se ha dibujado una tabla que contiene las instrucciones y
su efecto en la operación.
Tabla 3-1
Las dos primeras instrucciones del diagrama de la tabla 3-1 son de mucha utilidad, ya
que obligan que un bit de un registro cualquiera tome el valor ‘0’ o ‘1’. El estado resultante,
forzado por la instrucción, consiste en que ese bit permanezca en esa condición hasta que una
nueva instrucción altere la misma.
Las dos últimas instrucciones de la Tabla 3-1 son las denominadas de salto
condicional (skip). Según el valor de un bit en particular, ejecutará o saltará la instrucción
siguiente.
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
De aquí en adelante se ofrecen varios ejemplos y la explicación detallada le todas las
instrucciones. Al estudiante adelantado podrá parecerle un tanto simple y hasta elemental. Sin
embargo, el compromiso tomado en la preparación de este libro fue que, a la mayoría de los
alumnos de ciclos básicos de los colegios técnicos o institutos, les resultase accesible su
comprensión.
Figura 3-6
Es decir que, si en ese pin del puerto se hubiese conectado un led a negativo, (a través
de una resistencia), el mismo se encendería, ya que el micro-controlador asume que la acción de
esa instrucción implica elevar la tensión del pin, de ese puerto, a 5Vcc. Figura 4-6.
Figura 3-7
bsf PUERTOB,.3.
bcf EJEMPLO,.2
Esta instrucción coloca un ‘0’ en el bit 2 del registro ó dato EJEMPLO. Veamos los
estados de EJEMPLO antes y después de aplicar la instrucción.
Figura 3-8
Figura 3-9
Es una instrucción de toma de decisiones, es decir que comprueba el estado que tiene
un bit cualquiera (para este caso el bit 3 del registro BANDERA), para luego, en función de ese
estado, realizar un salto, o no.
btfss BANDERA,.7
Esta instrucción realiza un examen del bit 7, para el caso de ser ‘1’ indefectiblemente
se producirá el salto de una instrucción. Si este bit es cero, el contador de programa PC,
ejecutará la siguiente instrucción sin realizar ningún tipo de salto.
• Una ventaja bastante importante que ofrece esta instrucción, es que puede
analizar algún bit de un puerto y observar si en éste se ha producido un
cambio no esperado, para así de este modo, cumplir con otra tarea relacionar.
• Otra particularidad es la posibilidad de examinar cambios en los bits
relacionados con registros internos del micro-controlador, especialmente los
susceptibles a modificarse por ciertas operaciones que se realizan entre
registros.
Este grupo. que maneja registros como operandos, es el más abundante del juego de
instrucciones. Cada operación, realizada mediante este tipo de instrucciones, usualmente hace
referencia indirecta a una dirección, Previamente se debe definir el registro con un nombre y
una dirección muy concreta en la RAM. El conjunto de instrucciones se adjunta en la tabla 3-2.
Tabla 3-2
Se observa a primera vista que la particularidad de esta notación, es que después del
registro F (dato), aparece una coma seguida de una referencia d (destino). A d le podemos
asignar dos valores, 0 ó 1. Si es 0, el resultado de la operación se coloca en el registro W, si en
cambio es 1, el resultado se almacenará en el mismo registro F.
Si bien la instrucción es la misma, puede dar por resultado dos acciones distintas, ya
que el resultado de la operación, dependiendo del valor de d, puede alojarse en dos registros
diferentes. En este grupo de instrucciones, debemos hacer referencia al campo de los
operadores, en efecto nos referiremos siempre, al registro fuente (F) como aquel involucrado en
la operación. El registro destino es aquél en donde se almacenará el resultado de la operación.
Bastará colocar un ‘1’ para alojar el resultado en el registro F. Si colocamos un ‘0’, el resultado
se almacenará en el registro W. Más adelante mediante referencias podremos visualizar mejor
estas condiciones.
addwf DATO,1
addwf DATO,0
Esta operación altera tres bits del registro STATUS, que son C, DC y Z. En formas
generales y para una mayor comprensión, se ofrece un ejemplo.
Como los registros del PIC son de 8 bits, estos pueden contener valores de hasta 255,
por lo cual si se obtiene como resultado un número superior de 255 (se requieren registros de 9
bits ó superior), este se truncará dando un valor incorrecto por resultado, lo cual se indicará con
el bit C = 1.
Como se puede observar en este último caso, el resultado real debería ser de 261
(100000101), pero como los registros son de 8bits el resultado que queda registrado en el
registro W es 5 (00000101).
andwf DATO,1
Esta operación es llamada AND lógica. Su acción consiste en efectuar una AND entre
el contenido del registro F (DATO) y el contenido del registro W (registro de trabajo) y por ser
d = 1, obliga a almacenar el resultado en DATO. Por lo tanto se pierde el contenido anterior de
DATO, no así el contenido de W que permanece invariable.
A B Resultado
0 0 0
0 1 0
1 0 0
1 1 1
clrf REGIS
Esta instrucción borra o limpia el contenido de un registro, es decir, coloca todos sus
bits en cero. El dato del registro REGIS se pone en ‘0’, e inmediatamente el bit Z del registro de
estado (STATUS), se pone en ‘1’.
clrw
Es una instrucción muy similar a la anterior, en efecto borra un registro, pero lo que
realiza es borrar el registro de trabajo W. También activa y coloca un 1’ en el bit Z del registro
STATUS.
comf MEMO,1
Es una instrucción que realiza el complemento de un registro bit a bit, por ser d = 1 el
resultado se almacenará en MEMO. Para el caso de que d = 0, él resultado se guardará en el
registro de trabajo W. Nuevamente la instrucción afecta al bit Z del registro de estado
(STATUS).
Ejemplo.
Cada bit de un registro de 8 bits, se cambia por su complemento. Donde exista un ‘0’
coloca un ‘1’ y viceversa. Observe el siguiente ejemplo:
comf MEMO,0
decf MEMO,1
Figura 3-10.
En el ejemplo de la figura 3-10 se distinguen los dos caminos que puede seguir la
instrucción decfsz. La instrucción decrementa en una unidad el contenido del registro DATO y a
su vez, pregunta si el registro DATO ha llegado a cero. De cumplirse esta condición, salta a la
segunda instrucción, pues el contador de programa se incrementa en dos, omitiendo la
instrucción siguiente (clrw), paso 1. Si el registro no ha llegado a cero, sigue de forma normal
con la instrucción siguiente, paso 2.
incf TIEMPO, 0
incfsz TEMP, 1
Figura 3-11
iorwf NUN, 1
A B Resultado
0 0 0
0 1 1
1 0 1
1 1 1
movf NÚMERO, 0
movf DATO,1
movf DATO,F
movf PRUEBA, 0
movf PRUEA,W
Las instrucciones addwl, subwf, incf, decf y comf son las llamadas instrucciones
aritméticas, por ser realizadas por la ALU.
nop
rlf PILA,1
En este movimiento de bits, participa el Carry (C) del registro STATUS. Por lo tanto
los resultados obtenidos en la rotación, dependerán del estado binario que posea C.
rrf DATO,l
Figura 3-13
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
La instrucción rotación a la derecha, es similar a la de rotación a la izquierda, es decir,
se empujan todos los bits del registro involucrado más el bit C del registro STATUS, en uno u
otro sentido. Podemos decir que el registro y el bit C (en total 9 bits), forman un conjunto en
esta acción de desplazamiento.
Cada vez que se realiza esta operación se debe tener especial cuidado de prefijar el
valor de C, ya que este bit participa de la rotación y modifica el resultado de la operación.
Esta instrucción es muy empleada para manejar teclados matriciales. Se hace rotar un
cero a lo largo de las columnas del teclado, luego al puerto que explora las filas se le realiza una
determinada comparación y se logra ubicar el cero. Desde ese momento se sabe con certeza si se
ha apretado una tecla. Completadas las cuatro rotaciones debemos cargar a C con ‘1’.
subwf CONTADOR, 1
Figura 3-13
swapf MEMO,1
Es una instrucción que realiza el cambio entre los nibbles del registro, es decir que
intercambia los 4 bits de menor peso, por los 4 bits de mayor peso. Permuta mitades de un
registro, tal corno nos muestra la figura 3-14.
Figura 3-14
Cuando esté más familiarizado con los PIC, se dará cuenta de que esta instrucción es
útil, ya que permite implementar contadores de doble efecto. Posibilita incrementar o
decrementar las mitades independientemente teniendo la precaución de no equivocarnos en la
selección de esas mitades o nibbles.
xorwf DATO, 1
Volvamos a escribir un ejemplo muy simple, para así poder evaluar mejor la
instrucción OR.
A B Resultado
0 0 0
0 1 1
1 0 1
1 1 0
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
Realiza una lógica OR exclusiva entre dos números binarios de 8 bits, para que el
resultado de ‘1’, los bits correspondientes deben ser diferentes.
Como regla práctica, se puede decir que, cada vez que los bits del mismo peso sean
iguales, en el resultado aparecerá un cero. Solamente se obtendrá un ‘1’, cuando en las
comparaciones bit a bit, exista una desigualdad. En efecto, a valores iguales, el resultado es
cero. La mayoría de las veces, se la utiliza para comparar cantidades o para saber si el contenido
de un registro ha llegado a un número prefijado, porque la OR exclusiva de dos cantidades
iguales, genera un ‘1’ en el bit Z, del registro STATUS.
Son instrucciones que realizan alguna función con un literal. Figura 3-15.
Figura 3-15
Esta serie de instrucciones son las llamadas literales o inmediatas, ya que realizan una
operación con un valor de 8 bits, que aparece en el formato de la instrucción. El resultado de la
operación se introduce en el registro W.
Son muy útiles, mediante éstas el registro de trabajo realice alguna operación con un
byte constante. El registro destino es aquel en donde se almacena el resultado de la operación.
andlw F1h
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
Esta operación es llamada AND lógico. Consiste en realizar una AND entre el
contenido del registro W (registro de trabajo), con el literal hexadecimal, el resultado queda en
W.
Esta operación altera el bit Z del registro de estado (STATUS). Este bit será ‘1’,
cuando toda la operación se haga cero. Los bits C y DC no intervienen en esta operación lógica.
Esta instrucción, realiza una lógica AND entre dos números binarios de 8 bits, para
que el resultado de una AND dé como resultado ‘1’, los bits que se comparan tendrán que ser
ambos ‘1’. Cualquier cero presente en uno de los bits de igual peso binario en los registros,
obligará un cero como resultado de ese bit.
Lo que sigue es un ejemplo, que el estudiante avanzado podrá sortear, pero para
aquellos sin tanta experiencia, les será de utilidad para entender mejor la instrucción AND.
iorlw F1h
movlw k
sublw k
xorlw F1h
Brevemente se puede afirmar que, si los bits de igual peso son iguales, el resultado de
ese bit es cero. Por esta razón la instrucción es muy útil cuando se desea conocer si algún
registro ha llegado a la cuenta deseada. Sólo bastará comparar una constante (literal) y la cuenta
deseada. El bit Z del registro STATUS será ‘1’, cuando el registro y el literal sean iguales.
Esc.: 4-003 “Ing. Emilio Civit” Profesor: Paulino Martínez
Curso: 6° Año Mat.: Apuntes de Electrónica II
4. OPERACIONES DE CONTROL Y ESPECIALES
call k
Esta es una instrucción que llama a una subrutina. La secuencia de pasos de esta
instrucción es la siguiente:
clrwdt
goto SAI.TO
Es una instrucción que obliga a que el contador de programa salte a una nueva
dirección, realizando una nueva tarea que se le ha encomendado, en otra parte diferente del
programa. También se la llama instrucción de salto incondicional.
retlw k
Esta instrucción está íntimamente relacionada con las subrutinas, dado que nos indica
la terminación de la misma y su retomo inmediato con la carga en W, con un literal que
ubicaremos a la derecha de la instrucción, además carga al.PC con el valor que previamente
almacenó en el STACK. Esta instrucción tarda dos ciclos de instrucción. Siempre es necesario
que W regrese con un valor literal, muchas veces será conveniente colocar retlw O. Es decir que
el registro de trabajo W, regresa con el valor cero.
Una aplicación interesante de la instrucción retlw, es que nos permite retomar con
algún parámetro de la subrutina, que se puede utilizar en el programa principal. Una de las
aplicaciones más útiles consiste en confeccionar tablas a partir de la carga del contador de
programa y retornar con un literal.
sleep
Es una instrucción que detiene todas las funciones del micro-controlador, inclusive el
oscilador, de este modo su consumo disminuye drásticamente. En este estado, no ejecuta
ninguna instrucción más. Además se modifican los bits TO y PD del registro STATUS.
MODOS DE DIRECCIONAMIENTO