Anda di halaman 1dari 126

Introduccin:

Micro-procesadores
Micro-controladores
Aplicaciones
Caractersticas
Familia
Estructura interna
Instrucciones
Programacin
Proyecto final

Microprocesadores
Curso terico prctico propuesta de criterio de evaluacin:
Un examen departamental (35%) y un parcial (20%) 55%
- Laboratorio con entrega personal de circuito con 30%
- Reporte de prcticas, participacin y Asistencia 15% (5% C/U)
- Calificacin final 100%

- PRACTICAS:
- 1.- suma. 2.-Uso de puertos
- 3.- puertos con complemento 4.- conteo
- 5.- parpadeo 6.- un poco de todo
- 7.- 7 segmentos 8, 9 y 10 proyecto

Escucho y olvido. Veo y recuerdo. Hago y aprendo Proverbio chino


Objetivos:

Para la teora:
Definiciones
Caractersticas (qu es)
En que se utiliza
Cmo se utiliza

Para los circuitos prcticos


Definiciones
Smbolo (y terminales)
Comportamiento (funcionamiento)
Polarizacin
Aplicacin
Capacidades
Diseo ( hoja de datos y anlisis)
Micro-controlador: PIC (Circuito Integrado Programable) es un CI programable
que contiene todos los componentes (unidad de memoria, unidad procesadora y
circuitos de entrada y salida) de un computador dedicado en una sola unidad.
Controla una operacin determinada y suele ir incorporado a la tableta. Son
comprados en blanco y luego programados por el usuario bajo algn software
especfico.

Dentro de sus caractersticas, est que en su memoria slo reside el programa de


la funcin de aplicacin; sus entradas/salidas soportan la conexin de los
dispositivos a instalar (sensores y/o actuadores) con valores compatibles en TTL,
y los recursos complementarios son especficos a los requerimientos. Una vez
programado y configurado se dedica a su funcin.

Un Micro-controlador es un sistema cerrado todas las partes de un computador


estn contenidas en su interior, slo sus terminales comunican con el exterior
para los perifricos. Est limitado no se puede modificar en cuanto a su
capacidad.

Un Micro-controlador puede reemplazar a un gran nmero de partes separadas,


hasta obtener un circuito electrnico completo. (3)
Micro-controlador
Micro-controladores
Micro-procesadores
Micro-procesadores
Micro-procesadores
Ofreciendo las siguientes ventajas:
-Aumento de confiabilidad por contener menor nmero de partes
-Reduce el nmero de partes en un diseo y es modificable
-Simplifica el ensamble y es ms pequeo
-Buen desempeo en relacin costo-beneficio
-Es flexible y adaptable a un sin nmero de aplicaciones como:

Equipos electrodomsticos, sistemas de alarma, equipo mdico, subsistemas de


automviles (desde el control remoto, de temperatura, iluminacin, etc. hasta el
control del motor) y equipo electrnico de instrumentacin

Diferencia entre micro-controlador y micro-procesador:


El microprocesador en un CI que contiene la Unidad Central de Proceso (UCP),
tambin llamada procesador. La UCP formada por la unidad de control que
interpreta las instrucciones, y el camino de datos que las ejecuta. Sus
terminales conectan al exterior las lneas de buses de direcciones, datos y
control, para conectar a la memoria y los mdulos de E/S. Se le considera un
sistema abierto porque su configuracin es variable de acuerdo con la
aplicacin a la que se destine. (3)
Laestructuradeunsistemaabiertobasadoenunmicroprocesador

Bus de control
Bus de datos
MICROPRO
CESADOR
Bus de direcciones

memoria Controlador1 Controlador2

Un microcontrolador es un sistema cerrado

Perifricos Microcon Perifricos


trolador
Aplicaciones de los PIC:
Aplicaciones de los PIC:
Principales fabricantes de PICs son: Atmel (Sn Jos California USA), ST
Microelectronics, Texas Instruments, Freescale, Analog Devices y Microchip
Technology, Picaxe, Dallas semiconductor, Renesas ( japonesa Tokio).

http://es.slideshare.net/andresmg/la-familia-de-microcontroladores-pic-
3361548

Arquitectura interna: un micro-controlador es un elemento completo pero


limitado y fijo. Sus partes principales son:
1. Procesador
2. Memoria no voltil (para contener el programa)
3. Memoria de lectura y escritura (para guardar datos)
4. Lneas de E/S para los controladores de perifricos:
a) Comunicacin paralelo
b) Comunicacin serie
c) Diversas puertas de comunicacin (bus, USB, etc)

5. Recursos auxiliares:
Recursos auxiliares: segn las aplicaciones a las que orienta el fabricante cada
modelo de microcontrolador, incorpora una diversidad de complementos que
refuerzan la potencia y la flexibilidad del dispositivo. Las ms comunes son:
a) Circuito de reloj: encargado de generar los pulsos que sincronizan el
funcionamiento de todo el sistema.
b) Temporizadores: orientados a controlar tiempos.

c) Perro guardin (watchdog): destinado a provocar una reinicilizacin cuando el


programa queda bloqueado.

d) Conversores AD y DA: para poder recibir y enviar seales analgicas.

e) Comparadores analgicos: para verificar el valor de una seal analgica

f) Sistema de proteccin ante fallos de la alimentacin: es una funcin que se


habilita o no mediante programacin

a) Estado de reposo (sleep): que es el estado de reposo, en el que el sistema se


congela para mnimo consumo de energa.
Caractersticas ms representativas de cada componente del micro-controlador:

El procesador: en la arquitectura Von Neumann que es una arquitectura


tradicional, la unidad central de proceso UCP se conectaba con una memoria
nica, donde existan datos e instrucciones por medio de un bus.
La necesidad de conseguir elevados rendimientos en el procesamiento de
instrucciones empleando los procesadores con arquitectura Harvard.

En sta arquitectura son independientes la memoria de instrucciones de la de


datos, cada una con su propio sistema de buses para el acceso, esta
dualidad proporciona paralelismo, permitiendo la adecuacin del tamao de
palabra de los buses a los requerimientos especficos, con la diferente
capacidad de cada memoria.

Memoriade Memoria
Bus de control Bus de control
Instrucciones de
UCP
1K*14 Datos
512* 8
Bus de datos 8
Bus de instrucciones 14
El procesador de los modernos microprocesadores responde a la arquitectura
RISC (Computador de Juego de Instrucciones Reducido), que se caracteriza
por tener un repertorio de instrucciones mquina pequeo y simple, de forma
que la mayor parte de las instrucciones se ejecuten en un ciclo de instruccin.
Con el aumento del paralelismo para incrementar su eficiencia, consistente en
la segmentacin del procesador (pipe-line), descomponindolo en etapas
para poder procesar una instruccin diferente en cada una de ellas y trabajar
con varias a la vez.

Memoria del programa: el micro-controlador est diseado para que en su


memoria de programa se almacenen todas las instrucciones del programa de
control. (no es posible utilizar memorias externas para ampliacin).
Como el programa a ejecutar siempre es el mismo, debe estar grabado en forma
permanente. Las memorias de sta funcin admiten cuatro versiones
diferentes:
1. ROM con mscara: en sta el programa se graba en un chip durante el
proceso de su fabricacin.

2. OTP (programable una vez): se graba por parte del usuario slo una vez.
3. EEPROM la grabacin de hace igual a las OTP y EPROM, pero el borrado
es ms sencillo se puede borrar y regrabar electrnicamente.

4: FLAS se trata de una memoria no voltil, de bajo consumo, regrabable y


borrable, pero de mayor capacidad. (su borrado slo es posible con bloque
completos). Son muy recomendables en aplicaciones en las que sea
necesario modificar el programa a lo largo de la vida del producto

Memoria de datos: los datos que se ejecutan por el programa varan


continuamente, exigiendo que la memoria que contiene debe ser de lectura
y escritura (SRAM), aunque sea voltil. Algunos modelos contienen una no
voltil.

Lneas de E/S para los controladores de los perifricos: a excepcin de


dos terminales destinadas a recibir la alimentacin, otras dos para el cristal
de cuarzo (para regular la frecuencia de trabajo), y otra para provocar
Reset, las restantes sirven para soportar la comunicacin con los perifricos
externos a controlar en el micro-controlador. stas lneas manejan
informacin en paralelo y se agrupan en conjuntos de ocho, llamadas
puertas. Otros modelos soportan comunicacin en serie (I2C, USB, etc.)
En los PIC16X84 solo disponen de dos puertos, cada lnea de E/S puede
configurarse independientemente, segn se pongan como Entrada (Input)=
1, Salida (Output) = 0. Y el bit asociado del registro de configuracin de
cada puerta (TRISA y TRISB en el banco 1). Y los datos de los puertos se
guardan en el registro de puertos del banco 0.

Al reinicializarse el PIC todos los bits de los registros TRIS quedan a uno,
(automticamente quedan configuradas como entradas).

El puerto A posee 5 lneas RA0- RA4, y una de ellas soporta dos funciones
multiplexadas a (TOCKI que acta como lnea de E/S y como receptora de
impulsos externos para contar TMRO). Su capacidad es de una corriente
mxima absorbida de 80 mA y una corriente mxima suministrada: 50 mA

Las lneas RA3RA0 admiten niveles de entrada TTL y salida CMOS.


RA4/TOKC1 dispone de un circuito Schmitt Trigger que proporciona
inmunidad al ruido y la salida tiene drenador abierto. Y multiplexa su
funcin de E/S con la entrada de impulsos externos para el TMRO.
I absorbida
La puerta B: consta de 8 lneas bidireccionales de
E/S, RB7 RB0 cuya informacin se almacena en el
registro PUERTA B, (en la direccin 6 del banco 0), I suministrada
el registro de configuracin TRISB (en la direccin 6
del banco 1).

La lnea RB0/INT, adems de E/S acta como terminal para la peticin de una
interrupcin externa. A todas las lneas de esta puerta se las permite
conectar una resistencia pull-up, de elevado valor, con el positivo de la
alimentacin. (con el Reset todas se configuran como entradas y se
desactivan las pull-up). El puerto B tiene 8 lneas, RB0 RB7, tambin una
con funciones multiplexadas (la RB0/INT en la que se reciben impulsos
externos que provocan una interrupcin).

RB7 a RB4 (las de mas peso) pueden programarse para soportar una misin
especial. Se pueden programar para generar una interrupcin si alguna
entrada cambia de estado lgico. La PUERTA B puede absorber un mximo
de 150 mA y suministrar un total de 100 mA.
Configuracinbsica

+5V

R R R R R

1 RA2 RA1 18
2 RA3 RA0 17
3 RA4/TOCK OSC1 16 XTAL C
27 pf
+5V 330 100 4 MCLR/Vpp OSC2 15
C
Reset 5 Vss VDD 14 +5V
6 RBO/INT RB7 13
7 RB1 RB6 12
8 RB2 RB5 11
9 RB3 RB4 10
R 330 R 330
(
En la adaptacin de las terminales RA3 - RA0 a las seales internas del procesador.
Cuando se lee una lnea se recoge el nivel lgico que tiene en ese momento.

Las lneas cuando actan como salida estn latcheadas, implica sacar el nivel lgico que
se haya cargado por ltima vez en el registro PUERTA A.
La escritura de una puerta implica la operacin lectura/modificacin escritura (imagen 103)

Lnea del bus de datos


VDD
D Q

WR PUERTA A Q P
LATCH DATO
RA3:RA0
D Q
WR TRIS A
N BUFFER
Q ENTRADA
LATCH TRIS TTL
Q D
RD

RD PUERTA A Q
Imagen 105 VDD
RBPU#
P (pull-up)

BUS DE DATOS D Q
LACH
WR ESCRITURA (RB7:RB4)
DATO
PUERTA A

D Q
LACH
WR ESCRITURA TRIS B
TIRS A
BUFFR
ENTRADA
RD LECTURA TRIS A TTL

D Q
RD LECTURA TRIS B
EN

D Q
DESDE OTRAS
TERMINALES RD LECTURA
RB7:RB4
EN PERTA B
Programacin de micro-controladores: la utilizacin de los lenguajes ms
cercanos a la mquina (de bajo nivel) representan un considerable ahorro de
cdigo en la confeccin de los programas, lo que es muy importante dado la
estricta limitacin de la capacidad de la memoria de instrucciones. Los
programas bien realizados en lenguaje ensamblador optimizan el tamao de
la memoria que ocupan; adems, de su rpida ejecucin. Colocando a los
Arduino como la competencia de microchip. (9)

Los lenguajes ms utilizados para programar los micro-controladores son el


ensamblador (de bajo nivel), el lenguaje C (de alto nivel) y el lenguaje BASIC
(de alto nivel).

Siempre que se disea con CI programables se precisan herramientas de


software y hardware. Con respecto al software (MPLab y Proteus) adems
de los compiladores (o intrpretes) de los lenguajes usados, se tienen
simuladores (programas que ejecutan las instrucciones representando
esquemticamente el comportamiento del programa en el CI y el estado de
las lneas de E/S). Respecto al hardware, es indispensable el grabador,
(encargado de escribir el programa en la memoria del micro-controlador), y la
PC. Emuladores y sistemas de desarrollo. (10)
Los enanos de 8 terminales: se trata de un grupo de PIC (12C(F)XXX) su
caracterstica es su reducido tamao, al disponer de un encapsulado de 8 terminales.
Se alimenta con un voltaje entre 2.5V y 5.5V, consume menos de 2mA cuando
trabajan a 5V y 4 MHz. Su formato de instrucciones puede ser de 12 o 14 bits y un
repertorio de 33 a 35 instrucciones. Y algunos contienen un sensor de temperatura.

Memoria Memoria Frecuencia E/S ADC Temporiza terminales


modelo programa de datos mxima 8 bits dores
PIC12C508 512x12 25x8 4 MHz 6 TRMO+WDT 8

PIC12C509 1024x12 41x8 4 MHz 6 TRMO+WDT 8

PIC12C670 512x14 80x8 4 MHz 6 2 TRMO+WDT 8

PIC12C671 1024x14 128x8 4 MHz 6 4 TRMO+WDT 8

PIC12C672 2048x14 128x8 4 MHz 6 4 TRMO+WDT 8

PIC12C680 512x12 80x8 4 MHz 6 4 TRMO+WDT 8


Flash EEPROM
PIC12C681 1024x14 80x8 4 MHz 6 TRMO+WDT 8
Flash EEPROM
Caractersticas de algunos modelos PIC12(F)XXX serie enana
Micro-controladores de 8 bits y su seleccin, debido a la cantidad de
fabricantes esto se dificulta, no hay uno mejor que otro, en cada aplicacin
sus caractersticas especficas son las que determinan el mas conveniente.

Dentro de la comunidad de tcnicos y aficionados los PIC cuentan son detalles


como: Sencillez de manejo, buena informacin, precio, buen promedio de
parmetros (velocidad, consumo, tamao, alimentacin, cdigo compacto,
etc.), herramienta de desarrollo fcil y barata, diseo rpido, disponibilidad
inmediata, compatibilidad del software para los modelos de la misma gama.

Hay micro-controladores que procesan datos de 4, 8, 16 y 32 bits. Una labor


importante del ingeniero es la eleccin del modelo del micro-controlador que
mejor satisfaga las necesidades del proyecto con el mnimo presupuesto.

Gama baja (o bsica): PIC 16C5X con instrucciones de 12 bits, de recursos


limitados, con una buena relacin costo/prestaciones. Estn encapsulados
con 18 y 28 terminales, se alimentan a partir de 2.5V (ideales donde aplican
con pilas), con un repertorio de 33 instrucciones, no admiten ningn tipo de
interrupcin y la pila solo dispone de dos niveles.
MODELO Memoria Memoria Frecuencia LINEAS temporizadores terminales
Programa Mxima
EPROMROM Datos E/S
(bites) (MHz)
(12 bits)

PIC16C52 384 25 4 4 TRMO+WDT 18

PIC16C54 512 25 20 12 TRMO+WDT 18

PIC16C54A 512 25 20 12 TRMO+WDT 18

PIC16CR54A 512 25 20 12 TRMO+WDT 18

PIC16C55 512 24 20 20 TRMO+WDT 28

PIC16C56 1K 25 20 12 TRMO+WDT 18

PIC16C57 2K 72 20 20 TRMO+WDT 28

PIC16C57B 2K 72 20 20 TRMO+WDT 28

PIC16CR58A 2K 73 20 12 TRMO+WDT 18

PRINCIPALES CARACTERSTICAS DE ALGUNOS MODELOS DE LA GAMA BAJA


Gama media: PIC16CXXX con instrucciones de 14 bits, es la gama ms variada y
completa de los PIC, con encapsulados desde 18 hasta 68 terminales, con un
repertorio de instrucciones de 35 a 14 bits cada una y compatible con la gama baja.
Contienen todos los recursos para aplicaciones de los microcontroladores de 8 bits,
dispone de interrupciones y una pila de 8 niveles que permite el anidamiento de
subrutinas.

Se clasifica en las siguientes subfamilias:


a) Gama media estndar (PIC1655X)
b) Gama media con comparador analgico (PIC16C62X / 64X / 66X)
c) Gama media con mdulo de captura (CCP), (PWM) y puerto serie (PIC16C6X)
d) Gama media con CAD de 8 bits (PIC16C7X)
e) Gama media con CAD de precisin (PIC14000)
f) Gama media con memoria Flash y EEPROM (PIC16F87X / PIC16X8X)
g) Gama media con driver LCD (PIC16C92X)

La versin PIC14C000, soporta el diseo de controladores inteligentes para cargadores


de bateras, pilas pequeas, UPS y cualquier sistema de adquisicin y
procesamiento de seales que requieran gestin de energa de alimentacin.
Memoria M. de Registros temporiza interrup Rango termi
programa datos especficos ciones voltaje nales
modelo dores E/S
RAM /
EEPROM

PIC16C84 1Kx14EEPROM 36 / 64 11 TMRO+WDT 4 13 2-6 18


PIC16F84 1Kx14 FLASH 68 / 64 11 TMRO+WDT 4 13 2-6 18
PIC16F83 512x14 FLASH 36 / 64 11 TMRO+WDT 4 13 2-6 18
PIC16CR84 1Kx14 ROM 68 / 64 11 TMRO+WDT 4 13 2-6 18
PIC16CR83 512x14 ROM 36 / 64 11 TMRO+WDT 4 13 2-6 18

Caractersticas relevantes de algunos modelos de la gama media.

El tipo de nomenclatura de la subfamilia 16x8x a sus modelos por la letra intermedia:


C: memoria de instrucciones EEPROM
F: memoria de instrucciones tipo FLASH
CR: memoria de instrucciones es ROM
Gama alta: PIC17CXXX con instrucciones de 16 bits y alcanzan las 58 instrucciones
en el repertorio, dispone de un sistema de interrupciones vectorizadas muy potente.
Incluyen variados controladores de perifricos, puertas de comunicacin serie y
paralelo con elementos externos y un multiplicador de hardware de gran velocidad, su
principal caracterstica es que es de arquitectura abierta (con terminales que sacan al
exterior las lneas de los buses de datos, direcciones y control, a las que se conectan
memorias o controladores de perifricos). stos se usan en aplicaciones especiales.

modelo Memoria Memoria Registros tempori CAP PWM CAD interrup Multipli termina
programa datos especfic ciones cador les
os zadores 10 E/S
hardwa
bits
re
PIC17C42A 2Kx16 232 48 4+WDT 2 2 11 33 8x8 40/44

PIC17C43 4Kx16 454 48 4+WDT 2 2 11 33 8x8 40/44

PIC17C44 8Kx16 454 48 4+WDT 2 2 11 33 8x8 40/44

PIC17C752 8Kx16 454 76 4+WDT 4 3 12 18 50 8x8 64/68

PIC17C756 16Kx16 902 76 4+WDT 4 3 12 18 50 8x8 64/68

Caractersticas ms destacadas de algunos modelos PIC17CXXX


Gama mejorada: PIC18C(F)XXX con instrucciones de 16 bits, sta lnea est hecha
con la finalidad de soportar aplicaciones avanzadas en las reas de automocin,
comunicaciones, ofimtica, y control industrial. Con velocidad de 40MHz, con 16
causas de interrupcin, 4 temporizadores, 2 mdulos CCP, ADC de 5 u 8 canales, y
comunicacin serie y paralelo, iniciaron con encapsulados de 28 y 40 terminales,
hasta 80 terminales, un rendimiento de (10 MIPS a 10 MHZ). Que entre las
aportaciones se tiene:

a) Un espacio de direccionamiento para la memoria del programa que permite alcanzar


2MB, y 4KB para la de datos.
b) Inclusin de la tecnologa Flash para la memoria de cdigo.
c) Potente juego de 77 instrucciones de 16 bits c/u. permite realizar una multiplicacin 8
x 8 en un ciclo de instruccin, mover informacin entre las memorias y modificar el
valor de un bit en un registro (o lnea de E / S).
d) Orientacin a la programacin en lenguaje C incorporando compiladores eficientes.
e) Nuevas herramientas para la emulacin.
Diagrama de conexiones de los PICs 1 MCLR/Vpp RB7 40
2 RA0/AN0 RB6 39
1 RA2 RA1 18
3 RA1/AN1 RB5 38
2 RA3 RA0 17
4 RA2/AN2 RB4 37
3 RA4/TOCK OSC1 16 5 RA3/AN3/Vref RB3 36
4 MCLR/Vpp OSC2 15 6 RA4/TOCKI RB2 35
5 Vss VDD 14 7 RA5/AN4/SS RB1 34

6 RBO/INT RB7 13 8 RE0/RD# RB0/INT 33


9 RE1/WR#/AN6 VDD 32
7 RB1 RB6 12
10 RE2/CSAN7 Vss 31
8 RB2 RB5 11
11 VDD RD7/PSP7 30
9 RB3 RB4 10 12 Vss RD6/PSP6 29
Gama baja 13 OSC1/CLKIN RD5/PSP5 28
14 ASC2CLKOUT D4/PSP4 27
15 RC0/T1OSI RC7/RX/DT 26

1 VDD Vss 8 16 RC1/T1OSI RC6/TX/CK 25


17 RC2/CCO1 RC5/SDO 24
2 GP5OSC1 GP0 7
18 RC3/SCK RC4/SDI/SDA 23
3 GP4/OSC2 GP1 6
19 RD0/PSP0 RC3/PSP3 22
4 GP3 GP25 20 RD1/PSP1 RD2/PSP2 21

Gama enana Gama media


Descripcin general y aplicaciones, la diversidad de los modelos de PIC tiene la finalidad
poder seleccionar el mas adecuado para cada aplicacin. Por ello conviene tener
actualizado su gama. (23)

De la serie enana
El PIC16F84, pertenece a la familia de la gama media y dentro de ella es
uno de los ms pequeos, slo tiene 18 terminales; y es de los de menos
recursos. El PIC16X84 en sus dos versiones C y F, por que cumple con los
requisitos esenciales para ensear a manejar los micro-controladores y
comenzar a disear proyectos.
Diagrama de conexionado
El F Tiene una memoria de 1K EEPROM
(capaz de soportar 1 000 000 ciclos de 1 RA2 RA1 18
escritura - borrado) tipo FLASH (con 2 RA3 RA0 17
slo 1 000 ciclos) con palabras de 14 bits
3 RA4/TOCK OSC1 16
cada una. Dispone de 64 bytes de
EEPROM como memoria de datos auxiliar 4 MCLR/Vpp OSC2 15
y opcional. 5 Vss VDD 14
La programacin se simplifica en el proceso 6 RBO/INT RB7 13
de escritura y borrado que se realiza en
7 RB1 RB6 12
serie, en las terminales RB6 para el CLK y
RB7 para los datos. 8 RB2 RB5 11
9 RB3 RB4 10
Presentacin de los PIC16X84
Memoria de programa: 1K*14,EEPROM C y FLAS F
Memoria de datos RAM: 36 bytes C y 68 bytes F
Memoria de datos EEPROM: 64 bytes para ambos modelos
Pila (Stack): de 8 niveles
Interrupciones: 4 tipos diferentes
Juego de instrucciones: 35
Encapsulado: plstico DIP de 18 terminales
Frecuencia de trabajo: 10 MHz. mxima
Temporizadores slo uno (TMRO) y el pero guardin (WDT)
Lneas de E/S digitales : 13 (puerta A 5 y 8 puerta B)
Corriente mxima absorbida: 80 mA puerta A y 150 mA puerta B
Corriente mxima suministrada: 50 mA puerta A y 100 mA puerta B
Corriente mxima absorbida mxima por lnea: 20 mA
Voltaje de alimentacin (VDD): de 2 a 6VCD
Voltaje de grabacin (Vpp): de 12 a 14 VCD
Requerimientos bsicos para los PIC
Reinicializacin o RESET: cuando se aplica un nivel bajo (dispone de un filtro
interno para eliminar los ruidos y los impulsos muy pequeos) en la terminal MCLR# el
micro-controlador reinicializa su estado. Se producen dos acciones importantes:

1 El contador del programa se carga con la direccin 0, apuntando la primera


direccin de la memoria del programa en donde debera estar situada la primera
instruccin del programa de aplicacin.
2 La mayora de los registros de estado y control del procesador toman un
estado conocido y determinado. Se puede provocar un Reset de varias maneras
los PIC tienen 5 causas:
1. Conexin de alimentacin (por Power o Reset)
2. Activacin de la terminal MCLR# (en funcionamiento normal)
3. Activacin del terminal MCLR# (en estado de reposo)
4. Desbordamiento del WDT (en funcionamiento normal)
5. Desbordamiento de WDT (en estado de reposo).

El temporizador PWRT proporciona un retardo fijo de 72 ms y sus impulsos de


reloj los genera un oscilador propio RC, este tiempo garantiza la estabilizacin
de VDD.
La frecuencia de funcionamiento de reloj: la frecuencia de funcionamiento
de un microcontrolador es un parmetro fundamental del que depende la
velocidad de ejecucin del programa y el consumo de energa. Cada modelo
del PIC dispone de diversas versiones para distintas frecuencias.

Cuando un PIC16X8X funciona a 10 MHz, le corresponde un ciclo de


instruccin de 400 ns, puesto que cada instruccin tarda en ejecutarse cuatro
periodos de reloj, (4*100ns = 400 ns).
Todas las instrucciones del PIC se realizan en un ciclo de instruccin, menos las
de salto, que tardan el doble. Los impulsos de reloj entran por las terminales
OSC1/ CLKIN y se dividen por 4 internamente, dando lugar a las seales Q1,
Q2, Q3 y Q4 y se desarrollan las siguientes operaciones:
Q1: Durante este impulso se incrementa el contador del programa.
Q2 Q3: Durante la activacin de stas dos seales se produce la
decodificacin y la ejecucin de la instruccin.
Q4: Durante este impulso se busca el cdigo de la instruccin en la memoria del
programa y se carga en el registro de instrucciones.
Para conseguir ejecutar cada instruccin, se aplica la tcnica de la
segmentacin (pipe- line) ( 72)
En realidad, cada instruccin se ejecuta en dos ciclos : en el primero se lleva a
cabo la fase de bsqueda del cdigo de la instruccin en la memoria del
programa, y en le segundo se decodifica y se ejecuta; esto por la
segmentacin del procesador.
1 ciclo 1 ciclo 1 ciclo 1 ciclo 2 ciclos

fin 1 fin 2 fin 3 fin 1 salto


se inserta un ciclo vaco
Bsqueda1 Ejecucin1 en instrucciones de salto
Bsqueda2 Ejecucin2

Bsqueda3 Ejecucin3

Bsqueda4
1 instruccin MOVLW F5h
Bs.1salto Eje1salto
2 instruccin MOVWF PA
3 instruccin CALL SAL
4 instruccin MOVLW F6h

Eje: un PIC que funciona a 4 MHZ ejecuta un programa de 1000 instrucciones, de las cuales el 25%
son de salto. Calcular el tiempo que tarda en ejecutarlo.
T ciclo instruccin = 4 / T reloj = 4 * 250 ns = 1 000 ns = 1 us
T programa = 750 * 1 + 250 * 2 = 1 250 us
Tipos de osciladores: Los PIC admiten cuatro tipos de osciladores externos
para aplicarles la frecuencia de funcionamiento. El tipo empleado debe especificarse
en dos bits (FOSC1, FOSC0) de la palabra de configuracin.

Oscilador tipo RC: se trata de un oscilador de bajo costo formado por un circuito
con una resistencia y un condensador. Proporciona una estabilidad mediocre de la
frecuencia, cuyo valor depende de los valores de los elementos de la red. (imagen 73)

Ejemplo: Un PIC 16F84 funcionando con una red R-C de 10K y 220 pF, est ejecutando
un programa de 500 instrucciones de las cuales 20% son de salto. Cuanto tarda en
ejecutar el programa?
Si trabaja a 80 KHz,
+VDD
Rext. (5k< Rext<100k)
T osc = (1s / 80* 10 ) = 12.5 s,
3

T ciclo instru = 4 * Tosc = 50 s Fosc


OSC1/CLKIN
T programa = 400 * 50s +100 *100s RELOJ
T programa = 30 000 s = 30 ms Cext INTERNO

PIC16X84
Fosc Rext Cext
OSC2/CLKOUT
625KHz 10k 20pF Fosc/4
80KHz 10k 220pF

80KHZ 10k 0.1uF


Oscilador tipo LP oscilador con bajo consumo con cristal o resonador
diseado para trabajar de 35 a 200 KHZ.

Oscilador tipo XT es un oscilador de cristal resonador para frecuencias


estndar entre 100 KHz y 4 MHz.

Oscilador tipo HS se trata de un oscilador que alcanza una alta velocidad


comprendida entre 4 y 10 MHz y est basado en un cristal de cuarzo (o
resonador cermico). Un resonador o cristal se coloca entre las terminales
OSC1 Y OCS2. (74)

C1 XTAL SLEEP
RF A LA LOGICA
C2 INTERNA

R
En el interior del procesador:
En el PIC 16F84 la longitud de los datos es de un byte, mientras que la de las
instrucciones es de 14 bits. El manejo intensivo de los bancos de registros
(activos en la ejecucin de instrucciones).

De manera global el funcionamiento del procesador comienza con la fase de


bsqueda, que la inicia el contador del programa (PC) dando la direccin de
la memoria de instrucciones donde se ubica (su cdigo binario de 14 bits), se
lee y se carga en el registro de instrucciones (y se transfiere al decodificador
y a la unidad de control).

La ALU es la encargada de realizar la operacin que implica la instruccin


codificada. Un operando lo recibe desde w y el otro desde un registro (o de
la propia instruccin). Tanto el banco de registros especficos, como el de
propsito general residen en la RAM. La EEPROM de datos contiene
informacin que se desee no perder, pero su acceso est controlado por uno
de los registros especiales.
VECTOR RESET
0000H

MEMORIA DE PROGRAMA: la
arquitectura de los PIC puede 12 PC 0
contener 8 192 instrucciones (de
14 bits cada una).
NIVEL 1
Este mapa se divide en pginas de VECTOR DE
2 048 posiciones (para direccionar INTERUP.
8k posiciones se necesitan 13 bits, 0004 H
que es la longitud que tiene el PC).
La aportacin de este PIC es la NIVEL 8
utilizacin de una memoria de
programa tipo EEPROM 03FFH

0400 H
El contador del programa y la NO IMPLEMENTADO
pila: desde 0000 H a la 03FF H
(1024posiciones). En e PC se 1FFF H
ignoran los tres bits de mas peso.
Memoria de datos RAM: disponen de 68 registros de propsito general (en
las direcciones 0x0C y la 0x4f Hex). Y en su organizacin dispone de dos
zonas diferentes:
1. rea de RAM esttica (SRAM), donde reside el banco de registros
especficos (SFR con 24 posiciones de un byte) y el banco de registro de
propsito general (GPR con 36 posiciones).

2. rea EEPROM: de 64 bytes, donde opcionalmente se pueden almacenar


datos que no se pierdan al fallo de la alimentacin.
La zona de la memoria RAM se divide en dos bancos (banco 0 y banco 1) de
128 bytes cada uno.

LA ARUITECTURA AL INTERIOR DEL PROCESADOR: Para lograr una


compactacin del cdigo ptima y una velocidad superior a la de sus
competidores los PIC incorporan un procesador tipo RISC, - el procesador
segmentado y una arquitectura HARDVARD.
Otra caracterstica importante de los PIC es el manejo intensivo del Banco de
Registros, los cuales son muy activos en la ejecucin de las instrucciones.
(13-09-07)
MEMORIA DE DATOS

Registros de 00
01
INDF
TRMO
INDF
OPTION
80
81
propsito 02 PCL PCL 82
03 ESTADO ESTADO 83
especial: 04 FSR FSR 84

SFR 05 PUERTA A TRIS A 85


06 PUERTA B TRIS B 86
07 87

08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C
REGISTROS
GPR
PROPSITO
GENERAL
4F CF
MEMORIA DE DATOS

Register of 00
01
INDF
TRMO
INDF
OPTION
80
81
Function 02 PCL PCL 82
03 STATUS STATUS 83
Special: 04 FSR FSR 84

SFR 05 PORT A TRIS A 85


06 PORT B TRIS B 86
07 87

08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C
REGISTROS
GPR
PROPSITO
GENERAL
4F CF
Registro ESTADO: ocupa la direccin tres (del banco 0 y 1) de la memoria de datos
RAM. Sus bits tienen tres misiones:
1a. Se encarga de avisar las incidencias del resultado de la ALU (C, DC, Z(cero))
2a. Indica el estado de Reset (TO# y PD#)
3a. Seleccionan el banco a acceder en la memoria de datos (IRP, RP0, RP1)
7 ESTADO 0

IRP RP1 RP0 TO# PD# Z DC C

C: acarreo/llevada en el bit de mas peso


1: cuando este sealizador vale 1 indica el acarreo en el bit de mas peso del
resultado al ejecutar las instrucciones addwf y addlw. (igual en caso de resta subwf)
0: no se ha producido un acarreo.
DC: acarreo/llevada en el 4 bit
igual significado que C pero refirindose al 4 bit. De inters en operaciones en BCD.
Z: 1: El resultado de una instruccin lgica- aritmtica ha sido 0.
0: El resultado de una instruccin lgica- aritmtica no ha sido 0.
PD#: Power Down
1: se pone automticamente a 1 despus de la conectar VDD al C o al ejecutar rwdt.
0: se pone automticamente a 0 mediante la ejecucin de la instruccin de sleep.
TO#: Time Out
1: se pone a 1 despus de la conexin de la alimentacin o al ejecutar clrwdt y sleep.
0: se pone a 0 cuando se produce un desbordamiento del perro guardin WD.

RP1-RP0: Seleccin del banco direccionamiento directo: nicamente emplea el bit RP0,
1: se accede al banco 1
0: se accede al banco 0 (despus de un reset RP0 = 0)

IPR: seleccin del banco en direccionamiento indirecto: este bit junto con el de mas peso
del FSR sirven para determinar el banco de la memoria de datos seleccionado en el
modo de direccionamiento indirecto.
La palabra de configuracin: se trata de una posicin reservada de la memoria del
programa (situada en la direccin 2007H y accesible slo durante la grabacin). Al
escribirse el programa de la aplicacin es necesario grabar el contenido de esta
posicin de acuerdo con las caractersticas del sistema.
CP CP CP CP CP CP CP CP CP CP PWRTE WDTE FOS1 FOS0
13 0
CP: bits de proteccin de la memoria de cdigo
1: No protegida.
0: Protegida (no se puede leer evitando copias, ni sobre escribir. Y si se modifica CP 0
a 1, se borra completamente la EEPROM).

PWRTE: activacin del temporizador power-up. (el temporizador retrasa 72 ms la


puesta en marcha o Reset que se produce al conectar la alimentacin al PIC, para
garantizar la estabilidad del voltaje aplicado).
1: Desactivado, 0: Activado.

WDTE: Activacin del perro guardin


1: activado WDT, 0: Desactivado

FOSC1 FOSC0: seleccin del oscilador utilizado


1-1: Oscilador RC, 1-0 Oscilador HS, 0-1: Oscilador XT, 0-0: Oscilador LP
Direccionamiento de la memoria de datos: el PIC de la gama media la
memoria esta organizada para alojar un mximo de 4 bancos de 128 bytes
cada uno. El PIC 16F84 los primeros 80 bytes de los bancos 0 y 1 en el resto
de los PIC de esta familia se destinan dos bits del registro ESTADO (RP0 y
RP1) para determinar el banco y los otros siete para elegir una de las 128
posiciones del banco seleccionado.
(ESTADO)
RP1 RP0 SELECCIN BANCO 00 01 10 11
2 00H

SFR SFR
0BH
7 0CH MAPEADO 128
DIRECIN DEL BANCO GPR ENEL
Bytes
BANCO0
2FH
30H

7FH
Direccionamiento directo: El operando que utiliza la instruccin en curso se
referencia mediante su direccin, que se incluye en su cdigo OP de la misma
(los 7 bits de menos peso), el banco a acceder lo determinan los bits RP0 y RP1
(del registro ESTADO). En el 16F84 se usa el bit de RP0 implementados en dos
bancos.
7 5 ESTADO 0 13 CODIGO OP INSTRUCCIN 6 0
RP0

SELECCCION BANCO BANCO 0 BANCO 1 DIRECCION EN EL


1 00H BANCO
7

30H
NO
IMPLEMENTADO
7FH
Direccionamiento indirecto: se usa cuando en una interrupcin se utiliza
como operando el registro INDF (en la direccin 0 de ambos bancos). En
realidad ste registro no esta implementado fsicamente y cuando se le hace
referencia, se accede a la direccin de un banco especificada en los 7 bits
de menos peso de FSR. El banco a acceder se selecciona con el bit de mas
peso de FSR junto al bit e menos peso de IPR, mientras los 7 bits de
menos peso de FSR apuntan a la posicin (IRP =0 siempre)

ESTADO 7 6 FSR 0
IPR

SELECCIN BANCO

2 7
SELECCIN
DIRECCION
La ALU efecta sus operaciones lgico
INDIRECTO
aritmticas con dos operandos, uno que
recibe desde el registro W (work), que REGISTRO DE
INSTRUCCIN
hace las veces de acumulador en los TRMO

microprocesadores convencionales, y otro


que puede provenir de cualquier registro PC

(o del propio cdigo de instruccin).


ESTADO
MPX
El resultado de la operacin puede
FSR
almacenarse en cualquier registro (o en
W). Esta funcionalidad da un carcter
PUERTA A
completamente ortogonal a las W
instrucciones que pueden utilizar cualquier
PUERTA B
registro como operando fuente y destino.
PUERTA C
ALU
La memoria de datos RAM implementa en REGISTROS
DE
sus posiciones registros especficos y los PROPSITO
de propsito general. (imagen 82) GENERAL
MCLR#

PALABRA DE CONFIGURACION OSC2


ACTIVACION/
1 OSC1
DESACTIVACION
2

TEMPORIZADOR OSCILADOR
PERRO GUARDIAN Y
(WATCHDOG TIMER) WDT CONTROL
CLKOUT
FRECUENCIA INTERNA

AVISO DEL SLEEP


PERRO DIVISOR DE FRECUENCIA
GUARDIAN TOCK1
(RESET) (FRECUENCIA EXTERNA)

6
OPTION
REGISTRO OPTION
TEMPORIZADOR 8
PRINCIPAL
TMRO 8
BUS DE DATOS
DESDE W
IMPULSOS DE RELOJ
PARA TMRO

DIVISOR DE FRECUENCIA

MPX3
CLK

MPX4
PERRO PS2-PS0
GUARDIAN AL TMRO (MPX2)
WDT
WDTE
(PALABRA DE MPX5
CONFIGURACION
PSA
DESBORDAMIENTO WDT
(RESET)
El registro OPTION su misin principal es gobernar el TMRO y el divisor de
frecuencia (ocupa la posicin 81H de la memoria de datos).
El bit 7 RBPU# (RB Pull-Up) activa = 0, y desactiva = 1, las resistencia del puerto B en
las lneas pueden conectarse opcionalmente. (99)

RBPU# INTEDG TOCS TOSE PSA PS2 PS1 PS0

PS2:PS0valoresconelqueactadefrecuencia
PS2 PS1 PS0 DivisindelTMR0 DivisindelWDT

0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
DistribucinyasignacindelosbitsdelregistroOPTION
PSA:Asignacindeldivisordefrecuencia
1= ElDivisordeFrecuenciaseleasignaalWDT
0= ElDivisordeFrecuenciaseleasignaalTMRO
TOSE:TipodeflancoenTOCK1
1= IncrementodeTMROcadaflancodescendente
0= IncrementodeTMROcadaflancoascendente
TOCS:TipodeRelojparaelTMRO
1= PulsosintroducidosatravsdeTOCK1(contador)
0= PulsosderelojinternoFOSC/4(temporizador)
INTEDG:Flancoactivointerrupcinexterna
1= Flancoascendente
0= Flancodescendente
RBPU#:ResistenciaPullUpPuertaB
1= Desactivadas
0= Activadas
EL PAPEL DE LOS TEMPORIZADORES: Los PIC son un computador integral rpido y
potente, en l se incluye un temporizador (para controlar los tiempos), con un sistema de
interrupciones capaz de detectar anomalas (o sucesos especiales), en sistemas de
seguridad, en modo de funcionamiento de bajo consumo y recursos auxiliares.

TEMPORIZADOR/CONTADOR TMRO: una labor habitual en los programas de


control de dispositivos suele ser la de determinar intervalos concretos de tiempo
(temporizar -timer), y es el encargado de realizar esta funcin. Adems, se suele
contar los pulsos que vienen del exterior del sistema (contador).
stas labores de temporizador o contador si se asignan al programa principal roban
atencin al procesador en detrimento de actividades de inters, por lo que hay
recursos orientados a sta labores. Los PIC16F84 poseen un temporizador/contador
de 8 bits, llamado TRMO, que acta de dos maneras:
1. Como contador de sucesos por medio de impulsos que se aplican en RA4/TOCKI (al
llegar a FFH desborda y pasa a 00H) activando un sealizador y/o provocando una
interrupcin.
2. Como temporizador, cuando se carga en el registro que implementa al recurso un
valor inicial se incrementa con cada ciclo de instruccin (Fosc/4), hasta que desborda
poniendo a 1 al sealizador o provocando una interrupcin.
El TMRO acta como principal y sobre l recae el control de tiempos y el contaje
de impulsos. El perro guardin (watchdog WDT) vigila que el programa no
se atasque cada determinado tiempo en la ejecucin normal del programa,
en caso contrario, si la ejecucin se detiene en algn bucle infinito que espera
algn acontecimiento que no ocurre, el perro guardin ladra, y produce un
RESET que reinicia a todo el sistema. (96)

A menudo el TMRO y el WDT precisan controlar largos intervalos de tiempo y


necesitan aumentar la duracin de los impulsos del reloj que les incrementa.
Se dispone de un circuito programable denominado Divisor de frecuencia, que
divide la frecuencia utilizada por diversos rangos, que se programan en el
registro OPTION de la palabra de configuracin.

El funcionamiento del TMRO con el esquema general, con el bloque que retrasa
2 ciclos el contaje para sincronizar el momento de incremento producido por la
seal aplicada en TOCKI (impulsos externos ). Cuando se escribe TMRO se
retrasa 2 ciclos su re incremento y se pone a 0 el divisor de frecuencia. (imagen 97)
El perro guardin (WDT) se trata de un contador interno de 8 bits que
origina un Reset cuando se desborda, (es independiente del TMRO). su control
de tiempos y esta basado en una red R-C. su actuacin es opcional y puede
bloquearse para que no funcione (el bit WDTE de la palabra de
configuracin).

Para evitar que se desborde hay que refrescarle previamente (se pone a cero
mediante clrwdt y sleep), al desbordar WDT el bit TO# = 0 del registro
ESTADO.

La instruccin clrwdt borra al WDT y reinicia su cuenta, y la instruccin sleep,


adems de borrar al WDT detiene al sistema y lo mete a un estado de
reposo (o bajo consumo). Si no se desactiva al WDT al entrar en reposo, al
completar su contaje provocar un reset que sacar al C del estado de
bajo consumo. Para desactivar al WDT el bit 2 = 0 (WDTE) de la palabra de
configuracin. (imagen 100)
Palabras de identificacin ID: son 4 posiciones reservadas de la memoria
de programa (en las direcciones 2000H 2003 H), que no son accesibles
durante el funcionamiento normal de micro-controlador y slo pueden ser
ledas y escritas durante el proceso de grabacin. Se utilizan los 4 bits de
menos peso de ID, en donde se almacena un valor que puede consistir en
un nmero de serie, cdigo de identificacin, numeraciones secuenciales o
aleatorias.

La memoria EEPROM de datos: con 64 bytes, donde se pueden


almacenar datos y variables que interesa que no se pierdan cuando se
desconecta la alimentacin al sistema. Para poder leerla y escribirla durante
el funcionamiento normal hay que utilizar 4 registros del banco SFR:
-EEDATA, -EEADR, -EECON1, -EECON2.

El registro EEADR (en la direccin 9 del banco 0), se carga la direccin a


acceder de l a EEPROM de datos (las 64 posiciones de un byte en 00H
hasta 3FH, por eso los dos bits de mas peso de EEADR siempre valen 0).
MEMORIA DE DATOS
00 INDF INDF 80
01 TRMO OPTION 81
02 PCL PCL 82
03 ESTADO ESTADO 83
04 FSR FSR 84

SFR 05 PUERTA A TRIS A 85


06 PUERTA B TRIS B 86
07 87
08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C

GPR REGISTROS
PROPSITO
GENERAL
4F CF
EECON1 -- -- -- EEIF WRERR WREN WR RD

En el registro EEDATA (en la direccin 8 del banco 0), se depositan los datos que se leen o
se escriben.

El registro EECON1 (en la direccin 8H del banco1), tiene misin de control en las
operaciones de la EEPROM, con la siguiente distribucin:

RD: Lectura , 1: se pone a 1 cuando va a realizar un ciclo de lectura de la EEPROM,


luego pasa a 0 automticamente.

WR: Escritura 1: se pone a 1 cuando se inicia un ciclo de escritura de la EEPROM,


cuando se completa el ciclo pasa a 0 automticamente.

WREN: Permiso de escritura; 1: Permite la escritura de la EEPROM, 0: la prohbe la


escritura.

WRERR: Sealizador de error de escritura; 1: se pine a 1 cuando una operacin de


escritura ha terminado prematuramente.
0: La operacin de escritura se ha completado.

EEIF: Sealizador de final de operacin de escritura; 1:se pone a 1 indica que la


operacin de escritura se ha completado con xito. Se pone a 0 por programa.
0: la operacin de escritura no se ha completado.
Proceso de lectura: se inicia un ciclo de lectura colocando la direccin a
acceder en el registro EEADR y poniendo el bit RD = 1 (en EECON1). El
dato ledo estar disponible en el registro EEDATA en el siguiente ciclo y
permanecer en l hasta que se realiza una nueva lectura o escritura en la
EEPROM.

Proceso de escritura: en EECON2 se cargan en l dos valores concretos


55H y aaH (que tarda 10 ms). El ciclo de escritura comienza cargando en
EEADR la direccin de la posicin a escribir y en el registro EEDATA el valor
a grabar.

Al acabar el proceso de escritura el bit WR = 0 automticamente, y el


sealizador EEIF se pone a 1. por su importancia con el fin de la escritura, si
se desea se puede provocar una interrupcin.
MEMORIA DE DATOS
00 INDF INDF 80
01 TRMO OPTION 81
02 PCL PCL 82
03 ESTADO ESTADO 83
04 FSR FSR 84

SFR 05 PUERTA A TRIS A 85


06 PUERTA B TRIS B 86
07 87
08 EEDATA EECON1 88
09 EEADR EECON2 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C 68 8C

GPR REGISTROS
PROPSITO
GENERAL
4F CF
4F
interrupcin
Cuando ocurre cualquiera de las 4
sucesos indicados se origina una
PC-Pila,GIE =0
peticin de interrupcin, que si se
acepta y se atiende comienza
PC=0004
depositando el valor del PC actual en la
Pila, poniendo el GIE =0 (Global
Interrupt Enable) y cargando en el PC RSI
el valor 0004H, (que es el vector de
interrupcin donde se desva el flujo de Se almacenan los
control). Donde cada fuente de registros a modificar
interrupcin dispone de un sealizador
Se determina la
flag (que se pone automticamente a
Causa de la interrupcin
1 cuando se produce) adems de otro
bit de permiso, que segn su valor Salto a la rutina de
permite o prohbe la realizacin de una Servicio correspondiente
interrupcin.
Se restauran los valores
De los registro almacenados

Se borra el sealizador
Se borra el sealizador De la interrupcin
De la interrupcin
Retorno PC-Pila
GIE = 1
El registro de Control de Interrupciones INTCON: La mayor parte de los
sealizadores y bits de permiso de las fuentes de interrupcin de los PIC16F8X estn
implementados sobre los bits del registro INTCON (en la direccin 0BH del banco. 0,
1).

GIE EEIE TOIE INTE RBIE TOIF INTTF RBIE

INTCON
GIE Permiso Global de Interrupciones:
1: Permite la ejecucin de todas las interrupciones, adems del permiso individual
0: Prohbe las interrupciones

EEIE: Permiso de Interrupcin por fin de Escritura en la EEPROM:


1: Permite se origine una interrupcin cuando termina la escritura de la EEPROM de
datos
0: Prohbe que se produzca esta interrupcin.

TOIE: Permiso de interrupcin por desbordamiento del TMRO


1: Permite la interrupcin, y 0: Prohbe esta interrupcin
INTE: Permiso de Interrupcin por cambio por activacin de RB0/INT
1: Permite esta interrupcin, 0: Prohbe esta interrupcin

RBIE: Permiso de Interrupcin por cambio de estado en RB7:RB4


1: permite la interrupcin, 0: Prohbe esta interrupcin

TOIF: Sealizador de desbordamiento del TMRO


1: Se pone a uno cuando ha ocurrido un desbordamiento, 0: indica que no se ha
desbordado.

INTF: Sealizador de Activacin de la terminal RB0/INT


1: Se pone a uno al activarse, 0: indica que no se ha recibido cambio de flanco.

RBIF: Sealizador de cambio de estado en las terminales de RB7:RB4


1: pasa a uno cuando hay cambio de estado en una de las 4 lneas, 0: no se ha
detectado cambio.
Los sealizadores deben ponerse a 0 por programa antes del retorno de la interrupcin y
son operativos aunque la interrupcin est prohibida por su bit correspondiente.
Importancia de las interrupciones: Las llamadas a subrutinas mediante la
instruccin CALL son desviaciones del flujo de control del programa
originadas por interrupciones (que es similar el comportamiento del micro-
controlador ante la interrupcin), orientadas asincrnicamente por diversos
sucesos. Dichos sucesos pueden ser externos al sistema (como la
activacin de un flanco), o internos (como el desbordamiento de un
contador).
Se detiene la ejecucin del programa en curso, se salva la direccin actual del
PC en la pila y se carga e PC con una direccin.

Causas de interrupcin:
1a. Activacin de la terminal de control RBO/INT
2a. Desbordamiento del temporizador del TMRO
3a. Cambio de estado en una de (RB7- RB4) de la puerta B
4a. Finalizacin de la escritura en la EEPROM de datos
Interrupcin externa INT: Esta fuente de interrupcin es sumamente importante para
atender acontecimientos externos en tiempo real. Cuando ocurre se hace una peticin
de interrupcin, y entonces de manera automtica, el bit INTF= 1 (si el bit de permiso
INTE = 1) se autoriza el desarrollo de la interrupcin (seleccionando el flanco activo
en INTEG del registro OPTION). El procesador explora el sealizador (INTF) al final
del primer ciclo de reloj de cada ciclo de interrupcin.

Interrupcin por desbordamiento del TMRO: Cuando se desborda (y pasa del valor
FFH a 00H), el sealizador TOIF se pone a uno automticamente. GIE = TOIE =
TMRO = 1, se produce una interrupcin. Si no se recarga el TMRO cuando se
desborda, sigue contando. Y en cualquier momento se puede leer y escribir este
registro, pero cada ves que se escribe se pierden dos ciclos de reloj para la
sincronizacin.

Interrupcin por cambio de estado en las lneas RB7:RB4 del puerto B: esta
interrupcin esta diseada especficamente para detectar la pulsacin de una tecla
correspondiente a un teclado matricial, que explora las 4 lneas de E/S.
Interrupcin por finalizacin de escritura en la EEPROM de datos: su tiempo tpico es
de 10 ms, para asegurarse de que se ha completado la escritura y puede
continuarse con el flujo de control del programa, cuando los bits de autorizacin lo
permiten. Con el uso del registro no real EECON2, en el que se graban dos valores
(55H y AAH). Durante la escritura este registro debe prohibirse la aceptacin de
interrupciones para salvaguardar la operacin de escritura (el mdulo se pone GIE
=0).

Reinicializacin o Reset: los PIC tienen 5 causas:


1. Conexin de alimentacin (por Power o Reset)
2. Activacin de la terminal MCLR# (en funcionamiento normal)
3. Activacin del terminal MCLR# (en estado de reposo)
4. Desbordamiento del WDT (en funcionamiento normal)
5. Desbordamiento de WDT (en estado de reposo).

El esquema electrnico para la generacin de un Reset. Y la terminal MCLR# dispone de


un filtro interno para eliminar los ruidos y los impulsos muy pequeos.
El temporizador PWRT proporciona un retardo fijo de 72 ms y sus impulsos de reloj los
genera un oscilador propio RC, este tiempo garantiza la estabilizacin de VDD.
Reset por fallo de alimentacin (Brown Out):Se produce un fallo en la
alimentacin cuando VDD desciende por debajo del valor mnimo, sin llegar
a cero, y luego se recupera. En esta situacin es preciso provocar un reset
(se puede colocar un circuito externo de proteccin).

El modo de reposo de bajo consumo: este modo de funcionamiento de los


PIC est caracterizado por el reducido consumo de energa que requiere
10 A y
est muy recomendado en aplicaciones en la que hay largos periodos de
espera hasta que se produzca algn proceso asncrono. (como la pulsacin
de una tecla).
El consumo tpico del PIC es de 2 mA aproximadamente, reducindose a
menos de en modo de reposo, lo que permite alimentarle con una pequea
pila durante dos aos. Para entrar en modo de reposo hay que ejecutar la
instruccin SLEEP ( parece que el sistema se ha congelado).
En reposo la terminal TOCKI se conecta a VDD o a GND (para eliminar la
entrada de impulsos externos al TMRO, aunque tambin se detiene el
oscilador principal). Las terminales de E/S el estado anterior al modo de
reposo (y las no conectadas como entradas con alta impedancia). El
procesador se congela y deja de ejecutar instrucciones hasta que despierte.

Para salir del estado de reposo existen tres alternativas:


1a. Activacin externa del MCLR# para provocar un reset
2a. Desbordamiento de WDT si qued operativo en el modo de reposo
3a. Generacin de una interrupcin. En este caso, como el TMRO est
parado solo pueden producirse los otros tres tipos de interrupcin.

Los bits TO# (TO# =0 cuando se desborda el WDT), PD# se emplea para
conocer la causa del Reset que despierta al sistema (PD# = 0 cuando se
ejecuta la instruccin SLEEP).
Programador
1 20 1 18 1 28 1 40
2 19 2 17 2 27 2 39
3 18 3 16 3 26 3 38
4 17 4 15 4 25
5 16 5 14 4 37
5 24 5 36
6 15 6 13
7 14 7 12
6 22 6 35
8 13 8 11 7 21 7 34
9 12 9 10 8 20 8 33
10 11 9 19 9 32
10 18 10 31
11 17 11 30
12 16 12 29
13 15 13 28
14 14
Tableta de prueba
Repertorio de instrucciones: El repertorio RISC, como significa Computador de Juego
de Instrucciones Reducido y consta de 35 instrucciones, y posee las siguientes
caractersticas. (125)

1a. Las instrucciones son simples y rpidas, permite que sean ejecutadas en un ciclo de
instruccin y las de salto tardan el doble.
2a. Las instrucciones son ortogonales, apenas tienen restricciones en el uso de operandos
(cualquier instruccin puede usar cualquier operando).
3a. La longitud de las instrucciones y los datos es constante, (todas las instrucciones
tienen 14 bits, y todos los datos un byte).
Tipos de formato:
-Campo de cdigo OP: los bits de este campo sirven para definir la operacin que realiza la
instruccin.
-Campo de los operandos fuente (f) y destino (d): definen los registros que actan
como operandos en la instruccin. (referencan la direccin que ocupa en la memoria)
-Campo de operando inmediato o literal (k): contiene el valor del operando inmediato
-Campo de referencia a un bit: (con 3 bits) indica la posicin de un bit concreto dentro
del registro de 8 bits.
-Campo de la direccin del salto: CALL y GOTO contiene la direccin de la siguiente
instruccin que hay que ejecutar.
Instrucciones que manejan registros: responde a la sintaxis nemnico f y d (de la
memoria de datos 8 bits). El registro f viene referenciado por la direccin de 7 bits
que ocupo, mientras que para el destino slo por uno, que si vale 0 es el W y si vale 1
es el fuente.(127)

Instrucciones que manejan bits: slo con dos instrucciones una de ellas se pone a
1 (bsf) cualquier bit de un registro, mientras que la otra pone a 0 (bcf). (128)

Operaciones que manejan un valor inmediato (o literal): (129)


Operandos incondicionales de control de flujo de programa: este tipo
de instrucciones afectan el contenido del contador del programa (PC) y
sirven para romper la secuencia ordenada de las instrucciones del
programa.

1 Campo del Cdigo OP de 3 bits


2 Campo de la direccin del salto que se carga en el PC de 11 bits
Operaciones de salto condicional: Instrucciones de brinco: dos de ellas
prueban un bit de un registro segn valga 1 o 0 (saltito, slo se salta la
instruccin siguiente a la condicional). Las otras dos incrementan o
decrementan un registro y la posibilidad de brinco se efecta si con esa
operacin el valor del registro ha llegado a cero.(129)
+5V

R R R R R

1 RA2 RA1 18
2 RA3 RA0 17
3 RA4/TOCK OSC1 16 XTAL C
27 pf
+5V 330 100 4 MCLR/Vpp OSC2 15
C
Reset 5 Vss VDD 14 +5V
6 RBO/INT RB7 13
7 RB1 RB6 12
8 RB2 RB5 11
9 RB3 RB4 10
R 330 R 330
Temporizadores para PICs: Rutina para 500 ms

Pdelay movlw .239 ; set numbers of repetions (B)


movwf PDel0 ;
Ploo1 movlw .232 ; set numbers of repetions (A)
movwf PDel1 ;
Loop2 clrwdt ; clear wdt
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 goto PDelL3 ; 1 cycles delay
PDelL3 clrwdt ; 1 cycles delay
decfsz PDelL1,1 ; 1+(1) is time over? (A)
goto PLoop2 ; 2 no loop
decfsz PDelL0,1 ; 1+(1) is time over? (B)
goto PLoop1 ; 2 no loop
PDelL4 goto PDelL5 ; 2 cycles delay
PDelL5 goto PDelL6 ; 2 cycles delay
PDelL6 goto PDelL7 ; 2 cycles delay
PDelL7 clrwdt ; 1 cycles delay
return
Temporizadores para PICs: Rutina para 1seg

PDelay movlw .14 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .72 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .247 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
Temporizadores para PICs: Rutina para 1500 ms (1.5 seg)

PDelay movlw .167 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .67 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .26 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
clrwdt ; 1 cycle delay
return ; 2+2 Done
Temporizadores para PICs: Rutina para 2000 ms (2 seg)

PDelay movlw .167 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .41 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .72 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
Temporizadores para PICs: Rutina para 3000 ms (3 seg)

PDelay movlw .67 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .91 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .122 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
Temporizadores para PICs: Rutina para 5000 ms (5 seg)

PDelay movlw .165 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .41 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .147 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
return ; 2+2 Done
Temporizadores para PICs: Rutina para 10000 ms (10 seg)

PDelay movlw .43 ; 1 set number of repetitions (C)


movwf PDel0 ;1|
PLoop0 movlw .226 ; 1 set number of repetitions (B)
movwf PDel1 ;1|
PLoop1 movlw .205 ; 1 set number of repetitions (A)
movwf PDel2 ;1|
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 cycle delay
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
clrwdt ; 1 cycle delay
return ; 2+2 Done
+

16 15 14 13 12 11 10 9
VCCfgabcde 7 6
Outputs A
BCD A 7 SEGMENTOS DECODIFICADOR/ 8 5
DRIVER ACTIVO EN BAJO 74LS47 R F B
BC lamp outputinputDA 330 9
inputinputTest RBRB inputinput GND
1 2 3 4 5 6 7 8 4
G
3
E C
2
QB QC QD QA 10 D 1

+
1. D
DISPLAY 2. PUNTO
ANODO COMN 3. C
DA04 4. G
5. B
6. Comun (+)
7. A
8. F
9. Comn (+)
10. E
16 15 14 13 12 11 10 9
VCCfgabcde 10 9 8 7 6 1. E
Outputs 2. D
+ BCDAA77SEGMENTOS
BCD SEGMENTOSDECODIFICADOR/ DECODIFICADOR/
a 3. Comn (+)
DRIVERACTIVO
DRIVER ACTIVOEN ENBAJOBAJO74LS47 74LS47 4. C
f b
BC lamp outputinputDA 5. Punto
inputinputTest RBRB inputinput GND
1 2 3 4 5 6 7 8 g 6. B
c 7. A
e 8. Comn (+)
9. F
d
QB QC QD QA 10. g
1 2 3 4 5

DISPLAY
ANODO COMN R
DA09 330

+
Programa que despliega un digito en un display de 7 segmentos en el puerto B segn
se active el dato en el puerto A. Recuerde que dependiendo del display (nodo o
ctodo comn) se utilizan ceros o unos respectivamente en trminos digitales.
Adems, debe coincidir la asignacin de los pines del PIC (puerto B) con el programa,
El cual considera: RB0=a, RB1=b, RB2=c, RB3=d, RB4=e, RB5=f, RB6=g Y RB7= punto
el cual indica que la cantidad es mayor que 10.
(coloque una resistencia a cada segmento)
; programa que suma dos valores y guarda el resultado /*programa en C de la suma de dos operandos */
;en ensamblador
LIST P=16584A
INCLUDE <P16F84A.INC> #DEVICE P16F84A /*micro a utilizar /*
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
OPERANDO1 EQU 0X0C
void main (void)
OPERANDO2 EQU 0X0D {
RESULTADO EQU 0X0E int*p_ op1, op2, p_result; /*declaracin de los */
ORG 0
/*punteros a utilizar */
MOVLW 05 p_op1 = 0x0c; /*asignacin de di- */
MOVWF OPERANDO1 p_op2 = 0x0d; /*recciones a los */
MOVLW 02
MOVWF OPERANDO2
p_result = 0x0e; /* operandos */
MOVFW OPERANDO1
ADDWF OPERANDO2, 0 *p_op1 =5; /*se carga un cinco*/
MOVWF RESULTADO
END
*p_op2 = 2; /*se carga un dos */
*p_result = *p_op1 + *op2; /*se hace la suma*/
} /*comando de fin de programa*/
; programa que lee el puerto A y lo muestra en el puerto B /*programa en C que lee en el puerto A y mostra en el
;en ensamblador
LIST P=16584A
puerto B */
INCLUDE <P16F84A.INC>
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF #DEVICE P16F84A /*micro a utilizar /*
RADIX HEX
# INCLUDE <16F84A.H> /*librera a utilizar */
OTRA OPCIN
#bytepuertaA=05 /*posicin de puertoA */
BSF STATE, RP0 BSF 0X03,5 #bytepuertaB=06 /*posicin de puertoB*/
MOVLW 0XFF MOVLW 0X0FF
MOVWF PORTA MOVWF 0X05
MOVLW 0X00
MOVLW 0X00 void main (void)
MOVWF 0X06
MOVWF PORTB BCF 0X03,5 {
BCF STATE, RP0 int valor; /*valor temporal*/
ORG 0
ORG 0
MOVF 0X05, 0 set_tris_A (0xff); /*configura al puerto A como entrada*/
MOVF PORTA, 0
MOVWF 0X06
MOVWF PORTB INICIO GOTO INICIO set_tris_B (0x00); /*configura al puerto B como entrada*/
INICIO GOTO INICIO
do {
END END
valor = puertaA; /* lee el puerto A */
puertaB = valor; /* resultado pasa al puerto B*/
} while (TRUE); /* bucle infinito */
} /*comando de fin de programa*/
; programa que lee el puerto A le suma cuatro y lo muestra /*programa en C de la suma de cuatro que lee en el puerto
;en el puerto B en ensamblador
A y mostrarlo en el puerto B */

LIST P=16584A
#DEVICE P16F84A /*micro a utilizar /*
INCLUDE <P16F84A.INC>
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
#bytepuertaA=05 /*posicin de puerto A */
RADIX HEX OTRA OPCIN #bytepuertaB=06 /*posicin de puerto B*/
BSF STATE, RP0 BSF 0X03,5
MOVLW 0XFF MOVLW 0X0FF void main (void)
MOVWF PORTA MOVWF 0X05
MOVLW 0X00 {
MOVLW 0X00
MOVWF 0X06 int valor; /*valor temporal*/
MOVWF PORTB BCF 0X03,5
BCF STATE, RP0
ORG 0 set_tris_A (0xff); /*configura al puerto A como entrada*/
ORG 0 set_tris_B (0x00); /*configura al puerto B como entrada*/
INICIO MOVF 0X05, 0
INICIO MOVF PORTA, 0
ADDLW 0X04 do {
ADDLW 0X04, 0 MOVWF 0X06
MOVWF PORTB GOTO INICIO valor = puertaA; /* lee el puerto A */
GOTO INICIO valor += 4; /*incrementa el valor en 4*/
END END
puertaB = valor; /* resultado pasa al puerto B*/
} while (TRUE); /* bucle infinito */
} /*comando de fin de programa*/
; programa que cuenta ascendente hasta 5f y se reinicia /*programa en C cuenta ascendente hasta 5f */
; en ensamblador
LIST P=16584A
INCLUDE <P16F84A.INC> #DEVICE P16F84A /*micro a utilizar /*
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF # INCLUDE <16F84A.H> /*librera a utilizar */
RADIX HEX
#use delay (4000000) /*especifica clk 4MHz*/
CUENTA EQU 0X0C #bytepuertaB=06 /*posicin de puerto B*/
#byteconta=0x0c /*posicin de conta */
BSF STATE, RP0
CLRF PORTB
BCF STATE, RP0 void main (void)
{
ORG 0
GOTO INICIO
ORG 5
set_tris_B (0x00); /*configura al puerto B como entrada*/

CLRF CUENTA For (conta=0;conta<=0x5f;++conta) /* bucle qua borra a*/


CLRF PORTB
/*conta, incrementa hasta*/
INICIO INCF CUENTA, F
MOVF CUENTA, W /* 5f y queda en ciclo infinito*/
MOVWF PORTB portb=conta; /* saca por puerta B a conta */
CALL RETARDO delay_us (1000 000) /*retardo de 1 segundo*/
MOVLW 0X5F
} /*comando de fin de programa*/
SUBWF CUENTA, W
BTFSS STATE,2
GOTO INICIO
BUCLE GOTO BUCLE
END
TemporizacionesenC

Utilizando libreras con funciones de uso comn, de modo que realiza una temporizacin
como una directiva. #use delay (clock=velocidad_en hercios) y luego emplear las
funciones delay_ms, delay_us o delay_cycles segn convenga.

delay_us (xxx) Temporizacin de xxx microsegundos


delay_ms (xxx) Temporizacin de xxx nano segundos
delay_cycles (xxx) Pausa de xxx ciclos de instruccin (255 mximo)
; programa que genera rutina de desplazamiento de
; derecha a izquierda y viceversa en ensamblador MOVLW 0X40
LIST P=16584A MOVWF PORTB
INCLUDE <P16F84A.INC>
CALL RETARDO
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF
MOVLW 0X20
MOVWF PORTB
BSF STATE, RP0 MOVLW 0X04
MOVWF PORTB CALL RETARDO
CLRF PORTB
CALL RETARDO MOVLW 0X10
MOVLW 0XFF
MOVLW 0X08 MOVWF PORTB
MOVWF PORTA
MOVWF PORTB CALL RETARDO
BCF STATE, RP0 CALL RETARDO MOVLW 0X08
MOVLW 0X10
MOVWF PORTB MOVWF PORTB
ORG 0
CALL RETARDO CALL RETARDO
CLRF PORTB
MOVLW 0X20 MOVLW 0X04
MOVWF PORTB MOVWF PORTB
INICIO BTFSS PORTA,0 CALL RETARDO CALL RETARDO
GOTO DOS MOVLW 0X40
MOVWF PORTB MOVLW 0X02
GOTO UNO
CALL RETARDO MOVWF PORTB
UNO MOVLW 0X01
MOVLW 0X80 CALL RETARDO
MOVWF PORTB
MOVWF PORTB MOVLW 0X01
CALL RETARDO CALL RETARDO MOVWF PORTB
MOVLW 0X02 GOTO INICIO
DOS MOVLW 0X80 CALL RETARDO
MOVWF PORTB
MOVWF PORTB GOTO INICIO
CALL RETARDO
CALL RETARDO END

}
/*programa en C rutina de desplazamiento de*/ Bit_set (puertaB,6) /* activa el sptimo bit a uno*/
/*izquierda a derecha y viceversa*/ Delay_us (1000000); /* genera retardo de un segundo*/
#DEVICE P16F84A /*micro a utilizar /* Bit_set (puertaB,7) /* activa el octavo bit a uno*/
# INCLUDE <16F84A.H> /*librera a utilizar */
#use delay (4000000) /*especifica clk 4MHz*/ Dos
#bytepuertaA=05 /*posicin de puerto A*/ Delay_us (1000000); /* genera retardo de un segundo*/
#bytepuertaB=06 /*posicin de puerto B*/ Bit_set (puertaB,7) /* activa el octavo bit a uno*/
void main (void) Delay_us (1000000); /* genera retardo de un segundo*/
{ Bit_set (puertaB,6) /* activa el sptimo bit a uno*/
set_tris_A (0xff); /*configura al puerto A como entrada*/ Delay_us (1000000); /* genera retardo de un segundo*/
set_tris_B (0x00); /*configura al puerto B como salida*/ Bit_set (puertaB,5) /* activa el sexto bit a uno*/
portB = 0; Delay_us (1000000); /* genera retardo de un segundo*/
do { Bit_set (puertaB,4) /* activa el quinto bit a uno*/
Uno = bit_test = 0(portA,0); Delay_us (1000000); /* genera retardo de un segundo*/
Dos = bit_test = 1(portA,0); Bit_set (puertaB,3) /* activa el cuarto bit a uno*/
Uno Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,0) /* activa el primer bit a uno*/ Bit_set (puertaB,2) /* activa el tercer bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,1) /* activa el segundo bit a uno*/ Bit_set (puertaB,1) /* activa el segundo bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,2) /* activa el tercer bit a uno*/ Bit_set (puertaB,0) /* activa el primero bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/ Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,3) /* activa el cuarto bit a uno*/ inicio
Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,4) /* activa el quinto bit a uno*/ }
Delay_us (1000000); /* genera retardo de un segundo*/
Bit_set (puertaB,5) /* activa el sexto bit a uno*/
Delay_us (1000000); /* genera retardo de un segundo*/
; programa que despliega en un display de 7 segmentos en el
;puerto B segn lo seleccione en el puerto A en ensamblador SIGUE8 MOVLW 0X08
LIST P=16584A SIGUE2 MOVLW 0X02
SUBLW VALOR,0
INCLUDE <P16F84A.INC> SUBLW VALOR,0
BTFSC STATE,2
__CONFIG _ XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF BTFSC STATE,2
GOTO SIGUE7
VALOR EQU 0X0C GOTO SIGUE1
GOTO OCHO
BSF STATE, RP0 GOTO DOS
SIGUE7 MOVLW 0X07
CLRF PORTB SIGUE13 MOVLW 0X0D SIGUE1 MOVLW 0X01
SUBLW VALOR,0
MOVLW 0X0F SUBLW VALOR,0 SUBLW VALOR,0
BTFSC STATE,2
MOVWF PORTA BTFSC STATE,2 BTFSC STATE,2
GOTO SIGUE6
BCF STATE, RP0 GOTO SIGUE12 GOTO SIGUE
GOTO SIETE
ORG 0 GOTO TRECE GOTO UNO
SIGUE6 MOVLW 0X06
CLRF PORTB SIGUE12 MOVLW 0X0C SIGUE MOVLW 0X00
SUBLW VALOR,0
SUBLW VALOR,0 MOVWF PORTB
BTFSC STATE,2
INICIO MOVF PORTA,0 BTFSC STATE,2 CALL RETARDO
GOTO SIGUE5
MOVWF VALOR GOTO SIGUE11 GOTO INICIO
GOTO SIES
COMF VALOR,F GOTO DOCE UNO MOVLW 0X01
SIGUE5 MOVLW 0X05
MOVLW 0X1F SIGUE11 MOVLW 0X0B MOVWF PORTB
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0 CALL RETARDO
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2 GOTO INICIO
GOTO SIGUE4
GOTO SIGUE15 GOTO SIGUE10 DOS MOVLW 0X02
GOTO CINCO
GOTO DIECISEIS GOTO ONCE MOVLW PORTB
SIGUE4 MOVLW 0X04
SIGUE15 MOVLW 0X0F SIGUE10 MOVLW 0X0A CALL RETARDO
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0 GOTO INICIO
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2 TRES MOVLW 0X03
GOTO SIGUE3
GOTO SIGUE14 GOTO SIGUE9 MOVLW PORTB
GOTO CUATRO
GOTO QUINCE GOTO DIEZ CALL RETARDO
SIGUE3 MOVLW 0X03
SIGUE14 MOVLW 0X0E SIGUE9 MOVLW 0X09
SUBLW VALOR,0
SUBLW VALOR,0 SUBLW VALOR,0
BTFSC STATE,2
BTFSC STATE,2 BTFSC STATE,2
GOTO SIGUE2
GOTO SIGUE13 GOTO SIGUE8 GOTO INICIO
GOTO TRES
GOTO CATORCE GOTO NUEVE CALL RETARDO
RETURN
END
/*programa en C que despliega en display de 7 segmentos*/
/*del puerto B, seleccionado el valor en el puerto A*/

#DEVICE P16F84A /*micro a utilizar /*


# INCLUDE <16F84A.H> /*librera a utilizar */
#use delay (4000000) /*especifica clk 4MHz*/
#bytepuertaA=05 /*posicin de puerto A*/
#bytepuertaB=06 /*posicin de puerto B*/
void main (void)
{ Int temp = 0, tabla [8]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07};
Int ndice = 0;
set_tris_A (0xff); /*configura al puerto A como entrada*/
set_tris_B (0x00); /*configura al puerto B como salida*/
temp = ~portA: /*se complementa la entrada del puerto A*/
If (bit_test (temp, 0) ) ndice += 1; /*activado el primer bit igual a uno*/
If (bit_test ( temp, 1) ) ndice += 2; /*activado el segundo bit igual a dos*/
If (bit_test (temp, 2) ) ndice += 4; /*activado el tercer bit igual a cuatro*/
If (bit}_test (temp, 3) ) ndice += 8; /*activado el cuarto bit igual a ocho*/
If (bit_test (temp, 4) ) ndice +=16; /*activado el cuarto bit igual a diecisis*/
portB = tabla [ndice] ; /*saca el valor de la tabla por puerto B*/
}
/*programa en C conecta teclado matricial en el */ TRISB &= ~ucBitmask; /*selecciona a una*/
/*puerto B, indica su valor con leds en puerto A*/
PORTB |= ucBitmask; /*coloca el bit en alto*/
#DEVICE P16F84A /*micro a utilizar /*
# INCLUDE <16F84A.H> /*librera a utilizar */ vDelayMilis(10); /*genera un retardo*/
#use delay (4000000) /*especifica clk 4MHz*/ /*Guarda columnas en una variable de 16 bits*/
#bytepuertaB=06 /*posicin de puerto B*/ wKeyStatus |= (PORTB & 0x0F);

void main (void) if( ucCount == 3 ) /*leemos las 4 columnas*/


{ unsigned char ucCount = 0; break; /*salimos del ciclo*/
unsigned char ucBitmask = 0x10; wKeyStatus = wKeyStatus<<4;
WORD wKeyStatus =0; ucBitmask = ucBitmask<<1;
ucCount ++;
if( PORTB & 0x0F ) /*revisa la lnea activada*/ } while(1);
{
/*escanea cual fila es*/ TRISB = 0x0F; /*mantenemos configuracin*/
do
{ PORTB = 0xF0; /* mantenemos los bit*/
PORTB &= 0x0F; /*apaga todas las filas*/ return wKeyStatus;
}
return 0;
}
LCD1.c: Cada vez que presiona el pulsador sbit LCD_RS_Direction at TRISB4_bit;
conectado en RA4 se incrementa un sbit LCD_EN_Direction at TRISB5_bit;
contador que se visualiza en el centro de la sbit LCD_D4_Direction at TRISB0_bit;
segunda lnea de la pantalla (figura 3.1.1). Si
la cuenta supera 100, el conteo se reinicia sbit LCD_D5_Direction at TRISB1_bit;
desde 0. En el centro de la primera lnea se sbit LCD_D6_Direction at TRISB2_bit;
muestra la palabra Conteo:. sbit LCD_D7_Direction at TRISB3_bit;
//LCD1.c // Fin de declaracin de variables de conexin.
//Declaracin de las 12 variables necesarias
para la conexin char contador=0,estado=1,texto1[]="Conteo:",
//de la pantalla LCD 2x16. texto2[4];
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit; void main(){
sbit LCD_D4 at RB0_bit; OSCCON=0x40; //Oscilador interno a 1MHz.
sbit LCD_D5 at RB1_bit; while (OSCCON.IOFS==0);//Esperar mientras el
sbit LCD_D6 at RB2_bit; oscilador est inestable.
sbit LCD_D7 at RB3_bit;
ANSEL=0x00; //Bits AN6:AN0 como E/S digital.
Lcd_Init(); //Inicializa el LCD.
Lcd_Cmd(_LCD_CLEAR); //Borra el display.
Lcd_Cmd(_LCD_CURSOR_OFF); //Apaga el
cursor.
Lcd_Out(2,6,texto2); //Escribe el texto2.
Lcd_Out(1,6,texto1); //Escribe el texto1.
while (1)
{
if (Button(&PORTA,4,1,0)) estado=0; //Si se
pulsa.
if (estado==0 && Button(&PORTA,4,1,1)) //Si se
pulsa y se libera.
{
contador++; //"contador" contiene el nmero de
pulsaciones.
if (contador>100) contador=0;
estado=1;
}
ByteToStr(contador,texto2); //Convierte el
contenido de la variable
//en texto.
Lcd_Out(2,6,texto2); //Escribe el texto2.
}
}
comando de fin de programa*/
DisplayLCDvisualizador:(187)
La visualizacin de la informacin en los sistemas digitales es una parte muy importante,
pues es el medio a travs del cual el proceso indica su situacin de entrada y/o salida.

La pantalla se recomienda para una visualizacin pequea o media y tiene la capacidad de


mostrar cualquier carcter alfanumrico, que consta de una matriz de caracteres (por
ejemplo 5X7 puntos), distribuidos en una, dos, tres o cuatro lneas de 16 hasta 64
caracteres por cada lnea. El proceso es gobernado por un microcontrolador
incorporado a la pantalla.

Debido a los diversos fabricantes de LCD resaltan las principales caractersticas


generales, tales como:
Consumo energtico reducido, del orden de 7.5 mW.
Pantalla de caracteres ASCII, adems de otros como los japoneses, griegos y smbolos
matemticos. Algunos permiten que el usuario programe sus propios caracteres.
Desplazamiento de los caracteres hacia la izquierda o a la derecha.
Memoria de N caracteres (40) por lnea de pantalla, y visualizando 16 caracteres.
Movimiento del cursor y cambio de aspecto.
conexin del bus de 4 y 8 bits.
Identificacin de pines y funciones del Display LCD (LM016L)

PinNo Function Name


1 Ground(0V) Ground
2 Supplyvoltage;5V(4.7V 5.3V) Vcc
3 Contrastadjustment;throughavariableresistor VEE
4 Selectscommandregisterwhenlow;anddataregisterwhenhighRegisterSelect
5 Lowtowritetotheregister;Hightoreadfromtheregister Read/write
6 Sendsdatatodatapinswhenahightolowpulseisgiven Enable
7 8bitdatapins(8ala14)DB0alaDB7
15 BacklightVCC (5V) Led+
16 BacklightGround(0V) Led
Display LCD visualizador:
El usuario debe saber: (196)

Identificacin de pines.
Identificacin de caracteres predefinidos (data sheet) a partir del cdigo correspondiente.
Identificar los comandos de control.

Los datos predefinidos en una memoria no voltil llamada CGROM se almacenan 192
caracteres visibles a partir de un cdigo binario de 8 bits. La DDRAM (Data Dispaly
RAM) memoria donde almacena caracteres que se pueden representar (80 bytes)

Modos de funcionamiento:
Modo comando: cuando por el bus de datos el LCD recibe instrucciones como Borrar
Display, Mover Cursor, Desplazar a la Izquierda, etc. RS=0 y R/W=0 esto tarda 1.64
ms.
Modo Carcter o Dato: cuando por el bus de datos el LCD recibe un carcter a escribir
en la DDRAM en ACII. RS=1 y R/W=0. esto tarda 40 s.

Modo lectura del Busy Flag (o LCD ocupada): en el bit 7del bus de datos el LCD informa
al microcontrolador que est ocupada, con RS=0 y R/W=1, y hay que esperar.
;LibreradesubrutinasparaelmanejodemensajesavisualizarenunvisualizadorLCD.

CBLOCK ;indicaquecualquierdireccinseasignaautomticamente
LCD_ApuntaCaracter ;Indicalaposicindelcarcteravisualizaraliniciodetodos
;(posicindelaetiqueta"Mensajes").
LCD_ValorCaracter ;CdigoASCIIdelcarctera
ENDC ;visualizar.
;Losmensajessesituandentrodelas256primerasposicionesdela
;memoriadeprograma,esdecir,nopuedensuperarladireccin0FFh.
;Subrutina"LCD_Mensaje,VisualizaelmensajeapuntadoporelregistroW.
;Losmensajesdebenlocalizarsedentrodeunazonaencabezadaporlaetiqueta
"Mensajes"yque;tengalasiguienteestructura:

;Mensajes ;Etiquetaobligatoria!
;addwf PCL,F ;Mensaje0yposicininicialdelmensaje.
;DT"....",0x00 ;Mensajeterminadoen0x00.
;Mensaje1
; ...
; ...
;FinMensajes
;Lallamadaaestasubrutinaserealizarsiguiendoesteejemplo:
MovlwMensaje0 ;Cargalaposicindelmensaje.
call LCD_Mensaje ;Visualizaelmensaje.
LCD_Mensaje
MovwfLCD_ApuntaCaracter ;Posicindelprimercarcterdelmensaje.
MovlwMensajes ;Hallalaposicinrelativadelprimercarcter
subwfLCD_ApuntaCaracter,F ;delmensajerespectodeetiqueta"Mensajes".
decf LCD_ApuntaCaracter,F ;Compensalaposicinqueocupa"addwfPCL,F".
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
call Mensajes ;ObtieneelcdigoASCIIdelcarcterapuntado.
MovwfLCD_ValorCaracter ;Guardaelvalordecarcter.
movf LCD_ValorCaracter,F ;LonicoquehaceesposicionarflagZ.Encaso
btfsc STATUS,Z ;quesea"0x00",queescdigoindicadorfinal
goto LCD_FinMensaje ;demensaje,salefuera.
LCD_NoUltimoCaracter
call LCD_Caracter ;VisualizaelcarcterASCIIledo.
incf LCD_ApuntaCaracter,F ;Apuntaalaposicindelsiguientecarcter
goto LCD_VisualizaOtroCaracter ;dentrodelmensaje.
LCD_FinMensaje
return ;Vuelvealprogramaprincipal.
;Subrutina"LCD_MensajeMovimiento",visualiza unmensajede16caracteresenuna
;lneaelmensajedebedejarse16espaciosenblanco,alprincipioyalfinalpara
;conseguirqueeldesplazamientodelmensajesealomslegibleposible.

CBLOCK
LCD_CursorPosicion ;Contabilizalaposicindelcursordentrodela
ENDC ;pantallaLCD
LCD_MensajeMovimiento
movwfLCD_ApuntaCaracter ;Posicindelprimercarcterdelmensaje.
movlwMensajes ;Hallalaposicinrelativadelprimercarcter
subwfLCD_ApuntaCaracter,F ;delmensajerespectodelaetiqueta"Mensajes".
decfLCD_ApuntaCaracter,F ;Compensalaposicinqueocupa"addwfPCL,F".
LCD_PrimeraPosicion
clrfLCD_CursorPosicion ;Elcursorenlaposicin0delalnea.
callLCD_Borra ;Sesitaenlaprimeraposicindelalnea1y
LCD_VisualizaCaracter ;borralapantalla.
movlwLCD_CaracteresPorLinea ;Hallegadoafinaldelnea?
subwf LCD_CursorPosicion,W
btfss STATUS,Z
goto LCD_NoEsFinalLinea
LCD_EsFinalLinea
callRetardo_200ms ;Lomantienevisualizadoduranteestetiempo.
callRetardo_200ms
movlwLCD_CaracteresPorLinea1;Apuntaalaposicindelsegundocarcter
visualizado
subwfLCD_ApuntaCaracter,F ;enpantalla,queserelprimeroenlasiguiente
gotoLCD_PrimeraPosicion ;visualizacindelnea,paraproducirelefecto
LCD_NoEsFinalLinea ;dedesplazamientohacialaizquierda.
movfLCD_ApuntaCaracter,W
calMensajes ;ObtieneelASCIIdelcarcterapuntado.
movwfLCD_ValorCaracter ;Guardaelvalordecarcter.
movfLCD_ValorCaracter,F ;LonicoquehaceesposicionarflagZ.Encaso
btfscSTATUS,Z ;quesea"0x00",queescdigoindicadorfinal
gotoLCD_FinMovimiento ;demensaje,salefuera.
LCD_NoUltimoCaracter2
callLCD_Caracter ;VisualizaelcarcterASCIIledo.
incfLCD_CursorPosicion,F ;Contabilizaelincrementodeposicindelcursor
incfLCD_ApuntaCaracter,F ;Apuntaalasiguienteposicinporvisualizar.
gotoLCD_VisualizaCaracter ;Vuelveavisualizarelsiguientecarcter
LCD_FinMovimiento ;delalnea.
return ;Vuelvealprogramaprincipal.
;LCD_4BIT.INC
;PermitenrealizarlastareasbsicasdecontroldeunmduloLCDde2
;lneaspor16caracteres,compatibleconelmodeloLM016L.
;ElvisualizadorLCDestconectadoalPuertoBdelPICmedianteunbusde4bits.Las
;conexionesson:
; Las4lneassuperioresdelmduloLCD,pines<DB7:DB4>seconectanalas4
; lneassuperioresdelPuertoBdelPIC,pines<RB7:RB4>.
; PinRSdelLCDalalneaRA0delPIC.
; PinR/WdelLCDalalneaRA1delPIC,oamasa.
; PinEnabledelLCDalalneaRA2delPIC.
;Seutilizanllamadasasubrutinasderetardodetiempolocalizadasenlalibrera
;RETARDOS.INC.
;ZONADEDATOS
*********************************************************************
CBLOCK
LCD_Dato
LCD_GuardaDato
LCD_GuardaTRISB
LCD_Auxiliar1
LCD_Auxiliar2
ENDC
Mensaje1
; ...
; ...
;FinMensajes
;
;Lallamadaaestasubrutinaserealizarsiguiendoesteejemplo:
; movlwMensaje0 ;Cargalaposicindelmensaje.
; callLCD_Mensaje ;Visualizaelmensaje.
LCD_Mensaje
movwf LCD_ApuntaCaracter ;Posicindelprimercarcterdel
mensaje.
movlw Mensajes ;Hallalaposicinrelativadel
primercarcter
subwf LCD_ApuntaCaracter,F ;delmensajerespectodeetiqueta
"Mensajes".
decf LCD_ApuntaCaracter,F ;Compensalaposicinqueocupa
"addwfPCL,F".
LCD_VisualizaOtroCaracter
movf LCD_ApuntaCaracter,W
LCD_CaracteresPorLineaEQU .16;Nmerodecaracteresporlneadelapantalla.
#DEFINELCD_PinRS PORTA,0
#DEFINELCD_PinRW PORTA,1
#DEFINELCD_PinEnable PORTA,2
#DEFINELCD_BusDatos PORTB

LCD_Inicializa
bsf STATUS,RP0 ;ConfiguralaslneasconectadasalpinesRS,
bcf LCD_PinRS ;R/WyE.
bcf LCD_PinEnable
bcf LCD_PinRW
bcf STATUS,RP0
bcf LCD_PinRW ;Encasodequeestconectadoleindica
;quesevaaescribirenelLCD.
bcf LCD_PinEnable ;ImpidefuncionamientodelLCDponiendoE=0.
bcfLCD_PinRS ;ActivaelModoComandoponiendoRS=0.
callRetardo_20ms
movlwb'00110000'
callLCD_EscribeLCD ;EscribeeldatoenelLCD.
callRetardo_5ms
list p=16F84A
INCLUDE <P16F84A.INC>
__CONFIG _XT_OSC&_WDT_OFF&_PWRTE_ON&_CP_OFF
;radix hex

PDel0EQU 0X0C
PDel1EQU 0X0D
PDel2EQU 0X0D

;Listadoderegistrosespecialesutilizadoenesteprograma

portb equ 06h;elpuertobestaenlaposicion06hdelaram


porta equ 05h;elpuertobestaenlaposicion05hdelaram
trisa equ 85h ;regisdeconfigdepuertobestaenladirecc85hdelaram
trisb equ 86h ;regisdeconfigdepuertobestaenladirecc86hdelaram
status equ 03h;registrodeestadoestaenladirecc03hdelaram

;Findelistadoderegistrosespecialesutilizadoenesteprograma

;Comienzalistadoderegistrosdepropositogeneralempleadosenesteprograma
movlwb'00110000'
callLCD_EscribeLCD
callRetardo_200micros
movlwb'00110000'
callLCD_EscribeLCD
calltardo_20micros ;Esteretardoesnecesarioparasimularen
PROTEUS.
ProyectosparaMicroprocesadores
Cruce vehicular con un semforo 1. Diseo de despachador automtico de
botanas que cobre.
Control de potencia con PWM motor
2. Selector de temporizador secuencial
Control de potencia con PWM foco
con display y teclado sencillo
Selector de tres mens con LCD
3. Control para silla motorizada
Display que muestre temperatura
4. Velocmetro digital con sensor
(ADC y LM35)
5. Diseo de reloj digital que muestre
Control con teclado de temperatura
minutos y horas con control
con un termostato (ADC y LM35)
6. Alarma para automvil
Control de motor a pasos con giros
izquierdo y derecho a dos velocidades 7. Alarma para casa
Seleccin de 8 rutinas para el pto. 8. Cronmetro digital con LCD
Secuencia de un proceso industrial 9. Selector de paquetera
Diseo de una lavadora que elija 10. Sistema de diagnostico para automvil
lavado, nivel, enjuagado y secado 11. Leer el pto. Y parpadear segn el digito
Calculadora de dos bits que sume o seleccionado
reste para mostrar resultado 12. Monitoreo de proceso de produccin
Diseo de despachador automtico de 13. Diseo de un control remoto
refrescos que cobre. 14. Conexin entre dos microprocesadores
Gracias
Gracias

Anda mungkin juga menyukai