+.
‘También puede pulsar sobre el icono correspondiente de la barra de herramientas
(flecha roja sobre chip). El chip comenzara a ser programado.
ra 5;
Screen oon
I
Jonooan: are % Ovex Corts
Jomoese: are Toxtroure
Figura 3-17 Comenzar a programar el PICI6F84A
11° El proceso de grabacién se ira mostrando, tal como puede apreciarse en la figura
3-18. El tiempo empleado en la grabacién del PICIGF84A dependeri de la
rapidez del ordenador con el que se esté trabajando.
"| Memeee
Figura 3-18 Pantallas que aparecen durante el proceso de programacién y verificaciénRAMA, CAPITULO 3: GRABACION DE MICROCONTROLADORES PIC_31
12° Una vez grabado el PICL6FR4A se debe extraer del programador y comprobar su
correcto funcionamiento dentro del circuito correspondiente. En este caso el
programa lo que hace es sacar por el Puerto B el dato lefdo por las cinco lineas
del Puerto A al que esta conectado un array de interruptores. Esto se puede
comprobar con el circuito de la figura 1-2.
13° Los datos grabados en el microcontrolador y la configuracién se pueden salvar a
un fichero utilizando el procedimiento usual de Windows mediante la seleccién
del mend: Archivo > Guardar como y poniendo al archivo un nombre con
extensién *.bin, por ejemplo "Entrenador_O1 bin".
3.6 ERRORES FRECUENTES EN LA PROGRAMACION
Cuando por alguna causa la programacién no se realiza correctamente WinPic800
informa de ello mediante el aviso oportuno, El error mas frecuente en la programacién de
un PIC es el mostrado en la ventana de la figura 3-19, que informa de un error al verificar
el contenido del chip en la direccién 0x0000, que es la primera posicién de memoria de
programa del mismo.
act / Ode tail cere
Figura 3-19 Pantalla tipica de error en la programacién
Este error suele estar motivado por algiin fallo en la comunicacién entre el
ordenador y el programador, como puede ser:
La mala conexién del cable serie.
La colocacién errinea del PIC en el programador.
La configuracién incorrecta del puerto usado.
Un chip defectuoso.
Para solucionarlo se deben seguir los pasos enumerados a continuacién:
1° Una vez verificado que no ha elegido la opcién de protecciin de cédigo para
programar el PIC puede continuar con las siguientes comprobaciones:
* Revisar que el PIC se encuentra bien introducido en el zécalo del
programador, con la direccién de la cépsula correcta y sin ninguna patilla
doblada o rota, lo que desgraciadamente es frecuente,32_MICROCONTROLADOR PICI6F84, DESARROLLO DE PROYECTOS RAMA
* Verificar que el cable esté bien conectado en sus dos extremos, tanto en
el conector del programador como en el ordenador.
© Comprobar con un polimetro que no hay ninguna conexién del cable rota.
© Debe asegurarse de que ha elegido en Configuracién > Hardware el tipo
de programador correcto y en su caso, el puerto COM adecuado.
* Comprobar que el dispositive elegido es el que realmente esta
programando (PICI6F844).
2 En caso de que ninguna de estas comprobaciones diera resultado se aconseja
repetir la programacién con otro chip que esté en buen estado para poder
descartar que el allo esté en el software 0 grabador y asi asegurar que es el chip
el que se encuentra en mal estado.
3.7 GRABADOR EN PUERTO USB
Si el equipo en el que estamos trabajando no dispone mas que de puertos USB,
como es el caso de la mayoria de los ordenadores portitiles, sera necesario usar un
grabador con posibilidad de conexién a este tipo de puertos como el GTP-USB [plus] de
Ja figura 3-6 (www.winpic800.com). También es una buena opcidn para los ordenadores
de sobremesa, que aun teniendo puertos serie (COM) o paralelo (LPT), estos suelen estar
menos accesibles que los puertos USB. Por todo ello, es muy probable que usted decida
instalar un grabador conectado a un puerto USB.
La instalacién del grabador GTP-USB [plus] es muy sencilla, ya que el software
WinPic800 provee de los drivers necesarios para los sistemas operativos Windows 98,
2000, XP, 2003 y Vista. Para instalar correctamente el grabador en un puerto USB seré
necesario seguir la siguiente secuencia de pasos:
1° Desconectar el ordenador de Internet, asi evitaremos que el sistema operativo
busque los drivers en la red,
2° Instalar la diltima versién del software WinPic800.”
3° Conectar el grabador a un puerto USB del ordenador.
4° Aceptar todas las ventanas de advertencia que vayan apare
ido.
Cuando los drivers estén instalados y el grabador listo para funcionar, el diodo
LED bicolor cambiaré a color verde, encendiéndose ya siempre de ese color en el
ordenador donde se ha instalado. También podré verse la correcta instalacién del driver
en el administrador de dispositivos (figura 3-20).
Por ultimo, seré necesario verificar la correcta configuracién del software de
grabaci6n, tal como se describié en el apartado 3.5.RAMA, CAPITULO 3: GRABACION DE MICROCONTROLADORES PIC_33
Figura 3-20 Ventana del administrador de dispositivos con el grabador instalado
Con el GTP-USB [plus] también es posible programar el dispositivo en su circuito
definitivo, esto es ideal para poder probar y ejecutar los programas muchas veces sin
necesidad de extraerlo de su zécalo. A este método se le denomina ICSP (In-Circuit
Serial Programming) y es muy ‘itil para usuarios avanzados. Para ello es necesaria una
pequeiia adaptacién en nuestros disefios, tal como se muestra en la figura 3-21. Esto no es
necesario para realizar los ejercicios y proyectos de este libro y puede resultar una
complicacién innecesaria para usuarios noveles, por lo que no lo recomendamos para
estos casos.
G1P.LS8 js} woe |
Fuente: www.winpic800.com/descargas/REV2/Pic_dsPIC_ICSP.paf
Figura 3-21 Adaptacién del GTP-USB [plus] para grabacién ICSP
3.8 OTRAS CONFIGURACIONES DE WINPIC800
Se puede acceder a mas opciones de configuracién desde el menti configuracién >
software. Seria interesante recorrerlas para tener una visién general de las mismas, pero
en la mayoria de los casos no ser necesario modificar ninguna de ellas para un trabajo34 _MICROCONTROLADOR PICI6F84. DESARROLLO DE PROYECTOS RAMA
normal con el WinPic800. Seré el lector el que decida, segiin sus gustos o costumbres, la
configuracién general de WinPic800.
Figura 3-22 Ventana "Programar" de la configuracién del software
3.8 PRACTICAS DE LABORATORIO
Respetando el procedimiento descrito en este tema, realicese la grabacién en el
microcontrolador de los programas que se indican y compruébese su correcto
funcionamiento en el entrenador basico de la figura 1-2.
Entrenador_01.bin: Los diodos LED conectados al nibble bajo del Puerto B se
apagan y los del nibble alto se encienden. Los datos a grabar son (el significado de estos
nimeros hexadecimales se explicara en un préximo capitulo):
168301861283 30FO 0086 2804
Entrenador_02.bin: El Puerto B, que actiia como salida, es controlado por el bit 0
del Puerto A, que actia como entrada, De manera tal, que:
* Si RAO = 1, se encienden todos los diodos LED de salida.
© SiRAI=0, se encienden sélo los diodos LED del nibble alto.
Los datos a grabar son: 2
1683 0186 «30FF 0085 1283 30FF 1C0S 30F0
0086 2805
Entrenador_03.bin: Lee por el Puerto A una cantidad siempre menor de 8. Esta
cantidad indica el niimero de diodos LED que se iluminan a la salida. Asi, por ejemplo, si
lee el dato "---00101" (cinco en decimal), en los diodos LED conectados al Puerto B se
iluminara el cédigo "00011111", con los cinco diodos LED (D4, D3, D2, D1 y D0). Los
datos a grabar son:
1683 0186 30FF 0085 1283 0805 2009 +0086
2805 0782: 3400-3401 «3403 «3407 340F = 341F
343F 9 347F 34FFRAMA CAPITULO 3: GRABACION DE MICROCONTROLADORES PIC_35,
B88 8498 [uw Gis
@ cones
Figura 3-23 batos a grabar con el WinPic800 para el programa Entrenador_03.bin
Entrenador_04.bin: Los diodos LED pares conectados al Puerto B se encienden
durante 0,4 segundos y los impares permanecen apagados. Después se encienden los
impares durante el mismo tiempo y se apagan los pares. Los datos a grabar son:
1683 0186 1283 30550086 2009-2009 0986
2805 30C8_ 08D 30F9 008C 0000 OBSC 280D
OBSD —280B 0008
Entrenador_05.bin: Por la barra de diodos LED conectada al Puerto B, un LED
encendido rota a la izquierda durante 0,4 segundos en cada posicién. Cuando llega al
final se apagan todos los diodos LED y de nuevo repite la operacién. Los datos a grabar
son (observad que son muy parecidos al anterior):
1683 0186-1283 1403-0186 2009 2009 += aD86
2805 30C8 008D 30F9 008C 0000 OB8C 280D
OB8D = 280B_~— 0008
Entrenador_06.bin: En el display de 7 segmentos conectado al Puerto B se
visualiza la cantidad leida por el puerto A. Asi por ejemplo si por la entrada se lee "---
0101", en el display se visualiza "5". Los datos a grabar son:
1683 0186 30FF 00851283 0805 390F 200A
0086 =—-2805 «0782 343F 3406 345B 344F 3466
346D —347D 3407 347F = 34673477 347C 3439
345E 34793471CAPITULO 4
ORGANIZACION DE LA MEMORIA
41
ARQUITECTURA INTERNA DEL PIC16F84
La figura 4-1 representa el diagrama de bloques del PICI6F84. Destacan los
siguientes componentes que serdn explicados mas adelante:
4.2
Memoria de programa tipo ROM Flash de I k x 14 bits.
Memoria de datos dividida en 2 areas:
o Area RAM constituida por 22 registros de propésito especifico (SFR) y
68 de propésito general.
o Area EEPROM de datos formada por 64 registros de 8 bits.
ALU de 8 bits y registro de trabajo W, del que normalmente recibe un
operando que puede ser cualquier registro, memoria, puerto de entrada/salida
el propio cédigo de instruccién
Dos puertos para la comunicacién con el mundo exterior: PORTA de 5 bits
y PORTB de 8 bits .
Contador de programa de 13 bits, lo que en teoria permitiria direccionar 8 k de
palabras de memoria, aunque el PIC16F84 sélo dispone de I k de memoria
implementada.
ORGANIZACION DE LA MEMORIA
Dentro del PICI6F84 se distinguen tres bloques de memoria:
Memoria de programa. En sus 1024 posiciones contiene el programa con las
instrucciones que gobiemnan la aplicacién. Es del tipo no volatil, es decir, el
programa se mantiene aunque desaparezca la alimentacién.38 _MICROCONTROLADOR PICI6F84. DESARROLLO DE PROYECTOS
RAMA
Memoria de datos RAM. Se destina a guardar las variables y datos. Es volatil,
es decir, los datos almacenados se borran cuando desaparece la alimentacién.
Memoria EEPROM de datos. Es una pequefia area de memoria de datos de
lectura y escritura no volatil, gracias a la cual, un corte del suministro de la
alimentacién no ocasiona la pérdida de la informacién, que estar disponible al
reinicializarse el programa. Se analizara con detenimiento en el capitulo 14.
MEMORIA DE
MEMORIA DE DATOS
eas PROGRAMA CON
1024 POSICIONES
eanco 0 | eanco 4 (Last
_— [oon] nor [Nor [enn ‘on | RESET
ie > toox |-sfomn) twro | OPTION ain. oom
asl pent om ra | pce sa] | oon
= can svarus | srarus am| # [oom
— on ron | ran em] @ fom) wr |
4 fom poate | tsa em| S [oo
fou! pore | rise een] = | | oon
oe aoe ml 2 [oom
oo —sfoan eeoaTa | excont |0n| 8 [ooo
= 5]
a, ae om] fare
on oh on] —[aern
64 posiciones | % NM stoaMentes 4 +
DE MEMORIA DE | 03h {SE LEEN COMO "0", =
DATOS
EEPROM Fuad
are US DE NSTAUCCIONES
Ee ee
ey RTOS J" py PILA
om
DECODIFICADOR ms
oe ‘ve?
ne ssmuccous | os [anes],
= PERRO GUAROIAN | esac ‘ nvera_[o
acca ae VEL
2s POWER UP Y RESET| VETS:
waa ve?
Seen vec
sce Bt ‘BUS DE DIRECCIONES —
Figura 4-1 Arquitectura interna del PICI6F84RAMA, CAPITULO 4: ORGANIZACION DE LA MEMORIA _39
4.3 MEMORIA DE PROGRAMA
El microcontrolador esta disefiado para que en su memoria de programa se
almacenen todas las instrucciones del programa de control. El programa a ejecutar
siempre es el mismo, por tanto, debe estar grabado de forma permanente, Esta
caracteristica de “no volatilidad” garantiza que la memoria mantenga su contenido atin sin
alimentacién, de forma que el programa no necesite volver a ser cargado en el sistema
cada vez que se utilice.
La informacién contenida en estas memorias debe ser grabada previamente
mediante un equipo fisico denominado programador o grabador. Este equipo se debe
conectar a un ordenador que mediante un software controla la grabacién de la memoria de
programa del microcontrolador. A este proceso se le llama programar © grabar el
microcontrolador y se ha estudiado ampliamente en el capitulo anterior.
El PICI6F84 es un microcontrolador con un tipo memoria de programa no volatil
denominada ROM Flash, que permite una grabacién muy cémoda, lo que representa una
gran facilidad en el desarrollo de diseitos. La memoria del programa del PICI6F84 tiene
tuna capacidad de | k (1024 posiciones) y esta organizada en palabras de 14 bits. Asi pues,
Ja memoria de programa comienza en la posicién 000h (posicién inicial de reset) y llega
hasta la 3FFh (figura 4-1). El PICL6F84 admite unas 1000 grabaciones, y el fabricante
garantiza que la informacién permanece inalterable durante varias decenas de afios.
4.4 EL CONTADOR DE PROGRAMA (PC)
Un programa esti compuesto por instrucciones que generalmente se ejecutan de
forma secuencial. En el PIC16F84 cada una de esas instrucciones ocupa una posicién de
memoria de programa.
El contador de programa 0 PC (Program Counter) es un registro interno que se
utiliza para direccionar las instrucciones de! programa de control que estin almacenadas
en la memoria de programa (ver figura 4-1). Este registro contiene la direccién de la
proxima instruccién a ejecutar y se incrementa automiticamente de manera que la
secuencia natural de ejecucién del programa es lineal, una instruccién después de otra.
El microcontrolador PIC16F84 dispone de un contador de programa que le permite
direccionar los 1k x 14 bits de memoria de programa implementada, desde la posicién
00h hasta la 3FFh.
En el esquema del entrenador basico de la figura 1-2, cuando el microcontrolador
se conecta a la alimentacién 0 cuando ocurre un reset, el contador de programa se pone a
cero forzando asi que la direccién de inicio sea la 000h. La primera instruccién ejecutada
serd la que esté grabada en esta posicién.40 _MICROCONTROLADOR PICI6F84. DESARROLLO DE PROYECTOS RAMA
[Direcion]Nombre] wi7 | tice [ous] bia | bis [oir2 [oii] vio |
BANCO 0
0h [NDF _| Registro utitizado en el direccionamiento indirecto (no es un registro fisico)
oth [TMRO | Timer/ Contador de 8 bit
02h [PCL _| Registro con tos 8 bits mas bajos del Contador de Programa
oh |status| ine | Rei | RPo| 70 mo | z |oc| c
04h |FSR__| Registro utitizado como puntero en el direccionamiento indirecto
osn [porta | - ~ | — [Raatocki] raz | raz [Rar] Rao
oon [ports | rB7 | RBs [RBs] RBs | RBS | RBZ | RBI |RBOANT!
O7h n no implementada, se lee como 0
Osh | EEDATA | Registro de datos EEPROM
09h | EEADR_ | Registro de direcciones EEPROM
oan |PCLATH| =| = | Butter escrito con tos 5 bit mas altos det PC
oph [INTCON | GlE | EEIE | TOE] INTE | RBIE | TOF |INTF| RBIF
BANCO I
80h | INDF _| Registro utitizado en el direccionamiento indirecto (no es un registro fisico)
8th |OPTION |/RBPU|INTEDG|TosC] TosE | PSA | Ps2 | PSI] PSO
82h__|PCL__| Registro con los 8 bit mas bajos del Contador de Programa
sh [status | ire | rei [rpo[ sto feOY [kez 3|iDOe| ee G
84h [FSR | Registro utitizado como puntero en el direccionamiento indirecto
Ee ee =| = | Ree de configuracién de las lineas del Puerto A
86h | TRISB _ | Registro de configuracién de las lineas del Puerto B
87h Posicién no implementada, se lee como 0
ssh |EECONI | — - | = | cer [wrerr|wren] we] rd
89h __ | ECON? | Reg. de control para grabar en la EEPROM de datos (no es un registro fisico)
8Ah | PCLATH] =| = | Buffer eserito con los 5 bit mas altos det PC
spn [intcon| ce | ce |Toe] mte | ree | Tor [intr] RBIF
Tabla 4-1 Registros del SFR (Special Function Registers)ORAMA CAPITULO 4: ORGANIZACION DE LA MEMORIA _41
4.5 MEMORIA DE DATOS
En esta memoria se almacenan los datos que se manejan en un programa, Estos
datos varian continuamente, por lo que esta memoria debe ser de lectura y escritura. Se
utiliza memoria denominada RAM. Esta memoria es de tipo vokitil, los datos se borran en
caso de que desaparezca la alimentacién
La figura 4-1 muestra la estructura de la memoria de datos RAM del PICI6F84
donde se aprecia que esta dividida en dos partes:
© Registros de Funciones Especiales SFR. (Special Function Registers). Son los
primeros registros, cada uno de ellos cumple un propésito especial en el control
del microcontrolador.
© Registros de Propésito General GPR (General Purpose Registers). Son
registros de uso general que se pueden usar para guardar los datos temporales del
programa que se esté ejecutando. Tiene 68 posiciones para el PIC16F84.
La memoria de datos cuenta con dos baneos de memoria, Banco 0 y Banco 1:
* Los registros del SFR estén agrupados entre las direcciones 00h a OBh para el
Banco 0 y entre las direcciones 80h hasta 8Bh para el Banco 1. Algunos de los
registros del SFR se encuentran duplicados en la misma direccién en los dos
bancos, con el objeto de simplificar su acceso. Asi por ejemplo, el registro
STATUS se localiza en las direcciones 03h (Banco 0) y 83h (Banco 1),
‘© El banco de registros de propésito general esta formado por 68 posiciones de
memoria, ya que slo son operativas las del Banco 0 (direcciones desde la 0Ch
hasta la 4Fh), porque las del Banco | se mapean sobre el Banco 0. Es decir,
cuando se apunta a un registro de propésito general del Banco I (direcciones de
8Ch hasta OCFh), realmente se accede al no registro del Banco 0.
Para seleccionar el banco a acceder hay que configurar el bit 5 (RPO) del registro
STATUS. Con RPO = 0 se accede al Banco 0 y con RPO = I se accede al Banco 1. El
Banco 0 es seleccionado autométicamente después de un reset.
Las zonas de memoria 50h-7Fh y DOh-FFh no son empleadas y devuelven 0 en
caso de lectura.
4.6 DIFERENCIAS ENTRE EL PIC16F84 Y EL PIC16C84
El microcontrolador PICI6C84 es un microcontrolador anterior al PICI6F84 y
totalmente compatible con él, la diferencia principal es que su memoria de datos tiene
‘menor tamafio. El PIC16C84 tiene 32 registros de propésito general (el mapa de memoria
de datos llega hasta 2Fh) frente a los 68 registros disponibles en el PICIGF84. El42_MICROCONTROLADOR PICIGF84. DESARROLLO DE PROYECTOS RAMA
PICI6C84 fue reemplazado por el PICI6F84A de modo que los disefios que lo utilicen
como elemento de control deben ser actualizados. Este proceso es transparente, se puede
sustituir uno por otro sin realizar ningun tipo de modificacién en la mayoria de las
aplicaciones.
4.7 REGISTROS DEL SFR
La tabla 4-1 detalla los registros de funciones especiales SFR. (Special Function
Registers). Estos registros se describen en su totalidad en el apéndice Ey se irin
explicando a lo largo del libro. Por ahora se destacan los siguientes:
4.8 REGISTROS RELACIONADOS CON LOS PUERTOS
Los registros relacionados directamente con los puertos son:
* PORTA, en posicién 0Sh del Banco 0. Puerto de entrada/salida de 5 bits (pines
RA4:RAO). El Puerto A puede leerse o escribirse como si se tratara de un registro
cualquiera. El registro que controla el sentido (entrada o salida) de sus pines se
lama TRISA y esta localizado en la direccién 85h del Banco 1
* PORTB, en posicién 06h del Banco 0. Puerto de entrada/salida de 8 bits (pines
RB7:RBO). El Puerto B puede leerse o escribirse como si se tratara de un registro
cualquiera. El registro que controla el sentido (entrada o salida) de sus pines se
Hama TRISB y esta localizado en la direccién 86h del Banco 1.
* TRISA, posicién 85h del Banco 1. Registro de configuracién de las lineas det
Puerto A. Es el registro de control para el Puerto A. Un “0” en el bit
correspondiente al pin lo configura como salida, mientras que un “I” lo hace
como entrada.
* — TRISB, posicién 86h del Banco 1. Registro de configuracién de las lineas del
Puerto B. Es el registro de control para el Puerto B, Un “0” en el bit
correspondiente al pin lo configura como salida, mientras que un “1” lo hace
como entrada.
4.9 REGISTRO PCL Y CONTADOR DE PROGRAMA
El PICI6F84 dispone de un contador de programa de 13 bits constituido por dos
registros (figura 4-2):
* PCL (Program Counter Low byte), implementado en la posicién de memoria
RAM 02h (y duplicado en la posicién 82h del Banco 1). Su contenido
corresponde con los 8 bits més bajo del contador de programa. Este registro
puede ser lefdo o escrito directamente.RAMA CAPITULO4: ORGANIZACION DE LA MEMORIA _43
* PCH (Program Counter High byte). Los cinco bits de mayor peso del PC
corresponden con este registro. No puede ser leido ni escrito directamente.
PCH PCL
12 87 0
PC
Figura 4-2. Composicién del Contador de Programa (PC, Program Counter)
Durante la ejecucién normal del programa el PCL se incrementa con cada
instruccién, a menos que se trate de alguna instruccién de salto. Al conectar la
alimentacién se za.a (PCL) = b’00000000" y (PCH) = 600000”,
Los 13 bits del contador de programa le permiten direccionar hasta 8 k x 14 bits.
Sin embargo, el PIC16F84 dispone tan sdlo de 1k x 14 bits de memoria implementada,
desde la posicién 000h hasta la 3FFh. Los 3 bits de mayor peso del PC no los tiene en
cuenta, asi por ejemplo, las direcciones 30h, 430h, 830h, C30h, 1430h, 1830h y 1C30h se
consideran la misma.
4.10 REGISTRO DE TRABAJO W
El registro de trabajo W (Work) es el registro principal y participa en la mayoria
de las instrucciones. Se localiza dentro de la CPU del PICI6F84 como se aprecia en la
figura 4-1
La misma figura muestra como el microcontrolador posee una ALU (Arithmetic
Logic Unit) de 8 bits. Esta se encarga de realizar las operaciones l6gicas o aritméticas que
requiere la ejecucién del programa con dos operandos, uno que proviene del registro W y
el otro que se encuentra en cualquier otro registro o en el propio cédigo de instruecién.
4.11 REGISTRO DE ESTADO O STATUS
El registro de estado o STATUS ocupa a posicién 03h del Banco 0 0 la 83h del
Banco 1 y es uno de los registros mas importantes y utilizados. Los bits de este registro
indican el estado de la iltima operacién aritmética o l6gica realizada, la causa de reset y
los bits de seleccién de banco para la memoria de datos. A los bits del registro de estado
se les suele denominar flags o banderas.
Su constitucién interna se muestra en la tabla 4-2. A continuacién se explican sus
bits principales, en capitulos posteriores se explicarin el resto y en el apéndice D se
realiza una descripcién detallada de todo el conjunto.