Está en la página 1de 14

Prácticas con el PIC 16F84A y otros similares

EjercicioPic_0_a.- Si tenemos un cristal


de cuarzo de 4MHZ y condensadores de
22pF, monta el siguiente circuito en tu
placa Aristón. Comprueba con un
osciloscopio y dibuja la señal que te sale
en OSC2 debe ser una onda de igual
frecuencia que el cristal utilizado

Fteórica- Fteórica-
OSC2 OSC1

Fmedida- Fmedida-
OSC2 OSC1

EjercicioPic_0_b.- Monta el oscilador


de bajo coste R-C en tu placa Aristón,
para que genere una frecuencia de 756KHz en el microcontrolador
PIC16F84A. Dibuja las ondas OSC1 y OSC2. Comprueba con un
osciloscopio y dibuja la señal que te sale en OSC1 y OSC2

Fteórica-
OSC1

Fmedida-
OSC1

Fteórica-
OSC2

Fmedida-
OSC2

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 1


Prácticas con el PIC 16F84A y otros similares
PARA EMPEZAR A TRABAJAR CON MICROCONTROLADORES
PIC 16F84A

Objetivos:
• Entender el funcionamiento básico de los microcontroladores
PIC16F84A de la familia de Microchip.
• Conocer las herramientas básicas para poder trabajar con los
microcontroladores PIC16F84A (MPLAB IDE v8, ICD2-PICKIT3
programmer, simulador PROTEUS).
• Aprender a programar pequeñas aplicaciones con el lenguaje
ensamblador MPASM.

Contenidos:
1.1 Diferencia entre un microcontrolador y un microprocesador.
1.2 Diferencias entre microcontroladores.
1.3 Arquitectura interna de un microcontrolador.
1.4 Lenguaje de programación del PIC: ENSAMBLADOR
1.5 Herramientas necesarias para el desarrollo de programas con
el PIC
1.6 Instalación del MPLAB IDE v 8.10 de Microchip y explicación
básica de la ejecución de un programa con el MPASM
1.7 Estudio de las instrucciones: movf f,d ; movlw k ; movwf f ;
addwf f
2.1 Los registros especiales STATUS, PORTA, PORTB, TRISA y
TRISB
2.2 La palabra de configuración __CONFIG
2.3 Estudio del salto incondicional goto k
2.4 El fichero o librería del PIC16F84A <P16F84A.INC>
2.5 La directiva EQU
2.7 Simulador PROTEUS, instalación
2.9 Instalación del grabador de PICs ICD2 de Microchip.
• Grabación del programa en el PIC
• Ejecución del programa
3.1 Registros especiales INDF y FSR
3.2 Decfsz f,d
3.3 Simulación del ejercicio 3 con PROTEUS.
3.4 Estudio de las instrucciones: comf f,d ; andlw k ; sublw k ;
subwf f,d
4.1 Llamada a subrutinas, la pila o Stack Pointer.
4.2 Llamada a una tabla de datos CALL y RETLW, la directiva DT
expresiones.
4.3 Las instrucciones: call, return, andlw k; addwf PCL,F .
IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 2
Prácticas con el PIC 16F84A y otros similares

5.1 Estudio del funcionamiento del registro especial TIMER0,


OPTION, INTCON
5.2 Estudio de las interrupciones del PIC.
5.3 Las directivas CBLOCK oxOC, ENDC y #DEFINE.

El aprendizaje lo vamos a enfocar eminentemente práctico, un 25%


de teoría y el resto de prácticas, que es lo que más interesa.

La metodología la vamos a tratar desde el aspecto práctico, viendo


una experimentación y a partir de la misma, cómo solucionarla con
el microcontrolador PIC16F84A. Para ello vamos a utilizar el MPLAB
de Microchip que es gratuito, y lo único que necesita son
ordenadores dónde ejecutarse. Luego la grabación real la haremos
con equipos ICD2 y PICKIT3 de Microchip, también utilizaremos
unos entrenadores PIC Millenium para realizar las prácticas. Y la
simulación se realizará con el programa de PROTEUS que es el más
usado y permitirá a todos experimentar en clase de una manera
gráfica e intuitiva.

1ª Experimentación. Manipular los registros de la memoria


SRAM del microcontrolador PIC16F84A.

Ejercicio 1a: Realiza un programa y flujograma que sume 2


números de 8bits, que se hallan en las posiciones de
memoria de datos 0x0D y 0x0F, y dejar el resultado de la
suma en el registro 0Eh.
Guárdalo c:/misproyectos/ejercicio1a/ejercicio1a.asm
Por ejemplo suma 05 + 02 y lo guarda en el registro (0x0E)=7. Simularlo con
el MPLAB paso a paso
ConfigureSelect Device…PIC16F84A
• DebuggerSelect ToolMPLAB SIM
• ViewFile Registers, Special Functions
Register, Program Memory
Instrucciones:
• addlw k ( k + (w)(w))
• movf f,d ((f)(destino)) si d=0 destino es W y si d=1 el destino es f

En el lenguaje Ensamblador MPASM para expresar los valores hexadecimales se


comienza anteponiéndoles “0x”. Así, las tres posiciones de la memoria de datos que
IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 3
Prácticas con el PIC 16F84A y otros similares
utiliza este programa, expresadas en hexadecimal para el Ensamblador MPASM, se
definirán como 0x0c, 0x0d, 0x0e, respectivamente. Esta última notación será la que se
utilice a partir de ahora en este trabajo. Las diferentes formas de expresar números en
el MPASM dependiendo de su base son:

BASE REPRESENTACIÓN

DECIMAL d’12’
HEXADECIMAL 0x0c/h0c/0ch
BINARIO b’1010’
OCTAL o’14’

Hay varias formas de representar los números en hexadecimal, aunque la más


empleada, por ser además la representación utilizada en “C”, es la de anteponer 0x al
número hexadecimal. No nos debemos preocupar si se nos olvida este detalle, porque
en Ensamblador MPASM asume por defecto que se empleará la base hexadecimal.

1.8 Diferencia entre un microcontrolador y un microprocesador.


1.9 Diferencias entre microcontroladores.
1.10 Arquitectura interna de un microcontrolador,
memórias,oscilador,PC etc
1.11 Lenguaje de programación del PIC: ENSAMBLADOR
1.12 Herramientas necesarias para el desarrollo de programas con
el PIC
1.13 Directiva EQU, LIST, ORG y END
1.14 Instalación del MPLAB IDE v 8.10 de Microchip y explicación
básica de la ejecución de un programa con el MPASM

1.15 Realizar un flujograma para la resolución del ejercicio y


resolver el programa intentando usar el menor número de
instrucciones.
1.16 Estudio de las instrucciones: movf f,d ; movlw k ; movwf f ;
addwf f,d
1.17 Estudio del funcionamiento del simulador del MPLAB IDE v 8.10
y simulación del ejercicio 1a.

1.18 Ejercicio1b.-Resta de 2 números binarios de 8 bits el


minuendo estará en la posición de memoria 0x0C, el
sustraendo en 0x0D y el resultado en 0x0E. Primero
dibujar el flujograma y luego simularlo con el MPLAB.

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 4


Prácticas con el PIC 16F84A y otros similares
1.10 Ejercicio1c extra.- SUMA DOS NUMEROS BINARIOS DE 8 BITS
ALMACENADOS EN LA RAM, 0Ch, 0Dh Y DEPOSITA EL RESULTADO EN
0Eh y OFh teniendo en cuenta el carry.

2ª Experimentación Manejo de entradas y salidas digitales


del microcontrolador PIC16F84A (puertos)

Ejercicio 2a.- Realiza un programa y su flujograma que


visualice los datos introducidos en la puerta A RA0-RA2 en
los leds RBO-RB2 dependiendo de lo que introduzcamos por
la puertaA, guárdalo en c:/misproyectos/ejercicio2a.asm

2.1 Los registros especiales STATUS, PORTA, PORTB, TRISA y


TRISB
2.2 La palabra de configuración __CONFIG
2.3 Estudio del salto incondicional goto k
2.4 El fichero o librería del PIC16F84A <P16F84A.INC>
2.5 La directiva EQU, LIST, ORG, END.
2.6 Estudio de las instrucciones bsf f,d ; bcf f,d ; clrf f .
2.7 Dibujar el circuito electrónico. Realizar un flujograma
para la resolución del ejercicio, resolver el programa,
compilación.

2.8 Simulador PROTEUS, instalación


2.9 Simulación del ejercicio 2a con PROTEUS.

2.10 Instalación del grabador de PICs ICD2 de Microchip y


pickit3.
• Grabación del programa en el PIC
• Ejecución del programa con el PICMillenium y
en la placa aristón.
IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 5
Prácticas con el PIC 16F84A y otros similares

2.11 Ejercicio2b.-Meter un dato de 5 bits por el puertoA y


divídelo por dos y luego sácalo por el puertoB. Dibuja el
flujograma, circuito electrónico y realiza el programa en
código ensamblador. Simúlalo con PROTEUS.

Ejercicio EXTRA: Metemos un dato (0 o 1) a través de un


interruptor en la línea RA4 del puerto A, también llamado
PORTA, y sacamos ese mismo dato a través de un diodo Led
conectado en la línea RB7 del puerto B (PORTB), guárdalo en
C:/misproyectos/ejercicio2c/ejercicio2c.asm.

3ª Experimentación Saltos condicionales en función de un


bit, para tomar decisiones en un programa a través del
direccionamiento indirecto.

Ejercicio 3a: BUSCA EL DATO MAYOR DE UNA TABLA DE 7


ELEMENTOS DESDE LA RAM 20h A LA 26h y EL RESULTADO
SE ALMACENA EN 0Ch

3.5 Registros especiales INDF y FSR


3.6 Decfsz f,d ; btfsc f,b ; btfss f,b ; clrw
3.7 Simulación del ejercicio 3 con MPLAB Y con proteus.

Ejercicio 3b: Queremos comparar el dato del puerto de


entrada PORTA con el número 13 = 00001101. Tenemos 4
interruptores conectados en RA0,RA1,RA2 y RA3, y 8 leds en
PORTB, guárdalo en c:/misproyectos/ejercicio3b/
ejercicio3b.asm.

1. Si (PORTA) = 13  se encienden los 8 leds de PORTB


2. Si (PORTA) > 13  se activan los leds del nibble alto
3. Si (PORTA) < 13  se activan los leds del nibble bajo

3.1 Estudio de las instrucciones: comf f,d ; andlw k ; sublw k ;


subwf f,d
3.2 Directiva INCLUDE <P16F84A.INC>
3.3 Ddibujar el circuito electrónico. Realizar un flujograma para la
resolución del ejercicio, resolver el programa, compilación.
Simularlo  PROTEUS

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 6


Prácticas con el PIC 16F84A y otros similares
Ejercicio 3c: Limpiar la memoria RAM del PIC16F84A desde la posición
10h a la 20h a través de los registros especiales INDF y FSR.

4ª Experimentación Cómo hacer tablas de datos con el


microcontrolador PIC16F84A

Ejercicio4a: CIRCUITO COMBINACIONAL: FUNCIONAMIENTO DE UN


MONTACARGAS .-El sistema dispone de 3 finales de carrera A (RA2) M
(RA1) y B (RA0) instalados debajo de la plataforma del montacargas y
dispone de 3 indicadores luminosos de FUNCIONAMIENTO (RB2),
AVERIA (RB1) Y SOBRECARGA (RB0) cuyo funcionamiento se recoge en
la siguiente tabla:

; A M B FUNC AVE SOBRE


; RA2 RA1 RA0 RB2 RB1 RB0
; -- -- -- -- -- --
; 0 0 0 0 0 0
; 0 0 1 0 1 0
; 0 1 0 0 1 0
; 0 1 1 0 1 0
; 1 0 0 0 0 0
; 1 0 1 0 1 0
; 1 1 0 1 0 0
; 1 1 1 0 0 1

4.1 Llamada a subrutinas, la pila o Stack Pointer.


4.2 Llamada a una tabla de datos CALL y RETLW, la directiva DT
expresiones.
4.3 Las instrucciones: call, return, andlw k; addwf PCL,F .

4.4 Simulación del ejercicio4a con PROTEUS.

4.5 Grabación del programa en el PIC. Ejecución del programa

Ejercicio4b: Tenemos un PIC que trabaja a 4MHz, y se pide


que nos muestre en un display de 7 segmentos los números
del 0 al 9 a través del puertoB, metiéndolos desde el
puertoA con interruptores (RA0-RA3), usando las
instrucciones RETLW o DT expr1 ,expr2 ,expr3,
• Realiza el flujograma, esquema de conexiones de este
circuito y simúlalo con el programa PROTEUS

y guárdalo en :/misproyectos/ejercicio4b/ejercicio4b.asm.

4.6 Simulación del ejercicio4b con PROTEUS.


IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 7
Prácticas con el PIC 16F84A y otros similares

4.7 Grabación del programa en el PIC. Ejecución del programa

4.8 Ejercicio4b1.-Rehacer el programa utilizando la directiva DT.

CONVERSIÓN DE BINARIO NATURAL A BCD (BCD1.asm)


Ejercicio4c: Convertir un número binario de 8 bits en BCD, el resultado
se guarda en 3 posiciones de memoria llamadas Centenas, Decenas
(nibble alto de W) y Unidades (estarán en el nibble bajo de W). En el
puerto de salida PB mediante leds veremos Unidades y Decenas.
Primero genera el diagrama de flujo, después el programa y finalmente
simúlalo con Proteus, grábalo y móntalo prácticamente en el
entrenador pic Millenium y guárdalo en c:/misproyectos/ejercicio4c-
Bin-BCD/ejercicio4c.asm.

"Bin_a_BCD"

(Unidades) = Número a convertir


(Decenas) = 0
(Centenas) = 0

(Unidades) - 10 -> (W)

YES
¿(W) >=10?

(W) -> (Decenas) NO


Incrementa (Decenas)

Resultado se almacena en:


Unidades, Decenas
y centenas.
NO
¿(Decenas) >=10?

YES END

(Decenas) = 0
Incrementa (Centenas)

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 8


Prácticas con el PIC 16F84A y otros similares
4.9 Ejercicio4d: Convertir un número binario de 5 bits que entra en el
PORTA a través de unos interruptores a BCD, el resultado se
visualizará en PORTB. Así por ejemplo, si en el PORTA se lee”---
11001”, (25 en decimal) por el PORTB se visualizará “0010
0101”. Primero genera el diagrama de flujo, después el programa
metiendo una subrutina convert-BIN-BCD a través de un INCLUDE
BIN-BCD, visualiza para comprender el programa el fichero .lst
metiéndolo en tu memoria de word y finalmente simúlalo con
Proteus, grábalo y móntalo prácticamente en el entrenador pic
Millenium y guárdalo en c:/misproyectos/convert-BIN-
BCD/ejercicio4d.asm.

Última práctica.- Invéntate un ejercicio con el pic 16f84A que te


permita trabajar con todo lo que hemos vista hasta ahora, usando
una librería INCLUDE BIN_BCD , simulandolo con proteus y con PIC
Millennium.

5ª Experimentación Manipulación de tiempos con el


microcontrolador.

Ejercicio 5a: En un PIC16F84A que trabaja a 4 MHz se conecta un diodo


led a la línea RB3 de la puerta B. Se desea hacer parpadear al led cada
3,2 seg. Confeccionar el programa.

El cálculo de la carga del TMR0 se hará de forma simple


despreciando el tiempo que tardan en ejecutarse las instrucciones.
Guárdalo en c:/misproyectos/ejercicio5a/ejercicio5a.asm.

5.4 Estudio del funcionamiento del registro especial TIMER0,


OPTION, INTCON
5.5 Estudio de las interrupciones del PIC, Pila LIFO y Stack Pointer
5.6 Las directivas CBLOCK oxOC, ENDC y #DEFINE.

5.7 Simulación del ejercicio5a con PROTEUS.


5.8 Grabación del programa en el PIC. Ejecución del programa

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 9


Prácticas con el PIC 16F84A y otros similares

SUBRUTINA DE
ACTIVAR TMR0 Y ASIGNAR
RANGO 1:256 AL PRESCALER RETARDO
CONTA=100
CONFIGURAR LA PUERTA B
COMO SALIDA
t
BORRAR PUERTA B TMR0=128

ENCENDER LED RB7=1


NO
SUBRUTINA T0IF=1
DE RETARDO
SI
APAGAR LED CONTA=CONT

SUBRUTINA
DE RETARDO NO CONTA

SI

RETURN

5.9 Ejercicio5b: Mediante un pulsador (RA4) encendemos y


apagamos una lámpara (RB0) eliminando los rebotes que
genera el interruptor mecánico con un delay de 10msg.

5.10 Simulación del ejercicio5b con PROTEUS.

5.11 EJERCICIO 5c: CONTROL PARPADEO LED. El LED


conectado a RB0 parpadea de modo que está 500ms encendido
y otros 500ms apagado. Se controla por medio de un
interruptor conectado en RA4. Se usa el temporizador TMR0
para establecer la temporización.
(Se considera que el oscilador del PIC es de 4MHz).

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 10


Prácticas con el PIC 16F84A y otros similares

INICIO
SUBRUTINA
RETARDO
500us

PIC A USAR, LIBRERIA DEL PIC


PALABRA DE CONFIGURACIÓN
TMR0-->6
T0IF-->0

PRESCALER=1/2
NO
T0IF=1

YES
PORTB,3 -->1

RETARDO RETURN
500us

T=4Tosc*(256-Valor del TMRO)*Prescaler


T=4*250ns*(256-6)*2=500us
PORTB,3-->0
Debugger-->Stopwatch
511us

RETARDO
513us
500us

END

5.12 Ejercicio5d.- Señalización de una curva peligrosa. Se


trata de activar la señalización de una curva peligrosa mediante
8 luces encendidas secuencialmente permaneciendo cada una
0,25 seg encendidas. Se dispone de dos sensores uno para
activar la señalización a la entrada de la curva y otro para
desactivarla a la salida. Sensor de entrada en RA0 y de salida
en RA1. Las luces en puerta B.

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 11


Prácticas con el PIC 16F84A y otros similares

5.13 Ejercicio5f extra.- Por la línea 3 del puerto B (RB3) se


genera una onda cuadrada de 1 kHz, por tanto, cada
semiperiodo dura 500 µs. Los tiempos de temporización se
consiguen mediante la utilización del Timer 0 del PIC. A la línea
de salida se puede conectar un altavoz, tal como se indica en el

esquema correspondiente, con lo que se escuchará un pitido.

5.14 Un diodo led en la línea RB7 esta parpadeando continuamente, pasando


cada segundo por los estados de encendido y apagado.

Para controlar el retardo de 1 segundo para el parpadeo del led conectado en la línea
RB7, se generara una interrupción cada dicho tiempo por desbordamiento del TMRO.

Inicialmente se cargara al TMRO con el valor 1210, con lo que el desbordamiento se


producirá al cabo de 244 (256 – 12) impulsos aplicados a dicho temporizador. Dichos
impulsos serán los del oscilador interno Tos, pero divididos por 256 en el divisor de
frecuencia, con lo cual la temporización total será:

Temporización = 4 * Tosc * valor TMR0 * Rango Divisor Frecuencia

Temporización = 4 * 250ns * 244 * 256 = 62,4 ms

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 12


Prácticas con el PIC 16F84A y otros similares
Como no se alcanza el retardo de 1 segundo se emplea un contador auxiliar CONTA
que al cargarse con un valor de 1610 y decrementarse una unidad cada 62,4 ms, cuando
llegue a 0 conseguirá, aproximadamente, el tiempo buscado (62,4 ms * 16 ).

n el programa que resuelve el ejercicio se ha utilizado como instrucción clave la btfss


registro,n, que explora el valor del bit n de registro y si vale 1 sed salta la siguiente
instrucción brinco, o sea, el PC se incrementa en 2 unidades. La instrucción inversa es
btfsc registro,n, que realiza el brinco si el bit examinado vale 0.

5.15 Se trata de confeccionar un programa en lenguaje ensamblador para


un PIC16F84A, cuyo oscilador interno se halla controlado por un cristal
funcionando a 4 MHz. Conectados a las líneas RA0 y RA1 de la Puerta A
existen dos interrupciones, A y B, los cuales tienen que ser explorados
continuamente y reflejar su estado ( abiertos o cerrados ) sobre dos diodos
led, A y B, conectados a las líneas RB0 y RB1 de la Puerta B.

Además existe otro diodo led en la línea RB7 que esta parpadeando
continuamente, pasando cada segundo por los estados de encendido y apagado.

Para controlar el retardo de 1 segundo para el parpadeo del led conectado en la línea
RB7, se generara una interrupción cada dicho tiempo por desbordamiento del TMRO.

Inicialmente se cargara al TMRO con el valor 1210, con lo que el desbordamiento se


producirá al cabo de 244 (256 – 12) impulsos aplicados a dicho temporizador. Dichos
impulsos serán los del oscilador interno Tos, pero divididos por 256 en el divisor de
frecuencia, con lo cual la temporización total será:

Temporización = 4 * Tosc * valor TMR0 * Rango Divisor Frecuencia

Temporización = 4 * 250ns * 244 * 256 = 62,4 ms

Como no se alcanza el retardo de 1 segundo se emplea un contador auxiliar CONTA


que al cargarse con un valor de 1610 y decrementarse una unidad cada 62,4 ms, cuando
llegue a 0 conseguirá, aproximadamente, el tiempo buscado (62,4 ms * 16 ).

En el programa que resuelve el ejercicio se ha utilizado como instrucción clave la


btfss registro,n, que explora el valor del bit n de registro y si vale 1 sed salta la
siguiente instrucción brinco, o sea, el PC se incrementa en 2 unidades. La instrucción
inversa es btfsc registro,n, que realiza el brinco si el bit examinado vale 0.

5.16 Tenemos un PIC que trabaja a 4MHz se pide que nos muestre en un display
los números de 0 al 15 en hexadecimal. Usar RETLW
a) Metiendo los números desde el puerto A con interruptores (RA0-RA3)
b) Que vayan visualizándose poco a poco por el display (por ejemplo cada 3,2ms)
IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 13
Prácticas con el PIC 16F84A y otros similares

6.1 Visualiza en el módulo LCD LM016L el mensaje "Hola soy


……..". Utiliza la librería “LCD_4BIT.INC”.

IES Fernández Vallín Profesor.-Luis Arranz Arlanzón Ejercicios básicos 14

También podría gustarte