Está en la página 1de 95

MICROCONTROLADORES PIC

MANUAL DE MICROCONTROLADORES PIC

CURSO DE INSTRUCTORES

TCNICOS INDUSTRIALES 1 /112


MICROCONTROLADORES PIC

CONTENIDO SINTETICO

Arquitectura interna de los PIC.

Manejo del ensamblador MPLAB .- Programacin de PIC.

Manejo de temporizadores TMR0.

Control de interfaces externos por medio de los puertos de entrada y salida

Interrupciones, reset y recursos auxiliares.

Practica de Laboratorio

Practica de Taller - aplicaciones.

TCNICOS INDUSTRIALES 2 /112


MICROCONTROLADORES PIC

LOS MICROCONTROLADORES
INTRODUCCION A LOS MICROCONTROLADORES.
Un microcontrolador es un Computador completo, pero de limitadas prestaciones, que est
contenido en un solo chip y se destina a gobernar una tarea especfica.
Los PIC de la familia 16Fxx son C de 8 bit.

Los microcontroladores estn conquistando el mundo. Estn presentes en nuestro trabajo, en


nuestra casa y en nuestra vida, en general. Se pueden encontrar controlando el funcionamiento de
los ratones y teclados de los computadores, en los telfonos, en los hornos microondas y los
televisores de nuestro hogar. Pero la invasin acaba de comenzar y el nacimiento del siglo XXI
ser testigo de la conquista masiva de estos diminutos computadores, que gobernarn la mayor
parte de los aparatos que fabricaremos y usamos los humanos

Arquitectura Harvard La arquitectura tradicional:

La arquitectura tradicional de computadoras y microprocesadores se basa en el esquema


propuesto por John Von Neumann, en el cual la unidad central de proceso, o CPU, esta conectada
a una memoria nica que contiene las instrucciones del programa y los datos (figura 1.1.1). El
tamao de la unidad de datos o instrucciones esta fijado por el ancho del bus de la memoria. Es
decir que un microprocesador de 8 bits, que tiene adems un bus de 8 bits que lo conecta con la
memoria, deber manejar datos e instrucciones de una o ms unidades de 8 bits (bytes) de
longitud. Cuando deba acceder a una instruccin o dato de ms de un byte de longitud, deber
realizar ms de un acceso a la memoria. Por otro lado este bus nico limita la velocidad de
operacin del microprocesador, ya que no se puede buscar de memoria una nueva instruccin,
antes de que finalicen las transferencias de datos que pudieran resultar de la instruccin anterior.
Es decir que las dos principales limitaciones de esta arquitectura tradicional son :

a) que la longitud de las instrucciones esta limitada por la unidad de longitud de los datos, por lo
tanto el microprocesador debe hacer varios accesos a memoria para buscar instrucciones
complejas,

b) que la velocidad de operacin (o ancho de banda de operacin) esta limitada por el efecto de
cuello de botella que significa un bus nico para datos e instrucciones que impide superponer
ambos tiempos de acceso.

La arquitectura von Neumann permite el diseo de programas con cdigo automodificable,


prctica bastante usada en las antiguas computadoras que solo tenan acumulador y pocos
modos de direccionamiento, pero innecesaria, en las computadoras modernas.

FIG. Arquitectura Von Newmann

TCNICOS INDUSTRIALES 3 /112


MICROCONTROLADORES PIC

Arquitectura interna
Los microcontroladores PIC utilizan la arquitectura Harvard, la cual separa la memoria de programa de la
memoria de datos. Esto hace que el dispositivo tenga un bus de datos y un bus de memoria de
programa, hecho que permite acceder a ambos simultneamente. En el caso de la memoria de programa
es interna, ya que se encuentra en forma de EPROM o FLASH dentro del propio PIC.

Otra caracterstica reseable es que las instrucciones en los PIC son de 14 bits y no de 8, permitiendo
instrucciones de palabra nica con operacin y operando en la misma palabra.

Esta estructura, acompaada de un pipeline, permite que las instrucciones se ejecuten en un slo ciclo de
reloj, salvo en el caso de saltos/rupturas de programa. Lo que se hace internamente es que mientras se
ejecuta la instruccin actual se carga la siguiente instruccin en el pipeline, con lo que se alcanza una
alta velocidad de ejecucin.

En cuanto a los registros los PIC pueden direccionarse tanto directa como indirectamente. Todos los
registros de funcin especial, incluyendo el contador de programa, estn accesibles en la memoria de
datos y pueden ser operados de cualquier forma y empleando cualquier modo de direccionamiento
(ortogonalizacin).Igualmente, todos los elementos del sistema (temporizadores, puertos de e/s, etc)
estn implementados como registros.

La arquitectura Harvard y sus ventajas:


La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPU
esta conectado a dos memorias por intermedio de dos buses separados. Una de las memorias
contiene solamente las instrucciones del programa, y es llamada Memoria de Programa. La otra
memoria solo almacena los datos y es llamada Memoria de Datos (figura 1.1.2). Ambos buses son
totalmente independientes y pueden ser de distintos anchos. Para un procesador de Set de
Instrucciones Reducido, o RISC (Reduced Instruccin Set Computer), el set de instrucciones y el
bus de la memoria de programa pueden disearse de manera tal que todas las instrucciones
tengan una sola posicin de memoria de programa de longitud. Adems, como los buses son
independientes, el CPU puede estar accediendo a los datos para completar la ejecucin de una
instruccin, y al mismo tiempo estar leyendo la prxima instruccin a ejecutar. Se puede observar
claramente que las principales ventajas de esta arquitectura son:

a) que el tamao de las instrucciones no esta relacionado con el de los datos, y por lo tanto puede
ser optimizado para que cualquier instruccin ocupe una sola posicin de memoria de programa,
logrando as mayor velocidad y menor longitud de programa,

b) que el tiempo de acceso a las instrucciones puede superponerse con el de los datos, logrando
una mayor velocidad de operacin.

Una pequea desventaja de los procesadores con arquitectura Harvard, es que deben poseer
instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario
incluir en los programas, ya que estas tablas se encontraran fsicamente en la memoria de
programa (por ejemplo en la EPROM de un microprocesador).

Arquitectura Harvard

TCNICOS INDUSTRIALES 4 /112


MICROCONTROLADORES PIC

Diagrama de la estructura interna

Diagrama de bloques de los microcontroladores PIC16F628A

Mapas de memoria Memoria Interna (RAM)

El pic16f628a es un microcontrolador de 8 bit, posee una arquitectura RISC avanzada as como


un juego reducido de 35 instrucciones. Este microcontrolador es el remplazo del obsoleto
pic16f84a, los pines del pic16f628a son compatibles con el pic16f84a, as se podran actualizar
proyectos que hemos utilizado con el pic16f84a.

TCNICOS INDUSTRIALES 5 /112


MICROCONTROLADORES PIC

Caractersticas del PIC16F628A:


Datos relevantes:

Caracterstica Propiedad

Memoria de programa 1 KBytes)

Memoria SRAM 224 Bytes

Memoria EEPROM 128 Bytes

Pines de E/S 16

Entradas analgicas (ADC) No

Salidas PWM 2

SPI No

I2C No

USART Si

Temporizadores de 8 Bits 2

Temporizadores de 16 Bits 1

Comparadores 2

Frecuencia mxima: 20 MHz


Oscilador
Oscilador interno de 4 MHz.

Nmero de pines 18

Encapsulado PDIP, SOIC, SSOP, QFN

OTRAS CARACTERSTICAS DEL PIC 16F628A


CPU De alto rendimiento RISC:
velocidades de operacin de DC - 20 MHz
Capacidad de interrupcin
pila de 8 niveles
Modos de direccionamiento directos, indirectos y relativo
35 simples instrucciones de palabra:
- Todas las instrucciones de ciclo nico, excepto las de salto

Caractersticas Especial microcontrolador:


opciones de oscilador externo e interno:
- Precisin de fbrica del oscilador interno de 4 MHz calibrada a 1%
- oscilador de 48 kHz De bajo consumo interno
Modo de ahorro de energa en modo sueo
resistencias programable pul-ups del PORTB
Multiplexado del pin reset / Entrada-pin
Temporizador Watchdog con oscilador independiente para un funcionamiento fiable
Baja tensin de programacin In-Circuit Serial (a travs de dos pines)
Proteccin de cdigo programable

TCNICOS INDUSTRIALES 6 /112


MICROCONTROLADORES PIC

Brown-out reset
Power-on Reset
Power-up Timer y el oscilador de puesta en marcha del temporizador
Amplio rango de funcionamiento de tensin (2.0-5.5V)
Industrial y amplia gama de temperaturas extendidas
Alta durabilidad de la memoria Flash /EEPROM:
- 100.000 ciclos de escritura Flash
- 1.000.000 ciclos de escritura EEPROM
- 40 aos de retencin de datos
De baja potencia Caractersticas:
Corriente en espera:
- 100 nA@2.0V, tpico
Corriente de funcionamiento:
- 12A @ 32 kHz, 2,0 V, tpica
- 120A @ 1 MHz, 2,0 V, tpica
Temporizador Watchdog actual:
- 1A@2.0V, tpico
Timer1 oscilador actual:
- 1.2A @ 32 kHz, 2,0 V, tpica
Doble velocidad del oscilador interno:
- Tiempo de ejecucin seleccionable entre 4 MHz y de 48 kHz
- 4s despertar de un sueo, 3.0V, tpico

En la siguiente figura se muestran los microcontroladores que componen esta serie

TIPOS DE MEMORIA DEL PIC16F628A

Memoria flash: esta memoria es de tipo no voltil en esta memoria ira nuestro programa que
realicemos.

El pic16f628a tiene una capacidad de 2048 words seto se podra traducir a 2048 lneas de cdigo
que podemos escribir en lenguaje assembler para este microcontrolador.

Memoria RAM: esta memoria sirve para guardar datos y variables, esta memoria es de tipo voltil,
es decir perder la informacin cuando desaparezca la alimentacin.

La memoria ram que posee el microcontrolador pic16f628a es de 224 bytes

Memoria eeprom: en una memoria de tipo no voltil de poca capacidad sirve para guardar datos,
aun cuando deje de recibir alimentacin la informacin no se perder.

La memoria eeprom que posee el pic16f628a es de 128 bytes

TCNICOS INDUSTRIALES 7 /112


MICROCONTROLADORES PIC

Tipos de osciladores

El PIC16F627A/628A/648A puede ser operado en ocho diferentes modos de oscilador. RC,


Oscilador con resistencia y condensador (2 modos)
XT, Cristal de cuarzo.
HS, Cristal de alta velocidad
LP, Cristal de baja frecuencia y bajo consumo de potencia.
INTOSC, oscilador interno de precisin de 4mhz (2 modos)
EC, seal externa de entrada de reloj
En la siguiente figura el diagrama de bloques del oscilador

En la siguiente tabla se muestra los valores de los cristales y sus respectivos condensadores de
filtro para el oscilador externo

Al momento de programar un micro se debe especificar que tipo de oscilador se usa.


Internamente la frecuencia del oscilador es dividida por 4, as que si temeos un oscilador de 4
MHz, la frecuencia de trabajo es de 1 MHz, por lo que cada instruccin se ejecuta cada 1 us.

TCNICOS INDUSTRIALES 8 /112


MICROCONTROLADORES PIC

Mapa de memoria del pic16f628a

Como vemos en la siguiente figura el mapa de memoria se encuentra dividida en 4 bancos en


estos bancos se encuentra los registros de control as como tambin la memoria RAM.

Memoria de Programa
La memoria de programa est organizada en palabras de 14 bits y es del tipo FLASH. Esta memoria es
de slo lectura y nicamente se ejecutar el cdigo contenido en ella. El vector de reset se encuentra en
la posicin 0000h y el de interrupciones en la 0004h, por lo que la memoria de usuario se extiende desde
la direccin 0005h.

TCNICOS INDUSTRIALES 9 /112


MICROCONTROLADORES PIC

REGISTROS DE FUNCIONES ESPECIALES.-CAMINO DE LOS DATOS Y REGISTRO W


La figura representa un diagrama simplificado de la arquitectura interna del camino de los datos
en el CPU de los microcontroladores PIC. Este diagrama puede no representar con exactitud el
circuito interno de estos microcontroladores, pero es exacto y claro desde la ptica del
programador. La figura 1.4.1 representa el mismo diagrama para un microprocesador ficticio de
arquitectura tradicional. Se puede observar que la principal diferencia entre ambos radica en la
ubicacin del registro de trabajo, que para los PICs se denomina W (Working Register), y para los
tradicionales es el Acumulador (A).

En los microcontroladores tradicionales todas las operaciones se realizan sobre el acumulador. La


salida del acumulador esta conectada a una de las entradas de la Unidad Aritmtica y Lgica
(ALU), y por lo tanto ste es siempre uno de los dos operandos de cualquier instruccin. Por
convencin, las instrucciones de simple operando (borrar, incrementar, decrementar,
complementar), actan sobre el acumulador. La salida de la ALU va solamente a la entrada del
acumulador, por lo tanto el resultado de cualquier operacin siempre quedara en este registro.
Para operar sobre un dato de memoria, luego realizar la operacin siempre hay que mover el
acumulador a la memoria con una instruccin adicional.

En los microcontroladores PIC, la salida de la ALU va al registro W y tambin a la memoria de


datos, por lo tanto el resultado puede guardarse en cualquiera de los dos destinos. En las
instrucciones de doble operando, uno de los dos datos siempre debe estar en el registro W, como
ocurra en el modelo tradicional con el acumulador. En las instrucciones de simple operando el
dato en este caso se toma de la memoria (tambin por convencin). La gran ventaja de esta
arquitectura es que permite un gran ahorro de instrucciones ya que el resultado de cualquier
instruccin que opere con la memoria, ya sea de simple o doble operando, puede dejarse en la
misma posicin de memoria o en el registro W, segn se seleccione con un bit de la misma
instruccin. Las operaciones con constantes provenientes de la memoria de programa (literales)
se realizan solo sobre el registro W.

En la memoria de datos de los PICs se encuentran ubicados casi todos los registros de control del
microprocesador y sus perifricos autocontenidos, y tambin las posiciones de memoria de usos
generales. En el caso de los 16C5X, algunos registros especiales de solo escritura (TRIS y
OPTION) no estn accesibles dentro del bloque de memoria de datos, sino que solo se pueden
cargar desde el registro W por medio de instrucciones especiales.

TCNICOS INDUSTRIALES 10 /112


MICROCONTROLADORES PIC
PIC 16F628A

N Nombre Tipo Tipo de Descripcin


pin (E/S/A) buffer
16 OSC1/CLKIN E ST/CMOS entrada del cristal oscilador / entrada externa de reloj
(3)
15 OSC2/CLKOUT S - Salida del cristal oscilador. En el modo de oscilacin por
cristal se conecta al cristal o resonador. En modo RC OSC2
proporciona CLKOUT (salida de reloj), que posee 1/4 de la
frecuencia de OSC1, y representa el ciclo de instruccin.
4 MCLR' E/A ST Entrada de reset / entrada de voltaje de programacin. Este
pin es un reset activo a nivel lgico bajo del dispositivo.
17 RA0 E/S TTL PORTA es un puerto de E/S bidireccional
18 RA1 E/S TTL
Puede ser seleccionado tambin para ser la entrada de reloj
1 RA2 E/S TTL
al contador/temporizador TMR0. La salida es de colector
2 RA3 E/S TTL
abierto.
3 RA4/T0CKI E/S ST
6 RB0/INT E/S TTL/ST (1)
PORTB es un puerto de E/S bidireccional que puede ser
7 RB1 E/S TTL
programado para levantar internamente todas las entradas.
8 RB2 E/S TTL
9 RB3 E/S TTL
RB0/INT puede ser seleccionado como un pin de interrupcin
10 RB4 E/S TTL
externa
11 RB5 E/S TTL
12 RB6 E/S TTL/ST (2)
RB4 a RB7 son pines de interrupcin por cambio de estado.
13 RB7 E/S TTL/ST (2)
RB6 es la entrada de reloj de programacin y RB7 la entrada
de programacin serie.

5 Vss A - Referencia de tierra (masa) para todos los pines lgicos de


E/S.
14 Vdd A - Alimentacin positiva para todos los pines lgicos de E/S.

Leyenda y notas:
E=entrada S=salida E/S=entrada/salida A=alimentacin
TTL=entrada TTL ST=entrada Schmitt
(1) Este buffer es una entrada Schmitt cuando se configura como interrupcin externa
(2) Este buffer es una entrada Schmitt cuando se emplea en el modo de programacin serie

TCNICOS INDUSTRIALES 11 /112


MICROCONTROLADORES PIC
(3) Este buffer es una entrada Schmitt cuando se configura en el modo de oscilacin RC y
como entrada CMOS

TEMPORIZANDO

El uso de la temporizacin se usa en casi todas las aplicaciones, semforos,


alarmas, acceso con clave, ascensores, comunicacin, etc
Recordando nuestro programa de encendido de Led o foquito, mencione que este
se apagaba por 2 microsegundos pero que era imposible detectarlo, pues bien en
las siguientes sesiones vamos a temporizar para que el tiempo de apagado sea 1
segundo y de esta manera apreciar la temporizacin
Al igual que teniamos dos registros TRISA y TRISB que configuraban los pines de
los puertos como entradas o salidas. En la temporizacin tenemos el registro
OPTION en el banco 1, que me configurar el registro TMR0 del banco 0, ya sea
como temporizador o contador

OPTION
RPBU# INTEDG TOCS TOSE PSA PS2 PS1 PS0

La medida de tiempo en un micro, est sujeta a tres temas:


Oscilador externo

Registro TMR0

Divisor de Fecuencia
El oscilador externo creo que ya saben pero hago recordar, es el que me define la
velocidad del ciclo de instruccin, y cuando usamos un oscilador de cristal de
cuarzo (XT) de 4Mhz, tenemos 1 microsegundo de ciclo de instruccin
El registro TMR0 esta implementado fsicamente en el pin RA4 del PORTA, este
registro de 8 bits se configura como temporizador para determinar intervalos

concretos de tiempo o como contador de impulsos externos .


EL divisor de Frecuencia, como su nombre lo dice divide la frecuencia de reloj, que
es lo mismo decir que aumenta la duracin de los impulsos de reloj.
La combinacin binaria de los bits PS0, PS1 y PS2, del registro OPTION me
definen el rango del divisor de frecuencias.

PS2 - Divisin Divisin


PS0 TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1 : 16 1:8
100 1 : 32 1 : 16
101 1 : 64 1 : 32
110 1 : 128 1 : 64
111 1 : 256 1 : 128
TCNICOS INDUSTRIALES 12 /112
MICROCONTROLADORES PIC

Frmula para calcular el tiempo

T = CI x TMR0 x DF
CI = Ciclo de instruccin
TMR0 = Valor cargado en este registro.
DF = Rango escogido en el divisor de frecuencia
El valor cargado en el TMR0, es aquel valor que le falta a este registro para que
llegue a 255 (valor mximo para un registro de 8 bits)
EJEMPLO:
Si por software cargo un valor de 125 en el registro TMR0, entonces el valor que
interviene en la frmula es 130, valor que falta para que se desborde (llegue a 255)
el registro TMR0.
Definicin de bits del registro OPTION
Ya hemos defnido los 3 primeros bits PS0, PS1 y PS2 ahora seguimos con el resto:
PSA Bit de asignamiento del predivisor de frecuencia:
0 = Predivisor asignado a TMR0

1 = Predivisor asigando a Watchdog (WDT)


TOSE Bit de seleccin de flanco activo cuando TMR0
es configurado como Contador
0 = Contaje se incrementa cada flanco ascendente
1 = Contaje se incrementa cada flanco descendente
TOCS Bit de selecin de la fuente del clock:
0 = Configura TMR0 como Temporizador
1 = Configura TMR0 como Contador
INTEDG Bit de selecin de flanco activo de interrupcin externa:
0 = flanco descendente
1 = flanco ascendente
RPBU# Resistencias pull - up de la puerta B:
0 = Activadas
1 = Desactivadas
Si ponemos al mximo los valores de la frmula, rango de divisor de 256, TMR0
con 255 y un oscilador de 4 Mhz, obtenemos un valor mximo de temporizacin de
65.28 milisegundos, el cual es un valor evidentemente insuficiente si quiero que mi
pulso dure varios segundos o minutos, tiempo necesario para la mayora de
aplicaciones, como pueden ser, relojes digitales, semforos, etc. la solucin sencilla
es crear un archivo en la RAM y usarlo como archivo auxiliar para lograr la
temporizacin deseada.
Tenemos dos alternativas para alargar tiempos, crear bucles anidados de retardo,
en este caso no se usa el registro TMR0, y la otra alternativa es usando este
registro.
La ventaja de usar este registro es que se pueden generar condiciones de
interrupcin, habilitano el tipo de interrupcin por desbordamiento de registro
TMR0.
La habilitacin de este tipo de interrupcin, se hace mediante el registro INTCON y
sus respectivos bits.

Interrupciones Los 16CXX agregan la posibilidad de contar con sistema de interrupciones. Este
sistema consiste en un mecanismo por el cual un evento interno o externo, asincrnico respecto
del programa, puede interrumpir la ejecucin de ste produciendo automticamente un salto a una

TCNICOS INDUSTRIALES 13 /112


MICROCONTROLADORES PIC

subrutina de atencin, de manera que pueda atender inmediatamente el evento, y retomar luego
la ejecucin del programa exactamente en donde estaba al momento de ser interrumpido. Este
mecanismo es muy til por ejemplo para el manejo de timers o rutinas que deben repetirse
peridicamente (refresh de display, antirebote de teclado, etc.), deteccin de pulsos externos,
recepcin de datos, etc.

Existen de tres a doce eventos que pueden generar interrupciones en los PIC16FXX existentes
hasta el momento, pero nada impide que puedan agregarse ms en versiones futuras.

Funcionamiento
En los 16FXX las interrupciones se comportan casi exactamente igual que las subrutinas. Desde
el punto de vista del control del programa, al producirse una interrupcin se produce el mismo
efecto que ocurrira si el programa tuviese un CALL 0004h en el punto en que se produjo la
interrupcin. En uno de los registros de control del sistema de interrupciones existe un bit de
habilitacin general de interrupciones GIE, que debe ser programado en 1 para que las
interrupciones puedan actuar. Al producirse una interrupcin, este bit se borra automticamente
para evitar nuevas interrupciones. La instruccin RETFIE que se utiliza al final de la rutina de
interrupcin, es idntica a un retorno de subrutina, salvo que adems coloca en uno
automticamente el bit GIE volviendo a habilitar las interrupciones. Dentro de la rutina de
interrupcin, el programa deber probar el estado de los flags de interrupcin de cada una de las
fuentes habilitadas, para detectar cual fue la que causo la interrupcin y as decidir que accin
tomar.

Lgica de interrupciones para los controladores PIC16F8X

MPLAB
El MPLAB, es un entorno integral de desarrollo, provisto por la misma firma Microchip, en el cual
se puede desarrollar un proyecto en asembler y su simulacin.
Incorporando herramientas de software y/o hardware permite que en el mismo entorno se puedan
emular un microcontrolador, programar con lenguaje C y/o grabarlo al PIC con el proyecto que se
realiz.
EL MPLAB le permite a Usted escribir, depurar y optimizar los programas (firmware) de sus
diseos con PIC 16/17. EL MPLAB incluye un editor de texto, un simulador y un organizador de
proyectos. Adems, el MPLAB soporta el emulador PICMASTER y a otras herramientas de
desarrollo de Microchip como el PICSTART - Plus.

TCNICOS INDUSTRIALES 14 /112


MICROCONTROLADORES PIC
De que forma le ayuda el MPLAB ?

Con el MPLAB Usted puede:

Depurar sus programas fuente.

Detectar errores automticamente en sus programas fuente para editarlos.

Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los
registros internos.

Observar el flujo del programa con el simulador MPLAB -SIM, seguirlo en tiempo real
utilizando el emulador PICMASTER.

Realizar medidas de tiempo utilizando un cronmetro.

Mirar variables en las ventanas de observacin.

Encontrar respuestas rpidas a sus preguntas, utilizando la Ayuda en lnea del MPLAB.

LAS HERRAMIENTAS DEL MPLAB

El Organizador de Proyectos (Proyect Manager).

El organizador de proyectos (Proyect Manager) es parte fundamental de MPLAB. Sin crear un


proyecto Usted no puede realizar depuracin simblica. Con el Organizador de Proyectos (Proyect
manager) puede utilizar las siguientes operaciones:

Crear un proyecto.

Agregar un archivo de programa fuente de proyecto.

Ensamblar o compilar programas fuente.

Editar programas fuente.

Reconstruir todos los archivos fuente, o compilar un solo archivo.

Depurar su programa fuente.

Software ensamblador:

El software ensamblador que presenta Microchip viene en dos presentaciones, una, para entorno
DOS llamado MPASM.EXE y la otra, para entorno Windows llamado MPASMWIN.EXE
Las dos presentaciones soportan a TODOS los microcontroladores de la familia PIC de Microchip.

El conjunto de instrucciones de los microcontroladores PIC es en esencia la base del lenguaje


ensamblador soportado por este software.

Directivas de uso frecuente:


Son instrucciones para el compilador.

#DEFINE
ej. #define <nombre> [<valor a remplazar>]
explicacin: declara una cadena de texto como substituto de otra

TCNICOS INDUSTRIALES 15 /112


MICROCONTROLADORES PIC
END
ej. end
explicacin: indica fin de programa

EQU
ej. status equ 05
explicacin: define una constante de ensamble

INCLUDE
ej. include <PIC16F84.h>
explicacin: incluye en el programa un archivo con cdigo fuente

ORG
ej. org 0x100
explicacin: ensambla a partir de la direccin especificada

USO DEL MPLAB


GENERACIN DE UN PROYECTO
Se describe a continuacin la cracin de un proyecto, hasta grabarlo al microcontrolador mediante
un grabador propic o cualquier otro.
Paso 1
Una vez abierto el PMLAB, se abre new file
Paso 2
Una vez abierto new file, se abre save as y se guarda el archivo. Para esto se crea una carpeta en
C , y se guarda con el nombre de la tarea en este caso led.asm

Paso 3
En la ventana Project se ingresa en project Wizard

TCNICOS INDUSTRIALES 16 /112


MICROCONTROLADORES PIC

Paso 4
Al presionar el boton OK de la pantalla Project Wizard se accedea al nuevo proyecto, entonces
pulsar siguiente

Paso 5
Una vez mas se pulsa en siguiente y aparece un menu de tipos de pic, entonces elegir el pic que se
requiera trabajar, en este caso el pic 16f84A.
Otra vez sepulsa siguiente
Paso 6
Una vez que ingresamos a Step Two, tener en cuenta que Active Toolsuite: debe estar en
Microchip MPASM toolsuite, asi mismo Toolsuite Contents.

TCNICOS INDUSTRIALES 17 /112


MICROCONTROLADORES PIC

Paso 7
En el siguiente paso, colocar el nombre de la tarea, en este caso led. Pulsar Browse.

Paso 8
Pulsar Select

TCNICOS INDUSTRIALES 18 /112


MICROCONTROLADORES PIC

Paso 9
Pulsar siguiente, pulsar otra vez siguiente
Seleccionar led.asm y pulsar Add.
Una vez mas pulsar siguiente.- Pulsar finalizar

FUSES DEL PIC 16F628:


BODEN_ON Activado realiza un reset por bajada de tensin
BODEN_OFF Desactivado No realiza reset por baja tensin (Puede ser desactivado para envitar
reseteos no deseados en circuitos con mucha interferia en la linea de tension)

CP_ON Proteccin de cdigo activado (cdigo se refiere a nuestro programa)


CP_OFF Proteccin de cdigo desactivado (ya sea escrito en C, ASM o BASIC)

DATA_CP_ON Proteccin de datos en la memoria eeprom (Activado NO se puede leer)


DATA_CP_OFF Proteccin de datos en la memoria eeprom (Desactivado se puede leer)

PWRTE_ON Al activar se activa un pequeo retardo antes de iniciar el pic. En teora seria
hasta que la tensin se estabilice (5v ).

PWRTE_OFF Si lo desactivamos este fuse el pic empieza funcionar a partir de los 3.3 voltios
sin importar los micro segundos en los cuales una fuente comn llegara
a los 5 voltios

WDT_ON (Watch Dog Timer) Habilitado se activa un temporizador que realiza un reset
WDT_OFF cada cierto tiempo sin importar que linea de cdigo se este ejecutando...

LVP_ON Habilitada la funcin de grabacin serie en baja tensin por RB4/PGM


.
LVP_OFF Desactiva la funcin de bajo voltaje de programacion y RB4/PGM acta
como pin de entrada/salida normal

TCNICOS INDUSTRIALES 19 /112


MICROCONTROLADORES PIC

MCLRE_ON El pin de reset RA5/MCLR acta como pin de reset.


MCLRE_OFF El pin RA5/MCLR acta como entrada nicamente.

ER_OSC_CLKOUT Oscilador con resistencia y condensador externos, con salida de reloj


por RA6

ER_OSC_NOCLKOUT Oscilador exterior R/C sin salida de reloj. RA6 acta como
Entrada/Salida

INTRC_OSC_CLKOUT Oscilador R/C interno, con salida de reloj por RA6, mientras que
RA7 es Entrada/Salida normal

INTRC_OSC_NOCLKOUT Oscilador R/C inetrno, sin salida de reloj. RA6 y RA7 actuan como
Entrada/Salida normal

EXTCLK_OSC Reloj externo, siendo RA7 la entrada, y RA6 actua como Entrada/Salida normal
LP_OSC Cristal o resonador de baja velocidad, para bajar el consumo
XT_OSC Cristal tipico de 4Mhz
HS_OSC Cristal de alta velocidad

BOREN_ON Activado realiza un reset por bajada de tensin


BOREN_OFF Desactivado No realiza reset por baja tensin (Puede ser desactivado para
evitar reinicios del sistema no deseados en circuitos con mucha interferia en la
linea de tension) Este Fuse solo esta presente en 16F628a y 16F648a.
Funciona igual que el fuse BODEN

FUSES DEL PIC 16F628A :


_BODEN_ON = 16f628

_BODEN_OFF = 16f628

_BOREN_ON Es exactamente igual que el BODEN pero con otro termino (pepe = Jose)

_BOREN_OFF se repite el termino BODEN con objeto de mantener la compatibilidad con el 16f628

_CP_ON Proteccion programa activado. El 16f628 tiene otro nombre. No es compatible

_CP_OFF = 16f628

_DATA_CP_ON = 16f628

_DATA_CP_OFF = 16F628

_PWRTE_OFF = 16F628

_PWRTE_ON = 16f628

TCNICOS INDUSTRIALES 20 /112


MICROCONTROLADORES PIC

_WDT_ON = 16F628

_WDT_OFF = 16f628

_LVP_ON = 16F628

_LVP_OFF = 16F628

_MCLRE_ON = 16f628

_MCLRE_OFF = 16F628

_RC_OSC_CLKOUT = _ER_OSC_CLKOUT del 16f628 ; el termino ER es compatible con las 2 versiones

_RC_OSC_NOCLKOUT = _ER_OSC_NOCLKOUT del 16f628

_ER_OSC_CLKOUT = 16f628

_ER_OSC_NOCLKOUT = 16f628

_INTOSC_OSC_CLKOUT = _INTRC_OSC_CLKOUT del 16f628

_INTOSC_OSC_NOCLKOUT = _INTRC_OSC_NOCLKOUT del 16f628

_INTRC_OSC_CLKOUT = 16f628

_INTRC_OSC_NOCLKOUT = 16f628

_EXTCLK_OSC = 16f628

_HS_OSC =16F628

_XT_OSC =16f628

_LP_OSC =16F628

Ejemplo1

__CONFIG _LVP_OFF & _MCLRE_OFF & _BODEN_OFF & _CP_OFF & _PWRTE_ON & _WDT_OFF &

_INTOSC_OSC_NOCLKOUT

Ejmplo2

__CONFIG _MCLRE_ON &_PWRTE_ON& _WDT_OFF & _XT_OSC & _LVP_OFF

ESTRUCTURA DE UN PROGRAMA TIPICO


Antes de intentar programar debes tener claro que todo programa desarrollado en
PIC consta bsicamente de esta estructura:
Definir el Microcontrolador a usar. En esta directiva se especifica el tipo de
microcontrolador que sera utilizado; esto se logra utilizando
LIST=PIC16F84.

TCNICOS INDUSTRIALES 21 /112


MICROCONTROLADORES PIC
Establecer las constantes a utilizar. Las constantes son tiles para
referenciar direcciones de memoria, posiciones de los bits y valores que no
cambiarn a lo largo de todo el programa. Esto se logra utilizando la directiva
"EQU". Si se desea por ejemplo establecer un valor a una constante seria
CONST EQU 1, lo cual le asigna el valor de "1" al registro CONST.
Reservar los espacios en memoria de las variables. Se utiliza para reservar
espacios en memorias para las variables utilizadas en el programa. Se logra
utilizando la directiva denominada "RES". Muy til cuando un registro
cambia su valor durante la ejecucion del programa.
Configurar los puertos. Es necesario establecer si los Bits de cada puerto
sern utilizados como entrada o como salida. Esto se logra utilizando los
registros especiales TRISA y TRISB.
Desarrollar el Programa. Es el verdadero corazn del trabajo que se realiza,
puesto que ac se desarrollan las rutinas que seran ejecutadas por el
microcontrolador.

EL REGISTRO STATUS:
Contiene el estado aritmtico de la ALU, el estado del Reset y los bits para seleccin
de banco.
REGISTRO STATUS
IRP RP1 RP0 TO PD Z DC C

Estado de sus Bit's.


BIT's LE Reset Descripcin
Bit 7-6:
L/E 0 No implementado: 0
IRP-RP1
Bit 5: RP0 1 = Banco 1
L/E 0
Bank Select 0 = Banco 0
Bit 4: TO 1 = Recin encendido, tras CLRWDT, o SLEEP.
L 1
Time-Out 0 = Ocurri un time-out en el WDT
Bit 3: PD 1 = Luego de un Rset, de una instruccin CLRWDT
L 1
Power Down 0 = Tras ejecutar una instruccin SLEEP
Bit 2: Z 1 = El resultado de una operacin lgica o aritmtica es 0.
L/E x
Zero 0 = El resultado es distinto de 0
Bit 1: DC 1 = Acarreo en la suma y no en la resta (4 bit)
L/E x
Digit Carry 0 = Acarreo en la resta y no en la suma (4 bit)
Bit 0: C 1 = Acarreo en la suma y no en la resta (8 bit)
L/E x
Carry 0 = Acarreo en la resta y no en la suma (8 bit)

Uno de los registros mas importantes es el registro STATUS, que tiene una
longitud de 8 Bits. Cada uno de los ocho Bits esta destinado para una funcin
especifica. Por ahora explicaremos bsicamente solo algunos de los bits
pertenecientes al registro STATUS.

Si usted observa la siguiente imagen, podr notar claramente que el Bit No. "0"
es utilizado para almacenar la informacin del CARRY, el Bit No.1 es utilizado para
la bandera de acarreo de dgito "DC", el Bit No. 2 es utilizado para la bandera de
estado cero "Z"; estas son las banderas que hemos explicado anteriormente. El Bit

TCNICOS INDUSTRIALES 22 /112


MICROCONTROLADORES PIC
No. 7, Bit No. 6, Bit No. 4 y el Bit No. 3 seran explicados posteriormente ya que
haremos incapie al Bit No. 5 del registro STATUS denominado RP0.

Ya sabemos que dependiendo de alguna operacin como la suma, las banderas


"C" , "DC" y "Z" son afectadas automticamente segn sea el caso; pero el Bit
numero 5 del registro STATUS lo manipularemos a nuestra voluntad con la finalidad
de decirle al microcontrolador si queremos trabajar en el banco numero "0" o en el
banco numero "1".

La operacin normal del microcontrolador se efecta en el banco "0"; pero


cuando nos cambiamos del banco "0" hacia el banco "1" es para efectuar ciertos
cambios que definen como estarn configurados los puertos del microcontrolador.

En la siguiente imagen se podr observar el registro STATUS y la asignacin que


tienen cada uno de sus ocho Bits.

Ahora volvemos a retomar la Figura 4-2 del mapa de registro del PIC16F84 y
observe que existen algunas diferencias entre el banco "0" y el banco "1"; por
ejemplo tenemos el los registros denominados TRISA, TRISB, EECON1, EECON2,
OPTION. Por ahora lo que queremos que usted pueda observar estas diferencias
entre ambos bancos, entonces si usted necesita accesar al registro TRISA que
solamente se encuentra en el banco "1", obligatoriamente tendra que cambiarse del
banco 0 al banco 1 por medio de las instrucciones del microcontrolador.

Ahora, usted deber saber que debemos accesar al banco 1 solamente para
accesar a los registros que no se encuentran en el banco 0. Una vez accesados
esos registros y a su vez modificados, tendremos que regresar inmediatamente al
banco 0 para que el microcontrolador siga con su tarea asignada en la memoria del
programa.

EDITOR DE TEXTOS: LUGAR DONDE ESCRIBIMOS NUESTROS


PROGRAMAS
Los programas para el microcontrolador debern escribirse en el editor de textos
del MS-DOS o tambin pueden escribirse en el BLOCK DE NOTAS de Windows
indiferentemente. Usted podra localizar este block de notas en INICIO > Accesorios
> Block de Notas.

TCNICOS INDUSTRIALES 23 /112


MICROCONTROLADORES PIC
Dentro del editor de TEXTOS, el programa debera excribise en cuatro
colunnas las cuales cada una de ellas estar destinada para una tarea especfica ya
que cada columna cunple una tarea especfica. Cada una de estas colunnas tienen
siguientes nombres asignados:
No. De la Columna Nombre de la Columna
Columna 1 Etiqueta
Columna 2 Operacion
Columna 3 Operandos
Columna 4 Comentario.

Antes de todo queremos establecer o definir la palabra colunma dentro del


editor de textos ya que esta tiene dos significados diferentes y puede prestarse a

confuciones. Primero, la palabra columna puede ser interpretada como la posicin


del caracter; por ejemplo si el cursor de su pantalla se encuentra totalmente a la
izquierda, se encuentra en la primera columna del editor de textos. Si usted presiona
la barra espaciadora de su teclado, el cursor se desplaza un caracter hacia la derecha
y automaticamente se encontrar en la segunda columna. NO SE CONFUNDA, ya
que esta columna no ser la Columna de Operacin que se seala en la tabla anterior.
Para entenderlo mejor, usted podr definir su primera columna en la posicin del

TCNICOS INDUSTRIALES 24 /112


MICROCONTROLADORES PIC
caracter No. 1, la segunda columna podr ser 10 posiciones a la derecha y no
presisamente en la posicin de caracter No. 2, la tercera columna podr ser 10
posiciones mas a la derecha y asi sucesivamente. La idea es organizar cuatro
columnas independientes con una separacin mnima de un caracter entre una
columna y la otra.

Los programadores utilizan la tecla de tabulacion para desplazarse a travs de


las cuatro culumnas. Lo mas prctico es utilizar el tabulador para establecer las
posiciones de las columnas. Si usted se ubica totalmente a la derecha, se encontrar
en la columna No. 1 del editor la cual representa la columna de las etiquetas, usted
podra presionar la tecla de tabulador dos veces y desde ah definir la columna de
operacin. El ensamblador de programa la cual estar encargado de interpretar los
comandos escritos en el block de notas, sabra reconocer facilmente la columnas que
usted defini.

Cada una de las columnas tienen su reglas generales, a continuacin


mencionamos y explicaremos cada una de ellas.
LAS ETIQUETAS:
Las etiquetas tienen algunas reglas obligatorias que deberan cumplirse:
Debe comenzar exactamente en la columna 1 del editor de textos.
La etiqueta no podr tener mas de 31 caracteres.
La etiqueta podr estar conformada por caracteres alfa numricos.
OPERACION:
En esta columna se escriben cualquiera de las 35 instrucciones del microcontrolador
PIC16F84.
OPERANDOS:
Los operandos son los registros en donde se realizan las operaciones y los
registros son los espacios de memoria donde se almacenarn los resultados de las
operaciones. Este registro puede ser una memoria de datos o un registro constante
que hemos denominado en el CAPITULO II como un literal.
COMENTARIOS:
En esta columna se escriben los comentarios que explican la idea de lo que esta
haciendo el programa; El ensamblador ignora esta linea en el momento de generar
los codigos necesarios para el microcontrolador PIC16F84.
Tambien se podran agregar comentarios al programa desde la columna No. 1
del editor de textos; pero deberan comenzar con el smbolo " ; "

TCNICOS INDUSTRIALES 25 /112


MICROCONTROLADORES PIC

Puertos de entrada / salida Los microprocesadores PIC16C5X tienen dos o tres puertos de
entrada/salida paralelo de usos generales llamados Puerto A, Puerto B y Puerto C. El Puerto A es
de cuatro bits y los dems son de 8 bits cada uno. El Puerto C solamente esta disponible en el
16C55 y el 16C57.

Circuito equivalente .-El circuito equivalente de un bit cualquiera de un puerto de entrada salida
es el siguiente

Circuito equivalente de puerto I/O

El latch L1 corresponde a un bit del registro de datos del puerto, mientras que L2 es un bit del
registro de control de tristate del mismo. B1 es el buffer tristate de salida que tiene capacidad de
entregar 20 mA y drenar 25 mA. B1 es controlado por L2. Si L2 tiene cargado un 1, B1 se
encuentra en tri-state, es decir con la salida desconectada (en alta impedancia), y el puerto puede
ser usado como entrada. Si L2 tiene cargado un 0, la salida de B1 esta conectada (baja
impedancia) y el puerto esta en modo de salida. B2 es el buffer de entrada, es decir el que pone
los datos en el bus interno del microcontrolador cuando se lee el registro de datos del puerto.
Puede verse que el dato ledo es directamente

TCNICOS INDUSTRIALES 26 /112


MICROCONTROLADORES PIC
Lgica de interrupciones para los controladores PIC16F8X

Fuentes
La seal que produce la interrupcin es en realidad una sola, que resulta de la combinacin de
todas las fuentes posibles y de los bits de habilitacin. Existen dos grupos de fuentes, unas que se
habilitan con solo colocar en uno el bit GIE, y otras que adems necesitan que este puesto a uno
el bit PEIE. En algunas versiones de los 16CXX solo existe el primer grupo. Adems, cada fuente
de interrupciones tiene su respectivo bit de habilitacin individual.

Las fuentes de interrupcin varan con cada versin, y pueden ser por ejemplo:

Interrupcin externa por pin RB0/INT


Desborde del Timer 0 o RTCC
Cambio en el estado de los bits 4 a 7 del puerto B
Desborde del timer 1
Desborde del timer 2
Interrupcin del capture/compare 1
Interrupcin del capture/compare 2
transmisin o recepcin de un caracter por la interface serie sincrnica
transmisin o recepcin de un caracter por la interface serie asincrnica
Fin de conversin A/D
Lectura/escritura del puerto paralelo de comunicacin con otros microprocesadores
Escritura de EEPROM finalizada
Programa fuente:
El programa fuente esta compuesto por una sucesin de lneas de programa. Cada lnea de
programa esta compuesta por 4 campos separados por uno o ms espacios o tabulaciones. Estos
campos son:

[Etiqueta] Comando [Operando(s)] [;Comentario]

La etiqueta es opcional. El comando puede ser un mnemnico del conjunto de instrucciones. El


operando esta asociado al comando, si no hay comando no hay operando, e inclusive algunos
comandos no llevan operando. El comentario es opcional para el compilador aunque es buena
prctica considerarlo obligatorio para el programador.

La etiqueta, es el campo que empieza en la primer posicin de la lnea. No se pueden insertar


espacios o tabulaciones antes de la etiqueta sino ser considerado comando. Identifica la lnea de
programa haciendo que el compilador le asigne un valor automticamente. Si se trata de una lnea
cuyo comando es una instruccin de programa del microcontrolador, se le asigna el valor de la
direccin de memoria correspondiente a dicha instruccin (location counter). En otros casos se le
asigna un valor de una constante, o la direccin de una variable, o ser el nombre de una
macroinstruccin, etc.

El comando puede ser un cdigo mnemnico de instruccin del microcontrolador, o una directiva o
pseudoinstruccin para el compilador. En el primer caso ser directamente traducido a cdigo de
maquina, en el segundo caso ser interpretado por el compilador y realizara alguna accin en
tiempo de compilacin como ser asignar un valor a una etiqueta, etc.

El campo de parmetros puede contener uno o ms parmetros separados por comas. Los
parmetros dependen de la instruccin o directiva. Pueden ser nmeros o literales que
representen constantes o direcciones.

El campo de comentario debe comenzar con un caracter punto y coma. El compilador ignora todo
el texto que contenga la lnea despus de un caracter punto y coma

TCNICOS INDUSTRIALES 27 /112


MICROCONTROLADORES PIC

NOTACIONES

.: NOTACION PARA NUMEROS

Decimal : D'100' .100


Hexadecimal : H'64' 0x64 64
Octal : O'144'
Binario : B'01101100'
ASCII : A'C' 'C'

.: NOTACION PARA REGISTROS Y LITERALES


w : Registro W, similar al acumulador, es el registro de trabajo.
f : Campo de 5 bits (fffff), contiene la direccin del banco de registros, que ocupa el banco
0 del rea de datos. Direcciona uno de esos registros.
k : Representa una constante de 8 bits.
d : Bit del cdigo OP de la instruccin. Selecciona el destino donde se guarda el resultado de
una operacin. Si d=0, el destino es W, y si d=1 el destino es f.
b : Determina la posicin de un bit dentro de un registro de 8 bits, (o sea, tomar valores
entre 0 y 7)

.: SIMBOLOS

[] : Opciones.
() : Contenido.
=> : Se asigna a ...
<> : Campo de bits de un registro.
E : Pertenece al conjunto ...
Label : Nombre de la etiqueta.
TOS : Cima de la pila con 8 niveles en la gama media.
PC : Contador de programa que direcciona la memoria de instrucciones

.: FLAGS
Los Flags o banderas son marcadores, representados por bits dentro del registro STATUS, y son:
Z : Flag de cero, se pone a 1 cuando una operacin lgica o aritmtica da 0 (cero)como
resultado. En cualquier otro caso se pone a 0.
C : Flag de Carry, se pone a 1 cuando la operacin que le afecta sobrepasa el nivel de
representacin del procesador, en nuestro caso es de 8 BIT's , de esta manera si sumamos a
0b11111111 un 0b00000011 el resultado sera 0b00000010 y el BIT de Carry pasara a 1.
DC : Flag de carry del nibble inferior, este se comporta igual que el BIT de Carry, solo que
el lmite de representacin son los 4 bits inferiores, de esta manera si tenemos 0b00001111 y
sumamos 0b00000111, el resultado ser 0b00010110 y el BIT de DC se pone a 1, el BIT de
Carry estar a 0 al no superarse los 8 bits y el de Z a 0 al ser el nmero diferente de 0.

TCNICOS INDUSTRIALES 28 /112


MICROCONTROLADORES PIC

CONJUNTO DE INSTRUCCIONES DEL PIC16F628A:


El microcontrolador PIC16F628A, dispone de un total de 35 instrucciones de
una sola palabra que usted podr aprenderse muy fcilmente. Nuestro curso va
orientado a entender y programar el PIC16F628A de una manera sencilla y rpida
por lo que explicaremos a continuacin el conjunto de instrucciones, su significado,
modo de operacin y traduccin.

Las instrucciones tienen algunas letras que van relacionadas y que tienen cierta
interpretacin. Por ejemplo la letra "W" es el registro mas importante que tiene el
microcontrolador y es denominado ACUMULADOR. En este registro todas las
operaciones pasan a travs de el.
No. Instruccin Descripcin Observacin
Esta instruccin suma el contenido de un registro
Sumar W + especfico al contenido del registro de "W" donde
1 ADDWF f,d
f "f" puede ser un registro cualquiera con un
determinado valor.
Por ejemplo: Si el contenido de "W" antes de ejecutar la instruccin tena un valor
de 20 y el registro "f" tiene un valor de 5, en el momento que se ejecuta la
instruccin el resultado obtenido es 25.

Ahora aprovechamos en esta primera instruccin de explicar el significado que


tiene la letra "d" en la instruccin (ADDWF f,d). Una vez finalizada la instruccin, el
resultado podr ser almacenado directamente en el acumulador "W" o en el registro
"f" para ello se utiliza la letra "d" en el cual podr escribirse "0" o "1"; si la letra
d=0el resultado de la operacin se ubicar en el registro "W"; por otro lado si d=1 el
resultado de la operacin se ubicar en "f".

Hagamos un ejemplo sencillo y supongamos que W=4 y f = 3 antes de ejecutar la


instruccin:

Si escribimos la instruccin de la siguiente manera: ADDWF f,0 significa que el


contenido del registro "f=3" se sumar con el contenido del registro "W=4" y el
resultado se alojar en el acumulador "W" tomando el valor de "W=7"; el registro "f"
mantendr su valor "f=3".

Ahora si la instruccin esta escrita as: ADDWF f,1 significa que el contenido del
registro "f=3" se sumar con el contenido del registro "W=4" y el resultado se
alojar en el registro "f" tomando el valor de "f=7"; el acumulador mantendr su
valor "W=4".

Esta explicacin de la letra "d" ser valida de igual manera para todas las
instrucciones que contengan este parmetro.

Otro punto importante esta referido a la letra "f" la cual puede ser cualquier
nombre y no especficamente la letra "f"; por ejemplo ADDWF regist,1 donde regist
es un registro de uso general de la memoria RAM.
No. Instruccin Descripcin Observacin
Operacin Esta instruccin realiza una operacin lgica
2 ANDWF f,d
lgica AND "AND" entre el registro"W" y el registro "f".
El microcontrolador PIC16F84 puede realizar una operacin AND entre dos
registros.

TCNICOS INDUSTRIALES 29 /112


MICROCONTROLADORES PIC

Para explicar mejor la operacin AND, supongamos que tenemos un bit A y un bit
B que deseamos comparar; entonces tenemos las siguientes alternativas
combinaciones entre los dos bits:
ENTRADA RESULTADO
A B Y = A.B
0 0 0
0 1 0
1 0 0
1 1 1
Se puede observar claramente que solamente para la condicin de que A=1 Y
B=1 tendremos 1 en el resultado; de all el nombre de la operacin AND donde
dice: "Si A=1 y B=1 entonces la salida ser 1". Esta explicacin es vlida para
cada uno de los Bits entre dos registros.

Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000


antes de ejecutar la instruccin ANDWF f,d:
RESULTAD
ENTRADA
O
W f W.f
Bit 7 0 1 0
Bit 6 0 1 0
Bit 5 0 1 0
Bit 4 0 1 0
Bit 3 1 0 0
Bit 2 1 0 0
Bit 1 1 0 0
Bit 0 1 0 0

El microcontrolador procede a comparar cada uno de los ocho bits que


conforman a W y a f. Esta comparacin es realizada con cada bit perteneciente a
su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente
hasta llegar al Bit No 0. Se puede observar que en ninguno de los ocho Bits de los
registros "W" y "f" se obtuvo la condicin de "1 Y 1" por lo que todos los bits
resultantes fueron cero (0).

En nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de


ejecutar la instruccin ANDWF f,d tenemos:
ENTRADA RESULTADO
W f W.f
Bit 7 0 0 0
Bit 6 1 0 0
Bit 5 1 1 1
Bit 4 1 0 0
Bit 3 0 1 0
Bit 2 0 0 0
Bit 1 1 0 0
Bit 0 1 1 1

TCNICOS INDUSTRIALES 30 /112


MICROCONTROLADORES PIC

Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y
el registro "f" y podemos observar que tan solo el Bit No. 5 y el Bit No. 0 cumplen
con la condicin AND; los dems Bits dan como resultado cero.
No. Instruccin Descripcin Observacin
3 ANDLW k Operacin lgica AND entre un literal y W
Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el
mismo procedimiento pero con ciertas diferencias. La instruccin ANDLW k significa
que el microcontrolador realiza una operacin lgica AND entre el registro "W" y el
contenido del literal "k", donde "k" es un literal que puede contener cualquier valor
entre 0 y 255 asignado por el programador.

Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya


que este es colocado directamente en en registro "W" y no existir la posibilidad de
colocarlo en el registro "k".

No. Instruccin Descripcin Observacin


Borra
3 CLRF f Esta instruccin borra un registro especifico.
registro
El microcontrolador puede borrar un registro "f" cargndolo con el valor "00".
Supongamos que tenemos un registro denominado regist = 54 antes de ejecutar la
instruccin. Despus de ejecutada la instruccin el valor de regist = 00.

No. Instruccin Descripcin Observacin


Borra el
4 CLRW Esta instruccin borra el registro "W" solamente
registro W
Cuando se ejecuta esta instruccin, el microcontrolador borra el registro "W"
cargndolo con "00".

No. Instruccin Descripcin Observacin


Complemen
5 COMP f,d ta el Esta instruccin complementa el registro "f"
registro f
Desde el punto de vista de los nmeros binarios, supongamos que tenemos un
registro "f" denominado regist = 00111011; cuando es aplicada la instruccin
tenemos que los 0 cambian a valores 1 y los valores 1 cambian a 0 obtenindose
un registro invertido. El resultado ser 11000100..

No. Instruccin Descripcin Observacin


Decrementa Esta instruccin decrementa en una sola unidad
6 DECF f,d
un registro f el registro "f".
Esta instruccin le decrementa en una sola unidad el registro "f". Por ejemplo si
nuestro registro denominado regist = 5; cuando se aplica la instruccin DECF f,0 el
resultado ser W=4. Por el contrario, si aplicamos la instruccin DECF f,1 el
resultado ser regist = 4.

TCNICOS INDUSTRIALES 31 /112


MICROCONTROLADORES PIC

No. Instruccin
Descripcin Observacin
Decrementa y Esta instruccin decrementa en una sola unidad
7 DECFSZ f,d si es igual a el registro "f" en la cual si el registro "f" es igual
cero salta. a cero entonces salta a una instruccin
Esta instruccin esta estrechamente relacionada con las dos siguientes
instrucciones dentro del programa. Veamos el siguiente ejemplo:
INSTRUCCIN 1 DECFSZ f,d
INSTRUCCIN 2 IR A OTRA DIRECCIN
INSTRUCCIN 3 SUMAR DOS NMEROS
La instruccin DECFSZ f,d funciona de la siguiente manera: Primero decrementa
en una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el
resultado es "0" se ejecuta la instruccin numero 3; pero si el resultado es diferente
de cero, se ejecuta la instruccin numero 2

No. Instruccin Descripcin Observacin


Incrementa el
Esta instruccin incrementa en una sola unidad
8 INCF f,d registro "f" en
el registro "f".
una unidad
Supongamos que el registro " f = 45 "; cuando se le aplica el comando INCF f,0 se
incrementa en una unidad el numero 45 y el resultado es colocado en "W = 46 ". Si
aplicamos el comando INCF f,1 se incrementa en una unidad el numero 45 y el
resultado es colocado en el registro "f = 46"

No. Instruccin Descripcin Observacin


incrementa y Esta instruccin incrementa en una sola unidad
9 INCFSZ f,d si es igual a el registro "f" en la cual si el registro "f" es igual
cero salta. a cero entonces salta a una instruccin
Esta instruccin esta estrechamente relacionada con las dos siguientes
instrucciones dentro del programa. Veamos el siguiente ejemplo:
INSTRUCCIN 1 INCFSZ f,d
INSTRUCCIN 2 IR A OTRA DIRECCIN
INSTRUCCIN 3 SUMAR DOS NMEROS
La instruccin INCFSZ f,d funciona de la siguiente manera: Primero incrementa en
una sola unidad el registro "f"; de all pueden suceder dos condiciones. Si el
resultado es "0" se ejecuta la instruccin nmero 3; pero si el resultado es diferente
de cero, se ejecuta la instruccin nmero 2

No. Instruccin Descripcin Observacin


Se aplica un Esta instruccin aplica una operacin lgica
10 IORWF f,d
OR Inclusivo llamada OR INCLUSIVO entre dos registros.
El microcontrolador PIC16F84 puede realizar una operacin OR INCLUSIVO
entre dos registros.

Para explicar mejor la operacin OR INCLUSIVO, supongamos que tenemos un


bit A y un bit B que deseamos comparar; entonces tenemos las siguientes
alternativas combinaciones entre los dos bits:

TCNICOS INDUSTRIALES 32 /112


MICROCONTROLADORES PIC

ENTRADA RESULTADO
A B Y=A+B
0 0 0
0 1 1
1 0 1
1 1 1
Se puede observar claramente si A=1 o B=1 independientemente, el resultado
ser 1; lo cual quiere decir que solamente cualquiera de los dos registros podr
tener valor 1 para que su resultado sea 1.

Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000


antes de ejecutar la instruccin IORWF f,d:
RESULTAD
ENTRADA
O
W f W+f
Bit 7 0 1 1
Bit 6 0 1 1
Bit 5 0 1 1
Bit 4 0 1 1
Bit 3 1 0 1
Bit 2 1 0 1
Bit 1 1 0 1
Bit 0 1 0 1
El microcontrolador procede a comparar cada uno de los ocho bits que conforman a
W y a f. Esta comparacin es realizada con cada bit perteneciente a su posicin; es
decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente hasta llegar al
Bit No 0. Podemos observar claramente que el resultado en todos los Bits es 1 ya
que cualquiera de los dos registros ( W o f ) contiene un 1

en nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes de


ejecutar la instruccin IORWF f,d tenemos:

ENTRADA RESULTADO
W f W.f
Bit 7 0 0 0
Bit 6 1 0 1
Bit 5 1 1 1
Bit 4 1 0 1
Bit 3 0 1 1
Bit 2 0 0 0
Bit 1 1 0 1
Bit 0 1 1 1
Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W"
y el registro "f" y podemos observar que tan solo el Bit No. 7 y el Bit No. 2 no
cumplen con la condicin OR; los dems Bits dan como resultado 1.

TCNICOS INDUSTRIALES 33 /112


MICROCONTROLADORES PIC

No. Instruccin Descripcin Observacin


Operacion Operacin lgica entre el registro "W" y un literal
27 IORLW k
IOR "k"
Esta instruccin, al igual que la instruccin explicada anteriormente, ejecuta el
mismo procedimiento pero con ciertas diferencias. La instruccin IORLW k significa
que el microcontrolador realiza una operacin lgica OR entre el registro "W" y el
contenido del literal "k", donde "k" es un literal que puede contener cualquier valor
entre 0 y 255 asignado por el programador.

Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya


que este es colocado directamente en en registro "W" y no existir la posibilidad de
colocarlo en el registro "k".

No. Instruccin Descripcin Observacin


Mueve el
Esta instruccin mueve el contenido del registro
11 MOVF f,d contenido del
"f" en el mismo registro "f" o en "W".
registro "f"
Esta instruccin tiene la finalidad de mover el contenido del registro "f" en el
mismo registro "f" o hacia el registro "W". Por ejemplo si aplicamos el comando
MOVF f,0 tan solo mueve el contenido del registro que se encuentra en "f" hacia el
acumulador "W"; por otro lado si aplicamos el comando MOVF f,1 se mueve en
contenido del registro "f" en el mismo registro "f". En este ltimo punto, usted podra
preguntarse para qu se necesita mover el contenido de un registro y volverlo a
colocar dentro del mismo registro? La respuesta estriba en que cuando se ejecuta
esta instruccin cambia una bandera dentro de la arquitectura del microcontrolador.
Estas banderas sern explicadas posteriormente.

No. Instruccin Descripcin Observacin


Esta instruccin no ejecuta ningn tipo de
12 NOP No opera
accin.
La instruccin NOP no ejecuta ninguna tarea especfica, pero consume 4 ciclos de
reloj completos. Cierta utilidad que le hemos encontrado a esta instruccin
especficamente esta referida a las rutinas de tiempo. Algunas veces hemos creado
algunas rutinas de tiempo que requieren exactitud en la temporizacion y en algunos
casos cuando estn siendo ejecutadas le suele faltar algunos ciclos de reloj
adicionales para que sean exactas; es all en donde debemos agregar algunas
instrucciones NOP.

No. Instruccin Descripcin Observacin


Rotacin a la Esta instruccin rota a la izquierda todos los bits
13 RLF f,d
Izquierda de un registro "f".
Esta Instruccin esta muy relacionada con la bandera denominada Carry
perteneciente al registro STATUS. La bandera Carry esta afectada directamente por
varias instrucciones de las cuales podemos mencionar: Rotacin a la izquierda,
Rotacin a la derecha, Suma, Resta, etc.

Por ejemplo, supongamos que nuestro registro " f = 00001111 " y que la bandera
CARRY tienen un 0; cuando se aplica el comando RLF f,0 todos los nmeros del

TCNICOS INDUSTRIALES 34 /112


MICROCONTROLADORES PIC
registro "f" se desplazan hacia la izquierda. El valor lgico que se encuentra en la
bandera CARRY es colocado en el Bit No. 0 y el Bit No. 7 es colocado en la

bandera CARRY. El resultado de nuestro ejemplo sera: f = 00011110. y CARRY


seria 0. El orden lgico de los Bits lo tenemos definidos as:
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 0 0 0 1 1 1 1
Aplicamos la Instruccin RLF f,d
0 0 0 1 1 1 1 0

No. Instruccin Descripcin Observacin


Rotacin a la Esta instruccin rota a la Derecha todos los bits
14 RRF f,d
Derecha de un registro "f".
Al igual que la instruccin anterior, esta muy relacionada con la bandera
denominada Carry perteneciente al registro STATUS. La bandera Carry esta
afectada directamente por varias instrucciones de las cuales podemos mencionar:
Rotacin a la izquierda, Rotacin a la derecha, Suma, Resta, etc. Posteriormente
explicaremos las banderas.

Por ejemplo, supongamos que nuestro registro " f = 00001111 " y que la bandera
CARRY tienen un 0; cuando se aplica el comando RRF f,0 todos los nmeros del
registro "f" se desplazan hacia la derecha. El valor lgico que se encuentra en la
bandera CARRY es colocado en el Bit No. 7 y el Bit No. 0 es colocado en la bandera
CARRY. El resultado de nuestro ejemplo sera: f = 00000111. y CARRY seria 1. El
orden lgico de los Bits lo tenemos definidos as:
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 0 0 0 1 1 1 1
Aplicamos la Instruccin RLF f,d
0 0 0 0 0 1 1 1

No. Instruccin Descripcin Observacin


Resta el contenido del registro "W" del registro
15 SUBWF f,d Resta W de f
"f"
El microcontrolador PIC16F84 puede restar el contenido del registro "W" del
registro "f"; por ejemplo, supongamos que "W = 4 " y Dato1 = 6; cuando se aplica el
comando SUBWF Dato1,0 se resta 6-4 y el resultado es almacenado en el
acumulador "W". Por otro lado si se aplica el comando SUBWF Dato1,1 se resta 6-
4 y el resultado es colocado en el registro Dato1.

No. Instruccin Descripcin Observacin


Resta el contenido del registro "W" de un literal
33 SUBLW k Resta W de k
"k"
Al igual que la instruccin anterior, este resta el contenido del registro "W" de un
literal "k" donde "k" es una palabra cualquiera con un valor entre 0 y 255. El
resultado de la operacin es colocado directamente en el registro "W".

No. Instruccin Descripcin Observacin


Intercambio Se intercambian los 4 bits mas altos con los 4
16 SWAPF f,d
de Bits bits mas bajos

TCNICOS INDUSTRIALES 35 /112


MICROCONTROLADORES PIC
Este comando tan solo intercambia los cuatro bits mas altos con los cuatro bits
mas bajos. Supongamos por ejemplo que tenemos el siguiente nmero binario
almacenado en "f = 00001111"; cuando es aplicado el comando SWAPF f,0 el
microcontrolador intercambia los bits altos por los bits bajos de la siguiente forma:

11110000; el resultado es colocado en el acumulador "W". Por otro lado cuando es


aplicado el comando SWAPF f,1 el microcontrolador intercambia los bits altos por
los bits bajos de la siguiente forma: 11110000; el resultado es colocado en el
acumulador "f".

No. Instruccin Descripcin Observacin


Operacin
Este comando aplica la operacin lgica de OR
17 XORWF f,d lgica OR
Exclusivo a dos registros.
exclusivo
El microcontrolador PIC16F84 puede realizar una operacin OR EXCLUSIVO
entre dos registros.

Para explicar mejor la operacin OR EXCLUSIVO, supongamos que tenemos un


bit A y un bit B que deseamos comparar; entonces tenemos las siguientes alternativas
combinaciones entre los dos bits:
ENTRADA RESULTADO
A B Y = A xor B
0 0 0
0 1 1
1 0 1
1 1 0
Se puede observar claramente si ambos registros son iguales el resultado ser 0;
pero si ambos registros son diferentes entonces el resultado ser 1.

Hagamos un ejemplo sencillo y supongamos que W= 00001111 y f = 11110000


antes de ejecutar la instruccin XORWF f,d:
RESULTAD
ENTRADA
O
W f W+f
Bit 7 0 1 1
Bit 6 0 1 1
Bit 5 0 1 1
Bit 4 0 1 1
Bit 3 1 0 1
Bit 2 1 0 1
Bit 1 1 0 1
Bit 0 1 0 1
El microcontrolador procede a comparar cada uno de los ocho bits que
conforman a W y a f. Esta comparacin es realizada con cada bit perteneciente a
su posicin; es decir, el bit No. 7 de"W" con el Bit No. 7 de "f" y as sucesivamente
hasta llegar al Bit No 0. Podemos observar claramente que el resultado en todos
los Bits es 1 ya que cualquiera de los dos registros ( W y f ) contienen Bits
diferentes.

TCNICOS INDUSTRIALES 36 /112


MICROCONTROLADORES PIC
En nuestro segundo ejemplo tenemos que W = 01110011 y f = 00101001 antes
de ejecutar la instruccin XORWF f,d tenemos:

ENTRADA RESULTADO
W f W.f
Bit 7 0 0 0
Bit 6 1 0 1
Bit 5 1 1 1
Bit 4 1 0 1
Bit 3 0 1 1
Bit 2 0 0 0
Bit 1 1 0 1
Bit 0 1 1 0

Al igual que el caso anterior, el microcontrolador compara Bit a Bit el registro "W" y
el registro "f" y podemos observar que tan solo el Bit No. 7, el Bit No. 2 y el Bit 0
cumplen con la condicin OR EXCLUSIVO; los dems Bits dan como resultado 1.

No. Instruccin Descripcin Observacin


Operacin lgica XOR entre el registro W y el
34 XORLW k
literal "k"
Esta instruccin al igual que la instruccin explicada anteriormente ejecuta el
mismo procedimiento pero con ciertas diferencias. La instruccin XORLW k
significa que el microcontrolador realiza una operacin lgica OR EXCLUSIVO
entre el registro "W" y el contenido del literal "k", donde "k" es un literal que puede
contener cualquier valor entre 0 y 255 asignado por el programador.

Otra diferencia con respecto a la instruccin anterior esta referido al resultado ya


que este es colocado directamente en en registro "W" y no existir la posibilidad de
colocarlo en el registro "k".

No. Instruccin Descripcin Observacin


Coloca en
Cero un Este comando pone en Cero el Bit "b" del
18 BCF f,b
determinado registro "f"
Bit
Para este tipo de instrucciones pensamos que el mejor ejemplo que podemos
sealar esta basado visualmente en un nmero binario. Cuando se aplica el
comando BCF f,b el microcontrolador pone en cero el Bit "b" del registro "f". Para
entenderlo mejor observemos el siguiente ejemplo:

Supongamos que tenemos un registro de ocho bits llamado Memory = 01010101.


Si se aplica el comando BCF Memory,2 quiere decir que al registro Memory en la
posicin del Bit No. 2 se le cargara un valor cero.

Ejemplo 1

TCNICOS INDUSTRIALES 37 /112


MICROCONTROLADORES PIC
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 1 0 1 0 1 0 1
Aplicamos la Instruccin BCF Memory,2
0 1 0 1 0 0 0 1

Ejemplo 2
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
1 1 1 1 1 1 1 1
Aplicamos la Instruccin BCF Memory,2
1 1 1 1 1 0 1 1

No. Instruccin Descripcin Observacin


Coloca en uno
Este comando Pone en 1 el Bit "b" del registro
19 BSF f,b determinado
"f"
Bit
Al igual que la instruccin anterior pensamos que el mejor ejemplo que podemos
sealar esta basado visualmente en un nmero binario. Cuando se aplica el
comando BSF f,b el microcontrolador pone en 1 el Bit "b" del registro "f". Para
entenderlo mejor observemos el siguiente ejemplo:

Supongamos que tenemos un registro de ocho bits llamado Memory = 01010101.


Si se aplica el comando BSF Memory,3 quiere decir que al registro Memory en la
posicin del Bit No. 3se le cargara un valor 1.

Ejemplo 1
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 1 0 1 0 1 0 1
Aplicamos la Instruccin BCF Memory,3
0 1 0 1 1 1 0 1
Ejemplo 2
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 0 0 0 0 0 0 0
Aplicamos la Instruccin BCF Memory,3
0 0 0 0 1 0 0 0

No. Instruccin Descripcin Observacin


Prueba el Bit Este comando prueba el Bit "b" del registro "f" y
20 BTFSC f,b
b del registro f salta una linea si esta en 0.
Esta instruccin esta estrechamente relacionada con las dos siguientes
instrucciones dentro del programa. Veamos el siguiente ejemplo:
INSTRUCCIN 1 BTFSC f,b
INSTRUCCIN 2 IR A OTRA DICRECCION
INSTRUCCIN 3 SUMAR DOS NUMEROS
Supongamos que tenemos nuestro registro denominado Memory = 01010101;
cuando se le aplica el comando BTFSC Memory,2 el microcontrolador prueba el Bit
No. 2 del registro Memory para ver si es igual a cero. En esta comprobacin

TCNICOS INDUSTRIALES 38 /112


MICROCONTROLADORES PIC
pueden suceder dos cosas: Si el Bit No. 2 es igual a 0 el microcontrolador ejecuta
la instruccin nmero 3; pero en el caso de que el Bit No. 2 sea diferente de 0, el
microcontrolador ejecuta la instruccin 2.

No. Instruccin Descripcin Observacin


Prueba el Bit Este comando prueba el Bit "b" del registro "f" y
21 BTFSS f,b
b del registro f salta una linea si esta en 1.
Esta instruccin esta estrechamente relacionada con las dos siguientes
instrucciones dentro del programa. Veamos el siguiente ejemplo:
INSTRUCCIN 1 BTFSS f,b
INSTRUCCIN 2 IR A OTRA DICRECCION
INSTRUCCIN 3 SUMAR DOS NUMEROS
Supongamos que tenemos nuestro registro denominado Memory = 01010101;
cuando se le aplica el comando BTFSS Memory,2 el microcontrolador prueba el Bit
No. 2 del registro Memory para ver si es igual a 1. En esta comprobacin pueden
suceder dos cosas: Si el Bit No. 2 es igual a 1 el microcontrolador ejecuta la
Instruccin numero 3; pero en el caso de que el Bit No. 2 sea diferente de 1, el
microcontrolador ejecuta la Instruccin 2

No. Instruccin Descripcin Observacin


Suma de dos Este comando suma un valor de un literal al
22 ADDLW k
nmeros contenido del registro "W"
Este comando es muy sencillo ya que tan solo cuando es aplicado, toma el
contenido del registro y se lo suma al registro "W"; por ejemplo: Supongamos que
W = 23 y que tenemos un literal k = 23; cuando se aplica el comando, el resultado
es la suma del literal mas el contenido del registro "W", el resultado final queda
almacenado en el registro "W".

No. Instruccin Descripcin Observacin


24 CALL k Llamada de una Subrrutina con el nombre k
Para entender esta instruccin, primera debemos aclarar que es una Subrutina.
La subrutina consiste en un grupo de instrucciones que se encuentran aisladas del
programa principal y que se ejecutan cuando son llamadas por un nombre asignado
por el programador. Las subrrutinas suelen ser pequeos programas, por ejemplo
para obtener retardos de tiempo ( Subrrutina de tiempo ); pero principalmente
podemos decir tambin que una Subrrutina es un pequeo programa que se utiliza
muchas veces en cualquier parte del programa. Las ventajas que ofrecen las
subrrutinas estan referida al ahorro considerable de la memoria de programa y su
fcil mantenimiento. A la subrrutina se le podr asignar cualquier nombre, y este es
el nombre utilizado en la Instruccin CALL como parmetro.

La instruccin CALL k esta estrechamente relacionada con la instruccin


denominada RETURN y RETLW ( Ver las siguientes dos Instrucciones ).

No. Instruccin Descripcin Observacin


31 RETURN Retorno desde una subrrutina
La Instruccin RETURN es un comando que no podr estar separado cuando se
crea una subrrutina.

TCNICOS INDUSTRIALES 39 /112


MICROCONTROLADORES PIC
El procedimiento es prcticamente mecnico ya que usted deber crear la
subrrutina y darle el nombre para poder ser llamada; al final de la subrrutina se
debe escribir la instruccin denominada RETURN. Entonces podemos concluir que
una subrrutina esta constituida por un conjunto de instrucciones demarcadas por un
nombre que se encuentra al inicio y la instruccin RETURN que se encuentra al

final demarcando el final de la subrrutina. Por ejemplo: supongamos que nuestra


Subrrutina se llama RUTINA, entonces tenemos:
RUTINA INSTRUCCIN 1
INSTRUCCIN 2
INSTRUCCIN 3
INSTRUCCIN 4
RETURN
Especficamente el comando RETURN le dice al microcontrolador que debe
continuar ejecutando las instrucciones en el lugar desde donde la subrrutina fue
llamada.

Esta es la estructura bsica que conforma a una subrrutina.

No. Instruccin Descripcin Observacin


Retorno de subrrutina y carga a "W" con el
30 RETLW k
contenido del literal "k"
El comando RETLW k se comporta igual al comando RETURN con la diferencia de
que esta carga un Valor "k" en el registro "W" cuando finaliza la subrrutina. El rango
de este valor "k" esta comprendido entre 0 y 255.

No. Instruccin Descripcin Observacin


Borra el contenido del registro llamado
25 CLRWDT
Watchdog Timer.
Esta instruccin borra el contador del WATCHDOG TIMER (perro guardin), en
realidad es un contador interno que va desde 0 hasta 255 y que podr ser activado
o desactivado en la configuracin del sistema cuando el microcontrolador va a ser
grabado. El tiempo de conteo para este contador tambin podr ser prolongado por
un preescalador segn las necesidades del usuario.

La instruccin CLRWDT borra el contenido del contador del perro guardin. Si


usted activa el Watchdog Timer, usted deber asegurarse de ejecutar el comando
CLRWDT antes de que el contador finalice el conteo para que el microcontrolador
no se reinicialice automticamente.

Existen casos en donde los microcontroladores se confunden y queda bloqueado


dejando automticamente de hacer la tarea encomendada. Cuando sucede esto no
existir el comando CLRWDT y en consecuencia se reinicializara el
microcntrolador.

Esta instruccin es muy ventajosa cuando se tienen instalados los sistemas en


lugares muy remotos y no puede enviarse a una persona para reinicializar el
microcontrolador.

No. Instruccin Descripcin Observacin


26 GOTO k El contador de programa salta a una direccin

TCNICOS INDUSTRIALES 40 /112


MICROCONTROLADORES PIC
con el nombre "k"
Esta es una de las instruccin mas fcil de entender y consiste tan solo en un
salto a otra parte del programa. Cuando se ejecuta el comando GOTO k, el
microcontrolador salta a la direccin "k", donde "k" es una etiqueta cualquiera; por
ejemplo:

INSTRUCCIN 1
GOTO SALTO
INSTRUCCIN 3
INSTRUCCIN 4
SALTO INSTRUCCION 5
en en ejemplo anterior tenemos que primero se ejecuta la instruccin 1,
seguidamente la instruccin de GOTO SALTO la cual le dice al microcontrolador
que debe continuar en la instruccin 5.

No. Instruccin Descripcin Observacin


Se carga el registro "W" con el contenido del
28 MOVLW k
literal "k"
Esta instruccin le servir para tomar el contenido de un literal y cargarlo en el
registro "W"; donde "k" en una palabra cualquiera que tiene asignado un valor entre
0 y 255.

No. Instruccin Descripcin Observacin


29 RETFIE Retorno de llamado a interrupcin
Esta Instruccin es parecida a la Instruccin RETURN, pero a diferencia de esta,
RETFIE es utilizada para volver de una subrrutina de interrupcin.

No. Instruccin Descripcin Observacin


32 SLEEP Entra en modo de reposo.
Esta Instruccin le da la orden al microcontrolador de quedar en modo
suspendido, en este modo el PIC no ejecuta ninguna instruccin hasta que sea
nuevamente reinicializado (RESET) comenzando nuevamente el programa. En este
modo el consumo de energa del PIC es mnimo. Durante este modo el contador
del WATCHDOG TIMER sigue trabajando y si este esta activado el PIC se
reseteara por este medio.

LAS BANDERAS

Estas banderas se utilizan para dar informacin adicional cuando se realizan


operaciones lgicas y aritmticas dentro del microcontrolador. Usted podr tomar
decisiones segn el valor de cada una de las banderas. Existen diferentes tipos de
banderas en un microcontrolador; entre ellas tenemos:

LAS BANDERAS EN LA SUMA:

Los registros bsicos del microcontrolador PIC16F628A tienen una longitud de 8


bits expresados en forma binaria, lo cual quiere decir que el nmero mximo
expresado en forma decimal ser el 255. En la suma existen tres tipos de banderas

TCNICOS INDUSTRIALES 41 /112


MICROCONTROLADORES PIC
que pueden proporcionarnos mayor informacin del resultado. Estas banderas son
denominadas CARRY (C), Acarreo de Dgito (DC) y el Estado Cero (Z). Todas estas
banderas son activadas segn sea el caso:

Por ejemplo, en la suma, la bandera CARRY se coloca en "1" cuando el resultado


supera el nmero 255 y permanecer en "0" indicando que no se present ningn
sobreflujo; es decir que el resultado de la suma fue menor.

Por otro lado, existe otra bandera denominada Acarreo de Dgito "DC" que expresa
lo que sucede con los 4 Bits menos significativos; es decir, si los cuatro Bits menos
significativos sobrepasa al numero 15 expresado en forma decimal, entonces la
bandera DC = 1, en el caso contrario ser "0".

Finalmente la bandera de estado "Z" se activa cuando la operacin aritmtica da


como resultado un "1"; de lo contrario se coloca en "0".

LAS BANDERAS EN LA RESTA:

En la resta de dos nmeros la bandera CARRY "C" se coloca en "1" cuando el


resultado de la operacin sea un nmero positivo, o se pone en cero para el caso
contrario. Esto tan sencillamente quiere decir por ejemplo que si tenemos A=20 y
B=10 donde X=A-B; el resultado ser X=10 ( Nmero Positivo ); para el caso
contrario si tenemos A=10 y B=20 donde X=A-B entonces X=-10. obtenindose un
resultado negativo.

La bandera de acarreo de dgito "DC" se colocar en "1" cuando los cuatro Bits
menos significativos del registro "W" sea menor que los cuatros bits menos
significativos del registro que se desea restar, en caso contrario se colocar un
cero.

La bandera de estado "Z" solamente se activar cuando ambas cantidades sean


iguales.

LAS BANDERAS EN LA ROTACION

El microcontrolador PIC16F84 tiene disponibles dos instrucciones de rotacin las


cuales rotan los dgitos de un registro a la derecha o a la izquierda, segun se use.

Por ejemplo, para la rotacin a la izquierda supongamos que nuestro registro " f =
00001111 " y que la bandera CARRY tiene un 0; cuando se aplica el comando RLF
f,0 todos los nmeros del registro "f" se desplazan hacia la izquierda. El valor lgico
que se encuentra en la bandera CARRY es colocado en el Bit No. 0 y el Bit No. 7
es colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f =
00011110. y CARRY seria 0. El orden lgico de los Bits lo tenemos definidos as:

BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 0 0 0 1 1 1 1
Aplicamos la Instruccin RLF f,d
0 0 0 1 1 1 1 0
Ahora para la notacin a la derecha, supongamos que nuestro registro " f =
00001111 " y que la bandera CARRY tiene un 0; cuando se aplica el comando RRF
f,0 todos los nmeros del registro "f" se desplazan hacia la derecha. El valor lgico
que se encuentra en la bandera CARRY es colocado en el Bit No. 7 y el Bit No. 0 es
colocado en la bandera CARRY. El resultado de nuestro ejemplo seria: f = 00000111.
y CARRY seria 1. El orden lgico de los Bits lo tenemos definidos as:

TCNICOS INDUSTRIALES 42 /112


MICROCONTROLADORES PIC
BIT No. 7 BIT No. 6 BIT No. 5 BIT No. 4 BIT No. 3 BIT No. 2 BIT No. 1 BIT No. 0
0 0 0 0 1 1 1 1
Aplicamos la Instruccin RLF f,d
0 0 0 0 0 1 1 1

Resumen de instrucciones (clasificacin segn el fabricante en tres grupos):


En este resumen las instrucciones estn clasificadas segn su operacin sea orientada a registros, a
bits, o a literales y de control:

Para que no te confundas...!!!. En esta primera tabla aparecen W, f y d. Recuerda que...


W : es el registro de trabajo y almacena datos de forma momentnea
f : es la direccin de un registro, si es llamada apunta al contenido de ese registro
d : es el destino donde se guarda el resultado de una operacin, si es 1 se guarda en el
registro f, y si es 0 en W

OPERACIONES ORIENTADAS A REGISTROS


Estados
Nemotcnicos Operacin
afectados
ADDWF f,d Sumar W y f C,DC,Z
ANDWF f,d AND entre W y f Z
CLRF f Limpiar f Z
CLRW Limpiar W Z
COMF f,d Complementar f Z
DECF f,d Decrementar f Z
DECFSZ f,d Decrementar f, saltar si cero
INCF f,d Incrementar f Z
INCFSZ f,d Incrementar f, saltar si cero
IORWF f,d OR entre W y f Z
MOVF f,d Mover f Z
MOVWF f Mover W a F
NOP No Operacin
RLF f,d Rotar a la izquierda C
a travs del carry
RRF f,d Rotar a la derecha C
a travs del carry
SUBWF f,d Restar W de f C,DC,Z
SWAPF f,d Intercambiar nibbles de f
XORWF f,d OR exclusiva entre W y f Z

TCNICOS INDUSTRIALES 43 /112


MICROCONTROLADORES PIC

En este otro cuadro, a dems de f aparece b. que vendra a ser uno de los 8 bits del registro f

OPERACIONES ORIENTADAS A BITS


Estados
Nemotcnicos Operacin
afectados
BCF f,b Limpiar bit b de f
BSF f,b Activar bit b de f
BTFSC f,b Probar bit b de f,
saltar si cero
BTFSS f,b Probar bit b de f,
saltar si uno
Por ltimo, aparece k que viene a ser una constante de 8 bit, es decir que k puede tomar valores
entre 0 y 255, stos inclusive, segn la instruccin a utilizar

OPERACIONES ORIENTADAS A LITERALES Y DE


CONTROL
Estados
Nemotcnicos Operacin
afectados
ADDLW k Sumar literal k a W C,DC,Z
ANDLW k AND entre k y W Z
CALL k Llamar subrutina
CLRWDT Limpiar WDT -TO,-TD
GOTO K Salta a direccin k
IORLW K OR entre k y W Z
MOVLW K Cargar W con literal k
RETFIE Retornar de interrupcin
RETLW K Retornar y cargar W con k
RETURN Retornar de subrutina
SLEEP Ir al modo de bajo consumo -TO,-TD
SUBLW K Restarle k a W C,DC,Z
XORLW K OR exclusiva entre k y W Z
Bueno, eso es todo, y creo que ms que suficiente.

TCNICOS INDUSTRIALES 44 /112


MICROCONTROLADORES PIC

Subrutinas y llamados
IMPORTANCIA DE LAS RUTINAS (*)

La mayora de los microcontroladores incluyen en su repertorio de instrucciones algunas que


permiten saltar a una rutina y, cuando se complementa su ejecucin, retornar al programa
principal

El empleo de subrutinas aporta muchas ventajas entre las que se destacan las siguientes:
1. Se pueden escribir como subrutinas secciones de cdigo y ser empleadas en muchos
programas ( por ejemplo, la subrutina de exploracin de un teclado ).

2. Dan a los programas un carcter modular, es decir, se pueden codificar diferentes mdulos
para usarlos en cualquier programa.

3. Se reduce notablemente el tiempo de programacin, la deteccin de errores, usando


repetidamente una subrutina.

4. El cdigo es ms fcil de interpretar, dado que las instrucciones de las subrutinas no


aparecen en el programa principal. Solo figuran las llamadas CALLs.

LAS INSTRUCCIONES CALL Y RETURN (*)

La instruccin CALL ( llamada la subrutina) consigue que la ejecucin del programa contine en la
direccin donde se encuentra la subrutina a la que hace referencia. Es similar a GOTO pero
coloca en la pila la direccin de la siguiente instruccin que se debe ejecutar despus de la CALL.

La subrutina finaliza con la instruccin RETURN (Retorno de la subrutina) que retoma la direccin
guardada en le pila y la coloca en el contador del programa PC continuando el flujo de control con
la instruccin que sigue a la CALL.

En la familia PIC de gama media la pila tiene ocho niveles de memoria del tipo FIFO (primero en
entrar, ltimo en salir). Si se produce la llamada a una subrutina durante la ejecucin de otra
subrutina, la direccin de retorno de esta segunda es colocada en la cima de la pila sobre la
direccin anterior. Esta segunda direccin es la primera en salir de la pila mediante la instruccin
RETURN.

Con la pila de ocho niveles, una subrutina puede llamar a otra y sta, a su vez, llamar a otra hasta
un mximo de ocho. La gama baja slo puede realizar dos llamadas de este tipo al poseer una
pila de slo dos niveles.

Las subrutinas deben colocarse al comienzo de las pginas debido a que el bit 8 del contador del
programa es puesto a 0 por la instruccin CALL (o por cualquier instruccin que modifica el PC).
Las subrutinas deben colocarse en la mitad inicial de las pginas (las 256 palabras).

* Tomado de: Microcontroladores PIC, la solucin en un chip, Angulo y otros, Seccin 5.1

TCNICOS INDUSTRIALES 45 /112


MICROCONTROLADORES PIC

Configuracin de los puertos del PIC


Lleg el momento de ver como configurar los puertos del PIC. Para poder hacerlo es necesario
conocer la tabla de registros de la memoria de datos, la cual como dijimos, est dividida en el
BANCO 0 y BANCO 1.

Los registros importantes en la configuracin de los puertos son:

STATUS direccin 0x3


PORTA direccin 0x5
PORTB direccin 0x6
TRISA direccin 0x5
TRISB direccin 0x6

Por defecto el PIC tendr todos los I/O port's (es decir los puertos RA y RB), colocados como
entrada de datos, y si queremos cambiarlos habr que configurarlos.

Al configurar los puertos debers tener en cuenta que:

Si asignas un CERO (0) a un pin, ste quedar como salida y...


Si le asignas un UNO (1), quedar como entrada

Esta asignacin se hace en:

TRISA para los pines del PUERTO A (5 bits)


TRISB para los pines del PUERTO B (8 bits)

.: Por Ejemplo:

Si TRISA es igual a 11110 todos sus pines sern entradas salvo RA0 que esta como salida

Si TRISB es igual a 00000001 todos sus pines sern salidas salvo RB0 que esta como entrada

Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB estn en el BANCO 1
no queda otra, deberemos cambiar de banco. Esto se logra a travs del Registro STATUS

STATUS es un Registro de 8 bits u 8 casillas, en el cual la N 5 (RP0) define la posicin del banco
en donde nos encontramos

Si pones un CERO (0) a RP0 estaremos en el BANCO 0


Si le pones un UNO (1) ya ves, estaremos en el BANCO 1

REGISTRO STATUS
7 6 5 4 3 2 1 0
IRP RP1 RP0 TO PD Z DC C

TCNICOS INDUSTRIALES 46 /112


MICROCONTROLADORES PIC
Listo, ahora ya sabemos como configurar los puertos, pero lo aclararemos con un ejemplo
completo.

Vamos a escribir un cdigo que configure todos los pines del puerto A como entrada y todos los
del puerto B como salida.

;---------------Encabezado-------------

list p=16f84 ; usaremos el PIC 16f84


radix hex ; y la numeracin hexadecimal

;------------mapa de memoria---------

estado equ 0x03 ; Aqu le asignamos nombres a los


trisa equ 0x05 ; registros indicando la posicin
trisb equ 0x06 ; en la que se encuentran

;-------Configuracin de puertos-------

reset org 0x00 ; origen del programa, aqu comenzar


; siempre que ocurra un reset
goto inicio ; salto a "inicio"
org 0x05 ; origen del cdigo de programa
inicio bsf estado,5 ; pongo rp0 a 1 y paso al
banco1
movlw b'11111' ; cargo W con 11111
movwf trisa ; y paso el valor a trisa
movlw b'00000000' ; cargo W con 00000000
movwf trisb ; y paso el valor a trisb
bcf estado,5 ; pongo rp0 a 0 y regreso al
banco0

;------------------------------------------
end ; se acab
;------------------------------------------

.: Descripcin del cdigo:

Todo lo que escribas luego de un ";" (punto y coma) ser ignorado por el ensamblador, estos son
los famosos comentarios, y sirve para saber que hace cada lnea de cdigo.

Dicho esto no queda ms que describir el cdigo, as que vamos por partes.

;---------------Encabezado-------------

list p=16f84 ; usaremos el PIC 16f84


radix hex ; y la numeracin hexadecimal

TCNICOS INDUSTRIALES 47 /112


MICROCONTROLADORES PIC
Aqu le indicas al ensamblador para que microcontrolador estas codificando (PIC16F84). y cual
ser el sistema de numeracin que utilizars (hexadecimal).

Nota que hay tres columnas, en este caso la primera est vaca. Respeta las tabulaciones para no
confundir al ensamblador.

;------------mapa de memoria---------

estado equ 0x03 ; Aqu le asignamos nombres a los


trisa equ 0x05 ; registros indicando la posicin
trisb equ 0x06 ; en la que se encuentran

Recuerdas lo de la memoria de datos...? Bien, al registro STATUS, que est en la posicin 0x03
de la memoria de datos le puse la etiqueta "estado". equ es algo as comoooo...igual . (Es decir,
le estoy asignando el nombre estado al registro que est en la posicin 0x03 de la memoria de
datos).

Luego hice lo mismo con trisa y trisb. Ahora sigamos...

;-------Configuracin de puertos-------

reset org 0x00 ; origen del programa, aqu comenzar


; siempre que ocurra un reset
goto inicio ; salto a "inicio"
org 0x05 ; origen del cdigo de programa
inicio bsf estado,5 ; pongo rp0 a 1 y paso al
banco1
movlw b'11111' ; cargo W con 11111
movwf trisa ; y paso el valor a trisa
movlw b'00000000' ; cargo W con 00000000
movwf trisb ; y paso el valor a trisb
bcf estado,5 ; pongo rp0 a 0 y regreso al
banco0

La directiva org indica el sitio de la memoria en donde se escribe una parte del programa. En este
caso el contador de programa apuntar a la direccin 0x00 (reset) entonces ejecutar la
instruccin que sigue a continuacin, (saltar a la etiqueta inicio) y nuestro cdigo de programa
comienza en la direccin de memoria 0x05 (aqu salto por encima de la interrupcin 0x04)

BSF (SET FILE REGISTER), es la instruccin que pone un uno en el bit del registro especificado,
en este caso pone a uno el bit 5 del registro STATUS (el rp0), para pasar al banco 1.

movlw es algo as como... mueve el siguiente literal al Registro W.

W es el Registro de Trabajo, y lo usamos para almacenar momentneamente los datos que


queremos mover. una vez hecho esto pasamos el dato a trisa, o a trisb, segn el caso.

movwf es algo as como... mueve el contenido del registro W al registro f, en este caso f sera
trisa o trisb.

BCF (BIT CLEAR FILE REGISTER), sta instruccin limpia el bit del registro especificado, o lo
pone a cero, en este caso pone a cero el bit 5 del registro STATUS para regresar al banco 0.

TCNICOS INDUSTRIALES 48 /112


MICROCONTROLADORES PIC

;------------------------------------------
end ; se acab

MANUAL DE MICROCONTROLADORES PIC


PRCTICA DE LABORATORIO

TCNICOS INDUSTRIALES 49 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 1
ENCENDIDO DE UN LED
;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito de encendido de un led en RB0, del puerto B
; Microcontrolador : PIC16F628A
; ***************************************************************************
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1
BSF PORTB,0 ; PRENDE RB0
GOTO INICIO1 ; IR A INICIO1
END ; FIN DEL PROGRAM

TCNICOS INDUSTRIALES 50 /112


MICROCONTROLADORES PIC

DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A

TCNICOS INDUSTRIALES 51 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 2
LEER EL ESTADO DE 6 INTERRUPTORES/PULSADORES DEL ENTRENADOR
CONECTADOS A RA5-RA0 Y REFLEJAR EL NIVEL LGICO DE LOS MISMOS SOBRE LOS
LEDS CONECTADOS A RB5-RB0
;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito puerto B, reflejo de puerto A
; Microcontrolador : PIC16F628A
;---------------------------------------------------

List p=16F628A ;Tipo de procesador


include"P16F628A.INC" ;Definiciones de registros internos
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x00
goto Inicio ;Vector de reset
org 0x05

Inicio movlw 0x07


movlw CMCON
clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'00111111'
movwf TRISA ;Puerta A se configura como entrada
bcf STATUS,RP0 ;Selecciona banco 0

INICIO1 movf PORTA,W ;Leer las entradas RA0-RA5


Movwf PORTB ;Reflejar en las salidas
goto INICIO1 ;Bucle sin fin

end ;Fin del programa fuente

TCNICOS INDUSTRIALES 52 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 3
ENCENDIDO DE UN LED CON INTERRUPTOR
;***************************************************************************
;
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito con un interruptor como entrada, y un led de salida
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS

TCNICOS INDUSTRIALES 53 /112


MICROCONTROLADORES PIC
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 BTFSS PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO APAGA ; SI EST EN 0 PASA A LA SIGUIENTE INSTRUCCIN
GOTO PRENDE ; SI EST EN 1 SALTA UNA INSTRUCCIN
PRENDE BSF PORTB,0 ; PRENDE RB0
GOTO INICIO1 ; IR A INICIO1
APAGA BCF PORTB,0 ; APAGA RB0
GOTO INICIO1 ; IR A INICIO1
END ; FIN DEL PROGRAM A

DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON


INTERRUTOR EN EL PUERTO A, (RA0, COMO ENTRADA).

TCNICOS INDUSTRIALES 54 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 4

ENCENDIDO DE UN LED CON PULSADOR PARA EL ENCENDIDO Y RESET PARA EL


APAGADO

;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito con un pulsador como entrada, y un led de salida
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TCNICOS INDUSTRIALES 55 /112


MICROCONTROLADORES PIC
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 BTFSS PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO INICIO1 ; IR A INICIO1
INICIO2 BTFSC PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO INICIO2 ; IR A INICIO2
PRENDE BSF PORTB,0 ; PRENDE RB0
GOTO PRENDE ; IR A PRENDE
END ; FIN DEL PROGRAMA

DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON


PULSADOR PARA EL ENCENDIDO Y RESET PARA EL APAGADO

TCNICOS INDUSTRIALES 56 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 5

ENCENDIDO DE UN LED CON PULSADOR RA0, PARA EL ENCENDIDO Y RA1 PARA EL


APAGADO

;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito con pulsador de marcha y parada, como entrada, y un led de salida
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O

TCNICOS INDUSTRIALES 57 /112


MICROCONTROLADORES PIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA (PULSADOR MARCHA)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSAMARCHA BTFSS PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA ; IR A PULSAMARCHA
CALL Retardo_20ms ; IR A RETARDO DE 20 ms.
PULSAMARCHA1 BTFSC PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO PRENDE ; IR A PRENDE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PULSADOR APAGA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSASTOP BTFSS PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP ; IR A PULSASTOP
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
PULSASTOP1 BTFSC PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP1 ; IR A PULSASTOP1
GOTO Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO APAGA ; IR A APAGA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PRENDE BSF PORTB, ; PRENDE RB0
GOTO PULSASTOP ; IR A PULSASTOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
APAGA BCF PORTB,0 ; APAGA RB0
GOTO PULSAMARCHA ; IR A PULSAMARCHA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCLUDE <RETARDOS.INC>
END ; FIN DEL PROGRAMA

DIAGRAMA PARA LA CONEXIN DE UN PIC 16F628A DE ENCENDIDO DE UN LED, CON


PULSADOR RA0, PARA EL ENCENDIDO Y RA1 PARA EL APAGADO

TCNICOS INDUSTRIALES 58 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 6

SUMA DE UN LITERAL Y EL PUERTO A. EL RESULTADO SE VISUALIZA EN EL PUERTO B

;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito de suma
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO

TCNICOS INDUSTRIALES 59 /112


MICROCONTROLADORES PIC
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 MOVLW 0X02
ADDWF PORTA,W
MOVWF PORTB
GOTO INICIO1
END

CIRCUITO DE SUMA DE UN LITERAL Y EL PUERTO A

TCNICOS INDUSTRIALES 60 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 7

TCNICOS INDUSTRIALES 61 /112


MICROCONTROLADORES PIC

RESTA DE UN LITERAL Y EL PUERTO A. EL RESULTADO SE VISUALIZA EN EL PUERTO B

;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito de suma
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 MOVLW 0X02
SUBWF PORTA,W
MOVWF PORTB
GOTO INICIO1
END

CIRCUITO DE RESTA DE UN LITERAL Y EL PUERTO A

TCNICOS INDUSTRIALES 62 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 8

TCNICOS INDUSTRIALES 63 /112


MICROCONTROLADORES PIC

LEDS SECUENCIALES, CON LA INSTRUCCIN RLF


;***************************************************************************
; Febrero 01, 2012
; nombre: led8.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito utilizando la instruccin rlf, rotar a la izquierda
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK 0X20
ROTAR
ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1
MOVLW 0X01 ; CARGA W CON 00000001
MOVWF ROTAR ; LO PASA AL REGISTRO ROTA
ROTANDO MOVF ROTAR,0 ; PASA EL CONTENIDO DE ROTAR A W
MOVWF PORTB ; Y DE ALLI AL PUERTO B
CALL Retardo_20ms
CLRF PORTB
CALL Retardo_20ms
RLF ROTAR,1 ; DESPLAZA UN BIT AL CONTENIDO
; DE ROTAR Y LO GUARDA
GOTO ROTANDO
INCLUDE <RETARDOS.INC>
END

TCNICOS INDUSTRIALES 64 /112


MICROCONTROLADORES PIC
CIRCUITO DE ROTACIN DE LED CON LA INSTRUCCIN RLF

TCNICOS INDUSTRIALES 65 /112


MICROCONTROLADORES PIC
PRACTICA DE LABORATORIO N 9
;CONTADOR CON XOR
;***************************************************************************
; Febrero 01, 2012
; nombre: led8.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito utilizando la instruccin rlf, rotar a la izquierda
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK 0X20
CONT
ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;, ;;;;;;;;;;;;;;;;;;;;;;;;
inicio1 bsf PORTB,0 ;PRENDE RB0 DEL PUERTOB
CALL Retardo_200ms
CALL Retardo_200ms
MOVF CONT,0
XORLW B'00111' ;verifica si el contador llego a 19
BTFSC STATUS,2 ;si no es asi salta una linea
goto inicio2 ;Si llego a 9 lo atiende en manual
INCF CONT,1 ;incrementa el contador
MOVF CONT,0 ;pasa el contador a W
clrf PORTB
CALL Retardo_200ms
goto inicio1
inicio2 CLRF CONT ;pone el contador a 0
clrf PORTB
goto inicio2
INCLUDE <RETARDOS.INC>
end

TCNICOS INDUSTRIALES 66 /112


MICROCONTROLADORES PIC

CONTADOR CON XOR

PRACTICA DE LABORATORIO N 10

;CIRCUITO DESTELLANTE DE UNA LAMPARA LED CON TEMPORIZADOR


;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito un led destellante con temporizador de 2 s
; Microcontrolador : PIC16F628A
;---------------------------------------------------
LIST P=P16F628A
INCLUDE "P16F628A.INC"
TICKS EQU D'78'

CBLOCK 0X20
TIEMPO
ENDC
ORG 0X00 ; Origen del programa, aqu comenzar
; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS

TCNICOS INDUSTRIALES 67 /112


MICROCONTROLADORES PIC

MOVWF TRISA
CLRF TRISB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE TIMER
MOVLW b'01010111' ;SEGUN LOS BITS DEL REGISTRO OPTIO
MOVWF OPTION_REG
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO1 BSF PORTB,0
CALL PAUSA
BCF PORTB,0
CALL PAUSA
GOTO INICIO1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CICLO DE TEMPORIZACION

PAUSA MOVLW TICKS ;TIEMPO_ESPERA = TICKS * OTR_TIC


MOVWF TIEMPO ;GUARDA VALOR EN MEMORIA
OTR_TIC MOVLW D'156' ;OTR_TIC=256- 156=100
MOVWF TMR0 ;OTR_TIC = 0.05632seg ; T= 4 * 0.25us * 100 * 256=0.0256seg
SIGUE BTFSS INTCON,2 ;DESBORDAMIENTO?=256
GOTO SIGUE
BCF INTCON,2 ;INTCON,2=TOIF , SEGUN REGISTRO INTCON
DECFSZ TIEMPO,1
GOTO OTR_TIC
RETURN
END ; tiempo real = OTR_TIC x TICKS = 0.0256 x 78 = 2seg

TCNICOS INDUSTRIALES 68 /112


MICROCONTROLADORES PIC

PRACTICA DE LABORATORIO N 11

;PROGRAMA DE ARRANQUE EN ESTRELLA TRINGULO DE UN MOTOR ASNCRONO TRIFSICO


;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito de arranque en estrella tringulo de motor asncrono trifsico
; Microcontrolador : PIC16F628A
;---------------------------------------------------

LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK0X20

ENDC

ORG 0X00 ; Origen del programa, aqu comenzar


; siempre que ocurra un reset
goto INICIO
ORG 0X04
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; CONFIGURACION DE PUERTO A COMO DIGITALES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INICIO MOVLW 0x07
MOVWF CMCON
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CONFIGURACION DE PUERTOS, COMO I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BSF STATUS,5 ; PASAR DEL BANCO 0 AL BANCO 1
BCF STATUS,6
MOVLW B'11111111' ; CONFIGURA PUERTO A COMO ENTRADAS
MOVWF TRISA
CLRF TRISB
BCF STATUS,5 ; PASAR DEL BANCO 1 AL BANCO 0
BCF STATUS,6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRF PORTB ; LIMPIA PUERTO B
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA (PULSADOR MARCHA)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSAMARCHA BTFSS PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA ; IR A PULSAMARCHA
CALL Retardo_20ms ; IR A RETARDO DE 20 ms.
PULSAMARCHA1 BTFSC PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO PRENDE ; IR A PRENDE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PULSADOR APAGA

TCNICOS INDUSTRIALES 69 /112


MICROCONTROLADORES PIC
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSASTOP BTFSS PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP ; IR A PULSASTOP
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
PULSASTOP1 BTFSC PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP1 ; IR A PULSASTOP1
GOTO Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO APAGA ; IR A APAGA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PRENDE BSF PORTB,0
BSF PORTB,1
CALL Retardo_5s
BCF PORTB,0
CALL Retardo_500ms
BSF PORTB,2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO PULSASTOP ; IR A PULSASTOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
APAGA CLRF PORTB
GOTO PULSAMARCHA

INCLUDE <lcd_4bit.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_MENS.INC>
END

PRACTICA DE LABORATORIO N 11

TCNICOS INDUSTRIALES 70 /112


MICROCONTROLADORES PIC

;PROGRAMA DE ARRANQUE EN ESTRELLA TRINGULO DE UN MOTOR ASNCRONO TRIFSICO


;***************************************************************************
; Febrero 01, 2012
; nombre: led2.asm)
; Programa producido por: SENATI ZONAL LA LIBERTAD
; Circuito de arranque en estrella tringulo de motor asncrono trifsico
; Microcontrolador : PIC16F628A
;---------------------------------------------------

LIST P=P16F628A
INCLUDE "P16F628A.INC"

CBLOCK 0X20
ENDC

ORG 0X00
goto INICIO
ORG 0X04

Mensajes
addwf PCL,F
Mensaje1
DT " MOTOR APAGADO",0X00
Mensaje2
DT "MOTOR ENCENDIDO", 0X00
Mensaje3
DT "START ESTRELLA ", 0x00
Mensaje4
DT "START TRIANGULO ", 0x00

INICIO MOVLW 0X07


MOVWF CMCON

BSF STATUS,5
MOVLW B'00010100'
MOVWF TRISA
CLRF TRISB
BCF STATUS,5
CLRF PORTB
CLRF PORTA

CALL LCD_Inicializa
CALL LCD_Linea1
MOVLW Mensaje1
CALL LCD_Mensaje

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INICIO DEL PROGRAMA (PULSADOR MARCHA)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSAMARCHA BTFSS PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA ; IR A PULSAMARCHA
CALL Retardo_20ms ; IR A RETARDO DE 20 ms.
PULSAMARCHA1 BTFSC PORTA,0 ; PREGUNTA COMO ESTA EL RA0
GOTO PULSAMARCHA1 ; IR A PULSAMARCHA1

TCNICOS INDUSTRIALES 71 /112


MICROCONTROLADORES PIC
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO PRENDE ; IR A PRENDE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PULSADOR APAGA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PULSASTOP BTFSS PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP ; IR A PULSASTOP
CALL Retardo_20ms ; IR A RETARDO DE 20 ms
PULSASTOP1 BTFSC PORTA,1 ; PREGUNTA COMO ESTA EL RA1
GOTO PULSASTOP1 ; IR A PULSASTOP1
GOTO Retardo_20ms ; IR A RETARDO DE 20 ms
GOTO APAGA ; IR A APAGA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PRENDE BSF PORTB,0
BSF PORTB,1
CALL LCD_Linea1
MOVLW Mensaje2
CALL LCD_Mensaje
CALL LCD_Linea2
MOVLW Mensaje3
CALL LCD_Mensaje

CALL Retardo_5s

BCF PORTB,0
CALL Retardo_500ms
BSF PORTB,2
CALL LCD_Linea1
MOVLW Mensaje2
CALL LCD_Mensaje
CALL LCD_Linea2
MOVLW Mensaje4
CALL LCD_Mensaje
PORTB, ; PRENDE RB0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GOTO PULSASTOP ; IR A PULSASTOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
APAGA CLRF PORTB
GOTO PULSAMARCHA

INCLUDE <lcd_4bit.INC>
INCLUDE <RETARDOS.INC>
INCLUDE <LCD_MENS.INC>
END

TCNICOS INDUSTRIALES 72 /112


MICROCONTROLADORES PIC
REGISTROS

Un registro o una celda de memoria es un circuito electrnico que puede memorizar el estado de un byte.

REGISTROS SFR

A diferencia de los registros que no tienen ninguna funcin especial y predeterminada, cada microcontrolador dispone

de un nmero de registros de funciones especiales (SFR), con la funcin predeterminada por el fabricante. Sus bits

estn conectados a los circuitos internos del microcontrolador tales como temporizadores, convertidores A/D,

osciladores entre otros, lo que significa que directamente manejan el funcionamiento de estos circuitos, o sea del

microcontrolador.Imagnese ocho interruptores que manejan el funcionamiento de un circuito pequeo dentro del

microcontrolador. Los registros SFR hacen exactamente lo mismo.

TCNICOS INDUSTRIALES 73 /112


MICROCONTROLADORES PIC
En otras palabras, el estado de los bits de registros se fija dentro de programa, los registros SFR dirigen los pequeos

circuitos dentro del microcontrolador, estos circuitos se conectan por los pines del microcontrolador a un dispositivo

perifrico utilizado para... Bueno, depende de usted.

PUERTOS DE ENTRADA/SALIDA (E/S)

Para hacer til un microcontrolador, hay que conectarlo a un dispositivo externo, o sea, a un perifrico. Cada

microcontrolador tiene uno o ms registros (denominados puertos) conectados a los pines en el microcontrolador. Por

qu se denominan como puertos de entrada/salida? Porque usted puede cambiar la funcin de cada pin como quiera.

Por ejemplo, usted desea que su dispositivo encienda y apague los tres seales LEDs y que simultneamente

monitoree el estado lgico de 5 sensores o botones de presin. Uno de los puertos debe estar configurado de tal

manera que haya tres salidas (conectadas a los LEDs) y cinco entradas (conectadas a los sensores). Eso se realiza

simplemente por medio de software, lo que significa que la funcin de algn pin puede ser cambiada durante el

funcionamiento.

Una de las caractersticas ms importantes de los pines de entrada/salida (E/S) es la corriente mxima que pueden

entregar/recibir. En la mayora de los microcontroladores la corriente obtenida de un pin es suficiente para activar un

LED u otro dispositivo de baja corriente (10-20mA). Mientras ms pines de E/S haya, ms baja es la corriente mxima

de un pin. En otras palabras, todos los puertos de E/S comparten la corriente mxima declarada en la hoja de

especificacin tcnica del microprocesador.

Otra caracterstica importante de los pines es que pueden disponer de los resistores pull-up. Estos resistores conectan

los pines al polo positivo del voltaje de la fuente de alimentacin y su efecto se puede ver al configurar el pin como una

TCNICOS INDUSTRIALES 74 /112


MICROCONTROLADORES PIC
entrada conectada a un interruptor mecnico o a un botn de presin. Las ltimas versiones de los microcontroladores

tienen las resistencias pull-up configurables por software.

Cada puerto de E/S normalmente est bajo el control de un registro SFR especializado, lo que significa que cada bit de

ese registro determina el estado del pin correspondiente en el el microcontrolador. Por ejemplo, al escribir un uno lgico

(1) a un bit del registro de control (SFR), el pin apropiado del puerto se configura automticamente como salida. Eso

significa que el voltaje llevado a ese pin se puede leer como 0 o 1 lgico. En caso contrario, al escribir 0 al registro SFR,

el pin apropiado del puerto se configura como salida. Su voltaje (0V o 5V) corresponde al estado del bit apropiado del

registro del puerto.

UNIDAD DE MEMORIA

La unidad de memoria es una parte del microcontrolador utilizada para almacenar los datos. La manera ms fcil de

explicarlo es compararlo con un armario grande con muchos cajones. Si marcamos los cajones claramente, ser fcil

acceder a cualquiera de sus contenidos al leer la etiqueta en la parte delantera del cajn.

De manera similar, cada direccin de memoria corresponde a una localidad de memoria. El contenido de cualquier

localidad se puede leer y se le puede acceder al direccionarla. La memoria se puede escribir en la localidad o leer.

Hay varios tipos de memoria dentro del microcontrolador:

MEMORIA ROM (READ ONLY MEMORY) - MEMORIA DE SLO LECTURA

La memoria ROM se utiliza para guardar permanentemente el programa que se est ejecutando. El tamao de

programa que se puede escribir depende del tamao de esta memoria. Los microcontroladores actuales normalmente

TCNICOS INDUSTRIALES 75 /112


MICROCONTROLADORES PIC
utilizan el direccionamiento de 16 bits, que significa que son capaces de direccionar hasta 64 Kb de memoria, o sea

65535 localidades. Por ejemplo, si usted es principiante, su programa exceder pocas veces el lmite de varios cientos

de instrucciones. Hay varios tipos de memoria ROM.

Rom de mscara (enmascarada) - MROM

La ROM enmascarada es un tipo de ROM cuyo contenido es programado por el fabricante. El trmino de mscara

viene del proceso de fabricacin, donde las partes del chip se plasman en las mascaras utilizadas durante el proceso de

fotolitografa. En caso de fabricacin de grandes series, el precio es muy bajo. Olvide la idea de modificarla...

OTP ROM (One Time Programmable ROM) - ROM programable una sola vez

La memoria programable una sola vez permite descargar un programa en el chip, pero como dice su nombre, una sola

vez. Si se detecta un error despus de descargarlo, lo nico que se puede hacer es descargar el programa correcto en

otro chip.

UV EPROM (UV Erasable Programmable ROM) - ROM programable borrable por rayos ultravioleta

El encapsulado de este microcontrolador tiene unaventana reconocible en la parte alta. Eso permite exponer la

superficie del chip de silicio a la luz de ultravioleta y borrar el programa completamente en varios minutos. Luego es

posible descargar un nuevo programa en l.

La instalacin de esta ventana es complicada, lo que por supuesto afecta al precio. Desde nuestro punto de vista,

desgraciadamente, de manera negativa...

Memoria Flash

Este tipo de memoria se invent en los aos 80 en los laboratorios de la compaa INTEL, como forma desarrollada de

la memoria UV EPROM. Ya que es posible escribir y borrar el contenido de esta memoria prcticamente un nmero

ilimitado de veces, los microcontroladores con memoria Flash son perfectos para estudiar, experimentar y para la

fabricacin en pequea escala. Por la gran popularidad de esta memoria, la mayora de los microconroladores se

fabrican con tecnologa flash hoy en da. Si usted va a comprar un microcontrolador, ste es en definitiva la opcin

perfecta!

TCNICOS INDUSTRIALES 76 /112


MICROCONTROLADORES PIC
MEMORIA RAM (RANDOM ACCESS MEMORY) - MEMORIA DE ACCESO ALEATORIO

Al apagar la fuente de alimentacin, se pierde el contenido de la memoria RAM. Se utiliza para almacenar

temporalmente los datos y los resultados inmediatos creados y utilizados durante el funcionamiento del

microcontrolador. Por ejemplo, si el programa ejecuta la adicin (de cualquier cosa) es necesario tener un registro que

representa lo que se llama suma en vida cotidiana. Con tal propsito, uno de los registros de la RAM es denominado

suma y se utiliza para almacenar los resultados de la adicin.

MEMORIA EEPROM (ELECTRICALLY ERASABLE PROGRAMMABLE ROM) - ROM PROGRAMABLE Y


BORRABLE ELCTRICAMENTE

El contenido de la EEPROM se puede cambiar durante el funcionamiento (similar a la RAM), pero se queda

permanentemente guardado despus de la prdida de la fuente de alimentacin (similar a la ROM). Por lo tanto, la

EEPROM se utiliza con frecuencia para almacenar los valores creados durante el funcionamiento, que tienen que estar

permanentemente guardados. Por ejemplo, si usted ha diseado una llave electrnica o un alarma, sera estupendo

permitir al usuario crear e introducir una contrasea por su cuenta. Por supuesto, la nueva contrasea tiene que estar

guardada al apagar la fuente de alimentacin. En tal caso una solucin perfecta es el microcontrolador con una

EEPROM embebida.

INTERRUPCIN

La mayora de programas utilizan interrupciones durante ejecucin de programa regular. El propsito del

microcontrolador generalmente consiste en reaccionar a los cambios en su entorno. En otras palabras, cuando ocurre

algo, el microcontrolador reacciona de alguna manera... Por ejemplo, al apretar el botn del mando a distancia, el

microcontrolador lo registra y responde al comando cambiando de canal, subiendo o bajando el volumen etc. Si el

microcontrolador pasar la mayora del tiempo comprobando varios botones sin parar - las horas, los das, esto no sera
nada prctico.

Por lo tanto, el microcontrolador aprendi un truco durante su evolucin. En vez de seguir comprobando algn pin o

bit, el microconrolador deja su trabajo de esperar a un expertoque reaccionar slo en caso de que suceda algo

digno de atencin.

La seal que informa al procesador central acerca de tal acontecimiento se denomina INTERRUPCIN.

UNIDAD CENTRAL DE PROCESAMIENTO (CENTRAL PROCESSOR UNIT - CPU)

Como indica su nombre, esto es una unidad que controla todos los procesos dentro del microcontrolador. Consiste en

varias unidades ms pequeas, de las que las ms importantes son:

Decodificador de instrucciones es la parte que descodifica las instrucciones del programa y acciona otros
circuitos basndose en esto. El conjunto de instrucciones que es diferente para cada familia de
microcontrolador expresa las capacidades de este circuito;

TCNICOS INDUSTRIALES 77 /112


MICROCONTROLADORES PIC
Unidad lgica aritmtica (Arithmetical Logical Unit - ALU) realiza todas las operaciones matemticas y
lgicas sobre datos; y

Acumulador o registro de trabajo. Es un registro SFR estrechamente relacionado con el funcionamiento de la


ALU. Es utilizado para almacenar todos los datos sobre los que se debe realizar alguna operacin (sumar,
mover). Tambin almacena los resultados preparados para el procesamiento futuro. Uno de los registros SFR,
denominado Registro Status (PSW), est estrechamente relacionado con el acumulador. Muestra el estado
de un nmero almacenado en el acumulador (el nmero es mayor o menor que cero etc.) en cualquier instante
dado.

BUS

El bus est formado por 8, 16 o ms cables. Hay dos tipos de buses: el bus de direcciones y el bus de datos. El bus de

direcciones consiste en tantas lneas como sean necesarias para direccionar la memoria. Se utiliza para transmitir la

direccin de la CPU a la memoria. El bus de datos es tan ancho como los datos, en este caso es de 8 bits o lneas de

ancho. Se utiliza para conectar todos los circuitos dentro del microcontrolador.

COMUNICACIN EN SERIE

La conexin paralela entre el microcontrolador y los perifricos a travs de los puertos de entrada/salida es una solucin

perfecta para las distancias cortas - hasta varios metros. No obstante, en otros casos cuando es necesario establecer

comunicacin entre dos dispositivos a largas distancias no es posible utilizar la conexin paralela. En vez de eso, se

utiliza la conexin en serie.

Hoy en da, la mayora de los microcontroladores llevan incorporados varios sistemas diferentes para la comunicacin

en serie, como un equipo estndar. Cul de estos sistemas se utilizar en un caso concreto, depende de muchos

factores, de los que ms importantes son:

Con cuntos dispositivos el microcontrolador tiene que intercambiar los datos?

Cul es la velocidad del intercambio de datos obligatoria?

Cul es la distancia entre los dispositivos?

Es necesario transmitir y recibir los datos simultneamente?

TCNICOS INDUSTRIALES 78 /112


MICROCONTROLADORES PIC

Una de las cosas ms importantes en cuanto a la comunicacin en serie es el Protocolo que debe ser estrictamente

observado. Es un conjunto de reglas que se aplican obligatoriamente para que los dispositivos puedan interpretar

correctamente los datos que intercambian mutuamente. Afortunadamente, los microcontroladores se encargan de eso

automticamente, as que el trabajo de programador/usuario es reducido a la escritura y lectura de datos.

VELOCIDAD DE TRANSMISIN SERIAL

La velocidad de transmisin serial (baud rate) es el trmino utilizado para denotar el nmero de bits transmitidos por

segundo [bps]. Fjese que este trmino se refiere a bits, y no a bytes! El protocolo normalmente requiere que cada byte

se transmita junto con varios bits de control. Eso quiere decir que un byte en un flujo de datos serial puede consistir en

11 bits. Por ejemplo, si velocidad de transmisin serial es 300 bps un mximo de 37 y un mnimo de 27 bytes se pueden

transmitir por segundo.

Los sistemas de comunicacin serial ms utilizados son:

I2C (INTER INTEGRATED CIRCUIT) - CIRCUITO INTER-INTEGRADO

Circuito inter-integrado es un sistema para el intercambio de datos serial entre los microcontroladores y los circuitos

integrados especializados de generacin. Se utiliza cuando la distancia entre ellos es corta (el receptor y el transmisor

estn normalmente en la misma placa de circuito impreso). La conexin se establece por medio de dos lneas -una se

utiliza para transmitir los datos, mientras que la otra se utiliza para la sincronizacin (la seal de reloj). Como se muestra

TCNICOS INDUSTRIALES 79 /112


MICROCONTROLADORES PIC
en la figura, un dispositivo es siempre el principal (master - maestro), el que realiza el direccionamiento de un chip

subordinado (slave -esclavo) antes de que se inicie la comunicacin. De esta manera un microcontrolador puede

comunicarse con 112 dispositivos diferentes. La velocidad de transmisin serial es normalmente 100 Kb/seg (el modo

estndar) o 10 Kb/seg (modo de velocidad de transmisin baja). Recientemente han aparecido los sistemas con la

velocidad de transmisin serial 3.4 Mb/sec. La distancia entre los dispositivos que se comunican por el bus I2C est

limitada a unos metros.

SPI (SERIAL PERIPHERAL INTERFACE BUS) - BUS SERIAL DE INTERFAZ DE PERIFRICOS

Un bus serial de interfaz de perifricos es un sistema para la comunicacin serial que utiliza hasta cuatro lneas

(normalmente solo son necesarias tres) - para recibir los datos, para transmitir los datos, para sincronizar y (opcional)

para seleccionar el dispositivo con el que se comunica. Esto es la conexin full duplex, lo que significa que los datos se

envan y se reciben simultneamente.

La velocidad de transmisin mxima es mayor que en el sistema de conexin I2C.

UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER) - TRANSMISOR-RECEPTOR


ASNCRONO UNIVERSAL

Este tipo de conexin es asncrona, lo que significa que no se utiliza una lnea especial para transmitir la seal de reloj.

En algunas aplicaciones este rasgo es crucial (por ejemplo, en mandar datos a distancia por RF o por luz infrarroja).

Puesto que se utiliza slo una lnea de comunicacin, tanto el receptor como el transmisor reciben y envan los datos a

velocidad misma que ha sido predefinida para mantener la sincronizacin necesaria. Esto es una manera simple de

transmitir datos puesto que bsicamente representa una conversin de datos de 8 bits de paralelo a serial. La velocidad

de transmisin no es alta, es hasta 1 Mbit/sec.

TCNICOS INDUSTRIALES 80 /112


MICROCONTROLADORES PIC
OSCILADOR

Los pulsos uniformes generados por el oscilador permiten el funcionamiento armnico y sncrono de todos los circuitos

del microcontrolador. El oscilador se configura normalmente de tal manera que utilice un cristal de cuarzo o resonador

cermico para estabilizacin de frecuencia. Adems, puede funcionar como un circuito autnomo (como oscilador RC).

Es importante decir que las instrucciones del programa no se ejecutan a la velocidad impuesta por el mismo oscilador

sino varias veces ms despacio. Eso ocurre porque cada instruccin se ejecuta en varios ciclos del oscilador. En

algunos microcontroladores se necesita el mismo nmero de ciclos para ejecutar todas las instrucciones, mientras que

en otros el tiempo de ejecucin no es el mismo para todas las instrucciones. Por consiguiente, si el sistema utiliza el

cristal de cuarzo con una frecuencia de 20 MHZ, el tiempo de ejecucin de una instruccin de programa no es 50 nS,

sino 200, 400 o 800 nS dependiendo del tipo del microcontrolador.

CIRCUITO DE ALIMENTACIN

Hay que mencionar dos cosas dignas de atencin con relacin al circuito de la fuente de alimentacin de

microcontroladores:

Brown out es un estado potencialmente peligroso que ocurre al apagar el microcontrolador o en caso de que
el voltaje de la fuente de alimentacin salga de unos mrgenes debido al ruido elctrico. Como el
microcontrolador dispone de varios circuitos que funcionan a niveles de voltaje diferentes, ese estado puede
causar un comportamiento descontrolado. Para evitarlo, el microcontrolador normalmente tiene un circuito
incorporado para el brown out reset. El circuito reinicia inmediatamente el microcontrolador si el voltaje de
alimentacin cae por debajo del lmite.

El pin de reset (reinicio), marcado frecuentemente con MCLR (Master Clear Reset), sirve para el reinicio
externo del microcontrolador al aplicar un cero (0) o un uno (1) lgico dependiendo del tipo del
microcontrolador. En caso de que el circuito brown out no est incorporado, un simple circuito externo para el
brown out reset se puede conectar al pin MCLR.

TEMPORIZADORES/CONTADORES

TCNICOS INDUSTRIALES 81 /112


MICROCONTROLADORES PIC
El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento. Aunque no se trata de la solucin ms

simple, hay muchas razones para utilizarlo. La frecuencia del oscilador es definida con precisin y muy estable, as que

siempre genera los pulsos del mismo ancho, lo que los hace perfectos para medicin de tiempo. Tales osciladores se

utilizan en los relojes de cuarzo. Si es necesario medir el tiempo transcurrido entre dos eventos, basta con contar los

pulsos generados por este oscilador. Esto es exactamente lo que hace el temporizador.

La mayora de los programas utiliza estos cronmetros electrnicos en miniatura. Generalmente son registros SFR de 8

o 16 bits cuyo contenido se aumenta automticamente con cada pulso. Una vez que se llena el registro, se genera una

interrupcin!

Si el temporizador utiliza el oscilador de cuarzo interno para su funcionamiento, es posible medir el tiempo entre dos

eventos (el valor de registro en el momento de iniciar la medicin es T1, en el momento de finalizar la medicin es T2, el

tiempo transcurrido es igual al resultado de la resta T2 - T1). Si los registros se aumentan con los pulsos que vienen de

la fuente externa, tal temporizador se convierte en un contador.

Esto es una explicacin simple de su funcionamiento. Es un poco ms complicado en prctica.

TCNICOS INDUSTRIALES 82 /112


MICROCONTROLADORES PIC
CMO FUNCIONAN LOS TEMPORIZADORES?

En prctica, los pulsos generados por el oscilador de cuarzo son llevados al circuito una vez por cada ciclo de mquina

directamente o por el pre-escalador, lo que aumenta el nmero en el registro del temporizador. Si una instruccin (un

ciclo de mquina) dura cuatro perodos del oscilador de cuarzo, este nmero ser cambiado un milln de veces por

segundo (cada microsegundo) al incorporar al cuarzo que oscila con una frecuencia de 4 MHz.

Es fcil de medir los intervalos de tiempo cortos de la manera descrita anteriormente (hasta 256 microsegundos porque

es el mayor nmero que un registro puede contener). Esta obvia desventaja se puede superar de varias maneras: al

utilizar el oscilador ms lento, por medio de registros con ms bits, del pre-escalador o de la interrupcin. Las primeras

dos soluciones tienen algunas debilidades as que se recomienda utilizar el pre-escalador y/o la interrupcin.

UTILIZAR UN PREESCALADOR EN EL FUNCIONAMIENTO DEL TEMPORIZADOR

Un pre-escalador es un dispositivo electrnico utilizado para dividir la frecuencia por un factor predeterminado. Esto

quiere decir que se necesita llevar 1, 2, 4 o ms pulsos a su entrada para generar un pulso a la salida. La mayora de

los microcontroladores disponen de uno o ms pre-escaladores incorporados y su tasa de divisin puede ser cambiada

dentro del programa. El pre-escalador se utiliza cuando es necesario medir los perodos de tiempo ms largos. Si el

temporizador y el temporizador perro guardin comparten un pre-escalador, ste no se puede utilizar por los dos

simultneamente.

TCNICOS INDUSTRIALES 83 /112


MICROCONTROLADORES PIC

UTILIZAR UNA INTERRUPCIN EN EL FUNCIONAMIENTO DEL TEMPORIZADOR

Si el registro del temporizador es de 8 bits, el mayor nmero que se puede escribir en l es 255 (en los registros de 16

bits es el nmero 65.535). Si se excede este nmero, el temporizador se reinicia automticamente y el conteo comienza
de nuevo en cero. Esto es denominado desbordamiento o sobreflujo (overflow). Permitido por el programa, el

desbordamiento puede provocar una interrupcin, lo que abre completamente nuevas posibilidades. Por ejemplo, el

estado de registros utilizados para contar segundos, minutos o das puede ser implementado en una rutina de

interrupcin. El proceso entero (excepto la rutina de interrupcin) se lleva a cabo internamente, lo que permite que los

circuitos principales del microcontrolador funcionen regularmente.

La figura anterior describe el uso de una interrupcin en el funcionamiento del temporizador. Al asignarle un pre-

escalador al temporizador, se producen retrasos de duracin arbitraria con mnima interferencia en la ejecucin del

programa principal.

CONTADORES

TCNICOS INDUSTRIALES 84 /112


MICROCONTROLADORES PIC
Si un temporizador se suministra por los pulsos ingresados por el pin de entrada en el microcontrolador, se produce un

contador. Evidentemente, es el mismo circuito electrnico. La nica diferencia es que los pulsos para contar se ingresan

por el pin de entrada y que su duracin (anchura) no es definida. Por eso, no se pueden utilizar para medicin de

tiempo, sino que se utilizan para otros propsitos, por ejemplo: contar los productos en la cadena de montaje, nmero

de rotaciones del eje de un motor, pasajeros etc. (dependiendo del sensor utilizado.

TEMPORIZADOR PERRO GUARDIN (WATCHDOG)

El perro guardin es un temporizador conectado a un oscilador RC completamente independiente dentro del

microcontrolador.

Si el perro guardin est habilitado, cada vez que cuenta hasta el mximo valor en el que ocurre el desbordamiento del

registro se genera una seal de reinicio del microcontrolador y la ejecucin de programa inicia en la primera instruccin.

El punto es evitar que eso ocurra al utilizar el comando adecuado.

La idea se basa en el hecho de que cada programa se ejecuta en varios bucles, ms largos o cortos. Si las

instrucciones que reinician el temporizador perro guardin se colocan en lugares estratgicos del programa, aparte los

comandos que se ejecutan regularmente, el funcionamiento del perro guardin no afectar a la ejecucin del programa.

Si por cualquier razn (ruidos elctricos frecuentes en la industria) el contador de programa se queda atrapadodentro

de un bucle infinito, el valor del registro continuar aumentado por el temporizador perro guardin alcanzar el mximo

valor, el registro se desbordar y, aleluya!Ocurre el reinicio!

TCNICOS INDUSTRIALES 85 /112


MICROCONTROLADORES PIC

CONVERTIDOR A/D

Las seales del mundo real son muy diferentes de las que entiende el microcontrolador (ceros y unos), as que deben

ser convertidas para que el microcontrolador pueda entenderlas. Un convertidor analgico-digital es un circuito

electrnico encargado de convertir las seales continuas en nmeros digitales discretos. En otras palabras, este circuito

convierte un nmero real en un nmero binario y se lo enva a la CPU para ser procesado. Este mdulo se utiliza para

medir el voltaje en el pin de entrada.

TCNICOS INDUSTRIALES 86 /112


MICROCONTROLADORES PIC
El resultado de esta medicin es un nmero (el valor digital) utilizado y procesado ms tarde en el programa.

ARQUITECTURA INTERNA

Todos los microcontroladores actuales utilizan uno de dos modelos bsicos de arquitectura denominados Harvard y von-

Neumann.

Son dos maneras diferentes del intercambio de datos entre la CPU y la memoria.

Arquitectura de von-Neumann

TCNICOS INDUSTRIALES 87 /112


MICROCONTROLADORES PIC
Los microcontroladores que utilizan la arquitectura von-Neumann disponen de un solo bloque de memoria y de un bus

de datos de 8 bits. Como todos los datos se intercambian por medio de estas 8 lneas, este bus est sobrecargado, y la

comunicacin por si misma es muy lenta e ineficaz. La CPU puede leer una instruccin o leer/escribir datos de/en la

memoria. Los dos procesos no pueden ocurrir a la vez puesto que las instrucciones y los datos utilizan el mismo bus.

Por ejemplo, si alguna lnea de programa dice que el registro de la memoria RAM llamado SUM debe ser aumentado
por uno (instruccin: incf SUMA), el microcontrolador har lo siguiente:

1. Leer la parte de la instruccin de programa que especifica QU es lo que debe realizar (en este caso es la
instruccin para incrementar incf)

2. Seguir leyendo la misma instruccin que especifica sobre CUL dato lo debe realizar (en este caso es el
contenido del registro SUMA)

3. Despus de haber sido incrementado, el contenido de este registro se debe escribir en el registro del que fue ledo
(direccin del registro SUMA)

El mismo bus de datos se utiliza para todas estas operaciones intermedias.

ARQUITECTURA DE HARVARD

Los microcontroladores que utilizan esta arquitectura disponen de dos buses de datos diferentes. Uno es de 8 bits de

ancho y conecta la CPU con la memoria RAM. El otro consiste en varias lneas (12, 14 o 16) y conecta a la CPU y la

memoria ROM. Por consiguiente, la CPU puede leer las instrucciones y realizar el acceso a la memoria de datos a la

vez. Puesto que todos los registros de la memoria RAM son de 8 bits de ancho, todos los datos dentro del

microcontrolador que se intercambian son de la misma anchura. Durante el proceso de la escritura de programa, slo se

manejan los datos de 8 bits. En otras palabras, todo lo que usted podr cambiar en el programa y a lo que podr afectar

ser de 8 bits de ancho. Todos los programas escritos para estos microcontroladores sern almacenados en la memoria

ROM interna del microcontrolador despus de haber sido compilados a cdigo mquina. No obstante, estas localidades

de memoria ROM no tienen 8, sino 12, 14 o 16 bits. 4, 6 o 8 bits adicionales representan una instruccin que especifica

a la CPU qu hacer con los datos de 8 bits.

Las ventajas de este diseo son las siguientes:

TCNICOS INDUSTRIALES 88 /112


MICROCONTROLADORES PIC
Todos los datos en el programa son de un byte (8 bits) de ancho. Como un bus de datos utilizado para lectura
de programa tiene unas lneas ms (12, 14 o 16), tanto la instruccin como el dato se pueden leer
simultneamente al utilizar estos bits adicionales. Por eso, todas las instrucciones se ejecutan en un ciclo salvo
las instrucciones de salto que son de dos ciclos.

El hecho de que un programa (la ROM) y los datos temporales (la RAM) estn separados, permite a la CPU
poder ejecutar dos instrucciones simultneamente. Dicho de manera sencilla, mientras que se realiza la lectura
o escritura de la RAM (que marca el fin de una instruccin), la siguiente instruccin se lee por medio de otro
bus.

En los microcontroladores que utilizan la arquitectura de von-Neumann, nunca se sabe cunta memoria
ocupar algn programa. Generalmente, la mayora de las instrucciones de programa ocupan dos localidades
de memoria (una contiene informacin sobre QU se debe realizar, mientras que la otra contiene informa cin
sobre CUL dato se debe realizar). Sin embargo, esto no es una frmula rgida, sino el caso ms frecuente. En
los microcontroladores que utilizan una arquitectura Harvard, el bus de la palabra de programa es ms ancho
que un byte, lo que permite que cada palabra de programa est compuesto por una instruccin y un dato. En
otras palabras, una localidad de memoria - una instruccin de programa.

JUEGO DE INSTRUCCIONES

El nombre colectivo de todas las instrucciones que puede entender el microcontrolador es llamado Juego de

Instrucciones. Cuando se escribe un programa en ensamblador, en realidad se especifican instrucciones en el orden en

el que deben ser ejecutadas. La restriccin principal es el nmero de instrucciones disponibles. Los fabricantes aceptan

cualquiera de los dos enfoques descritos a continuacin:

RISC (Reduced Instruction Set Computer) - Computadora con Juego de Instrucciones Reducidas

En este caso la idea es que el microcontrolador reconoce y ejecuta slo operaciones bsicas (sumar, restar, copiar

etc...) Las operaciones ms complicadas se realizan al combinar stas (por ejemplo, multiplicacin se lleva a cabo al

realizar adicin sucesiva). Es como intentar explicarle a alguien con pocas palabras cmo llegar al aeropuerto en una

nueva ciudad. Sin embargo, no todo es tan oscuro. Adems, el microcontrolador es muy rpido as que no es posible

ver todas las acrobacias aritmticas que realiza. El usuario slo puede ver el resultado final de todas las operaciones.

Por ltimo, no es tan difcil explicar dnde est el aeropuerto si se utilizan las palabras adecuadas tales como: a la

derecha, a la izquierda, el kilmetro etc.

CISC (Complex Instruction Set Computer) - Computadoras con un juego de instrucciones complejo

TCNICOS INDUSTRIALES 89 /112


MICROCONTROLADORES PIC
CISC es opuesto a RISC! Los microcontroladores diseados para reconocer ms de 200 instrucciones diferentes

realmente pueden realizar muchas cosas a alta velocidad. No obstante, uno debe saber cmo utilizar todas las

posibilidades que ofrece un lenguaje tan rico, lo que no es siempre tan fcil...

CMO ELEGIR UN MICROCONTROLADOR?

Bueno, si usted es principiante, y ha tomado decisin de trabajar con los microcontroladores. Felicitaciones por la

eleccin! No obstante, a primera vista, no es fcil la eleccin del microcontrolador ms adecuado como parece a la

primera vista. El problema no es el pequeo rango de dispositivos a elegir, sino todo lo contrario!

Antes de empezar a disear un dispositivo basado en un microcontrolador, tome en cuenta lo siguiente: cuntas

entradas/lneas son necesarias para su funcionamiento, realizara el dispositivo otras operaciones adems

encender/apagar un rel, necesita algn modulo especializado tal como el de comunicacin en serie, convertidor A/D

etc. Cuando usted tiene una clara imagen de lo que quiere, el rango de seleccin se reduce considerablemente, y le

queda pensar en el precio. Va a tener varios dispositivos? Varios cientos? Un milln? De todos modos ahora es ms

claro.

Si est pensando en todas estas cosas por primera vez, todo le parecer un poco confuso. Por esa razn, vaya paso a

paso. Antes que nada, seleccione al fabricante, es decir, la familia de microcontroladores que ofrece. Luego, aprenda a

trabajar con un modelo particular. Slo aprenda lo que necesite aprender, no entre demasiado en detalles. Resuelva el

problema especfico y le pasar una cosa increble - ser capaz de manejar cualquier modelo del mismo fabricante...

Ms o menos, todo se parece a montar en bicicleta: despus de varias cadas inevitables en el principio, ser capaz de

mantener el equilibrio y montar en cualquier otra bicicleta. Por supuesto, nunca se olvida tanto de montar en bicicleta,

como de la destreza de programacin!

1.4 MICROCONTROLADORES PIC

Los microcontroladores PIC desarrollados por Microchip Technology son probablemente la mejor opcin si es

principiante. Hay varias razones por lo que esto es verdadero...

El nombre verdadero de este microcontrolador es PICmicro (Peripheral Interface Controller), conocido bajo el nombre

PIC. Su primer antecesor fue creado en 1975 por la compaa General Instruments. Este chip denominado PIC1650 fue

diseado para propsitos completamente diferentes. Diez aos ms tarde, al aadir una memoria EEPROM, este

circuito se convirti en un verdadero microcontrolador PIC. Hace unos pocos aos la compaa Microchip Technology

fabric la 5 billonsima muestra. Si est interesado en aprender ms sobre eso, siga leyendo.

If you are interested in learning more about it, just keep on reading.

TCNICOS INDUSTRIALES 90 /112


MICROCONTROLADORES PIC
La idea principal de este libro es proporcionar la informacin necesaria al usuario para que sea capaz de utilizar los

microcontroladores en la prctica despus de leerlo. Para evitar explicaciones pesadas y las historias infinitas sobre las

caractersticas tiles de los microcontroladores diferentes, este libro describe el funcionamiento de un modelo particular

que pertenece a la clase media alta. Es PIC16F887 - bastante poderoso para ser digno de atencin y bastante simple

para poder ser utilizado por cualquiera. As, los siguientes captulos describen este microcontrolador en detalle y

tambin se refieren a la familia PIC entera.

Resolucin
Frecuencia
ROM RAM Entradas del Temporizadore
Familia Pines de reloj. Comparadores
[Kbytes] [bytes] A/D convertidor de 8/16 bits
[MHz]
A/D

Arquitectura de la gama baja de 8 bits, palabra de instruccin de 12 bits

0.375 -
PIC10FXXX 16 - 24 6-8 4-8 0-2 8 0-1 1x8
0.75

PIC12FXXX 0.75 - 1.5 25 - 38 8 4-8 0-3 8 0-1 1x8

PIC16FXXX 0.75 - 3 25 - 134 14 - 44 20 0-3 8 0-2 1x8

PIC16HVXXX 1.5 25 18 - 20 20 - - - 1x8

Arquitectura de la gama media de 8 bits, palabra de instruccin de 14 bits

PIC12FXXX 1.75 - 3.5 64 - 128 8 20 0-4 10 1 1 - 2 x 8 1 x 16

PIC12HVXXX 1.75 64 8 20 0-4 10 1 1 - 2 x 8 1 x 16

PIC16FXXX 1.75 - 14 64 - 368 14 - 64 20 0 - 13 8 or 10 0-2 1 - 2 x 8 1 x 16

PIC16HVXXX 1.75 - 3.5 64 - 128 14 - 20 20 0 - 12 10 2 2 x 8 1 x 16

Arquitectura de la gama alta de 8 bits, palabra de instruccin de 16 bits

256 -
PIC18FXXX 4 - 128 18 - 80 32 - 48 4 - 16 10 or 12 0-3 0-2x82-3x
3936

1024 -
PIC18FXXJXX 8 - 128 28 - 100 40 - 48 10 - 16 10 2 0-2x82-3x
3936

768 -
PIC18FXXKXX 8 - 64 28 - 44 64 10 - 13 10 2 1 x 8 3 x 16
3936

Todos los microcontroladores PIC utilizan una arquitectura Harvard, lo que quiere decir que su memoria de programa

est conectada a la CPU por ms de 8 lneas. Hay microcontroladores de 12, 14 y 16 bits, dependiendo de la anchura

del bus. La tabla anterior muestra las caractersticas principales de estas tres categoras.

Como se puede ver en la tabla de la pgina anterior, salvo los monstruos de 16 bits PIC 24FXXX y PIC 24HXXX -

todos los microcontroladores tienen la arquitectura Harvard de 8 bits y pertenecen a una de las tres grandes grupos. Por

eso, dependiendo del tamao de palabra de programa existen la primera, la segunda y la tercera categora de

microcontroladores, es decir microcontroladores de 12, 14 o 16 bits. Puesto que disponen del ncleo similar de 8 bits,

todos utilizan el mismo juego de instrucciones y el esqueleto bsico de hardware conectado a ms o menos unidades

perifricas.

Los microcontroladores PIC con palabras de programa de 14 bits parecen ser la mejor opcin para los principiantes.

Aqu est el porqu...

TCNICOS INDUSTRIALES 91 /112


MICROCONTROLADORES PIC
JUEGO DE INSTRUCCIONES

El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones en total. La razn para un

nmero 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 cdigo. Lo

malo de la arquitectura RISC es que se espera del programador que haga frente a estas instrucciones. Por supuesto,

esto es relevante slo si se utiliza el lenguaje ensamblador para la programacin. Este libro se refiere a la programacin

en el lenguaje de alto nivel C, lo que significa que la mayor parte del trabajo ya fue hecho por alguien ms. As, slo se

tienen que utilizar instrucciones relativamente simples.

TIEMPO DE EJECUCIN DE INSTRUCCIONES

Todas las instrucciones se ejecutan en un ciclo. La nicas excepciones pueden ser las instrucciones de ramificacin

condicional o las instrucciones que cambian el contenido del contador de programa. En ambos casos, dos ciclos de reloj

son necesarios para la ejecucin de la instruccin, 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 ejecucin de la instruccin es 1S. En cuanto a las instrucciones de ramificacin, el tiempo de

ejecucin de la instruccin es 2S.

Juego de instrucciones de los microcontroladores PIC de 14 bits:

INSTRUCCIN DESCRIPCIN OPERACIN BANDERA CLK *

Instrucciones para la transmisin 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

f(7:4),(3:0) -> f(3:0),


SWAPF f,d Intercambiar de nibbles en f 1 1, 2
(7:4)

Instrucciones aritmtico - lgicas

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

TCNICOS INDUSTRIALES 92 /112


MICROCONTROLADORES PIC
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

Rotar F a la izquierda a travs del bit


RLF f,d C 1 1, 2
de Acarreo

Rotar F a la derecha a travs del bit


RRF f,d C 1 1, 2
de Acarreo

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

Disminuir f en 1. Saltar si el
DECFSZ f,d f-1 -> d skip if Z = 1 1 (2) 1, 2, 3
resultado es 0

Incrementar f en 1. Saltar si el
INCFSZ f,d f+1 -> d skip if Z = 0 1 (2) 1, 2, 3
resultado es 1

GOTO k Saltar a una direccin 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 interupcin TOS -> PC, 1 -> GIE 2

Otras instrucciones

NOP No operacin TOS -> PC, 1 -> GIE 1

Reiniciar el temporizador perro 0 -> WDT, 1 -> TO, 1 ->


CLRWDT TO, PD 1
guardin PD

0 -> WDT, 1 -> TO, 0 ->


SLEEP Poner en estado de reposo TO, PD 1
PD

*1 Si un registro de E/S est modificado, el valor utilizado ser el valor presentado en los pines del microcontrolador.

*2 Si la instruccin se ejecuta en el registro TMR y si d=1, el pre-escalador ser borrado.

*3 Si la instruccin se ejecuta en el registro TMR y si d=1, el pre-escalador ser borrado.

TCNICOS INDUSTRIALES 93 /112


MICROCONTROLADORES PIC

TCNICOS INDUSTRIALES 94 /112


MICROCONTROLADORES PIC
Arquitectura de los microcontroladores PIC de 8 bits. Cules de estos mdulos pertenecern al microcontrolador,

depender del tipo de microcontrolador.

TCNICOS INDUSTRIALES 95 /112