Está en la página 1de 16

PICSchool:

Mdulo PIC12F5XX
Descubre todas las posibilidades de
este enano pero potente micro
V 1.00 Junio 2006

INGENIERIA DE MICROSISTEMAS
PROGRAMADOS S.L.
C/ Alda. Mazarredo N 47 - 1 Dpto. 2
48009 BILBAO - BIZKAIA
Tel/Fax: 94 4230651
email: info@microcontroladores.com
www.microcontroladores.com

Mdulo de entrenamiento para los PIC12F5XX


Indice general
INDICE GENERAL
PRACTICA 0: Introduccin al PIC12F5XX
0.1
0.2

0.3
0.4

OBJETIVOS
FUNDAMENTOS TEORICOS: El PIC12F508/509

0-1
0-1

0.2.1
0.2.2
0.2.3
0.2.4
0.2.5
0.2.6
0.2.7
0.2.8
0.2.9
0.2.10

0-1
0-2
0-2
0-3
0-4
0-6
0-6
0-7
0-8
0-9

Caractersticas generales
Diagrama de pines
La memoria de programa
El mapa de memoria de datos
Los registros especiales
El contador de programa
Direccionamiento del rea de datos
Los bits del registro de configuracin
Configuracin del oscilador
El reset

MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

0-10
0-11

0.4.1
0.4.2
0.4.3

0-11
0-11
0-11

Insercin del dispositivo


Configuracin de PICSchool
Grabacin del dispositivo

PRACTICA 1: Las lneas de E/S


1.1
1.2

1.3
1.4

1.5

OBJETIVOS
FUNDAMENTOS TEORICOS

1-1
1-1

1.2.1
1.2.2
2.2.3
2.2.4

1-1
1-1
2-5
2-5

El registro TRIS
Conexin de las E/S
Configuracin del software
Tareas mas comunes

MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

1-2
1-2

1.4.1
1.4.2
1.4.3
1.4.4
1.4.5

1-2
1-4
1-5
1-6
1-6

El programa fuente en ensamblador


Ensamblado del programa fuente
Conectando los perifricos
Grabacin del dispositivo
Verificar el funcionamiento

TRABAJO PERSONAL

1-7

1.5.1
1.5.2
1.5.3

1-7
1-7
1-7

Ejercicio 1: Visualizar el complemento de las entradas


Ejercicio 2: Operacin aritmtica con el valor de las entradas
Ejercicio 3: Decodificador

PRACTICA 2: El estado de alta impedancia de las entradas


2.1
2.2
2.3

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS

2-1
2-2
2-2

i-1

Mdulo de entrenamiento para los PIC12F5XX


Indice general
2.4

DESARROLLO DE LA PRACTICA

2-2

2.4.1
2.4.2

2-2
2-3

Analizando una lnea de entrada tri-estado


Anlisis de dos lneas tri-estado

PRACTICA 3: Temporizaciones software


3.1
3.2
3.3
3.4

3.5

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

3-1
3-1
3-2
3-2

Ejemplo: Temporizaciones e intermitencias

3-2

TRABAJO PERSONAL

3-2

Ejercicio 1: Generacin de seales modulas en anchura de pulso

3-2

PRACTICA 4: El temporizador Timer 0 (TMR0)


4.1
4.2
4.3
4.4

4.5

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

4-1
4-1
4-2
4-2

4.4.1
4.4.2
4.4.3

4-2
4-3
4-4

Modo temporizador
Modo contador de eventos externos
Ejemplo: Bomba de carga (doblador de tensin) mediante onda cuadrada

TRABAJO PERSONAL

4-5

4.5.1

4-5
4-5
4-6

4.5.2

TMR0 en modo temporizador: Generador de pulsos


TMR0 en modo temporizador: Generador de onda cuadrada
TMR0 en modo contador: Contar el nmero de pulsos aplicados

PRACTICA 5: El Watchdog (WDT) y el RESET


5.1
5.2
5.3
5.4

5.5

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

5-1
5-1
5-2
5-2

5.4.1
5.4.2
5.4.3

5-2
5-3
5-3

Provocando desbordamientos del WDT


El modo SLEEP
Las fuentes de RESET

TRABAJO PERSONAL

5-5

5.5.1
5.5.2
5.5.3

5-5
5-5
5-5

Evitar el desbordamiento
Temporizador
Temporizador programable

PRACTICA 6: Comunicaciones serie RS232


6.1
6.2
6.3

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS

6-1
6-1
6-2

i-2

Mdulo de entrenamiento para los PIC12F5XX


Indice general
6.4

DESARROLLO DE LA PRACTICA

6-2

6.4.1
6.4.2
6.4.3
6.4.4
6.4.5

6-3
6-5
6-5
6-6
6-6

Transmitiendo un carcter
Transmitiendo mensajes
Transmisin / recepcin
Visualizacin remota de seales
Control remoto de salidas

PRACTICA 7: Controlando una pantalla LCD


7.1
7.2
7.3
7.4

7.5

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

7-1
7-1
7-3
7-3

7.4.1
7.4.2
7.4.3

7-3
7-4
7-6

Visualizando el conjunto de caracteres disponibles


Implementando un stack por software
Generando caracteres grficos

TRABAJO PERSONAL

7-7

7.5.1
7.5.2

7-8
7-8

Monitorizando seales de entrada


Visualizando palabras

PRACTICA 8: El bus I2C


8.1
8.2
8.3
8.4

8.5

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

8-1
8-1
8-3
8-4

8.4.1
8.4.2
8.4.3
8.4.4

8-4
8-6
8-6
8-7

Controlando las salidas a travs del dispositivo PCF8574A


Problema combinacional
Control de entradas desde el dispositivo PCF8574A
Visualizacin sobre el LCD

TRABAJO PERSONAL

8-8

PRACTICA 9: Midiendo la constante R-C


9.1
9.2
9.3
9.4

OBJETIVOS
FUNDAMENTOS TEORICOS
MATERIALES NECESARIOS
DESARROLLO DE LA PRACTICA

9-1
9-1
9-2
9-2

9.4.1

Midiendo la constante de tiempo RC


a) Midiendo constantes de tiempo con resistencias fijas
b) Midiendo constantes de tiempo con resistencias variables
c) Midiendo la constante de tiempo de un sensor de luz o clula LDR
d) Midiendo la constante de tiempo de un sensor de temperatura o NTC

9-2
9-4
9-5
9-5
9-5

9.4.2
9.4.3

Detectando la activacin de dispositivos electromecnicos


Controlando un teclado matricial

9-6
9-6

PRACTICA 10: Ejemplos prcticos


10
10.1

OBJETIVOS
TRANSMISOR R.F. DE 4 CANALES

10-1
10-1

i-3

Mdulo de entrenamiento para los PIC12F5XX


Indice general

10.2

10.1.1 Fundamentos tericos


10.1.2 Materiales necesarios
10.1.3 Desarrollo de la prctica

10-1
10-3
10-3

RECEPTOR R.F. DE 4 CANALES

10-4

10.2.1
10.2.2
10.2.3
10.2.4

10-4
10-4
10-5
10-6

Fundamentos tericos
Materiales necesarios
Desarrollo de la prctica
Trabajo personal

LISTADO DE COMPONENTES

Resistencias: 2x 220; 2x 330; 2x 1K; 2x 2K2; 1x


3K3; 1x 4K7; 5x 10K; 1x 22K; 1x 47K; 1x 100K; 1x1M; 1x
NTC 10K/35; 1x LDR
Condensadores: 2x 1nF; 1x 1F/25V
Sensores:
Sensor de luz o LDR de 5 mm
Sensor de temperatura o NTC de 10K/25
Semiconductores: 2x 1N4148;
C. Integrados:
2x Microcontroladores PIC12F508
1x Controlador de LCD SYM20AA
1x Dispositivo I2C de E/S PCF8574A
Mdulos de RF
Transmisor Aurel TX-SAW/433 s-z
Receptor Aurel BC-NBK
Varios:
Cable de conexiones
4x Pulsadores para C.Impreso
CDROM con manual de prcticas y los programas fuente en ensamblador y en C de los ejemplos propuestos.
NOTA: Para realizar las prcticas propuestas se recomienda emplear el laboratorio PICSchool que se puede
adquirir por separado.

BIBLIOGRAFIA
1.2.3.4.5.6.7.8.-

Microcontroladores PIC, diseo prctico de aplicaciones, Primera parte. Ed. Mac Graw-Hill
Microcontroladores PIC, diseo prctico de aplicaciones, Segunda parte. Ed. Mc Graw-Hill
Curso prctico de Diseo con PIC, 1 parte. Ingeniera de Microsistemas Programados.
Curso prctico de Diseo con PIC, 2 parte. Ingeniera de Microsistemas Programados.
MPASM Users guide. Microchip
MPLAB Users guide. Microchip
PIC12F508 Data Sheet. Microchip
Manual de usuario del laboratorio PICSchool. Ingeniera de Microsistemas Programados.

i-4

Mdulo de entrenamiento para los PIC12F5XX


Indice general
DIRECCIONES DE INTERES
Ingeniera de Microsistemas Programados S.L. www.microcontroladores.com
Microchip. www.microchip.com
Custom Computer Services inc. (compiladores C) www.ccsinfo.com
Software de grabacin WinPIC800. http://perso.wanadoo.es/siscobf/winpic800.htm

i-5

Mdulo de entrenamiento para los PIC12F5XX


Indice general

i-6

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD

PRACTICA 7: Controlando una pantalla LCD


7.1 OBJETIVOS
Qu diras si con un PIC tan pequeo pudieras controlar toda una pantalla LCD ? Pues, aunque parezca
difcil, resulta sencillo y totalmente factible. Naturalmente que necesitaremos de ayuda exterior. El dispositivo
PIC12F508 slo tiene, en el mejor de los casos, 6 lneas de E/S como mximo para el control de perifricos, y una
pantalla LCD necesita al menos 7 lneas para su gestin. Es imprescindible por tanto un hardware externo que
simplifique las conexiones entre el PIC y la pantalla. Ese hardware consiste en un circuito controlador de LCD
como puede ser el SYM20AA y que se comunicar en serie con el PIC, tal y como se explic en la prctica
anterior. Ya ves, tenemos un PIC pequeo pero matn.
En esta prctica vamos a analizar el funcionamiento del controlador de LCD SYM20AA y su conexin con
el PIC12F508, mediante una serie de ejemplos.
Tambin vamos a tocar un tema importante como es la implementacin de un stack gestionado por
software que nos permitir anidar un buen nmero de subrutinas en nuestros programas de aplicacin.
7.2 FUNDAMENTOS TEORICOS
El controlador SYM20AA permite la gestin de todas las tareas propias de una pantalla LCD. Se comunica
en serie con el microcontrolador principal o Host a travs de una o dos lneas, lo que resulta especialmente til
en aquellas aplicaciones donde el nmero de lneas de E/S disponibles sea crtico. El microcontrolador o Host
simplemente le transmite los caracteres que se desea visualizar as como unos comandos muy sencillos que
producen distintos efectos de visualizacin. El controlador se encarga totalmente del interface con la pantalla LCD,
lo que facilita enormemente el desarrollo de la aplicacin final y el consiguiente ahorro de memoria (cuestin que
tambin debe ser considerada).
En el disco de usuario se incluye un PDF con el manual completo del controlador SYM20AA donde se
explica sus caractersticas y conexiones. Estas se muestran en la figura 7-1 y la tabla que le acompaa.

2
1
18
17

9
16
15
14
5

TxD

D7
D6
D5
D4

E
R/W
RS
VCC
GND

RxD

BAUD
BLIGHT
VPP
DATA
CLK

8
7

3
6
4
13
12

SY M-20AA

Figura 7-1. Conexiones del


SYM20AA

N PIN
2
1
18
17
9
16
15
14
5
8
7
3
6

NOMBRE
D7
D6
D5
D4
E
R/W
RS
VCC
GND
TxD
RxD
BAUD
BLIGHT

4
13
12

Vpp
DATA
CLK

DESCRIPCION
Lnea de interface con el LCD
Lnea de interface con el LCD
Lnea de interface con el LCD
Lnea de interface con el LCD
Seal de habilitacin del LCD
Seal para la lectura/escritura del LCD
Seal de comandos y datos del LCD
Tensin de alimentacin de +5Vcc
Tensin de alimentacin GND
Transmisin de datos al Host
Recepcin de datos desde el Host
Seleccin de baudios. 0 = 9600, 1 = 19200
Salida para el control de la luz de fondo (si est
disponible en el LCD)
No conectar
No conectar
No conectar

En la figura 7-2 se muestra el esquema elctrico de conexiones entre el controlador SYM20AA y el


microcontrolador PIC12F508. Atentos a este esquema porque se emplear en posteriores ejemplos. Debemos
tener en cuenta que una pantalla LCD es el perifrico de salida por excelencia que permite visualizar los
resultados de cualquier tipo de proceso.

7-1

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD

Figura 7-2. Esquema tpico


de montaje
L+
L-

15
16

7
8
9
10
11
12
13
14

D0
D1
D2
D3
D4
D5
D6
D7

RS
RW
E
4
5
6

GND
VCC
VLC

LCD HD44780 compatible

1
2
3

La
pantalla
del
laboratorio
PICSchool se va a conectar con el
controlador SYM20AA a travs de las
lneas D4-D7 para la transferencia de
datos y comandos. Tambin se conectan
las seales de control de flujo E, R/W y
RS con sus correspondientes del
controlador.

2
1
18
17

D7
D6
D5
D4

TxD

GP5(RxD)

Este a su vez se conecta con el


7
RxD
microcontrolador a travs de GP4 (TxD) y
GP4(TxD)
GP5 (RxD). Por GP4 se transmiten los
9
3
comandos y datos que se desean
BAUD
16 E
R/W
visualizar. Cada vez que el controlador
15
6
RS
BLIGHT
finaliza la ejecucin de un determinado
+5Vcc
14
4
VCC
VPP 13
comando, transmite el cdigo ACK (0x06)
DATA
5
12
que se recibe por la lnea GP5. El empleo
GND
CLK
de esta seal no es imprescindible.
SY M-20AA
Podemos evitarla si el software de la
aplicacin se toma la molestia de esperar el tiempo que establece el fabricante para la ejecucin de un comando.
En los ejemplos que vamos a proponer esta lnea no se emplea. Es decir, empleamos una sola lnea del micro, la
GP4, para la comunicacin con el controlador SYM20AA, tenemos por tanto disponibles otras 5.
La siguiente tabla muestra todos los cdigo de comandos y datos admitidos por el controlador SYM20AA.
HEX DEC
DESCRIPCIN
T.MAX.
0x00
0 Visualiza el carcter grfico n 0 previamente definido mediante Set_Char
0.5mS
0x01
1 Visualiza el carcter grfico n 1 previamente definido mediante Set_Char
0.5mS
0x02
2 Visualiza el carcter grfico n 2 previamente definido mediante Set_Char
0.5mS
0x03
3 Visualiza el carcter grfico n 3 previamente definido mediante Set_Char
0.5mS
0x04
4 Visualiza el carcter grfico n 4 previamente definido mediante Set_Char
0.5mS
0x05
5 Visualiza el carcter grfico n 5 previamente definido mediante Set_Char
0.5mS
0x06
6 Visualiza el carcter grfico n 6 previamente definido mediante Set_Char
0.5mS
0x07
7 Visualiza el carcter grfico n 7 previamente definido mediante Set_Char
0.5mS
0x08
8 BackSpace: Mueve el cursor una posicin a la izquierda y borra el carcter actual
0.5mS
que hubiera
0x0A 10 Line_Feed: El cursor se mueve a la siguiente lnea. Si se encuentra en la ltima se
0.5mS
pasa a la primera. Se conserva la posicin dentro de la lnea
0x0C 12 Form_Feed: Salto de pgina. El cursor se coloca en la 1 posicin de la 1 lnea. La
6mS
pantalla se borra
0x0d 13 Return: El cursor se mueve a la 1 posicin de la siguiente lnea. Si esta fuera la
0.5ms
ltima, se pasar a la 1.
0x20 32 Visualiza el carcter correspondiente al cdigo ASCII. Ver tabla de caracteres
0.5mS

disponibles.
0x7F 127
0x80 128 Display_ON: Activa el LCD y visualiza el contenido actual. Valor por defecto.
0.5mS
0x81 129 Display_OFF: Desactiva el LCD. La pantalla queda en blanco, pero el contenido
0.5mS
actual permanece intacto.
0x82 130 Cursor_ON: Visualiza el cursor en la posicin actual. Valor por defecto
0.5mS
0x83 131 Cursor_OFF: Desactiva la visualizacin del cursor
0.5mS
0x84 132 Blink_ON: Activa intermitencia del cursor
0.5mS
0x85 133 Blink_OFF: Desactiva la intermitencia del cursor. Valor por defecto
0.5mS
0x86 134 Backlight_ON: Activa la luz de fondo. Slo es vlido en pantallas LCD que dispongan 0.5mS
de dicha luz.
0x87 135 Backlight_OFF: Desactiva la luz de fondo. Valor por defecto
0.5mS
0x88 136 Shift_Right: Desplaza el cursor una posicin a la derecha sin borrar el carcter
0.5mS
actual

7-2

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
HEX DEC
DESCRIPCIN
0x89 137 Shift_Left: Desplaza el cursor una posicin a la izquierda sin borrar el carcter actual
0x8A 138 Set_Cursor: Coloca el cursor en las coordenadas indicadas sin borrar el carcter
actual.

T.MAX.
0.5mS
0.5mS

Formato: 0x8A ff cc
ff = filas (entre 1 y 4)
cc = columnas (entre 1 y 40)

0x8B

Se verifica si las coordenadas indicadas estn fuera del rango establecido por el tipo
de LCD (Set_LCD), en cuyo caso se establecen las coordenadas por defecto (0-0)
139 Set_Char: Genera uno de los posibles caracteres grficos y los almacena en la
memoria interna del LCD.

0.5mS

Formato: 0x8B nn B0 B1 B2 B3 B4 B5 B6 B7
nn = nmero de identificacin del carcter.
B0-B7 = Son los bytes que definen la matriz.

0x8C

Si el sistema queda sin alimentacin los caracteres que haya definidos se borran, con
lo que habr que volver a repetir el proceso.
140 Sel_LCD: Ajusta el modelo de LCD disponible.

6mS

Formato: 0x8C ff cc
ff = Nmero de filas (entre 1 y 4)
cc = Nmero de columnas (entre 1 y 40)
Si un parmetro excede de los lmites, se toma el modelo por defecto (2x16). La
nueva configuracin slo se mantiene mientras el sistema est alimentado. La
ejecucin de este comando implica un borrado total de la pantalla y el
posicionamiento del cursor en la 1 posicin de la 1 fila.

7.3 MATERIALES NECESARIOS

Laboratorio PICSchool
PIC12F508
Controlador de LCD SYM20AA
Cables de conexin

7.4 DESARROLLO DE LA PRACTICA


Los ejemplos que se proponen tienen por objeto hacerse una idea de cmo controlar la pantalla LCD del
laboratorio PICSchool, lo que abre la puerta a un sin fin de aplicaciones posibles.
7.4.1 Visualizando el conjunto de caracteres disponibles
Se trata de ir sacando por la pantalla LCD el juego completo de caracteres (96) que estn definidos en su
interior. Como se trata de una pantalla de 2x16 slo es capaz de visualizar 32 caracteres cada vez. El programa
se encarga de ir mostrando las tres pginas de 32 caracteres cada una.
El programa fuente
Los ficheros Ejem_7A.asm y Ejem_7B.c contienen los programas fuente escritos en ensamblador y en C
respectivamente. Los programas tienen bsicamente una estructura similar a los empleados en anteriores
ejercicios. Se incluye el mismo fichero RS232LOW.INC que contienen las rutinas de transmisin y recepcin ya
conocidas.

7-3

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
Una consideracin a tener en cuenta es que al inicio del programa principal, tras el arranque, se debe
realizar una temporizacin de unos 100ms. Ello es debido a que al conectar la alimentacin, la pantalla LCD
realiza un proceso interno de inicializacin en el que no se le debe enviar ningn comando o dato. Si emplearamos
la lnea GP5 el controlador enviara el cdigo ACK (0x06) cuando dicho proceso finalice. Como no lo hacemos, es
necesario realizar una temporizacin a ojo para esperar que eso ocurra. Esta consideracin tambin debe
tenerse en cuenta durante la ejecucin de determinados comandos. Consultar la tabla anterior donde se indican
los tiempos de ejecucin de cada uno de ellos.
Se empieza visualizando el primer carcter ASCII que se corresponde con el espacio (0x20). Entre un
carcter y el siguiente se aplica una temporizacin de 0.3. Se emplea la rutina Delay muy similar a la empleada
en anteriores ejemplos.
Cuando se completa una lnea (16 caracteres) el controlador contina automticamente en la siguiente. Al
completarse la pantalla o pgina (16x2 caracteres) se produce una temporizacin de 1, se borra el LCD y se
procede a visualiza los siguientes 32. Cuando se han visualizado los 96 caracteres (3 pginas) se empieza de
nuevo todo el proceso.
Conexiones
Son las mismas que las mostradas en el
esquema de la figura 7-2. No hace falta conectar
GP5. En la fotografa de la figura 7-3 se muestra el
montaje realizado sobre el mdulo board del
laboratorio. Se puede apreciar que se trata de un
montaje muy sencillo y que conviene hacerlo a
conciencia. Este mismo montaje se emplear en
posteriores prcticas. Tener en cuenta que una
pantalla LCD es un perifrico de salida que ofrece
muchas posibilidades y que, tal y como la estamos
empleando, slo nos consume una lnea del PIC.

Figura 7-3. Montaje prctico sobre el laboratorio

Evaluacin de la prctica
Como es habitual se procede a ensamblar o compilar el programa fuente contenido en los ficheros ya
mencionados. El dispositivo lo grabaremos mediante el software de grabacin WinPIC800 o similar. El jumper JP4
debe estar en la posicin MCL y el conmutador en la posicin PC.
Una vez grabado podemos poner JP4 en la posicin GP3 (en esta ocasin no hace falta) y el conmutador
en la posicin RUN.
Se recomienda apagar y encender el entrenador para proceder correctamente con la secuencia interna de
inicio de la pantalla LCD. Se observar cmo van apareciendo los distintos caracteres ASCII de forma secuencial
y organizados en pginas de 32 caracteres. El proceso se repite de forma indefinida.
7.4.2 Implementando un Stack por software
Uno de las inconvenientes de los dispositivos PIC de gama baja en general y del PIC12F508 en particular,
es su limitado stack de 2 niveles. Como ya es sabido cada vez que en el programa de aplicacin se ejecuta un
salto a subrutina mediante la instruccin CALL, en el stack se salva automticamente el valor actual del PC y que
representa la direccin de retorno. Cuando al final de la subrutina se ejecuta la instruccin RETLW se recupera la
direccin guardada y el PC retorna al punto de partida.

7-4

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
El problema radica a que el stack de un PIC12F508 es de dos niveles y slo tiene por tanto capacidad
para guardar otras tantas direcciones de retorno. Esto implica que en el diseo del programa de aplicacin hay
que tener mucho cuidado de no emplear subrutinas anidadas mas all de dos porque de lo contrario se perdern
las diferentes direcciones de retorno.
Figura 7-4. Anidamiento
En el presente ejemplo se desea hacer un programa
capaz de visualizar diferentes mensajes sobre la pantalla LCD.
Para ello nos vemos en la necesidad de hacer tres subrutinas
cuyo anidamiento se presenta en la figura 7-4.
Desde el programa principal se llama a la subrutina
Mensaje encargada de ir seleccionando cada uno de los
diferentes caracteres. De aqu se llama a la subrutina TxD
encargada de transmitirlo al LCD, y de esta se llama a
Delay_bit para la temporizacin en la transmisin entre un bit y
el siguiente.
Como el micro slo tiene dos niveles de stack, la vuelta al programa principal resulta imposible ya que slo
quedaron registradas las dos ltimas direcciones de retorno (a TxD y a Mensaje).
El mtodo que se propone es crear un stack por software sobre la memoria RAM del dispositivo. En primer
lugar se define la direccin de inicio de ese stack:
Stack equ

0x0e

;Posicin inicial para el stack por software

Cada salto a subrutina consumir una posicin de RAM por lo que es fcil calcular cuntos anidamientos
se pueden realizar segn la memoria disponible.
Para salvar la direccin de retorno empleamos el direccionamiento indirecto que guarda el valor actual del
PCL a partir de la posicin definida como inicio de stack:
;Esta macro implementa un stack por software. Cada vez que se usa, el valor
;actual del PC se salva mediante el reg. INDF, en una posicin RAM
NCALL

macro
movf
movwf
incf
goto
endm

Destino
PCL,W
INDF
FSR,F
Destino

;Salva el valor actual del PC


;Siguiente posicin del stack
;Salto al inicio de la rutina

Se carga el valor actual del PCL en el reg. W (movf PCL,W), este se salva de forma indirecta sobre la
posicin de memoria destinada al stack (movwf INDF), a continuacin se incrementa el puntero a la siguiente
direccin (incf FSR,F) y finalmente se salta a la direccin de destino (goto Destino). Estas cuatro instrucciones
sustituyen a la clsica instruccin CALL. Como puede que haya que usarlas en numerosas ocasiones, se agrupan
en torno a una macro llamada NCALL Destinoy as no hay que teclearlas cada vez.
Para recuperar la direccin de retorno se ejecuta siempre la misma secuencia de instrucciones:
;El retorno se produce recuperando de RAM, a travs del reg. INDF, el valor
;del PC al que se le aade +3 para apuntar a la siguiente instruccin justo
;despues de la ltima NCALL ejecutada.
Retorno

decf
movlw
addwf
movwf

FSR,F
3
INDF,W
PCL

;Posicin previa del stack


;Ajusta desplazamiento para el PC
;PC apunta a la siguiente instruccin

7-5

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
Se decrementa el puntero para recoger el valor de la posicin previa del stack (decf FSR,F), se ajusta un
desplazamiento de +3 que hay que aplicarlo sobre el PCL (movlw 3, addwf INDF,W) y, finalmente, el resultado se
aplica al PCL, lo que provoca el retorno inmediato a la direccin de partida.
Ahora el programa principal puede saltar a
cualquier subrutina simplemente invocando a la macro
NCALL Destino y la subrutina retornar al programa
principal simplemente ejecutando goto Retorno. Con todo
ello, el esquema de trabajo empleado en el ejemplo del
fichero Ejem_7_2A.asm se puede resumir como se muestra
en la figura 7-5.

Figura 7-5. Esquema empleado en el ejemplo


Cada vez que se emplea la macro NCALL Destino se consume una posicin de la RAM reservada para
el stack por software, pero no un nivel del stack hardware implementado en los PIC. Se puede por tanto anidar
tantas subrutinas como memoria RAM disponible haya. Slo se guarda el valor de 8 bits correspondientes a PCL,
por lo que todas las subrutinas deben estar situadas dentro de las primeras 256 posiciones de la memoria de
programa.
El fichero Ejem_7_2B.c contiene el programa fuente
escrito en C. Se puede observar la simplicidad del mismo.
Toda la problemtica del stack desaparece ya que es el
propio compilador quien se encarga de gestionarlo de forma
totalmente transparente al usuario.
Evaluacin de la prctica
Se supone que se han realizado las conexiones
detalladas en el esquema de la figura 7-2 y que el dispositivo
ha sido grabado siguiendo los mismos pasos que en ejemplos
anteriores.
El ejemplo resuelto, ya sea en la versin asm como
en la versin C, simplemente visualiza 2 mensajes o strings
compuestos de varios caracteres y durante cierto tiempo.
Tambin se emplean algunos comandos propios del
controlador YM20AA para producir diferentes efectos de
visualizacin: ubicacin del cursor, parpadeo, borrado, etc..
7.4.3 Generando caracteres grficos
La figura 7-6 muestra el juego completo de caracteres
soportados por el controlador SYM20AA y la pantalla LCD. Se
corresponden con los caracteres ASCII estndar. Empieza
desde la columna 2 (MSB=0010) y fila 0 (LSB=0000) que
coincide con el carcter de espacio. A partir de aqu
disponemos de todos los smbolos alfanumricos conocidos
cuyos cdigos van desde 0x20 hasta 0x7F.

Figura 7-6. Juego de caracteres admitidos

7-6

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
Otras de las posibilidades del controlador SYM20AA es la de crear nuestros propios caracteres grficos
personalizados. Efectivamente es posible definir hasta 8 caracteres grficos mediante el comando Set_Char
(0x8A). Este comando va acompaado del nmero de carcter grfico entre 0 y 7 y de 8 bytes que define al propio
carcter.
Todo carcter se confecciona mediante una matriz de pixels con 5 columnas y 8
filas tal y como se muestra en la figura 7-7. Las 8 filas se corresponden con los 8 bytes (B0B7) que definen al carcter y de los que slo se emplean los 5 bits de menos peso.
Cualquier bit de cualquiera de esos bytes que valga nivel 1 provoca la activacin del pxel
correspondiente. Un nivel 0 lo desactiva.

Figura 7-7. Matriz para los caracteres grficos


La figura 7-8 muestra cmo queda la matriz as como los valores
binarios necesarios para formar el carcter . Dichos valores son los bytes
que deben acompaar al comando Set_Char.
Figura 7-8. Definicin del carcter
De est forma, para definir el carcter hay que enviar al controlador LCD la secuencia:
0x8B, 0x01, 0x00, 0x1F, 0x00, 0x17, 0x19, 0x11, 0x11, 0x11
Donde 0x8B es el cdigo del comando Set_Char propiamente dicho, el valor 0x01 se corresponde al
nmero de carcter (entre 0 y 7) y los 8 bytes restantes definen el carcter.
Para visualizar posteriormente un carcter ya definido basta simplemente con enviar su nmero (entre 0 y
7) como si de cualquier otro cdigo ASCII se tratara.
Programa fuente
Los ficheros Ejem_7_3A.asm y Ejem_7_3B.c contienen los programas fuente en ensamblador y en C. El
ejemplo consiste en definir los caracteres y para posteriormente visualizarlos. Analizando los fuentes se
aprecia claramente que definir un carcter no es ni mas ni menos que enviar una simple secuencia de bytes,
similar a lo que hacamos para visualizar un mensaje.
Una vez definido un carcter lo podemos visualizar tantas veces como se desee, igual que cualquier otro.
Finalmente indicar que los caracteres se definen en tiempo de ejecucin y se mantienen siempre y cuando la
pantalla LCD est alimentada.
Evaluacin de la prctica
Se supone que se han realizado las conexiones detalladas en el esquema de la figura 7-2 y que el
dispositivo ha sido grabado siguiendo los mismos pasos que en ejemplos anteriores.
En este caso se definen los caracteres y y luego se visualizan sobre la pantalla durante cierto
tiempo y provocando ciertos efectos de intermitencia.

7-7

Mdulo de entrenamiento para los PIC12F5XX


PRACTICA 7: Controlando una pantalla LCD
7.5 TRABAJO PERSONAL
Vamos a proponer una serie de ejercicios con los que demostrar una vez mas lo simple que resulta el
manejo de una pantalla LCD con la ayuda del controlador SYM20AA y empleando tan slo una lnea del PIC
7.5.1 Monitorizando seales de entrada

AP18

En el esquema de la figura 7-9 se muestra las conexiones a realizar.


Las lneas GP0-GP3 se conectan con los interruptores E0-E3 y GP5 con el
pulsador E4. Se trata de monitorizar sobre la pantalla LCD el estado lgico de
esas seales de entrada
Figura 7-9. Esquema de conexiones

GP5
GP3
GP2
RB6(GP1)
RB7(GP0)

E4
E3
E2
E1
E0

1
2
3
4
5
6
7
8

ENTRADAS DIGITALES

7.5.2 Visualizando palabras


Se trata de hacer un programa que vaya visualizando secuencialmente las siguientes palabras:
rbol, vendr, aqu, opcin y bal

7-8

También podría gustarte