Вы находитесь на странице: 1из 51

Divisin de Ingenieras

Campus Irapuato-Salamanca
Universidad de Guanajuato

M.en I. J. ANTONIO ALVAREZ JAIME

MANUAL
DE MICROCONTROLADORES PIC

Contenido:

CAPITULO 1
Introduccin a los microcontroladores (Microcontroladores PIC de Microchip)

CAPITULO 2
Descripcin General del PIC16F874

CAPITULO 3
Conjunto de Instrucciones de Rango Medio

CAPITULO 4
Una mirada rpida al MPLAB

CAPITULO 5
Aplicaciones prcticas con PICs (PIC16F873, PIC16F877, PIC 16F874, PIC16F84)

CAPITULO 1
Introduccin a los microcontroladores
(Microcontroladores PIC de Microchip)
Recibe el nombre de controlador el dispositivo que se emplea para el gobierno de uno
o varios procesos.
Un microcontrolador es un circuito integrado de alta escala de integracin que
incorpora la mayor parte de los elementos que configuran un controlador. El microcontrolador,
por otro lado, es un sistema cerrado. Todas las partes del microcontrolador estn contenidas
en su interior y solo salen al exterior las lneas que gobiernan los perifricos.
El microprocesador es un circuito integrado que contiene la Unidad Central de
Proceso (CPU), tambin llamada procesador, de una computadora.

Arquitectura bsica
Aunque inicialmente todos los microcontroladores adoptaron la arquitectura clsica de von
Neumann, en el momento presente se impone la arquitectura Harvard. La arquitectura de von
Neumann se caracteriza por disponer de una sola memoria principal donde se almacenan
datos e instrucciones de forma indistinta. A dicha memoria se accede a travs de un sistema
de buses nico (direcciones, datos y control). La arquitectura Harvard dispone de dos
memorias independientes, una que contiene solo instrucciones y otra, solo datos.

Ambas disponen de sus respectivos sistemas de buses de acceso y es posible realizar


operaciones de acceso (lectura o escritura) simultneamente en ambas memorias. Los
microcontroladores PIC responden a la arquitectura Harvard.

FIG. 1 Arquitectura Von Newmann

FIG. 2 Arquitectura Harvard

Aplicaciones de los microcontroladores estn siendo empleados en multitud de


sistemas presentes en nuestra vida diaria, como pueden ser juguetes, horno microondas,
frigorficos, televisores, computadoras, impresoras, mdems, el sistema de arranque de
nuestro coche, etc.

CAPITULO 2
Descripcin General del PIC16F874

La Familia del PIC16F874


El microcontrolador PIC16F874 de Microchip pertenece a una gran familia de
microcontroladores de 8 bits (bus de datos) que tienen las siguientes caractersticas generales
que los distinguen de otras familias:
- Arquitectura Harvard
- Tecnologa RISC
- Tecnologa CMOS
Estas caractersticas se conjugan para lograr un dispositivo altamente eficiente en el uso de la
memoria de datos y programa y por lo tanto en la velocidad de ejecucin.
Microchip ha dividido sus microcontroladores en tres grandes subfamilias de acuerdo al
nmero de bits de su bus de instrucciones:

Variantes principales
Los microcontroladores que produce Microchip cubren un amplio rango de dispositivos cuyas
caractersticas pueden variar como sigue:
- Empaquetado (desde 8 terminales hasta 68 terminales)
- Tecnologa de la memoria incluida (EPROM, ROM, Flash)
- Voltajes de operacin (desde 2.5 v. Hasta 6v)
- Frecuencia de operacin (Hasta 20 Mhz)

Empaquetados
Aunque cada empaquetado tiene variantes, especialmente en lo relativo a las dimensiones del
espesor del paquete, en general se pueden encontrar paquetes tipo PDIP (Plastic Dual In Line
Package), PLCC (Plastic Leaded Chip Carrier) y QFP (Quad Flat Package), los cuales
se muestran en las figuras siguientes

Nomenclatura

Adems de lo mostrado en la tabla anterior, en el nombre especfico del microcontrolador


pueden aparecer algunas siglas como se muestra en la siguiente tabla:

En la siguiente tabla se especifican los rangos de voltaje estndar y extendido manejados por
los dispositivos

Oscilador
Los PIC de rango medio permiten hasta 8 diferentes modos para el oscilador. El usuario
puede seleccionar alguno de estos 8 modos programando 3 bits de configuracin del
dispositivo denominados: FOSC2, FOSC1 y FOSC0. En algunos de estos modos el usuario
puede indicar que se genere o no una salida del oscilador (CLKOUT) a travs de una terminal
de Entrada/Salida. Los modos de operacin se muestran en la siguiente lista:
LP Baja frecuencia (y bajo consumo de potencia)
XT Cristal / Resonador cermico externos, (Media frecuencia)
HS Alta velocidad (y alta potencia) Cristal/resonador
RC Resistencia / capacitor externos (mismo que EXTRC con CLKOUT)
EXTRC Resistencia / capacitor externos
EXTRC Resistencia / Capacitor externos con CLCKOUT
INTRC Resistencia / Capacitor internos para 4 MHz
INTRC Resistencia / Capacitor internos para 4 MHz con CLKOUT
Los tres modos LP, XT y HS usan un cristal o resonador externo, la diferencia sin embargo es
la ganancia de los drivers internos, lo cual se ve reflejado en el rango de frecuencia admitido y
la potencia consumida. En la siguiente tabla se muestran los rangos de frecuencia as como
los capacitores recomendados para un oscilador en base a cristal.

Cristal externo: En los tres modos mostrados en la tabla anterior se puede usar un cristal
o resonador cermico externo. En la siguiente figura se muestra la conexin de un cristal a las
terminals OSC1 y OS2 del PIC.

Circuito RC externo: En los modos RC y EXTRC el PIC puede generar su seal


oscilatoria basada en un arreglo RC externo conectado a la terminal OSC1 como se muestra
en la siguiente figura:

Este modo slo se recomienda cuando la aplicacin no requiera una gran precisin en la
medicin de tiempos.
Rangos.- La frecuencia de oscilacin depende no slo de los valores de Rext y Cext, sino
tambin del voltaje de la fuente Vdd. Los rangos admisibles para resistencia y capacitor son:
Rext: de 3 a 100 Kohms
Cext: mayor de 20 pf
Oscilador externo.- Tambin es posible conectar una seal de reloj generada
mediante un oscilador externo a la terminal OSC1 del PIC.
Para ello el PIC deber estar en uno de los tres modos que admiten cristal (LP, XT o
HS). La conexin se muestra en la siguiente figura:

Oscilador interno de 4Mhz.- En el modo INTRC el PIC usa un arreglo RC interno que
genera una frecuencia de 4 Mhz con un rango de error calibrable de 1.5%. Para calibrar el
error de oscilacin se usan los bits CAL3, CAL2 , CAL1 Y CAL0 del registro OSCCAL.

Calibracin del oscilador interno.- El fabricante ha colocado un valor de calibracin


para estos bits en la ltima direccin de la memoria de programa. Este dato ha sido guardado
en la forma de una instruccin RETLW XX. Si no se quiere perder este valor al borrar el PIC
(en versiones EPROM con ventana) primero se deber leer y copiar. Es una buena idea
escribirlo en el empaquetado antes de borrar la memoria).

Recursos especiales
Cada fabricante oferta numerosas versiones de una arquitectura bsica de microcontrolador.
En algunas amplia las capacidades de las memorias, en otras incorporan nuevos recursos, en
otras reduce las prestaciones al mnimo para aplicaciones muy simples, etc. La labor del
diseador es encontrar el modelo mnimo que satisfaga todos los requerimientos de su
aplicacin. De esta forma, minimizara el coste, el hardware y el software. Los principales
recursos especiales que incorporan los microcontroladores son:

Temporizadores o "Timers".
Perro guardin o "Watchdog".
Proteccin ante fallo de alimentacin o "Brownout".
Estado de reposo o de bajo consumo.
Conversor A/D. o Conversor D/A.
Comparador analgico.
Modulador de anchura de pulsos o PWM.
Puertos de E/S digitales.
Puertos de comunicacin.

Temporizadores o Timers
Se emplean para controlar periodos de tiempo (temporizadores) y para llevar la cuenta de
acontecimientos que suceden en el exterior (contadores). Para la medida de tiempos se carga
un registro con el valor adecuado y a continuacin dicho valor se va incrementando o
decrementando al ritmo de los pulsos de reloj o algn mltiplo hasta que se desborde y llegue
a 0, momento en el que se produce un aviso. Cuando se desean contar acontecimientos que
se materializan por cambios de nivel o bancos en alguna de las terminales del
microcontrolador, el mencionado registro se va incrementando o decrementando al ritmo de
dichos pulsos.

Perro guardin o Watchdog


Cuando una computadora personal se bloquea por un fallo del software u otra causa, se pulsa
el botn del reset y se reinicializa el sistema. Pero un microcontrolador funciona sin el control
de un supervisor y de forma continuada las 24 horas del da. El Perro guardin consiste en un
temporizador que, cuando se desborda y pasa por 0, provoca un reset automticamente en el
sistema. Se debe disear el programa de trabajo que controla la tarea de forma que refresque
o inicialice al Perro guardin antes de que provoque el reset. Si falla el programa o se
bloquea, no se refrescara al Perro guardin y, al completar su temporizacin, "ladrara y
ladrara "hasta provocar el reset.
Proteccin ante fallo de alimentacin o Brownout
Se trata de un circuito que resetea al microcontrolador cuando el voltaje de alimentacin
(VDD) es inferior a un voltaje mnimo ("brownout"). Mientras el voltaje de alimentacin sea
inferior al de brownout el dispositivo se mantiene reseteado, comenzando a funcionar
normalmente cuando sobrepasa dicho valor.

Estado de reposo o de bajo consumo


Son abundantes las situaciones reales de trabajo en que el microcontrolador debe esperar,
sin hacer nada, a que se produzca algn acontecimiento externo que le ponga de nuevo en
funcionamiento. Para ahorrar energa, (factor clave en los aparatos porttiles), los
microcontroladores disponen de una instruccin especial (SLEEP en los PIC), que les pasa al
estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mnimos.
En dicho estado se detiene el reloj principal y se detienen sus circuitos asociados, quedando
sumido en un profundo sueo el microcontrolador. Al activarse una interrupcin ocasionada
por el acontecimiento esperado, el microcontrolador se despierta y reanuda su trabajo.

Conversor A/D (CAD)


Los microcontroladores que incorporan un Conversor A/D (Analgico/Digital)
Pueden procesar seales analgicas, tan abundantes en las aplicaciones. Suelen disponer de
un multiplexor que permite aplicar a la entrada del CAD diversas seales analgicas desde las
terminales del circuito integrado.

Conversor D/A (CDA)

Transforma los datos digitales obtenidos del procesamiento de una computadora en su


correspondiente seal analgica que saca al exterior por una de las terminales de la capsula.
Existen muchos dispositivos que trabajan con seales analgicas.

Comparador analgico
Algunos modelos de microcontroladores disponen internamente de un Amplificador
Operacional que acta como comparador entre una seal de referencia y otra variable que se
aplica por una de las terminales de la capsula. La salida del comparador proporciona un nivel
lgico 1 o 0 segn una seal sea mayor o menor que la otra. Tambin hay modelos de
microcontroladores con un mdulo de tensin de referencia que proporciona diversas
tensiones de referencia que se pueden aplicar en los comparadores.

Modulador de anchura de pulso o PWM


Son circuitos que proporcionan en su salida pulsos de anchura variable, que se ofrecen al
exterior a travs de las terminales del encapsulado.

Puertos de E/S digitales


Todos los microcontroladores destinan algunas de sus terminales a soportar lneas de E/S
digitales. Por lo general, estas lneas se agrupan de ocho en ocho formando Puertos.
Las lneas digitales de los Puertos pueden configurarse como Entrada o
Como Salida cargando un 1 o un 0 en el bit correspondiente de un registro
Destinado a su configuracin.

Puertos de comunicacin

Con objeto de dotar al microcontrolador de la posibilidad de comunicarse con otros


dispositivos externos, otros buses de microprocesadores, buses de sistemas, buses de redes
y poder adaptarlos con otros elementos bajo otras normas y protocolos. Algunos modelos
disponen de recursos que permiten directamente esta tarea, entre los que destacan:
UART: adaptador de comunicacin serie asncrona.
USART: adaptador de comunicacin serie sincrona y asncrona Puerta paralela esclava para
poder conectarse con los buses de otros microprocesadores.
USB: (Universal Serial Bus), que es un moderno bus serie para las PC.
Bus I2C: que es un interfaz serie de dos hilos desarrollado por Philips.
CAN(Controller Area Network): , para permitir la adaptacin con redes de conexionado
multiplexado desarrollado conjuntamente por Bosch e Intel para el cableado de dispositivos en
automviles. En EE.UU. se usa el J185O.

Caractersticas generales del PIC16F874


La siguiente es una lista de las caractersticas que comparte el PIC16F874 con los
dispositivos ms cercanos de su familia:

- CPU RISC
- Slo 35 instrucciones que aprender
- Todas las instrucciones se ejecutan en un ciclo de reloj, excepto los saltos que requieren dos
- Frecuencia de operacin de 0 a 20 MHz (DC a 200 nseg de ciclo de instruccin)
- Hasta 8k x 14 bits de memoria Flash de programa
- Hasta 368 bytes de memoria de datos (RAM)
- Hasta 256 bytes de memoria de datos EEPROM
- Hasta 4 fuentes de interrupcin
- Stack de hardware de 8 niveles
- Reset de encendido (POR)
- Timer de encendido (PWRT)
- Timer de arranque del oscilador (OST)
- Sistema de vigilancia Watchdog timer.
- Proteccin programable de cdigo
- Modo SEP de bajo consumo de energa
- Opciones de seleccin del oscilador
- Programacin y depuracin serie In-Circuit (ICSP) a travs de dos terminals
- Lectura/escritura de la CPU a la memoria flash de programa
- Rango de voltaje de operacin de 2.0 a 5.5 volts
- Alta disipacin de corriente de la fuente: 25mA
- Rangos de temperatura: Comercial, Industrial y Extendido
- Bajo consumo de potencia:
o Menos de 0.6mA a 3V, 4 Mhz

o 20 A a 3V, 32 Khz
o menos de 1A corriente de standby.

Perifricos
- Timer0: Contador/Temporizador de 8 bits con pre-escalador de 8
bits
- Timer1: Contador/Temporizador de 16 bits con pre-escalador
- Timer0: Contador/Temporizador de 8 bits con pre-escalador y
post-escalador de 8 bits y registro de periodo.
- Dos mdulos de Captura, Comparacin y PWM
- Convertidor Analgico/Digital: de 10 bits, hasta 8 canales
- Puerto Serie Sncrono (SSP)
- Puerto Serie Universal (USART/SCI).
- Puerto Paralelo Esclavo (PSP): de 8 bits con lneas de protocolo

Diagrama de Bloques del PIC16F874


En la siguiente figura se muestra a manera de bloques la organizacin interna del PIC16F874,
Se muestra tambin junto a este diagrama su diagrama de terminales, para tener una visin
conjunta del interior y exterior del Chip.

CAPITULO 3
Conjunto de Instrucciones de Rango Medio
En la siguiente tabla se resumen las instrucciones que reconoce la CPU de los PIC de medio
rango, incluyendo su mnemnico, tiempo de ejecucin, cdigo de mquina y afectacin de
banderas:
Table B.8: 14-Bit Core Literal and Control Operations
Hex

Mnemonic

Description

Function

3Ekk

ADDLW

k Add literal to W

k + W

39kk

ANDLW

k AND literal and W

k .AND. W

2kkk

CALL

k Call subroutine

PC + 1

0064

CLRWDT

T Clear watchdog timer

0
WDT (and Prescaler if
assigned)

2kkk

GOTO

k Goto address (k is nine bits)

38kk

IORLW

k Incl. OR literal and W

k .OR. W

30kk

MOVLW

k Move Literal to W

0062

OPTION

Load OPTION register

OPTION Register

0009

RETFIE

Return from Interrupt

TOS

34kk

RETLW

0008

RETURN

Return from subroutine

TOS

0063

SLEEP

Go into Standby Mode

3Ckk

SUBLW

k Subtract W from literal

k - W

006f

TRIS

f Tristate port f

3Akk

XORLW

k Exclusive OR literal and W

k .XOR. W

k Return with literal in W

W
W
TOS, k

PC

PC(9 bits)
W

PC, 1

GIE

W, TOS

PC

PC
WDT, stop oscillator
W

I/O control reg f


W

Table B.9: 14-Bit Core Byte Oriented File Register Operations


Hex

Mnemonic

07ff

ADDWF

05ff

ANDWF

018f

CLRF

0100

CLRW

09ff

COMF

03ff

DECF

0Bff

DECFSZ

0Aff

INCF

0Fff

INCFSZ

04ff
08ff

Description
f,d Add W and f
f,d AND W and f
f Clear f
Clear W

Function
W + f

W .AND. f
0

f,d Complement f
f,d Decrement f

.NOT. f
f - 1

f,d Decrement f, skip if zero


f,d Increment f

f - 1

d, skip if 0

IORWF

f,d Increment f, skip if zero


f,d Inclusive OR W and f

f + 1
d, skip if 0
W .OR. f
d

MOVF

f,d Move f

f + 1

CAPITULO 4.
UNA MIRADA RAPIDA AL MPLAB (Herramientas de desarrollo)
Qu es el MPLAB?
EL MPLAB es un Entorno de Desarrollo Integrado (Integrated Development Environment,
IDE) que corre en Windows , mediante el cual Usted puede desarrollar aplicaciones para los
microcontroladores de las familias PIC 16/17. 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.
De qu 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
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

CAPITULO 5
Aplicaciones prcticas con PICs
(PIC16F873, PIC16F877, PIC 16F874, PIC16F84)

Prctica No. 1
SISTEMA BSICO DEL MICROCONTROLADOR PIC16F87X

OBJETIVOS:

Implementar el sistema bsico para operar los microcontroladores PIC 16F873 o 16F877.

Utilizar el entorno grfico MPLAB IDE para editar, compilar y depurar el primer programa en
ensamblador para programar los PIC 16F873 o 16F877.
COMPONENTES:
1 Microcontrolador PIC 16f873 o 16F877
8 LEDS
8 resistores de 220k
1 resistor menor a 40K
1 resistor mayor a 1K
1 capacitor electroltico de cualquier valor
1 cristal 4MHz
2 Capacitores cermicos 15-68pF
Cable

EQUIPO:
1 Fuente de +5V
1 Punta lgica
1 Multmetro
1 Plantilla
Pinzas de punta y de corte
1 Computadora (software MPLAB y software WinPic800)
1 Programador de PIC

1.1 INTRODUCCIN.

Los microcontroladores son dispositivos verstiles que tienen una infinidad de aplicaciones. En este
curso se utilizar el microcontrolador PIC16F873 (o 16F877) de Microchip Technology, una de las
empresas lderes en el mercado de los microcontroladores.
El diagrama de los pines para los PIC16F873 en la fig1. y PIC16F877 en la fig2. son los siguientes:

Fig1. PIC16F873A (Diagrama de 28 pines )

Fig2. PIC16F877A (Diagrama de 40 pines )

Las caractersticas de estos PICs estn resumidas en el siguiente cuadro:

1.2 DESARROLLO.
Para editar, depurar y simular el cdigo con el que se programar el microcontrolador se
utilizar el entorno grfico MPLAB IDE (Integrated Development Environment).
Los pasos a seguir son los siguientes:
1. Se abre el programa y se selecciona la opcin Project Wizard del men PROJECT.

2. En las ventanas emergentes se selecciona el tipo de microcontrolador a usar, el nombre del


proyecto, as como el directorio de trabajo (tener cuidado de determinar este directorio para saber
donde guardar sus archivos de trabajo).

3. Una vez determinado su proyecto, abrir una ventana nueva que guardar bajo el nombre que
desee con la extensin .asm.

4. Este archivo se llamar despus en la ventana que tiene el nombre del proyecto con la extensin
mcw.
Esto se hace al seleccionar con el botn derecho del mouse Source Files.

5. El cdigo en ensamblador que se escribir en la nueva ventana es el siguiente:

LIST P = 16f873
#include "P16F873.INC"
RADIX HEX
AUX1 EQU 0x20
AUX2 EQU 0x21
AUX3 EQU 0x22
ORG 5

bsf STATUS,5
movlw 0xff ; W <= ff
movwf PORTA
clrf PORTB
bcf STATUS,5
bsf STATUS,C
clrf AUX1
inicio
btfsc PORTA,0
clrf AUX1
incf AUX1
movf AUX1,w ; W <= AUX1
movwf PORTB
call retardo
goto inicio

; Los valores se representan en hexadecimal


; Registros auxiliares

; Comando que indica al ensamblador la direccin


; de la memoria donde se situar la instruccin
; siguiente
; Pone a 1 el bit 5 de ESTADO para direccionar
; el banco 1 de la memoria de datos
; Las lneas de PA como entradas
; Puerta B como salidas
; Pone a 0 el bit 5 de ESTADO pasando a acceder
; al banco 0
; Inicializa el contador a 0
; Si bit 0 = 1 entonces resetea el contador
; Incrementa el contador

; W => Puerta B. El valor de W sale por las lneas


; de Puerta B a los led
; Llama subrutina de retardo
; Se salta a la instruccin precedida por la
; etiqueta inicio
;********* SUBRUTINA DE RETARDO ************************
;Esta rutina se utiliza como un divisor de frecuencia, ya que no
;se puede utilizar la frecuencia del PIC de manera directa.

retardo
movlw 0xff
movwf AUX2
one
call retardo2
decfsz AUX2,1
;ella misma
goto one
return
retardo2
movlw 0xff

; Programa contador de 4 bits con 'clear'


; Comando que indica el PIC usado

;se lleva este valor a AUX2

;Se decrementa AUX2 y se deposita en


;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal

movwf AUX3
two
decfsz AUX3,1
;ella misma
goto two
return
END

;se lleva este valor a AUX2


;Se decrementa AUX2 y se deposita en
;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal
; Directiva que indica el final del programa

Ya que se haya escrito este cdigo se guardaran los cambios en nuestro archivo con extensin .asm
(en el menu FILE --- SAVE) y se seleccionar la opcin Build All en el men PROJECT o el cono en la
barra de botones.

Al haberse compilado el cdigo sin errores se utilizar el programa WINPIC800 para programar el
PIC.
El Pic que utilizamos es el PIC16F873A
Se generara un archivo con extensin .HEX, el cual llamaremos al programa que nos va a
cargar el PIC

El programa que se utiliz para programar el pic fue el WinPic800. y se empleo tambien un hardware
para el cargador del PIC16F873A
B. Ya que se haya programado el PIC, este se pasa a la plantilla de trabajo y se conectar de acuerdo
a los siguientes diagramas de la fig3 y la fig4.
Tener cuidado al manejar el PIC de no daarlo con electricidad esttica (utilizar pinzas para su
manejo). El voltaje que se utilizar es de 5V para VDD y 0V para VSS.

Fig 3. Diagrama de contador de 8 bits

Fig. 4 Diagrama de las salidas puerto B, del contador de 8 Bits.

Donde los valores para los componentes se dan en la siguiente tabla:


Smbol Valor
o
Min
VDD
5V
R1
R2
1K
C1
ND
C2
15pF
C3
15pF

Valor
Max
5V
40K
ND
68pF
68pF

Las resistencias R1, R2 y el capacitor C1 son recomendados por el fabricante para evitar que voltajes
fuera de rango lleven el dispositivo a reinicios o consumos de energa ms all de los especificados
para el dispositivo.

1.3 Ejercicios
1. Consulte el conjunto de instrucciones para determinar cual o cuales se pueden utilizar para
modificar el cdigo de esta prctica con el objeto de generar la siguiente secuencia de salida en la
puerta B.
;Programa que se avienta la secuencia de taxista :)
LIST P = 16f873
; Comando que indica el PIC usado
#include "P16F873.INC"
RADIX HEX
; Los valores se representan en hexadecimal
AUX1 EQU 0x20
; Registros auxiliares
AUX2 EQU 0x21
AUX3 EQU 0x22
ORG 5
; Comando que indica al ensamblador la direccin
; de la memoria donde se situar la instruccin
; siguiente
bsf STATUS,5
; Pone a 1 el bit 5 de ESTADO para direccionar
; el banco 1 de la memoria de datos
movlw 0xff
; W <= ff
movwf PORTA
; Las lneas de PA como entradas
clrf PORTB
; Puerta B como salidas
bcf STATUS,5
; Pone a 0 el bit 5 de ESTADO pasando a acceder
; al banco 0
bsf STATUS,C
AUX1 EQU 0x80
; Inicializa el contador a "1000 000"
inicio
rlf AUX1
; Desplaza a la izquierda el bit de AUX1
btfsc AUX1,0
;Checa cuando dio una vuelta para entrar a CERO
call cero
;Llama subrutina para mostrar cero en el puerto B
movf AUX1,w
; W <= AUX1
movwf PORTB
; W => Puerta B. El valor de W sale por las lneas
; de Puerta B a los led
call retardo
; Llama subrutina de retardo
goto inicio
; Se salta a la instruccin precedida por la
; etiqueta inicio
;********* SUBRUTINA DE RETARDO ************************
;Esta rutina se utiliza como un divisor de frecuencia, ya que no
;se puede utilizar la frecuencia del PIC de manera directa.

retardo
movlw 0xff
movwf AUX2

;se lleva este valor a AUX2

one
call retardo2
decfsz AUX2,1
goto one
return
retardo2
movlw 0xff
movwf AUX3

;Se decrementa AUX2 y se deposita en


;ella misma
;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal

;se lleva este valor a AUX2

two
decfsz AUX3,1
goto two
return

;Se decrementa AUX2 y se deposita en


;ella misma
;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal

cero
clrf PORTB
call retardo
return
END

;Limpia el puerto para que muestre "0000 0000"


;Llama a retardo
;Regresa al programa principal
; Directiva que indica el final del programa

Prctica No. 2
MANEJO DE INTERRUPCIN EXTERNA
Objetivo:
Programar el microcontrolador para que acepte una interrupcin externa analizando el uso de la pila.
Componentes:
1 Microcontrolador PIC 16f873 o 16F877
8 LEDS
8 resistores de 220k
1 resistor menor a 40K
1 resistor mayor a 1K
1 capacitor electroltico de cualquier valor
1 cristal 4MHz
2 Capacitores cermicos 15-68pF
Equipo:
1 Fuente de +5V
1 Punta lgica

1 Multmetro
1 Plantilla
Pinzas de punta y de corte
1 Computadora (software MPLAB y software WinPic800)
1 Programador de PIC
1.1 Introduccin.
El microcontrolador PIC16F87X tiene un mximo de 15 interrupciones. Las interrupciones son
llamadas asncronas a subrutinas que desvan el flujo del control del programa. Pueden ser externas
como el cambio de estado de un pin de entrada o internas como el desbordamiento de un
temporizador. Al ejecutarse una interrupcin se detiene la ejecucin del programa en curso, se guarda
la direccin actual del contador de programa en la pila y se carga el contador con la direccin
reservada 0004H, donde comienza la rutina de servicio a la interrupcin (RSI).
La interrupcin que se utilizar en esta prctica es una externa a travs del pin 0 del puerto B.
Consulte en la hoja de datos del PIC la configuracin de las interrupciones mediante el registro
INTCON.

Fig2. PIC16F877A (Diagrama de 40 pines )


1.2 Desarrollo.
A. Se programa el PIC con el siguiente cdigo en ensamblador (en caso de duda de cmo hacerlo
consulte la Prctica No. 1
; Programa interrupcin por pin 0 de puerto B
LIST P = 16f877
#include <p16f877.inc>
; Archivo que define configuraciones,
; registros, etc. para el PIC 16F877
AUX1 EQU 0x20
AUX2 EQU 0x21
AUX3 EQU 0x22
AUX4 EQU 0x23
goto startup
; Va al inicio del programa
ORG 0X04
; Define la sig. lnea en la direccin 0004H
goto inter
; Va a inter despus de una interrupcin
startup
movlw 0x90

movwf
bsf
clrf
movlw
movwf
bcf

INTCON
STATUS,RP0
TRISC
0xF
TRISB
STATUS,RP0

; Habilita la interrupcin del pin RB0


; Establece a 1 el bit 5
; Puerto C como salidas
; Puerto B como entradas
; Establece a 1 el bit 5

ciclo
btfsc PORTB,1
clrf
AUX1
incf AUX1,1
movf AUX1,W
movwf PORTC
call
goto

retardo
ciclo

; Si bit 1 = 1 entonces resetea el contador


; Incrementa el contador
; W <= AUX1
; W => PORTC. El valor de W sale por las lneas
; de Puerto C a los LEDs
; Llama subrutina de retardo
; Se salta a la instruccin precedida por la
; etiqueta ciclo

;********* SUBRUTINA DE INTERRUPCIN *******************


inter
movlw 0x0A
movwf AUX4

iciclo
decfsz AUX4,F
goto twinkle
bcf
INTCON,1
retfie

; Esta instruccin regresa la ltima direccin


; de la pila al contador de programa

twinkle
movlw
movwf
call
clrf
call
goto

0xFF
PORTC
retardo
PORTC
retardo
iciclo

; Esta subrutina hace que los leds conectados


; al puerto C prendan y apaguen 10 veces

;********* SUBRUTINA DE RETARDO ************************


;Esta rutina se utiliza como un divisor de frecuencia
retardo
movlw 0xff
movwf AUX2
one
call
retardo2
decfsz AUX2,1
goto
one
return
retardo2

movlw
movwf
two
decfsz
goto
return
END

0xff
AUX3
AUX3,1
two

B. Ya que se haya programado el PIC, este se pasa a la plantilla de trabajo y se conectar de acuerdo
con el siguiente diagrama que es para el PIC16F873. Si utiliza el PIC16F877 cambie los pines de
acuerdo al diagrama correspondiente en la hoja de datos. Tenga cuidado al manejar el PIC de no
daarlo con electricidad esttica (utilizar pinzas para su manejo). El voltaje que se utilizar es de 5V
para VDD y 0V para VSS.

Practica N. 3
Manejo del convertidor A/D

Objetivo:
Programar el microcontrolador para que realice la conversin de una seal analgica a digital
utilizando el convertidor A/D interno.

Componentes:

1
8
8
1
1
1
1
2
1

Microcontrolador PIC 16f873 o 16F877


LEDS
Resistores de 220k
Resistor menor a 40K
Resistor mayor a 1K
Capacitor electroltico de cualquier valor
Cristal 4MHz
Capacitores cermicos 15-68pF
Potencimetro 0-10K

Equipo:
1
1
1
1

Fuente de +5V
Punta lgica
Multmetro
Plantilla

Introduccin:
El microcontrolador PIC16F87X tiene cinco canales analgicos de entrada para el dispositivo de 28
pines y ocho canales para el de 40 pines. Todos estos canales dirigen una seal a un convertidor
analgico-digital de 10 bits de resolucin.
El modulo del convertidor A/D tiene la opcin de seleccionar los valores de voltaje de referencia alto y
bajo mediante software entre la opciones de VDD, VSS, RA2 o RA3. Aqu RA2 es el pin para el voltaje
de referencia bajo VREF- y RA3 es el pin para el voltaje de referencia alto VREF+ .Los valores de voltaje
mximo y mnimo para estos pines se indican en la siguiente tabla.
Smbolo
VREF+

Caracterstica
Valor mnimo
Valor mximo
Unidades
voltaje de referencia
VDD - 2.5V
VDD + 0.3VV
V
alto
VREFvoltaje de referencia
VSS - 0.3V
VREF+ - 2.0V
V
bajo
Para el manejo del mdulo A/D se requiere acceder a los siguientes registros:

ADCON0, ADCON1 Para la configuracin del modulo


ADRESH, ADRESL Para leer el resultado de la conversin
TRISA, PORTA, TRISE, PORTE Para definir el canal o los canales de entrada
INTCON, PIR1, PIE1 Para configurar el manejo de la interrupcin el terminar la conversin.
El convertidor A/D puede operar en el estado SLEEP del microcontrolador usando como seal
de reloj el oscilador interno RC del mdulo. Al terminar la conversin el resultado se guarda en los
registros ADRES. Si la interrupcin A/D est habilitada, el microcontrolador sale del estado SLEEP
para atender dicha interrupcin.
El tiempo de conversin A/D por bits se define como TAD. La conversin A/D requiere un
mnimo de 12 TAD para una conversin de 10 bit. El tiempo mnimo de TAD es de 1.6Sm por lo que la
seleccin del TAD en funcin del TOSC (periodo del reloj) se debe seleccionar de acuerdo a la frecuencia
del reloj que se utiliza segn la siguiente tabla.
Relacin del TOSC
ADCON1<6>:ADCON0<7: Mxima frecuencia de reloj
6>
2 TOSC
000
1.25MHz
4 TOSC
100
2.5MHz
8 TOSC
001
5MHz
16 TOSC
101
10MHz
32 TOSC
010
20MHz
64 TOSC
110
20MHz
RC
X11
TSD tpico entre 2-6S
Desarrollo: Se programa el PIC con el siguiente cdigo en ensamblador.

;Programa que convierte un valor de voltaje analgico en el pin AN0 (pin 2)


;y el resultado lo despliega en el puerto b
LIST P= 16f873
#include "P16F873.INC"
RADIX
HEX

;comando que indica el PIC usado

ORG

;Comando que indica al ensamblador la direccin


;de la memoria donde se situar la instruccin siguiente

bsf
movlw
movwf
clrw
movwf
movlw
movwf
bcf
movlw
movwf

STATUS,5
0xFF
TRISA
0xff
TRISB
0x0E
ADCON1
STATUS,5
0x81
ADCON0

;Cambio al banco 1
;W<=ff(hex)
;W=>TRISA
;W<=0
;W=>TRISB (las lneas de PB salidas)

;Los valores se representan en hexadecimal

;Enva '00001110 al registro ADCON1


;Cambio al banco 0
;Enva '10000001' al registro ADCON0

inicio
bsf

ADCON0,2

;Indica conversin

btfsc
goto
movf
movwf
goto
END

ADCON0,2
conv
ADRESH,W
PORTB
inicio

;Comprueba que el bit GO/DONE sea cero


;Ciclo para verificar bit 2 de ADCON0
;Mueve el resultado a W
;Mueve W al puerto B
;Salta a la instruccin precedida por la etiqueta inicio
;Directiva que indica el final del programa

conv

Ya que se haya programado el PIC, este se inserta en la plantilla y se conectara de acuerdo con el
siguiente diagrama que es para el PIC16F873, si utiliza el PIC16F877 cambie los pines de acuerdo al
diagrama correspondiente en la hoja de datos. Tenga cuidado al manejar el PIC de no daarlo con
electricidad esttica (utilizar pinzas para su manejo). El voltaje que se utilizara es de 5V para V DD y 0V
para VSS.

Los valores para los componentes descritos en la figura se dan en la siguiente tabla

Smbolo
VDD
R1
R2
C1
C2
C3
P1

Valor Mnimo
5V
1K
ND
15pF
15pF
0

Valor Mximo
5V
40K
ND
68pF
68pF
10K

Practica N. 4
Operaciones Entrada / Salida Objetivos:

Verificar el modo en el que se debe programar el sentido de los puertos


Realizar la entradas por puerto mediante la lectura de interruptores "dip-switch"
Escribir sobre un puerto de salida visualizando sobre LEDs

FIG. 4.1.1 Hardware para ejercicio Entrada/Salida


Procedimiento:
En el proceso de utilizacin de un puerto debe tenerse en cuenta como primera instancia la
programacin del sentido en que dicho puerto va a utilizarse. Una vez energizado el
microcontrolador todos y cada uno de los puertos quedan programados como entrada, entonces,
tan solo deben programarse los que se quieren utilizar como salida.
En el hardware de la figura 4.1.1 se observa que se han colocado 4 dip switch al puerto B y estos
no poseen resistencia de pull up lo cual nos obliga a habilitar las resistencias internas con las que
cuenta el microcontrolador PIC16F84, el programa debe entonces en un repetitivo infinito leer el
nivel lgico que colocan los switch y pasar este resultado al puerto A complementando el estado de
la informacin puesto que de acuerdo a la disposicin de los LEDs un estado bajo en el puerto
enciende el LED correspondiente y por ende un estado alto en el puerto, apaga el LED.

Programa:
status equ 03h
optionr equ 81h
trisa equ 85h
porta equ 05h
trisb equ 86h
portb equ 06h
;
Inicio:
bsf status,5 ;se pasa al banco 1 de RAM
clrf trisa ;se programa el puerto A como salida
movlw 0Fh
;dato para la programacin del puerto B
movwf trisb ;parte alta como salida y parte baja como entrada
bcf optionr,7 ;se habilitan resistencias de Pull Up
bcf status,5 ;se pasa al banco 0 de RAM
Loop:
comf portb,0 ;se lee el puerto B, se complementa su valor y el ;resultado pasa a W
movwf porta ;se pasa el resultado de W al puerto A
goto Loop ;ejecuta un ciclo infinito
end
En un proceso de lectura de interruptores, casi siempre cuando se detecta un cambio en el estado, es
aconsejable amortiguar la lectura de estos con un retardo de software.
Dependiendo de la calidad del interruptor el tiempo del retardo puede estar alrededor de 50 mS. En el
caso de este ejercicio en particular no es requerido puesto que un cambio en el interruptor debe
reflejarse inmediatamente en el puerto de salida. Se debe tener en cuenta que nunca una entrada
debe quedar al aire puesto que los microcontroladores PIC son hechos con tecnologa CMOS. Es por
este motivo que en el programa se program la parte alta del puerto B como salida.

Practica N. 5
Exploracin de teclado

FIG. 5.1.1 Hardware correspondiente al experimento de exploracin de teclado


Para la lectura del teclado debemos tener en cuenta la disposicin de las filas y las columnas como se
observa en la FIGURA 5.1.2 con la cual realizando la operacin all descrita se debe obtener un
nmero consecutivo de las teclas en la organizacin aqu mostrada. Luego, mediante el acceso a una
tabla se decodifica la tecla leda para obtener el patrn final observado en el diagrama del hardware
FIG. 5.1.1.
Ej. S se oprimiese la tecla C del teclado ( FIG. 5.1.1), el cdigo de exploracin correspondiente a esta
es el 13d (FIG. 5.1.2) que debe ser representado como el 1100b en las salidas DCBA ( FIG. 5.1.1).

FIG. 5.1.2 Distribucin del teclado, numeracin en filas y columnas y la frmula para hallar la tecla
oprimida
En este experimento se realiza la emulacin del integrado decodificador de teclado 74C922 en cuanto
a su funcionamiento, pero de acuerdo a la configuracin de hardware de la FIG. 5.1.1.

Listado del programa para exploracin de teclado:


list p=16f84
#include <p16f84.inc> ;archivo de encabezado por Microchip
;
;ESTE PROGRAMA EMULA UN 74C922 DECODIFICADOR DE TECLADO
;
CONTFIL EQU 0x12
;Contador de Filas
CONTCOL EQU 0x13
;Contador de Columnas
COLKBD EQU 0x14
;DATO EN COLUMNAS
Temp EQU 0x15
R1 EQU 0x16
;Variable para Retardo
R2 EQU 0x17
;Variable para Retardo
R3 EQU 0x18
;Variable para Retardo
R4 EQU 0x19
;Variable para Retardo
COUNT EQU 0x1A
CHAR EQU 0x1B
;Almacenamiento temporal SCAN
AUX EQU 0x1C
;Variable Auxiliar
#define _z STATUS,2
#define _c STATUS,0
#define OE PORTA,4
#define BANK0 bcf STATUS,RP0
#define BANK1 bsf STATUS,RP0
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ORG 0x00
MAIN
BANK1
CLRF TRISA
BANK0
CLRF PORTA
NOP
NOP
Muestre
BCF OE
RUSCAN
CALL SCAN
XORLW 0x00
;espera una Tecla
BTFSC _z
GOTO Muestre
MOVWF PORTA
MOVLW .50
MOVWF COUNT
LOOPSCAN
CALL DEL5MS
DECFSZ COUNT,1

GOTO LOOPSCAN
GOTO RUSCAN
;***************************************************************************
DEL5MS
MOVLW .12
MOVWF R1
MOVLW 7
MOVWF R2
MOVLW 1
MOVWF R3
MOVLW 1
MOVWF R4
LOOPDEL5
DECFSZ R1,F
GOTO LOOPDEL5
DECFSZ R2,F
GOTO LOOPDEL5
DECFSZ R3,F
GOTO LOOPDEL5
DECFSZ R4,F
GOTO LOOPDEL5
NOP
RETURN
;***************************************************************
;RETORNA W=00 NO HAY TECLA OPRIMIDA,
;RETORNA W=COD SI TECLA OPRIMIDA.
;**************************************************************
SCAN
BANK1
MOVLW 0x0F
;el puerto que lee teclado <0:3> filas (in)
MOVWF TRISB
BANK0
MOVLW 0x01
MOVWF CONTCOL
MOVLW 0x7F
MOVWF COLKBD
RSTFIL
CLRF CONTFIL
;RESET CONT FILAS
MOVF COLKBD,W
MOVWF PORTB
;COLOCAR UN CERO EN COLUMNAS
nop
nop
nop
MOVF PORTB,W
;LEER FILAS DE TECLADO
MOVWF AUX
RLF AUX,F
RLF AUX,F
RLF AUX,F
RLF AUX,F
TESTFIL
RLF AUX,F
BTFSS _c
GOTO ACERTADO
INCF CONTFIL,F
MOVF CONTFIL,W
XORLW 0x04

BTFSS _z
GOTO TESTFIL
BSF _c
RRF COLKBD,F
;rotacion del cero a colocar
INCF CONTCOL,F
MOVF CONTCOL,W
XORLW 0x05
BTFSS _z
GOTO RSTFIL
RETLW 0x00
ACERTADO
MOVF CONTFIL,W
XORLW 0x00
BTFSC _z
GOTO ESCERO
MOVLW 0x00
MUL
ADDLW 0x04
DECFSZ CONTFIL
GOTO MUL
SUMACOL
ADDWF CONTCOL,W
CALL TABKBD
RETURN
TABKBD
addwf PCL,F
retlw 0
;invlido
retlw 0x10
retlw 0x11
retlw 0x12
retlw 0x13
retlw 0x14
retlw 0x15
retlw 0x16
retlw 0x17
retlw 0x18
retlw 0x19
retlw 0x1A
retlw 0x1B
retlw 0x1C
retlw 0x1D
retlw 0x1E
retlw 0x1F
ESCERO
MOVLW 0x00
GOTO SUMACOL
end

Practica N. 6
Regulacin de velocidad de motor D.C.
Por medio de la presente prctica se pretende hacer la variacin de la velocidad a un motor DC
aplicando un voltaje variable a este por medio del mtodo de modulacin por ancho de pulso o PWM.

Onda rectangular y sus caractersticas


El mtodo de modulacin por ancho de pulso est basado en la obtencin de un voltaje DC variable a
partir de una onda rectangular de frecuencia constante y ciclo til variable, de tal manera que:
Vdc = (Ciclo til) * Vm

Vdc = (ton/T) * Vm
Siendo:
ton el tiempo en alto de la onda cuadrada
T el periodo de la onda rectangular (T = ton + toff )
Vm el voltaje mximo de la onda

Se puede concluir a partir de esta simple ecuacin que s hacemos variar el ciclo til de la onda
rectangular obtendremos una variacin en el voltaje promedio y s este es aplicado como alimentacin
del motor DC, el efecto ser el de la variacin de la velocidad.

Para la aplicacin de este principio nos basamos en el siguiente circuito:

El programa que comanda sobre este Hardware funciona basado en el pulsador S1 como control de
10 pasos discretos de velocidad los cuales son indicados sobre el display 7 segmentos (0 a 9) y cuyo
efecto final se observa directamente en la velocidad del motor M1.
Listado del programa
LIST P= 16F84
#INCLUDE<P16F84.INC>
DIG EQU 0CH
VROFF EQU 0DH
VRON EQU 0EH
CONT1 EQU 0FH
CONT2 EQU 10H
X EQU .250
Y EQU .12
;*************************************************************************
INICIO
BSF STATUS,RP0 ; PROGRAMACIN DEL SENTIDO DE PUERTOS
CLRF TRISB
MOVLW B'11100001'
MOVWF TRISA

BCF STATUS,RP0
MOVLW 00H
MOVWF DIG
BCF PORTA,4
DIS_LOOP:
CALL DISPLAY ; VISUALIZACIN DE DIGITO
BTFSC PORTA,0 ; LA TECLA ESTA OPRIMIDA?
GOTO RMOTOR
CALL RETAR ; TIEMPOS DE ANTIREBOTE
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
CALL RETAR
INCF DIG,1
MOVLW .11
XORWF DIG,0
BNZ RMOTOR
CLRF DIG
RMOTOR
CALL MOTOR
GOTO DIS_LOOP
;*************************************************************************
DISPLAY
MOVF DIG,0
CALL TABLA
MOVWF PORTB
RETURN
;*************************************************************************
TABLA: ; TABLA DE DATOS PARA DECODIFICACIN A SIETE SEGMENTOS
ADDWF PCL,1
RETLW 0x3F
RETLW 0x06
RETLW 0x5B
RETLW 0x4F
RETLW 0x66
RETLW 0x6D
RETLW 0x7D
RETLW 0x07
RETLW 0x7F
RETLW 0x6F
RETLW 0x77
;**************************************************************************
MOTOR: ; ACTIVA MOTOR CON TIEMPOS: Ton Y Toff
MOVF DIG,0
SUBLW .10

MOVWF VROFF
CLRW
XORWF DIG,0
BZ OFFMOTOR
MOVF DIG,0
MOVWF VRON
BSF PORTA,4 ; ENCIENDE EL MOTOR
MOTOR1:
CALL RETAR
DECFSZ VRON,1
GOTO MOTOR1
OFFMOTOR
BCF PORTA,4 ; APAGA MOTOR
MOVF DIG,0
XORLW .10
BZ MOTOR3
MOTOR2
CALL RETAR
DECFSZ VROFF,1
GOTO MOTOR2
MOTOR3
RETURN
;***************************************************************************
RETAR
MOVLW X
MOVWF CONT1
CICLO1
MOVLW Y
MOVWF CONT2
CICLO2
DECFSZ CONT2,1
GOTO CICLO2
DECFSZ CONT1,1
GOTO CICLO1
RETURN
;****************************************************************************
END

Practica N. 7
Uso de la memoria EEPROM
Con el circuito de la practica N.1 veremos la aplicacin de la memoria EEPROM del
pic16F874.

Programa:
; Programa contador de 4 bits con 'clear'
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC
LIST P = 16f873
; Comando que indica el PIC usado
#include "P16F873.INC"
RADIX HEX
; Los valores se representan en hexadecimal
AUX1 EQU 0x20
; Registros auxiliares
AUX2 EQU 0x21
AUX3 EQU 0x22
ADDR EQU 0x23
ORG 5
; Comando que indica al ensamblador la direccin
; de la memoria donde se situar la instruccin
; siguiente
bsf STATUS,5
; Pone a 1 el bit 5 de ESTADO para direccionar
; el banco 1 de la memoria de datos
movlw 0xff
; W <= ff
movwf PORTA
; Las lneas de PA como entradas
clrf PORTB
; Puerta B como salidas
bcf STATUS,5
; Pone a 0 el bit 5 de ESTADO pasando a acceder
; al banco 0
bsf STATUS,C
;*********************************lectura*********************************
BSF STATUS, 6
;
BCF STATUS, 5
;Bank 2
MOVF ADDR, W
;Write address
MOVWF EEADR
;to read from
BSF STATUS, 5
;Bank 3
BCF EECON1, 7 ;Point to Data memory
BSF EECON1, 0 ;Start read operation
BCF STATUS, 5
;Bank 2
MOVF EEDATA, W
BCF EECON1, 0

;W = EEDATA

;*************************************************************************
bcf STATUS,5
bcf STATUS,6
movwf AUX1
;

inicio
bcf STATUS,5
bcf STATUS,6
incf AUX1
movf AUX1,w
movwf PORTB

; Incrementa el contador
; W <= AUX1
; W => Puerta B. El valor de W sale por las lneas
; de Puerta B a los led

;********************************escitura*********************************
HOLA
BSF STATUS, 6
BSF STATUS, 5
BTFSC EECON1, 1
GOTO HOLA

;
;Bank 3
;Wait for
;write to finish

BCF STATUS, 5
MOVF ADDR, 0
MOVWF EEADR
MOVF AUX1, 0
MOVWF EEDATA
BSF STATUS, 5
BCF EECON1, 7
BSF EECON1, 2

MOVLW 0x55
MOVWF EECON2
MOVLW 0xAA
MOVWF EECON2
BSF EECON1, 1

;Bank 2
;Address to
;write to
;Data to
;write
;Bank 3
;Point to Data memory
;Enable writes
;Only disable interrupts
;if already enabled,
;otherwise discard
;Write 55h to
;EECON2
;Write AAh to
;EECON2
;Start write operation

;Only enable interrupts


BSF INTCON, 7

;if using interrupts,

BCF INTCON, 7

;otherwise discard
BCF EECON1, 2
;Disable writes
BCF EECON1, 1
;*************************************************************************
call retardo
; Llama subrutina de retardo
goto inicio
; Se salta a la instruccin precedida por la
; etiqueta inicio

;********* SUBRUTINA DE RETARDO ************************


;Esta rutina se utiliza como un divisor de frecuencia, ya que no

;se puede utilizar la frecuencia del PIC de manera directa.


retardo
movlw 0xff
movwf AUX2
one
call retardo2
decfsz AUX2,1
goto one
return

;se lleva este valor a AUX2

;Se decrementa AUX2 y se deposita en


;ella misma
;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal

retardo2
movlw 0xff
movwf AUX3
two
decfsz AUX3,1
goto two
return
END

;se lleva este valor a AUX2


;Se decrementa AUX2 y se deposita en
;ella misma
;si llega a cero sale de la rutina
;Una vez completados los ciclos se regresa
;al programa principal
; Directiva que indica el final del programa