Está en la página 1de 25

MICROCONTROLADORES

INTRODUCCIÓN.- Es un circuito integrado programable que contiene muchos de los


componentes de una computadora de escritorio, tales como:

1. CPU
2. Memorias
3. Temporizadores
4. Circuitos de reloj, etc.

Estos microcontroladores no incluyen ningún dispositivo que le permita establecer


comunicación con el hombre (pantalla de visualización, teclado, etc.), es por ello que
están diseñados para ejercer control sobre las máquinas, más que para interactuar con
los usuarios (seres humanos).
Estos chips reciben la denominación de controlador incrustado debido a su reducido
tamaño pueden ir incorporados en el propio dispositivo objeto de control.
El µCo es un computador dedicado ya que sólo realiza una tarea, la cual está
almacenada en su memoria de programa.

MICROPROCESADOR Y MICROCONTROLADOR

MICROPROCESADOR.- Es un circuito integrado, comúnmente llamado chip, con


integración a gran escala (LSI o VLSI); es la unidad central de proceso de una
microcomputadora.
Los microprocesadores sacan al exterior las líneas de sus buses (dirección, data y
control) y así poder conectarse con los bancos de memorias y los diferentes módulos
de entrada/salida e implementar un computador de acuerdo a nuestras necesidades.
En conclusión un µP es un Sistema Abierto con el que puede construirse un
computador con las características que se deseen, acoplándole los módulos necesarios
como memoria y controladores de periféricos.
MICROCONTROLADOR.- Es un Sistema Cerrado que contiene un computador
completo pero de prestaciones limitadas.
Posee líneas se entrada/salida limitadas, memoria de programa y de datos limitados
así como recursos auxiliares también limitados.
Por ello existen en el mercado una gran variedad de µCo con capacidades y recursos
variables, donde la selección de cual utilizar forma parte importante de la etapa de
diseño ya que de ello depende el costo como el funcionamiento óptimo del sistema
implementado.

MICROCONTROLADORES PIC

Introducción a los microcontroladores PIC

 La arquitectura del procesador sigue el modelo Harvard, en esta arquitectura,


el CPU se conecta de forma independiente y con buses distintos con la
memoria de instrucciones y con la de datos. La arquitectura Harvard permite al
CPU acceder simultáneamente a las dos memorias.

 Se aplica la técnica de segmentación ("pipe-line") en la ejecución de las


instrucciones. La segmentación permite al procesador realizar al mismo tiempo
la ejecución de una instrucción y la búsqueda del código de la siguiente. De esta
forma se puede ejecutar cada instrucción en un ciclo (un ciclo de instrucción
equivale a cuatro ciclos de reloj). La segmentación permite al procesador
ejecutar cada instrucción en un ciclo de instrucción equivalente a cuatro ciclos
de reloj. En cada ciclo se realiza la búsqueda de una instrucción y la ejecución
de la anterior. Las instrucciones de salto ocupan dos ciclos al no conocer la
dirección de la siguiente instrucción hasta que no se haya completado la de
bifurcación.
 El formato de todas las instrucciones tiene la misma longitud. Todas las
instrucciones de los microcontroladores de la gama baja tienen una longitud de
12 bits. Las de la gama media tienen 14 bits y más las de la gama alta.

 Procesador RISC (Computador de Juego de Instrucciones Reducido). Los


modelos de la gama baja disponen de un repertorio de 33 instrucciones, 35 los
de la gama media y casi 60 los de la alta.

 Todas las instrucciones son ortogonales. Cualquier instrucción puede manejar


cualquier elemento de la arquitectura como fuente o como destino.

 Arquitectura basada en un banco de registros. Esto significa que todos los


objetos del sistema (puertos de E/S, temporizadores, posiciones de memoria,
etc.) están implementados físicamente como registros.

 Diversidad de modelos de microcontroladores con prestaciones y recursos


diferentes. La gran variedad de modelos de microcontroladores PIC permite
que el usuario pueda seleccionar el más conveniente para su proyecto.

 Herramientas de soporte potentes y económicas. La empresa Microchip y otras


que utilizan los PIC ponen a disposición de los usuarios numerosas
herramientas para desarrollar hardware y software. Son muy abundantes los
programadores, los simuladores software, los emuladores en tiempo real,
ensambladores, Compiladores C, Intérpretes y Compiladores BASIC, etc.

Estructura y arquitectura
 Los microcontroladores de Microchip combinan un alto desempeño a un bajo
costo, en un empaquetado pequeño; ofreciendo la mejor relación
precio/rendimiento en la industria. Más de 200 millones de estos productos se
distribuyen cada año para satisfacer los consumibles: periféricos de
computadora, automatización de oficinas, sistemas de control automotriz,
aplicaciones en seguridad y telecomunicaciones. La combinación de los
microcontroladores de 8-bit, con las tecnologías de OTP avanzadas, EEPROM,
memoria FLASH, memoria ROM y la industria, hacen de Microchip un líder
proveedor en el desarrollo de herramientas para ajustarse mejor a las
necesidades reales.
 El alto nivel de integración reduce notablemente la cantidad de componentes
externos y los costos de desarrollo, mejoran el desempeño del sistema, reduce
la interferencia electromagnética, minimiza el consumo de potencia y agiliza el
tiempo de realización. Los microcontroladores cuentan además con un set de
instrucciones compatible, y una gran variedad de periféricos y un amplio rango
de empaquetados y rangos de voltaje, todo esto para ajustarse mejor a las
demandas en los sistemas actuales.
 La arquitectura RISC de 8-bit de los microcontroladores PIC se ha vuelto
estándar alrededor del mundo. Todos los microcontroladores PIC emplean una
arquitectura RISC modificada y un poderoso set de instrucciones que reduce
dramáticamente los ciclos de ejecución y el costo.
 Combinando las características RISC con una arquitectura Harvard de bus-dual,
los microcontroladores PIC de 8-bit de Microchip son más rápidos y flexibles y
es el núcleo de la arquitectura más popular para los nuevos diseños de
microcontroladores.

Junto con los microcontroladores, Microchip ha creado una serie de herramientas de


ayuda al desarrollo del hardware y software de los proyectos de aplicación, que son
válidas para la mayoría de sus modelos y que se citan a continuación:

 Entorno de Desarrollo Integrado MPLAB


 Ensamblador MPASM.
 Compilador de lenguaje C, MP-C.
 Simulador software MPSlM.
 Programador universal PRO MATE.
 Emulador universal PIC MASTER.
 Herramienta de desarrollo para Lógica difusa FUZZY TECH-MP.
 Herramienta económica de desarrollo PICSTART
Diseño de aplicaciones

El primer paso en un diseño basado en microcontrolador habiéndose ya seleccionado


el controlador adecuado de acuerdo a las características del mismo y las necesidades
del problema consiste en escribir el código fuente del programa en el lenguaje
seleccionado (en este caso lenguaje ensamblador). Posteriormente viene la
compilación y ensamblado del programa, siguiendo la depuración y simulación del
mismo. Para todo ello es necesario seguir una cierta metodología en la creación de
nuestros programas respetando:

1) Campos para etiquetas.- mayoría de los ensambladores establecen un límite al


tamaño de las etiquetas del programa así como los caracteres que se pueden usar
en ellas.
2) Campos de instrucciones.- Es el espacio dedicado a escribir las directivas del
programa.
3) Campos de datos.- Contiene los datos u operandos para las instrucciones, que
pueden ser registros y/o constantes; aunque algunas instrucciones no llevan datos
existen otras que llevan varios separados por comas.
4) Campos de comentarios.- Los comentarios son uno de los trabajos más
importantes que el programador debe desarrollar a la hora de escribir el código ya
que describen la tarea que están tratando de realizar las instrucciones.

MICROCONTROLADOR PIC16F84A
Reconocimiento de los pines del PIC16F84A
DIAGRAMA DE PINES 1. Pin 1:……… RA2
2. Pin 2:……… RA3
3. Pin 3:……… RA4/TOCKI
4. Pin 4:……… /MCLR
5. Pin 5:……… Vss (GND)
6. Pin 6:……… RBO/INT
7. Pin 7:……… RB1
8. Pin 8:……… RB2
9. Pin 9:……… RB3
10. Pin 10:…….. RB4
11. Pin 11:…….. RB5
12. Pin 12:…….. RB6
13. Pin 13:…….. RB7
14. Pin 14:…….. VDD
15. Pin 15:…….. OSC2/CLKOUT
16. Pin 16:…….. OSC1/CLKIN
17. Pin 17:…….. RA0
18. Pin 18:…….. RA1
El PIC16F84A consta de 2 puertas: Puerta A y puerta B.
La Puerta A esta formada de 5 líneas (pines) E/S digitales y la Puerta B constan de 8
líneas.
Descripción de los pines

 RA0-RA4: 5 Líneas de E/S digitales, pertenecientes a la Puerta A.


El pin RA4 multiplexa otra función expresada por TOCKI.
 RB0-RB7: 8 Líneas E/S digitales pertenecientes a la Puerta B.
La línea RB0 multiplexa otra función, sirve como entrada de
interrupción externa.
 OSC1/CLKIN: Por este pin se aplica la entrada del circuito oscilador
externo.
 OSC2/CLKOUT: Pin auxiliar del circuito oscilador por donde se obtiene
Fosc/4.
 MCLR#: Esta patita se activa con un nivel lógico bajo provocando la
reinicialización del µC. Este pin también es utilizado para introducir el
voltaje de grabación (Vpp).
 VDD: Pin por donde se aplica la tensión positiva de la alimentación
 VSS: Pin conectado a tierra o al negativo de la alimentación.

Luego el PIC16F84A tiene un encapsulado de 18 pines, dos de ellas soportan la tensión


de alimentación, otras dos reciben la señal del oscilador externo otra es utilizada para
generar un reset y las 13 líneas restantes funcionan como líneas de E/S digitales
orientadas a controlar las aplicaciones.

DESCRIPCIÓN GENERAL DEL PIC16F84A


Características más importantes:

 Microcontroladores de 8 bits.
 Son PIC’s de bajo costo, alto desempeño, tecnología CMOS y completamente
estático.
 Emplean una arquitectura RISC avanzada.
 Presentan una pila de 8 niveles de profundidad y múltiples fuentes de
interrupción.
 Son µCo de arquitectura Harvard debido a la separación de los buses de
instrucción y data, ello permite palabras de instrucción de 14 bits de ancho y un
bus de data de 8 bits de ancho separados.
 Todas las instrucciones pueden ser ejecutadas en un ciclo instrucción excepto
las de salto, las cuales requieren dos ciclos (pipeline).
 Requieren sólo un total de 35 instrucciones (conjunto de instrucciones
reducido).
 Poseen un largo conjunto de registros que son usados para realizar un alto
nivel de desempeño.
 El PIC16F84A tiene hasta 68 bytes de RAM, 64 bytes de memoria EEPROM de
datos y 13 pines I/O. Un temporizador/contador también está disponible.
 Tiene características especiales para reducir los componentes externos, así
como reducción de costos, mejoramiento de la fidelidad del sistema y
reducción del consumo de energía.
 Hay cuatro opciones de oscilador, de los cuales el oscilador RS de pin único
provee una solución de bajo costo, el oscilador LP minimiza el consumo de
energía, el XT es un cristal estándar y el HS es para cristales de alta velocidad.
 El modo SLEEP ofrece un ahorro de energía. El usuario puede despertar el chip
desde sleep a través de muchas interrupciones internas, externas y reset.
 Un temporizador Watchdog altamente confiable con su propio oscilador on
chip, provee protección contra estancamiento por software.
 El PIC16F84A encaja perfectamente en aplicaciones alcanzando desde una alta
velocidad automotriz y aplicación al control de motor hasta baja energía de
sensores remotos, cerrojos electrónicos, dispositivos de seguridad y tarjetas
inteligentes.
 La tecnología Flash/EEPROM promueve la habituación de programas de
aplicación (códigos de transmisor, velocidades de motor, frecuencias de
receptor, códigos de seguridad, etc.) en extremadamente rápidos y
convenientes.
 Los empaquetados de pequeña footprint hacen a este microcontrolador
perfecto para aplicaciones con limitaciones de espacio.
 El bajo costo, baja energía, alto desempeño, fácil uso y flexibilidad de I/O hacen
del PIC16F84A muy versátil aún en áreas donde el microcontrolador no ha sido
considerado antes (por ejemplo, funciones de temporización; comunicación
serial; funciones de captura, comparación y PWM; y aplicaciones de co-
procesador).

Características principales del µCo

 CPU RISC de alto desempeño.


 Sólo 35 instrucciones de tamaño Word simple.
 Todas las instrucciones son de ciclo simple excepto para ramificaciones (salto) las
cuales son de dos ciclos
 Velocidad de operación:
- Para entrada de reloj : 20MHz
- Ciclo de instrucción : 200ns

Explicación:
F : frecuencia de la señal proveniente del circuito oscilador externo
Tosc: Periodo de oscilación

Cálculo del Tosc:


Tosc = 1/F
Tosc = 1/ (20*106) s = 50 ns
Cálculo del Periodo del ciclo de instrucción: Tc
Tc = 4*Tosc = 4*50 µs = 200 ns
 Hasta 1K x 14 words de Memoria de Programa FLASH
 Hasta 68 bytes de Memoria de Datos (RAM).
 Hasta 64 bytes de memoria de datos EEPROM
 Capacidad de interrupción (hasta 4 fuentes)
 Pila de ocho niveles de profundidad
 Modos de direccionamiento directo e indirecto
 Reset de encendido
 Temporizador de power-up (PWRT) y Temporizadores de arranque de oscilador
(OST)
 Temporizador guardián (WDT) con su oscilador RC on-chip propio para operación
confiable
 Código de protección programable
 Modo SLEEP para ahorro de energía
 Opciones de oscilador seleccionable
 Tecnología FLASH/EEPROM CMOS de alta velocidad, de baja potencia
 Diseño completamente estático
 Programación TM Serial in-circuit (ICSP) vía dos pines
 Capacidad de Programación Serial in-circuit de 5V simple
 Acceso de lectura/escritura del procesador a la memoria de programa
 Rango de voltaje de operación ancho: 2.0V a 5.5V
 Líneas de entrada/salida digitales: 13 (5 Puerta A y 8 Puerta B)
 Corriente máxima suministrada: 50 mA Puerta A y 100 mA Puerta B
 Corriente máxima absorbida por línea: 25 mA
 Corriente máxima suministrada por línea: 20 mA
 Voltaje de alimentación (VDD): 2 a 6 VDC
 Voltaje de grabación (VPP): 12 a 14 VDC

TIPOS DE OSCILADORES
La velocidad de ejecución de las instrucciones depende de la frecuencia de trabajo del
µC.
El PIC16F84A – 20/P funciona con una frecuencia máxima de 20 MHz, luego le
corresponde un ciclo de instrucción de 200 ns.
Cada ciclo de instrucción demora en ejecutarse 4 periodos de reloj, es decir:

Si F = 4 MHz: frecuencia proporcionada por el circuito oscilador externo


 Tosc = 1/F : periodo de oscilación
Tosc = 1/(4*106) s = 0.25 µs
 Tc = 4* Tosc = 1.0 µs
La frecuencia de funcionamiento para los microcontroladores PIC es posible
implementarla utilizando osciladores externos, los cuales admiten cuatro
presentaciones:
 Oscilador tipo RC
 Oscilador tipo HS
 Oscilador tipo XT
 Oscilador tipo LP
El oscilador tipo RC, es un oscilador que presenta bajo costo. Está formado por una
resistencia y un
condensador. Este tipo de oscilador ofrece una frecuencia con baja estabilidad.

El oscilador tipo HS, ofrece una alta velocidad, variando entre los 4 y 10 MHz y está
basado en un cristal de cuarzo o un resonador cerámico.Ω

El oscilador tipo XT, es un cristal que proporciona un rango de frecuencias estándar


entre 100KHz y 4 MHz.

El oscilador tipo LP, es un oscilador de bajo consumo implementado en base a un


cristal o resonador operando en un rango de frecuencias de 35 a 200 KHz.

Observación: todos estos osciladores, excepto el RC, van conectados entre los pines
OSC1 y OSC2.

Modo Frecuencias OSC1/C1 OSC2/C2


LP 32 KHz 68 – 100pF 68 – 100pF
200KHz 15 – 33pF 15 – 33pF
XT 100 KHz 100 – 150pF 100 – 150pF
2MHz 15 – 33pF 15 – 33pF
4MHz 15 – 33pF 15 – 33pF
HS 4 MHz 15 – 33pF 15 – 33pF
10 MHz 15 - 33pF 15 - 33pF
OBSERVACIÓN

Todas las instrucciones se ejecutan en un sólo ciclo de instrucción excepto las de salto,
que tardan dos ciclos de instrucción.
Los impulsos de reloj provenientes del circuito oscilador externo entran por la patita
OSC1/CLKIN
(Pin 16) y se divide internamente en 4 señales: Q1, Q2, Q3 y Q4.

Consideremos un circuito oscilador XT.


F = 4 MHz
Tosc = Tclock= 1/F = 0.25 µs

La técnica de la segmentación hace posible ejecutar una instrucción en un ciclo


simple, menos las de salto (dos ciclos de instrucción), aplicando en paralelo las dos
fases que comprende cada instrucción:
 Fase de búsqueda de la instrucción en la memoria de programa
 Fase de decodificación y ejecución de la instrucción

Debido a que los µC PIC incorporan un procesador segmentado, es posible realizar la


fase de ejecución de una instrucción y la búsqueda de la siguiente.
Para las instrucciones de salto no se conoce cual será la siguiente hasta que se
complete, por ello se sustituye la fase de búsqueda de la siguiente instrucción por un
ciclo de “vacío” , originando que las instrucciones de salto se tarden 2 ciclos de
instrucción.

ORGANIZACIÓN DE LA MEMORIA
En el PIC16F84A hay 2 bloques de memorias. Estos son la memoria de programa y la
memoria de datos. Cada uno de estos bloques cuenta con su propio bus, pero el
acceso a cada bloque puede ocurrir durante el mismo ciclo del oscilador.
La memoria de datos se encuentra fraccionada dentro de la RAM, formando los
registros de propósito general y los registros de función específico (SFRs).
El área de la memoria de datos también contiene la memoria de datos EEPROM. Esta
memoria no es mapeada directamente dentro de la memoria de datos, pero si
indirectamente. Esta memoria EEPROM tiene una capacidad de 64 bytes.
REGISTROS DE FUNCIÓN ESPECÍFICA

REGISTRO STATUS
El registro STATUS contiene el estado aritmético del ALU, el estado RESET y los bits de
selección de banco de la memoria de datos.
El registro STATUS puede ser también el destino para cualquier instrucción como
cualquier otro registro. Si el registro STATUS es el destino de una instrucción que
afecta a Z, los bits DC o C, luego la escritura a estos bits es deshabilitada. Estos bits son
puestos a uno o borrados de acuerdo con la lógica del dispositivo. Más allá, los bits /TO
y /PD indican el estado del procesador y no son escribibles.
Por ejemplo, CLRF STATUS borrará los tres bits superiores y pondrá a uno el bit Z. Esto
deja al registro STATUS como 000u u1uu (donde u = sin cambio).
Es recomendado, sin embargo, que sólo las instrucciones BCF, BSF, SWAP y MOVF sean
usadas para alterar el registro STATUS, porque estas instrucciones no afectan a los bits
Z, C o DC del registro STATUS.

REGISTROS: REGISTRO STATUS (DIRECCIÓN 03h, 83h)


R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
IRP RP1 RP0 /TO /PD Z DC C
Bit 7
bit 0
R = Bit leíble
W = Bit escribible
U = Bit no implementado,
leído como '0'
-n = Valor en reset POR

bit 7: IRP: bit de Selección de Banco de Registros (usado para direccionamiento


indirecto)
1 = Banco 2, 3 (100h, 1FFh)
0 = Banco 0, 1 (00h, FFh)
El bit IRP no se usa en el PIC16F84A y debe mantenerse a cero
bit 6-5:RP1:RP0: bits de Selección de Banco de Registros (usado para direccionamiento
directo)
01 = Banco 1 (80h - FFh)
00 = Banco 0 (00h - 7Fh)
Cada banco es de 128 bytes. El PIC16F84A sólo usa el RP0 manteniendo RP1 en
cero
bit 4: /TO: bit de Time-out
1 = Después de energizado, instrucción CLRWDT o instrucción SLEEP.
0 = Al rebasar el tiempo del WDT
bit 3: /PD: bit de Power-down
1 = Después de energizado o ejecutar la instrucción CLRWDT
0 = Por ejecución de la instrucción SLEEP
bit 2: Z: bit Zero
1 = El resultado de una operación aritmética o lógica es cero
0 = El resultado de una operación aritmética o lógica no es cero
bit 1: DC: Acarreo/llevada en el 4o bit
1 = Acarreo en la suma
0 = No acarreo en la suma
En la resta lo contrario

bit 0: C: Acarreo/llevada en el bit de más peso


1 = Cuando este señalizador se pone en 1 indica que se ha producido acarreo
en el bit de más
peso del resultado al ejecutar las instrucciones addwf y addlw.
0 = No se ha producido acarreo

C también actúa como señalizador de “llevada” con las instrucciones: subwf y


sublw; en este caso si C=1 no hay llevada y si C=0 si hay llevada.

REGISTRO OPTION_REG
La principal misión de este registro es controlar TMR0 y el Divisor de Frecuencias.
Ocupa la posición 0x81 de la memoria de datos RAM en el banco 1.
El registro OPTION_REG es un registro leíble y escribible, el cual contiene varios bits de
control para configurar el prescalador de TMR0/prescalador de WDT, las
Interrupciones Externas INT, el TMR0 y las pull-ups débiles en PORTB.
El bit TOCS permite seleccionar la procedencia de los impulsos de reloj, que pueden
ser los del oscilador interno o los provenientes del exterior a través de la patita TOCKI.
El bit TOSE selecciona el flanco activo de los impulsos externos.
El bit PSA asigna el Divisor de Frecuencia al TMR0 (PSA=0) o al WDT si PSA=1.
Los tres bits de menos peso del registro OPTION_REG seleccionan el rango por el que
divide el Divisor de Frecuencia los impulsos que se le aplican a su entrada.
El bit INTEDG selecciona el flanco activo de interrupción externa.
El bit RBPU# activa o desactiva las resistencias pull-up de la Puerta B.
Nota: Ejecutar una asignación de 1:1 al prescalador para el registro TRM0, asigna el
prescalador al Temporizador de Watchdog.

REGISTROS: REGISTRO OPTION_REG (DIRECCIÓN 81h)


R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
R/W-1 R/W-1
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Bit 7
bit 0
R = Bit leíble
W = Bit escribible
U = Bit no implementado,
leído como '0'
-n = Valor en reset POR
bit 7: /RBPU: Bit de Habilitación de Pull-up de PORTB
1 = Pull-ups de PORTB están deshabilitadas
0 = Pull-ups de PORTB están habilitadas (por valores de latch de puerto
individuales)
bit 6: INTEDG: Bit de Selección de Flanco de Interrupción
1 = Interrupción en flanco de subida del pin RB0/INT
0 = Interrupción en flanco de bajada del pin RB0/INT
bit 5: T0CS: Bit de Selección de Fuente de Reloj de TMR0
1 = Transición en pin RA4/T0CKI (contador)
0 = Reloj de Ciclo de Instrucción Interno (temporizador)
bit 4: T0SE: Bit de Selección de Flanco de Fuente de TMR0
1 = Incremento en transición de alto a bajo en el pin RA4/T0CKI
0 = Incremento en transición de bajo a alto en el pin RA0/T0CKI
bit 3: PSA: Bit de Asignación del Prescalador
1 = Prescalador es asignado al WDT
0 = Prescalador es asignado al módulo Timer0
bit 2-0:PS2:PS0: Bits de Selección de rango del Prescalador

Valor de Bit División del TMR0 División del 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
PUERTOS I/O
El PIC16F84A dispone sólo de 2 puertas de E/S:

☻ PORTA
☻ PORTB

La Puerta A posee 5 líneas digitales PORTA<4:0>, y una de ellas soporta dos funciones
multiplexados.
El pin RA4 está multiplexado con la entrada de reloj del módulo Timer0 para volverse
el pin RA4/T0CKI. El pin RA4/T0CKI es una entrada Schmitt Trigger y una salida drenaje
abierto.

La Puerta B tiene 8 líneas digitales PORTB<7:0>, y también tiene una línea con
funciones multiplexadas, se trata del pin RB0/INT, que además de una línea de E/S
digital, también sirve como patita por la que se reciben los impulsos externos que
producen una interrupción.

Cada una de estas líneas pueden ser configuradas independientemente como E/S,
según se ponga a 1 o 0 al bit asociado del registro de configuración de cada puerta.
El registro TRISA permite configurar PORTA. Un 1 representa una entrada y un 0, una
salida
El registro TRISB permite configurar PORTB. Un 1 representa una entrada y un 0, una
salida
Registros PORTA y TRISA
PORTA es un puerto bidireccional de 5 bits de ancho.
Las líneas PORTA<3:0> tienen niveles de entrada TTL y manejadores de salida todos
CMOS.
PORTA<4> multiplexa su función de E/S con la de entrada de impulsos externos para el
TMR0.
El registro TRISA permite configurar a las líneas de PORTA. Poniendo a uno un bit de
TRISA volverá el pin de PORTA correspondiente una entrada. Borrando un bit de TRISA
(=0) volverá el pin de PORTA correspondiente una salida.

Ejemplo: INICIALIZANDO PORTA

bsf STATUS,RP0 ; Selecciona Banco 1


movlw b’11001’ ; carga W con el valor b’11001’ (.25 decimal, 0x19 hexadecimal)
movwf TRISA ; configura PORTA <4, 3,0> como entradas y PORTA<1,2> como
; salida
bcf STATUS,RP0 ; Selección del Banco 0

TABLA: FUNCIONES DE PORTA


Nombre Bit# Buffer Función
RA0 bit0 TTL Entrada/salida digital
RA1 bit1 TTL Entrada/salida digital
RA2 bit2 TTL Entrada/salida digital
RA3 bit3 TTL Entrada/salida digital
Entrada/salida digital o entrada de reloj externo para Timer0
RA4/T0CKI bit4 ST
La salida es de tipo drenaje abierto

Leyenda: TTL = entrada TTL, ST = entrada Schmitt Trigger

TABLA: SUMARIO DE REGISTROS ASOCIADOS CON PORTA

Direcci Nombr Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en: Valor en
ón e Power on todos los
Reset otros
resets
05h PORTA - - - RA4 RA3 RA2 RA1 RA0 ---x xxxx ---u uuuu
85h TRISA - - - Registro de Dirección de Data de PORTA ---1 1111 ---1 1111

Leyenda: x = desconocido, u = sin cambio, - = posiciones no implementadas leídas


como '0'. Las celdas sombreadas no son usadas por PORTA

Registros PORTB y TRISB


PORTB es un puerto bidireccional de 8 bits de ancho. El registro de dirección de data
correspondiente es
TRISB. Poniendo a uno un bit de TRISB volverá el pin de PORTB correspondiente una.
Borrando un bit de TRISB (=0) volverá el pin de PORTB correspondiente una salida.
Cada uno de los pines de PORTB tiene una pull-up interna débil. Un bit de control
simple puede encender todas las pull-ups. Esto es desempeñado borrando el bit /RBPU
(OPTION_REG<7>). Las
pull-ups débil es automáticamente apagada cuando el pin del puerto es una salida. Las
pull-ups son deshabilitadas en un Reset de Power-on.
Cuatro de los pines de PORTB, RB7:RB4 tienen una característica de cambio en
interrupción. Sólo los pines configurados como entradas pueden causar esta
interrupción ocurra (i.e., cualquier pin RB7:RB4 configurado como salida está excluido
de la comparación de interrupción en cambio).

Recursos Fundamentales del µC PIC16F84A

Entre los recursos más importantes que cuentan los µC PIC esta el TEMPORIZADOR/
CONTADOR TMR0.
El PIC16F84A posee un temporizador/contador de 8 bits, llamado TMR0 que actúa en
dos formas diferentes:
1) Como Temporizador, el registro TMR0 se incrementa con cada ciclo de instrucción
(Fosc/4) hasta que se desborda (FFH a 00H) poniéndose a 1 un señalizador y/o
provocando una interrupción.

OBS: Bit señalizador del desbordamiento del TMR0


INTCON<2> = TOIF
Si TOIF = 1 a ocurrido desbordamiento
Si TOIF = o no ha ocurrido desbordamiento

2) Como Contador cuenta los impulsos externos aplicados a través de la patita


RA4/TOCKI.
El TMR0 al llegar al FFH se desborda con el siguiente impulso pasando a 00H,
activándose un señalizador y/o provocando una interrupción.

El PIC16F84A realmente dispone de 2 temporizadores:

☻ El TMR0
☻ El Wachdog (WDT)

El WDT vigila que el programa no se “cuelgue”, comprobando cada cierto tiempo si el


programa se está ejecutando normalmente, en caso que el programa estuviera
detenido en un bucle infinito a la espera de una acción que no se produce, el perro
guardián entra en acción provocando la reinicialización de todo el sistema.
Tanto el TMR0 como el WDT precisan controlar intervalos de tiempo relativamente
largos y necesitan aumentar la duración de los impulsos de reloj que les incrementa.
Para realizar esta acción se dispone de un circuito programable denominado: Divisor
de Frecuencia.
Para programar el comportamiento del TMR0, WDT y el Divisor de Frecuencia se utiliza
algunos bits del Registro OPTION_REG y de la Palabra de Configuración.
El Divisor de Frecuencia puede ser asignado al TMR0 o al WDT.
El TMR0 puede ser leído o escrito.

Relación para calcular la Temporización de TMR0

Temporización = 4*Tosc*(Rango Divisor de Frecuencia)*(valor a TMR0)*(GPR1)*(GPR2)*...*(GPRn)

Divisor de Frecuencia (Preescalador)


Sólo hay un Preescalador disponible, el cual es mutua y exclusivamente compartido
entre el módulo Timer0 y el temporizador watchdog. Una asignación del prescalador
del módulo Timer0 significa que no hay prescalador para el temporizador watchdog y
viceversa.
Los bits PSA y PS2:PS0 (OPTION_REG<3:0>) determinan la selección del prescalador y
la razón de prescala.
Cuando el Divisor de Frecuencia es asignado a Timer0, todas las instrucciones escritas
al registro TMR0 (p.j CLRF 1, MOVF 1, BSF 1, x... etc.) borrarán el prescalador.
Con el TMR0 actúa como Pre-divisor, es los impulsos pasan primero por el Divisor y
luego se aplican al TMR0, una vez aumentada su duración.
Con el WDT realiza la función de Post-divisor. Los impulsos que divide el prescalador
pueden provenir de la señal de reloj interna (Fosc/4) o de los que se aplican a la patita
RA4/TOCKI.
Cuando es asignado al WDT, una instrucción CLRWDT borrará el prescalador a lo largo
con el Temporizador Watchdog.
El prescalador no es leíble ni escribíble.
Nota: Escribiendo al TMR0 cuando el prescalador es asignado al Timer0, borrará la
cuenta del prescalador, pero no cambiará la asignación del prescalador.

Memoria de Datos EEPROM


La memoria de datos EEPROM es leíble y escribíble durante su funcionamiento normal.
En esta memoria se almacenan datos y variables que permanecen inalterables ante un
corte de la alimentación del sistema.
Soporta 1 millón de ciclos de escritura/borrado, manteniendo la información durante
un lapso de 40 años.
Esta memoria no esta mapeada en la zona de de la memoria de datos donde se ubican
los SFR y GPR.
Para poder leer y escribir esta memoria se utilizan los siguientes 4 Registros de Función
Específico:

☻ EECON1
☻ EECON2 (Registro físicamente no implementado)
☻ EEDATA
☻ EEADR

En el registro EEADR se carga la dirección a acceder de la EEPROM de datos.


Esta memoria consta de 64 bytes (0x00 a 0x3f), por ello EEADR<7,6>=0.
En el registro EEDATA se almacenan los datos que se leen o se escriben.
Los bits del registro EECON1 controlan las operaciones de la EEPROM.
Un ciclo de escritura de una posición de memoria EEPROM de datos tiene una duración
aproximada de 10 ms, que resulta muy larga para la velocidad del procesador, es por
ello que los bits del registro EECON1 son programados para controlar la completa y
correcta terminación de escritura de la memoria de datos EEPROM.

OBS: El registro EECON2 no está implementado físicamente.


Al leerlo todos sus bits se encuentran en cero.
Es empleado como un dispositivo de seguridad durante el proceso de escritura de la
EEPROM.

Proceso de Lectura
Pasos:
1. Colocar la dirección ha acceder en el registro EEADR
2. Poner a 1 el bit RD del registro EECON1
El dato leído estará disponible en el registro EEDATA en el siguiente ciclo y
permanecerá en él hasta que se realice una nueva lectura o escritura en la EEPROM.

Ejemplo: Lectura de la EEPROM de datos

bcf STATUS,5 ; acceso al BANK_0


movlw DIRECCION_LEER ; se carga la posición a leer en la EEPROM
movwf EEADR
bsf STATUS,RP0 ; acceso al BANK_1
bsf EECON1,RD ; habilita el permiso de lectura
bcf STATUS,5 ; acceso al BANK_0
movf EEDATA,0 ; lee el dato w  EEDATA

Proceso de escritura
Pasos:
1. Cargar la dirección de la posición ha escribir en el registro EEADR
2. Cargar a escribir se almacena en el registro EEDATA
En el proceso de escritura de la EEPROM de datos interviene el registro EECON2, el
cual no se encuentra físicamente implementado asumiendo sólo funciones de
seguridad en el proceso, cargándose en él con los siguientes valores: 0x55 y 0xaa.

Ejemplo: Escritura de la EEPROM de datos

bcf STATUS,5 ; acceso al BANK_0


movlw DIRECCION_ESCR ; se carga la posición a escribir en la
EEPROM
movwf EEADR ; se escribe la dirección en EEADR
movlw DATO
movwf EEDATA ; se carga el dato en EEDATA
bsf STATUS,RP0 ; acceso al BANK_1
bsf EECON1,WREN ; inicio de la secuencia de escritura

;------------------------------------------------------------------------------------------------------------------
-----------
movlw 0x55
movwf EECON2
movlw 0xaa
movwf EECON2
bsf EECON1,WR

;------------------------------------------------------------------------------------------------------------------
-----------

Al finalizar la escritura el WR pasa a valer 0 automáticamente, mientras que EEIF = 1,


este último bit debemos ponerlo en 0 por software.

REGISTROS: REGISTRO EECON1 (DIRECCIÓN 88h)


U U U W/R-0 R/W-x R/W-0 R/S-0 R/S-x
EEIF WRERR WREN WR RD
Bit 7 bit 0
R = Bit leíble
W = Bit escribible
U = Bit no implementado,
leído como '0'
-n = Valor en reset POR

bit 7-5:No implementados. Se leen como 0


bit 4: EEIFE: Señalizador de interrupción
1 = La escritura a terminado
0 = La escritura no se ha terminado o no ha comenzado
bit 3: WRERR: Señalizador de error de escritura
1 = La escritura ha terminado prematuramente
0 = La escritura se ha completado
bit 2: WREN: Permiso de escritura
1 = Permite la escritura de la EEPROM
0 = Prohíbe la escritura de la EEPROM
bit 1: WR: Control de escritura
1 = Se pone a 1 cuando se inicia un ciclo de escritura de la EEPROM de datos
0 = Prohíbe comienzo de ciclo de escritura de la EEPROM
bit 0: RD: Lectura
1 = Se pone a 1 cuando se va realizar un ciclo de lectura de la EEPROM.
Luego pasa ha cero automáticamente
0 = Prohibición de comienzo de lectura

INTERRUPCIONES
Las interrupciones son desviaciones del flujo de control del programa originadas
asincrónicamente por causas que escapan de la supervisión de las instrucciones.
Dichos sucesos pueden ser internos o externos al sistema.
Ante una interrupción el µC se comporta de manera similar al de la instrucción CALL
(llamada a subrutina originada por instrucción).
Ante ambas situaciones se detiene la ejecución normal del programa salvándose la
dirección actual del Contador de Programa (PC) en la Pila y se carga el PC con la
dirección 04H (dirección reservada a la Rutina de Servicios de interrupción: Vector de
Interrupción) en el caso de interrupción o con la dirección especificada en la
instrucción CALL cuando se llama a subrutina en forma síncrona.
La posición 0x04 de la memoria de programa está destinada al Vector de Interrupción
donde se suele colocar una instrucción de salto incondicional (goto), que traslada el
flujo de control a la zona de la memoria de programa destinada a contener la acción
especificada ante una interrupción.

El PIC16F84A admite 4 posibles fuentes de interrupción:

☻ Activación de la patita RB0/INT


☻ Cambio de estado de una de las 4 líneas más significativas de PORTB
☻ Desbordamiento de TMR0
☻ Finalización de la escritura de la EEPROM de datos

OBS: Se retorna de una interrupción con la instrucción RETFIE

REGISTRO INTCON
El registro INTCON es un registro leíble y escribible, que contiene varios bits de
habilitación y flags para el desbordamiento del registro TMR0, cambio de Puerto RB e
interrupciones externas de pin RB0/INT
Nota: Los bits de flag de interrupción se ponen a uno cuando una condición de
interrupción ocurre, indiferente del estado del bit de habilitación correspondiente o el
bit de habilitación global GIE (INTCON<7>). El software de usuario debe asegurarse que
los bits de flag de interrupción apropiados sean borrados previos a habilitar una
interrupción.

REGISTRO: REGISTRO INTCON (DIRECCIÓN 0Bh, 8Bh)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
Bit 7
bit 0
R = Bit leíble
W = Bit escribible
U = Bit no implementado,
leído como '0'
-n = Valor en reset POR

bit 7: GIE: Bit de Habilitación de Interrupción Global


1 = Habilita las interrupciones no enmascaradas
0 = Deshabilita todas las interrupciones
bit 6: EEIE: Bit de Habilitación de Interrupción de la memoria EEPROM
1 = interrupción activada
0 = interrupción desactivada
bit 5: T0IE: Bit de Habilitación de Interrupción de Desbordamiento de TMR0
1 = Habilita la interrupción de TMR0
0 = Deshabilita la interrupción de TMR0
bit 4: INTE: Bit de Habilitación de Interrupción Externa de RB0/INT
1 = Habilita la interrupción externa de RB0/INT
0 = Deshabilita la interrupción externa de RB0/INT
bit 3: RBIE: Bit Habilitación de Interrupción de Cambio del Puerto RB
1 = Habilita la interrupción de cambio del puerto RB
0 = Deshabilita la interrupción de cambio del puerto RB
bit 2: T0IF: Bit de Flag de Interrupción de Desbordamiento de TMR0
1 = El registro TMR0 se ha desbordado (debe ser borrado por software)
0 = El registro TMR0 no se ha desbordado
bit 1: INTF: Bit de Flag de Interrupción Externa de RB0/INT
1 = La interrupción externa RB0/INT ocurrió (debe ser borrado por software)
0 = La interrupción externa RB0/INT no ocurrió
bit 0: RBIF: Bit de Flag de Interrupción de Cambio de Puerto RB
1 = Al menos uno de los pines RB7:RB4 cambió de estado (debe ser borrado por
software)
0 = Ninguno de los pines RB7/RB4 cambió de estado.
TABLA DE NEMONICOS DE LA FAMILIA PIC16X84

NEMONICO DESCRIPCIÓN CODIGO OP FLAGS NOTA


AFECTAD S
OS
Instrucciones Orientadas a Registros
ADDWF f,d (W)+(f)  (destino) 00 0111 dfff ffff C, DC, Z 1.2

ANDWF f,d 00 0101 dfff ffff Z 1.2


(W) AND (f) à (destino)

CLRF 00  (f) 00 0001 1fff ffff Z 2

CLRW 00  (W) 00 0001 0000 0011 Z 1.2

COMF f,d Complemento de f [(#f) 00 1001 dfff ffff Z 1.2


(destino)]

DECF f,d (f)-1  destino 00 0011 dfff ffff Z 1,2,3

DECFSZ f,d (f)-1  destino y si resultado es 00 1011 dfff ffff Ninguno 1.2
0 salta

INCF f,d (f)+1  destino 00 1010 dfff ffff Z 1,2,3

INCFSZ f,d (f)+1  destino y si resultado es 00 1111 dfff ffff Ninguno 1.2
0 salta

IORWF f,d (W) OR (f)  destino 00 0100 dfff ffff Z 1.2

MOVF f,d Mueve f  destino 00 1000 dfff ffff Z

MOVWF f (W)  (f) 00 0000 1fff ffff Ninguno 1.2

NOP No operación 00 0000 0xx0 0000 Ninguno 1.2

RLF f,d Rota f a la izq a través del carry 00 1101 dfff ffff C 1.2
 destino

RRF f,d Rota f a la dcha a través del 00 1100 dfff ffff C 1.2
carry  destino

SUBWF f,d (f)–(W)  (destino) 00 0010 dfff ffff C,DC,Z 1.2

SWAPF f,d Intercambia los nibbles de f  00 1110 dfff ffff Ninguno


destino
XORWF f,d (W) XOR (f)  (destino) 00 0110 dfff ffff Z

Instrucciones orientadas a bits


BCF f,d Pone a 0 el bit b del registro f 01 00bb bfff ffff Ninguno 1.2

BSF f,d Pone a 1 el bit b del registro f 01 01bb bfff ffff Ninguno 1.2

BTFSC f,d Skip si el bit b del reg. f es 0 01 10bb bfff ffff Ninguno 3

BTFSS f,d Skip si el bit b del reg. f es 1 01 11bb bfff ffff Ninguno 3

Instrucciones con literales y de control


ADDLW k (W)+ K  (W) 11 111x kkkk kkkk C,DC,Z

ANDLW k (W) AND K  (W) 11 1001 kkkk kkkk Z

CALL k Llamada a subrutina 10 0kkk kkkk kkkk

CLRWDT Clear del temporizador del WD 00 0000 0110 0100 Ninguno

GOTO k Go To dirección 10 1kkk kkkk kkkk Z

IORLW k (W) OR K  (W) 11 1000 kkkk kkkk Ninguno

MOVLW k K  (W) 11 00xx kkkk kkkk Ninguno

RETFIE Retorno de una interrupción 00 0000 0000 1001 Ninguno

RETLW k Retorno con un literal en W 11 01xx kkkk kkkk Ninguno

RETURN Retorno de una subrutina 00 0000 0000 1000 C,DC,Z

SLEEP Modo Standby 00 0000 0110 0011 Z

SUBLW k K – (W)  W 11 110x kkkk kkkk

XORLW k (W) XOR K  (W) 11 1010 kkkk kkkk

Notas.-
☺ Al modificar un registro de E/S con una operación sobre él mismo ( ejemplo
MOVF PORTB, 1), el valor utilizado es el que se halle presente en los pines del
PORTB. Por ejemplo, si el biestable tiene un "1" para una patilla configurada
como entrada y se pone a nivel bajo desde el exterior, el dato se volverá a
escribir como "0".
☺ Si se ejecuta esta instrucción sobre el TMR0 y d= 1, será borrado el divisor de
frecuencia (Preescalador), si está asignado al TMR0.
☺ Si se modifica el Contador de Programa (PC) o una condición de prueba es
verdadera, la instrucción requiere dos ciclos máquina. El segundo ciclo se
ejecuta como un NOP
REFERENCIAS BIBLIOGRAFICAS
 Microcontroladores PIC, la solución en un chip
J. Ma. Angulo Usategui, E. Martin Cuenca y J. Angulo Martínez
Editorial Paraninfo, 1997
 Aplicaciones de los microcontroladores PIC de Microchip
J. Ma. Angulo Usategui, E. Martin Cuenca y J. Angulo Martínez
Editorial McGraw Hill, 1998
 Microchip PIC Microcontrollers
Data Book, Microchip Technology Inc.
Microchip, The embedded control solutions company, 1997
 Problemas de metodología de la programación
Luis Joyanes Aguilar
Editorial McGraw Hill, 1996

También podría gustarte