Está en la página 1de 26

Qu es un microcontrolador?

Es un circuito integrado programable que acepta un listado de


instrucciones y contiene todos los componentes de un computador. Se
utilizan para realizar determinadas tareas o para gobernar dispositivos,
debido a su reducido tamao, suele ir incorporado en el propio dispositivo
que gobierna.
El microcontrolador es un dispositivo dedicado. En su memoria solo reside
un programa destinado a gobernar una aplicacin determinada, sus lneas
de entradas y salidas (I/O) permiten la conexin de sensores, relay,
motores, etc. Una vez programado y configurado el microcontrolador
solamente sirve para gobernar la tarea asignada.

Un microcontrolador dispone normalmente de los siguientes componentes:


Procesador o CPU (Unidad Central de Proceso).
Memoria RAM para Contener los datos.
Memoria para el programa tipo ROM/PROM/EPROM/EEPROM & FLASH.

Lneas de (entrada / salida) para comunicarse con el exterior.


Diversos mdulos para el control de perifricos (temporizadores,
Puertos Serie y Paralelo, A/D y D/A, etc.).
Generador de impulsos de reloj que sincronizan el funcionamiento de
todo el sistema.
*********************************************************
El siguiente trabajo va dedicado a todos aquellos que se inician en el
mundo de los microcontroladores as como aquellos que les gustara dar
un repaso a lo aprendido. La primera parte del tutorial notaran que tiene
el enfoque hacia un PIC en especial, el 16F877, ya que es uno de los que
esta en boga y adems esta tomando aceptacin entre las escuelas, y
pienso que el 16F84 ya esta muy conocido pero no deja de ser poderoso,
Pero recuerden las bases son las mismas.
Espero les agrade y sea motivo de mejoras.
Empezar por El diagrama de un sistema microcontrolado que sera algo
as:

Los dispositivos de entrada pueden ser un teclado, un interruptor, un


sensor, etc. Los dispositivos de salida pueden ser LED's, pequeos
parlantes, zumbadores, interruptores de potencia (tiristores,
optoacopladores), u otros dispositivos como rels, luces, un secador de
pelo, en fin... lo que se desee. Aqu tienes una representacin en bloques
del microcontrolador, se puede ver que lo adaptamos tal y cual es un
ordenador, con su fuente de alimentacin, un circuito de reloj y el chip
Microcontrolador, el cual dispone de su CPU, sus memorias, y por
supuesto, sus puertos de comunicacin listos para conectarse al mundo
exterior

Enseguida describir algunos aspectos bsicos que tienen que ver con
todos lo microcontroladores PIC de Microchip para su utilizacin.

En su interior posee un microprocesador, una memoria RAM (voltil)


donde guardaremos las variables, una memoria EEPROM (no voltil)
donde guardaremos nuestro Programa, un Timer o contador que nos
facilitar algunas tareas, y algunas otras cosas ms que irn variando
dependiendo de que PIC utilicemos.
Eso no es todo, algunos traen funciones especiales, ya hablaremos de
ellas.
Microcontroladores PIC16CXX/FXX de Microchip Estos micros pertenecen a
la gama media y disponen de un set de 35 instrucciones, por eso lo llaman
de tipo RISC (Reduced Instruction Set Computer) en espaol sera
"Computador con Set de Instrucciones Reducido" pocas instrucciones pero
muy poderosas, otras son de tipo CISC (Complex Instruction Set
Computer - Computador con Set de Instrucciones Complejo), demasiadas
instrucciones, y lo peor, difciles de recordar.
Esta familia de microcontroladores se divide en tres rangos segn la
capacidad de los microcontroladores. El ms bajo lo compone la familia
16C5X. El rango medio lo componen las familias 16C6X/ 7X/ 8X, algunos
con conversores A/D, comparadores, interrupciones, etc. La familia de
rango superior lo componen los 17CXX.
Estas son las funciones especiales de las cuales disponen algunos
micros...
Conversores anlogo a digital (A/D) en caso de que se requiera
medir seales analgicas, por ejemplo temperatura, voltaje,
luminosidad, etc.
Temporizadores programables (Timer's) Si se requiere medir
perodos de tiempo entre eventos, generar temporizaciones o
salidas con frecuencia especfica, etc.
Interfaz serial RS-232. Cuando se necesita establecer comunicacin
con otro microcontrolador o con un computador.
Memoria EEPROM Para desarrollar una aplicacin donde los datos no
se alteren a pesar de quitar la alimentacin, que es un tipo de
memoria ROM que se puede programar o borrar elctricamente sin
necesidad de circuitos especiales.
salidas PWM (modulacin por ancho de pulso) Para quienes
requieren el control de motores DC o cargas resistivas, existen
microcontroladores que pueden ofrecer varias de ellas.
Tcnica llamada de "Interrupciones", (sta me gust) Cuando una
seal externa activa una lnea de interrupcin, el microcontrolador
deja de lado la tarea que est ejecutando, atiende dicha
interrupcin, y luego contina con lo que estaba haciendo.
Los microcontroladores se programan en Lenguaje ensamblador
bsicamente, aunque tambin existen compiladores para hacerlo con
otros lenguajes y cada microcontrolador vara su conjunto de

instrucciones de acuerdo a su fabricante y modelo. De acuerdo al nmero


de instrucciones que el microcontrolador maneja se le denomina de
arquitectura RISC (reducido) o CISC (complejo).
EL Pic16F877 pertenece a la gama media de Microcontroladores donde
encontraremos modelos desde 18 hasta 68 Pines, su repertorio de
instrucciones es de 35, de 14 bits cada una (Todas las instrucciones son
de un solo ciclo con excepcin de las ramificaciones del programa que son
de dos ciclos). Disponen de interrupciones y una pila de 8 niveles que
permite el anidamiento de subrutinas. Se le puede encontrar en un tipo de
encapsulado de 40 pines ( patas) PDIP el cual es el mas utilizado para su
utilizacin didctica en proyectos escolares.
Cuenta con una arquitectura Harvard en la que son independientes la
memoria de instrucciones y la memoria de datos y cada una dispone de su
propio sistema de buses para el acceso.
Posee Rango amplio de tensiones de funcionamiento:

Comercial: 2.0 a 5.5 volts


Industrial: 2.0 a 5.5 volts

Consumo muy bajo:

< 2 mA tpico a 5 volt, 4MHz.


15 A tpico a 2 volt, 32KHz.
>0.5 A tpico de corriente en reposo a 2 volts.

Caractersticas que lo hacen destacarse por su popularidad en el


mundo de la electrnica:
Soporta modo de comunicacin serial, posee dos pines para ello.
Amplia memoria para datos y programa.
Memoria reprogramable: La memoria en este PIC es la que se
denomina FLASH de 8K; este tipo de memoria se puede borrar
electrnicamente (esto corresponde a la F en el modelo).
Set de instrucciones reducidas (tipo RISC), pero con las instrucciones
necesarias para facilitar su manejo.
En su arquitectura adems incorporan:
3 temporizadores
4 puertos I/O.
Comunicacin serie y paralela: USART, PSP.
Bus I2C
Modulo Convertidor analgico a digital A/D.
Modulo Comparador con un voltaje de referencia.
Sus caractersticas ms importantes son:

CARACTERSTICAS

Frecuencia mxima

16F877A

DX-20MHz

Memoria de programa flash palabra de 14


bits

8KB

Posiciones RAM de datos

368

Posiciones EEPROM de datos

256

Puertos E/S

A,B,C,D,E

Nmero de pines

40

Interrupciones

15

Timers

Mdulos CCP

Comunicaciones Serie
Comunicaciones paralelo
Modulo Analgico a Digital de 10 bit

Juego de instrucciones
Longitud de la instruccin

MSSP, USART
PSP
8 canales de
entrada
35 Instrucciones
14 bits

Arquitectura
CPU
Mdulos Comparador/comparador/Pwm

Harvard
Risc
2

EL ENCAPSULADO.

DIAGRAMA DE BLOQUES DE SU ARQUITECTURA INTERNA.

Aqu muestro una tabla en la cual describo cada Pin o patilla del
Microcontrolador.

NOMBRE DEL
PIN
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp.

RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/VrefRA2
AN2
VrefCvref
RA3/AN3/Vref+
RA3
AN3
Vref+

TIPO
PI TIPO DE
DESCRIPCIN
N
BUFFER
13
I
ST/MOS Oscilador de cristal entrada /
Entrada de seal de reloj externa
14
O
Oscilador de cristal salida / Salida
de seal de reloj externo.
1
I/P
ST
Master Clear (entrada) Voltaje
de programacin (salida).
Master Clear (reset) entrada. Este
pin activa el reset vuando esta en
bajo (0v.)
Entrada
del
voltaje
de
programacin.
PORTA
es
un
puerto
I/O
2
TTL
bidireccional
I/O
RAO: Digital I/O
I
Entrada Analgica 0
3
I/O
TTL
RA1: Digital I/O
I
Entrada Analgica 1
RA2: Digital I/O
Entrada Analgica 2
A/D Entrada voltaje (bajo) de
referencia.
Comparador VREF. Salida

I/O

TTL

RA3: Digital I/O


Entrada Analgica 3
A/D Entrada de voltaje
(alto) referencia.

I/O
I
0

ST

RA4: Digital I/O


Timer0 entrada
externo.
Comparador1 salida

I/O
I
I

TTL

I/O
I
I
O
5

RA4/T0CKI
RA4
T0CKI
C1OUT

RA5/
/AN4/C2OUT
RA5

AN4
C2OUT

TTL

de

reloj

RA5: Digital I/O


SPI esclavo seleccin entrada
Entrada Analgica 4
Comparador2 salida

PORTB
es un puerto I/O
bidireccional.
Puede
ser
programado en todas las entradas
con pull up.
RBO/INT
RBO
INT

33

RB1
RB2

34
35

RB3/PGM
RB3
PGM

36

RB4
RB5

37
38

RB6/PGC
RB6
PGC

39

RB7/PGD
RB7
PGD

40

TTL/ST
I/O
I

RCO/T1OSO/T1
CKI
RCO
T1OSO
T1CKI

15

RC1/T1OS1/CCP
2
RC1
T1OS1
CCP2

16

RC2/CCP1
RC2
CCP1

17

RB0: Digital I/O


Interrupcin externa.

I/O
I/O
I/O

TTL
TTL
TTL

RB1: Digital I/O


RB2: Digital I/O

I/O
I

TTL

I/O

TTL
TTL

RB3: Digital I/O


Entrada de programacin de bajo
voltaje ICSP
RB4: Digital I/O
RB5: Digital I/O

TTL/ST
I/O
I

RB6: Digital I/O


In circuit debugger y Reloj de
programacin serial ICSP

I/O
I/O

RB7: Digital I/O


In circuit debugger y Dato de
programacin serial ICSP

ST

PORTC
es
bidireccional

un

puerto

I/O

I/O
O
I

RCO: Digital I/O


salida del oscilador timer1
entrada de reloj del timer1

I/O
I
I/O

RC1: Digital I/O


Entrada del oscilador timer1
Salida PWM 2, Captura2 entrada,
Comparador2 salida
ST

I/O
I/O

RC2: Digital I/O


Captura1 entrada, Comparador1
salida, PWM1 salida

RC3/SCK/SCL
RC3
SCK

18
I/O
I/O

SCL

RC3: Digital I/O


Entrada o salida serial de reloj
sncrono para modo SPI.
Entrada o salida serial de reloj
sncrono para modo SPI e IC

I/O

RC4/SD1/SDA
RC4
SD1
SDA

23

RC5/SD0
RC5
SD0

24

RC6/Tx/CK
RC6
Tx
CK

25

RC7/RX/DT
RC7
RX
DT

26

RD0/PSP0
RD0
PSP0

ST

ST
I/O
I
I/O

ST
ST

I/O
O

RC5: Digital I/O


salida de datos SPI
ST

I/O
O
I/O

RC6: Digital I/O


Transmisor asncrono USART
Reloj sncrono USART1.
ST

I/O
I
I/O

19

RD1/PSP1
RD1
PSP1

20

RD2/PSP2
RD2
PSP2

21

RD3/PSP3
RD3
PSP3

22

RD4/PSP4
RD4
PSP4

27

RC4: Digital I/O


entrada de datos SPI
IC I/O datos

I/O
I/O

RC7: Digital I/O


Receptor asncrono USART
Datos USART sncronos
PORTD es un puerto bidireccional
paralelo
ST/TTL

RD0: Digital I/O


Dato de Puerto paralelo esclavo

ST/TTL
RD1: Digital I/O
Dato de Puerto paralelo esclavo
ST/TTL
I/O
I/O

RD2: Digital I/O


Dato de Puerto paralelo esclavo
ST/TTL

I/O
I/O

RD3: Digital I/O


Dato de Puerto paralelo esclavo
ST/TTL

I/O
I/O

RD4: Digital I/O


Dato de Puerto paralelo esclavo.

RD5/PSP5
RD5
PSP5

28

RD6/PSP6
RD6
PSP6

29

RD7/PSP7
RD7
PSP7

30

REO/
REO

I/O
I/O

RD5: Digital I/O


Dato de Puerto paralelo esclavo.
ST/TTL

I/O
I/O

RD6: Digital I/O


Dato de Puerto paralelo esclavo.
ST/TTL

I/O
I/O

RD7: Digital I/O


Dato de Puerto paralelo esclavo.

/AN5

I/O
I
I
I

ST/TTL

/AN6

I/O
I
I

ST/TTL

I/O
I

ST/TTL

RE2:Digital I/O
Selector de control para el puerto
paralelo esclavo.
Entrada analgica 7.

Referencia de tierra para los pines


lgicos y de I/O
Fuente positiva para los pines
lgicos y de I/O

RE1: Digital I/O


Escritura de control para el puerto
paralelo esclavo.
Entrada analgica 6

AN6
RE2/
AN7
Vss
Vdd

PORTE
es
un
puerto
I/O
bidireccional
REO: Digital I/O
Control de lectura para el puerto
esclavo paralelo.
Entrada analgica 5.

AN5

RE1/
RE1

ST/TTL

/AN7

10

I
12
31
11
32

Descripcin de los puertos:


Puerto A:
Puerto de e/s de 6 pines
RA0 RA0 y AN0
RA1 RA1 y AN1
RA2 RA2, AN2 y Vref RA3 RA3, AN3 y Vref+
RA4 RA4 (Salida en colector abierto) y T0CKI(Entrada de reloj del
modulo Timer0)
RA5 RA5, AN4 y SS (Seleccin esclavo para el puerto serie sncrono)

Puerto B:
Puerto e/s 8 pines
Resistencias pull-up programables
RB0 Interrupcin externa
RB4-7 Interrupcin por cambio de flanco
RB5-RB7 y RB3 programacin y debugger in circuit
Puerto C:
Puerto e/s de 8 pines
RC0 RC0, T1OSO (Timer1 salida oscilador) y T1CKI (Entrada de reloj
del modulo Timer1).
RC1-RC2 PWM/COMP/CAPT
RC1 T1OSI (entrada osc timer1)
RC3-4 IIC
RC3-5 SPI
RC6-7 USART
Puerto D:
Puerto e/s de 8 pines
Bus de datos en PPS (Puerto paralelo esclavo)
Puerto E:
Puerto de e/s de 3 pines
RE0 RE0 y AN5 y Read de PPS
RE1 RE1 y AN6 y Write de PPS
RE2 RE2 y AN7 y CS de PPS
Dispositivos perifricos:
Timer0: Temporizador-contador de 8 bits con preescaler de 8 bits
Timer1: Temporizador-contador de 16 bits con preescaler que puede
incrementarse en modo sleep de forma externa por un cristal/clock.
Timer2: Temporizador-contador de 8 bits con preescaler y
postescaler.
Dos mdulos de Captura, Comparacin, PWM (Modulacin de
Anchura de pulsos).
Conversor A/D de 10 bits.
Puerto Serie Sncrono Master (MSSP) con SPI e I2C (Master/Slave).
USART/SCI
(Universal
Synchronous
Asynchronous
Receiver
Transmitter) con 9 bit.
Puerta Paralela Esclava (PSP) solo en encapsulados con 40 pines.
(MCLR / Vpp): Es una pata de mltiples aplicaciones, es la entrada de
Reset (master clear) si est a nivel bajo y tambin es la habilitacin de la
tensin de programacin cuando se est programando el dispositivo.
Cuando su tensin es la de VDD el PIC funciona normalmente.
EL RESET: EL PIC16F877 posee internamente un circuito temporizador
conectado al pin de reset que funciona cuando se da alimentacin al
micro, se puede entonces conectar el pin de MCLR a la fuente de

alimentacin. Esto hace que al encender el sistema el microcontrolador


quede en estado de reset por un tiempo mientras se estabilizan todas las
seales del circuito (lo cual es bastante bueno, por eso siempre la
usaremos...), Adems de que nos puede servir por si el micro en algn
momento no nos responde nunca esta dems aqu muestro el
conexionado del botn que har dicha funcin.

(VSS y VDD): Son respectivamente las patas de masa y alimentacin. La


tensin de alimentacin de un PIC est comprendida entre 2V y 6V
aunque se recomienda no sobrepasar los 5.5V
(OSC1/CLKIN y OSC2/CLKOUT): Corresponden a los pines de la
entrada externa de reloj y salida de oscilador a cristal respectivamente.
El oscilador externo: Es un circuito externo que le indica al micro la
velocidad a la que debe trabajar. Este circuito, que se conoce como
oscilador o reloj, es muy simple pero de vital importancia para el buen
funcionamiento del sistema. El P1C16F877 puede utilizar cuatro tipos de
reloj diferentes. Estos tipos son:
RC. Oscilador con resistencia y condensador.
XT. Cristal.
HS. Cristal de alta velocidad.
LP. Cristal para baja frecuencia y bajo consumo de potencia.
En el momento de programar o "quemar" el microcontrolador se debe
Especificar que tipo de oscilador se usa. Esto se hace a travs de unos
Fusibles llamados "fusibles de configuracin" o fuses.
En el PIC16F877 se puede admitir un oscilador de cristal desde 4 a 20
MHz. Por el momento utilizamos uno de 4MHz, porque garantiza mayor
precisin y un buen arranque del microcontrolador. Internamente esta
frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de
trabajo sea de 1 MHz, por lo que cada instruccin se ejecuta en un
microsegundo. El cristal debe ir acompaado de dos condensadores y el
modo de conexin es el
Siguiente:

Si se requiere de mucha precisin en el oscilador, podemos utilizar una


Resistencia y un condensador, como se muestra en la figura. Donde OSC2
Queda libre entregando una seal cuya frecuencia es la del OSC/4.

Segn las recomendaciones de Microchip (R) puede tomar valores entre


5k y 100k, y C superior a 20pf.
Organizacin de la memoria.
En primer lugar tenemos que distinguir claramente entre tres tipos de
Memoria:
Una: la memoria EEPROM donde almacenaremos el programa que
Haremos, esta memoria solo podr ser leda por el pic (el pic va
Leyendo las instrucciones del programa almacenado en esta memoria
Y las va ejecutando). Al apagar el pic esta memoria no se borra.
Dos: la memoria RAM en cuyos registros se irn almacenando los
Valores de las variables que nosotros queramos y cuando nosotros
Queramos (por programa), al apagar el pic esta memoria se borra.
Tres: la memoria EEPROM para datos, es un espacio de memoria
EEPROM en la que se pueden guardar variables que queremos
Conservar aunque se apague el pic. No se tratar aqu por ser una
Memoria ms difcil de emplear.

La memoria EEPROM memoria de Programa.

El espacio marcado como User memory Space es el espacio de memoria


donde ira nuestro programa, desde 0000h hasta la 1FFFh.
"Reset Vector" es la primera direccin a la que se dirige el pic al
encenderlo o al
Resetearlo.
"PC" y los "Stack Level" son empleado por el pic y nosotros no tenemos
acceso
a ellos.
LA MEMORIA RAM La memoria RAM no solo se usa para almacenar
nuestras variables, tambin se almacenan una serie de registros que
configuran y controlan el PIC. Podemos observar en la imagen que esta
memoria esta dividida en 4 Bancos (banco 0,1, 2, 3). Antes de acceder a
un registro de esta memoria tenemos que preguntarnos en que banco
estamos, generalmente se trabaja en el banco 0 cada banco contiene sus
registros que sirven para la configuracin y control de la memoria RAM.
Estos registros se usan para controlar los pines del PIC, consultar los
resultados de las operaciones de la ALU (unidad aritmtica lgica),
cambiar del banco de memoria entre otras cosas.

La seleccin del banco de memoria se hace por medio de los bits RP1 y
RP0 del registro STATUS (6,5).
Tabla de seleccin de bancos.

CONFIGURACIN DE LOS PUERTOS DEL PIC


Lleg el momento de ver como configurar los puertos del PIC. Para poder
Hacerlo es necesario conocer la tabla de registros de la memoria de datos,
la cual como dijimos, est dividida en el BANCO 0, BANCO 1, BANCO 2,
BANCO 3.
Los registros importantes en la configuracin de los puertos son:
STATUS direccin 03h
PORTA direccin 05h
PORTB direccin 06h
PORTC direccin 07h
PORTD direccin 08h
PORTE direccin 09h
TRISA direccin 85h
TRISB direccin 86h
TRISC direccin 87h
TRISD direccin 88h
TRISE direccin 89h
NOTA: solo incluyo los registros de los bancos 0 y 1 ya que para los dos
restantes es similar su configuracin. Por defecto el PIC tendr todos los
I/O Port's (es decir los puertos RA, RB, RC, RD, RE), colocados como
entrada de datos, y si queremos cambiarlos habr que configurarlos.
Al configurar los puertos se deber tener en cuenta que:
Si asignas un CERO (0) a un pin, ste quedar como salida y...
Si le asignas un UNO (1), quedar como entrada.
Esta asignacin se hace en:
TRISA para los pines del PUERTO A.
TRISB para los pines del PUERTO B.
TRISC para los pines del PUERTO C.
TRISD para los pines del PUERTO D.
TRISE para los pines del PUERTO E.

Por ejemplo si TRISE es igual a 110 todos sus pines sern entradas salvo
RE0 que esta como salida.
SI TRISB es igual a 00000001 todos sus pines sern salidas salvo RB0
que esta como entrada.
Cuando el PIC arranca se encuentra en el BANCO 0, como TRISA y TRISB
Estn en el BANCO 1 no queda de otra, deberemos cambiar de banco.
Esto se logra a travs del Registro STATUS.
STATUS es un Registro de 8 bits u 8 casillas, en el cual la N 5 (RP0) y la
N 6 (RP1) definen la posicin del banco en donde nos encontramos.
Como se muestra con la figura que se vio en la seccin de la LA
MEMORIA RAM (Tabla de seleccin de bancos).

DESCRIPCION DE ALGUNOS DE LOS REGISTROS INTERNOS DEL


BANCO 0.
INDF (direccionamiento indirecto): Direccin 00h, sirve para ver el
dato de la direccin a la que apunta el registro FSR (dir. 04h).
TMR0 (Timer/contador): Direccin 01h, Aqu se puede ver el valor en
Tiempo real del Timer/contador. Tambin se puede introducir un valor
y alterar as el conteo. Este conteo puede ser interno (cuenta ciclos de
Reloj) o externo (cuenta impulsos introducidos por RA4).
PCL (Parte baja del contador de programa): Direccin 02h,
Modificando este registro se modifica el contador de programa, este
contador de programa es el que seala al pic en que direccin (de
EEPROM) tiene que leer la siguiente instruccin. Esto se utiliza mucho
para consultar tablas.

STATUS: Direccin 03h, este es uno de los registros mas importantes


Y el que ms vas a utilizar. Hay que analizar el funcionamiento de
Este registro bit a bit:

CARRY, Direccin STATUS, 0 (bit 0): bit de desbordamiento. Este bit


se pone a "1" cuando la operacin anterior ha rebasado la capacidad de un
byte. Por ejemplo, si sumo dos nmeros y el resultado no cabe en 8 bit el

CARRY se pone a "1", Pasa lo mismo cuando resto dos nmeros y el


resultado es un nmero negativo. Se puede usar para saber si un nmero
es mayor que otro (restndolos, si hay acarreo es que el segundo era
mayor que el primero). Una vez que este bit se pone a "1" no se baja solo
(a"0"), hay que hacerlo por programa si queremos volverlo a utilizar.

DC (digit carry), Direccin STATUS, 1 (bit 1): lo mismo que el


anterior pero esta vez nos avisa si el nmero no cabe en cuatro bits.

Z (zero), Direccin STATUS, 2 (bit 2): Se pone a "1" si la operacin


anterior ha sido cero. Y pasa a "0" si la operacin anterior no ha sido cero.
Se usa para comprobar la igualdad entre dos nmeros (restndolos, si el
resultado es cero ambos nmeros son iguales)

PD (Power - Down bit), Direccin STATUS, 3 (bit3): se pone a "0"


despus de ejecutar la instruccin SLEEP, se pone a "1" despus de
ejecutar la instruccin CLRWDT o despus de un power-up.

TO (Timer Up), Direccin STATUS, 4 (bit4): se pone a "0" cuando se


acaba el tiempo del WATCHDOG, Se pone a "1" despus de ejecutar las
instrucciones, CLRWDT o SLEEP o despus de un power-up.

RP0 y RP1 (seleccin directa de banco), Direccin STATUS, 5 y


STATUS, 6: 11 = Bank 3 (180h-1FFh)
10 = Banco 2 (100h-17Fh)
01 = Banco 1 (80h-FFh)
00 = Banco 0 (00h-7Fh)
Cada banco es de 128 bytes.

IRP,(seleccin indirecta de banco) Direccin STATUS,7:


1 = Banco 2, 3 (100h-1FFh)
0 = Banco 0, 1 (00h-FFh)

FSR (Puntero), Direccin 04h, se usa para direccionamiento indirecto en


combinacin con el registro INDF (dir. 00h): se carga la direccin del registro
que queremos leer indirectamente en FSR y se lee el contenido de dicho registro
en INDF.
PORTA (Puerto A), Direccin 05h: Con este registro se puede ver o modificar
el estado de los pines del puerto A (RA0 RA7). Si un bit de este registro est a
"1" tambin lo estar el pin correspondiente a ese bit. El que un pin est a "1"
quiere decir que su tensin es de 5V, si est a "0" su tensin es 0V.
As sucede tambin para PORTB, C, D y E.

PCLATH, Direccin 0Ah: Modifica la parte alta del contador de programa


(PC), el contador de programa se compone de 13 bits, los 8 bits de menor peso
se pueden modificar con PCL (dir. 02h) y los 5 bits de mayor peso se pueden
modificar con PCLATH.
INTCON (controla las interrupciones), Direccin 0Bh: Se estudia bit a
bit:

RBIF (Flag de interrupcin por cambio de PORTB) Direccin


INTCON,0 (bit0): se pone a "1" cuando alguno de los pines RB4, RB5,
RB6, o RB7 cambia su estado. Una vez que est a "1" no pasa a "0" por si
mismo: hay que ponerlo a cero por programa.

INTF (Flag de interrupcin de RB0) Direccin INTCON,1: Si est a


"1" es que ha ocurrido una interrupcin por RB0, si est a "0" es que
dicha interrupcin no ha ocurrido. Este bit es una copia de RB0.

TMROIF (Flag de interrupcin por desbordamiento de TMR0)


Direccin INTCON,2: Cuando TMR0 se desborda este Flag avisa
poniendose a "1". Poner a "0" por programa.

RBIE (Habilita la interrupcin por cambio de PORTB) Direccin


INTCON,3: Si est a "1" las interrupciones por cambio de PORTB son
posibles.

INTE (Habilita la interrupcin por RB0) Direccin INTCON,4: Si lo


ponemos a "1" la interrupcin por RB0 es posible.

TMROIE (Habilita la interrupcin por desbordamiento de TMR0)


Direccin INTCON,5: Si este bit esta a "1" la interrupcin por
desbordamiento de TMR0 es posible.

PEIE (Habilita la interrupcin de perifricos Direccin INTCON,6:


Cuando este bit est a "1" habilita todas las interrupciones de perifrico
enmascarables.

GIE (Habilita las interrupciones globalmente) Direccin INTCON,7:


Este bit permite que cualquier interrupcin de las anteriores sea posible.
Para usar alguna de las interrupciones anteriores hay que habilitarlas
globalmente e individualmente.

MAPA DE MEMORIA RAM Y REGISTROS.

SET DE INSTRUCCIONES PARA PIC16F87X:

Para entender mejor cada instruccin se explica a continuacin el

significado de algunos parmetros:

f: Registro al que afecta la instruccin


W: Acumulador (Working register)
b: Nmero de bit (hay instrucciones que afectan a un solo bit)
k: constante (un nmero)
d: seleccin de destino del resultado de la instruccin, puede ser "0"
o "1", si es "0" el resultado se guarda en el acumulador (W) y si es
"1" se guarda en el registro f al que afecta la instruccin.

Instrucciones orientadas a registros:


ADDWF f,d Suma W y el registro f, el resultado lo guarda
segn d (si d=0 se guarda en W y si d=1 se guarda en f).
ANDWF f,d Realiza la operacin AND lgica entre W y f, el
Resultado lo guarda segn d.
CLRF f Borra el registro f (pone todos sus bits a cero).
CLRW - Borra el acumulador.
COMF f,d Calcula el complementario del registro f (los bits
que estan a "0" los pone a "1" y viceversa. Resultado segn d.
DECF f,d Decrementa f en uno (le resta uno). Resultado
segn d.
DECFSZ f,d Decrementa f y se salta la siguiente instruccin si
el resultado es cero. Resultado segn d.
INCF f,d Incrementa f en uno (le suma uno). Resultado segn
d.
INCFSZ f,d Incrementa f y se salta la siguiente instruccin si
el resultado es cero (cuando se desborda un registro vuelve al
valor 00h). Resultado segn d.
IORWF f,d Realiza la operacin lgica OR entre W y f.
Resultado segn d.
MOVF f,d Mueve el contenido del registro f a W si d=0 (si d=1
lo vuelve a poner en el mismo registro).
MOVWF f mueve el valor de W a f. Por ejemplo, si queremos

copiar el valor del registro "REG1" al registro "REG2" (ya veremos como
ponerles nombres a los registros) escribiremos:

MOVF REG1,0 ; mueve el valor de REG1 a W


MOVWF REG2 ; mueve el valor de W a REG2
Lo que va despus del; son comentarios
NOP - No hace nada, solo pierde el tiempo durante un ciclo.
RLF f,d Rota el registro f hacia la izquierda a travs del bit CARRY
(todos los bits se mueven un lugar hacia la izquierda, el bit 7 de f
pasa al CARRY y el bit CARRY pasa al bit 0 de f). Resultado segn d.
RRF f,d Lo mismo que RLF pero hacia la derecha.
SUBWF f,d Resta f y W (f - W). Resultado segn d.
SWAPF f,d intercambia los 4 primeros bit de f por los otros cuatro.
Resultado segn d.
XORWF f,d Realiza la operacin lgica XOR (OR exclusiva) entre W
y f. Resultado segn d.

Instrucciones orientadas a bits:


BCF f,b Pone a "0" el bit b del registro f
BSF f,b Pone a "1" el bit b del registro f
BTFSC f,b Se salta la siguiente instruccin si el bit b del registro f es "0"

BTFSS f,b Se salta la siguiente instruccin si el bit b del registro f es "1"

Instrucciones orientadas a constantes y de control:


ADDLW k Le suma el valor k al acumulador (W).
ANDLW k Operacin lgica AND entre W y el valor k (resultado en W).
CALL k Llamada a subrutina cuyo inicio esta en la direccin k
CLRWDT - Borra el registro Watchdog

GOTO k Salta a la direccin k de programa.


IORLW k Operacin lgica OR entre W y el valor k (resultado en W)
MOVLW k carga el acumulador con el valor k. Por ejemplo, si queremos

cargar el valor 2Ah en el registro "REG1" escribiremos:


MOVLW 2AH; carga el acumulador con el valor 2Ah
MOVWF REG1; mueve el valor de W a "REG1"
RETFIE - Instruccin para volver de la interrupcin
RETLW k carga el valor k en W y vuelve de la interrupcin
RETURN - vuelve de una subrutina.
SLEEP - El pic pasa a modo de Standby.

BIBLIOGRAFIA:
1. Hoja de datos del PIC16F87xA de Microchip.
2. Programacin del PIC16F84. por Carlos Daz www.electron.es.vg
3. Club Saber electrnica curso de pics para estudiantes y aficionados N0 20.
4. Ed Quark Ing. Horacio D. Vallejo
5. Club Saber electrnica microcontroladores PIC Programacin y desarrollo
N0 24. Ed Quark Ing. Horacio D. Vallejo
6. EL PIC16F877 por Marco Antonio Mrquez Surez

También podría gustarte