Está en la página 1de 39

ELECTRÓNICA INTEGRADA DIGITAL

Microcontroladores (Opcional para Prueba Parcial 4)


Aprendizajes  Conocer y aplicar funciones
Espetados: del microcontrolador PIC
16F87X.
 Desarrollar habilidades de
programación sobre un
dispositivo electrónico.

I. INTRODUCCIÓN

Las siguientes actividades tienen como finalidad acercar al alumno al mundo de los
microcontroladores PIC16F87X, pertenecientes a la gama media de la familia PIC de
Microchip, mostrando las conexiones y algunos de los registros básicos de configuración
de los PIC16F87X. Estos registros permiten configurar y tomar decisiones a un
microcontrolador para efectuar tareas tan complejas como el control de un proceso
industrial, tal cómo un PLC, pero a un bajo costo de implementación.

Puede ser práctico, descrito al inicio de este documento; o simulado descrito al


final de este documento.

Asignación de Pines del PIC16F87X

Profesor: Nelson Flores Espinoza


Página 1 de 39
Configuración de Memoria de Datos:

BANCO 0 BANCO 1 BANCO 2 BANCO 3


INDF 00h INDF 80h INDF 100h INDF 180h
TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA 05h TRISA 85h   105h   185h
PORTB 06h TRISB 86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h   107h   187h
PORTD 08h TRISD 88h   108h   188h
PORTE 09h TRISE 89h   109h   189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh RESERVADO 18Eh
TMR1H 0Fh   8Fh EEADRH 10Fh RESERVADO 18Fh
T1CON 10h   90h 110h 190h
TMR2 11h SSPCON2 91h 111h 191h
T2CON PR2   92h 112h 192h
SSPBUF 13h SSPADD 93h 113h 193h
SSPCON 14h SSPSTAT 94h 114h 194h
CCPR1L 15h   95h 115h 195h
CCPR1H 16h   96h Registros de 116h 196h
CCP1CON 17h   97h 117h Registros de 197h
Propósito
Propósito
RCSTA 18h TXSTA 98h General 16 118h General 16 Bytes 198h
TXREG 19h SPBRG 99h Bytes 119h 199h
RCREG 1Ah   9Ah 11Ah 19Ah
CCPR2L 1Bh   9Bh 11Bh 19Bh
CCPR2H 1Ch   9Ch 11Ch 19Ch
CCP2CON 1Dh   9Dh 11Dh 19Dh
ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh
ADCON0 1Fh ADCON1 9Fh 11Fh 19Fh
Registros de Registros de
Registros de Registros de
Propósito Propósito
Propósito A0h 120h Propósito 1Ah
General 96 General 80
20h General 80 Bytes General 80 Bytes
Bytes Bytes
  EFh   16Fh   1EFh
  Mapeados con F0h Mapeados con 170h Mapeados con 1F0h
7Fh 70h-7Fh FFh 70h-7Fh 17Fh 70h-7Fh 1FFh

Profesor: Nelson Flores Espinoza


Página 2 de 39
Registros Usados en la Actividad:

Registro INTCON

GIE PEIE TOIE INTE RBIE TOIF INTF RBIF


Bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

 GIE: Global Interrup Enable o Habilitador general de interrupciones.


0: Deshabilita todas las interrupciones 1: Habilita las interrupciones
 PEIE: Peripheral Interrupt Enable bit, Habilitación de interrupciones no
controladas por este registro.
0: La deshabilita 1: La habilita
 T0IE: TMR0 Interrup Enable o Habilitación de interrupción del temporizador TMR0.
0: La deshabilita 1: La habilita
 INTE: INT Interrup Enable o Habilitación de la interrupción RB0/INT.
0: La deshabilita 1: La habilita
 RBIE: RBIF Interrup Enable o Habilitación de la interrupción por cambio en RB4-
RB7.
0: La deshabilita 1: La habilita
 TOIF: TMR0 Overflow Interrup Flag o Bandera de la interrupción por
desbordamiento del TMR0.
Se coloca en 1 cuando el TMR0 pasa de 0FFh a 00h; ésta debe ser puesta a 0 por
programa.
 INTF: INT Interrup Flag o Bandera de interrupción INT.
Se coloca en 1 cuando la interrupción INT ocurre; ésta debe ser puesta cero por
programa.
 RBIF: RB Port Change Interrup Flag o Bandera de interrupción por cambio en el
puerto B.
Se coloca en 1 cuando una de las entradas (RB4 a RB7) cambia; ésta debe ser
puesta a 0 por programa

II. Actividades Prácticas

Actividad 1: CIRCUITO BÁSICO DE UN PIC16F87X

Equipos requeridos

- 1 PIC16F874 (o PIC16F877) - 1 Resistencia de carbón ¼ W, 5%, 10 K


- 1 Protoboard de 840 Ptos, como mínimo. - 3 Resistencia de carbón ¼ W, 5%, 1 K
Se sugiere uno de 1580 puntos, como el - 1 Resistencia de carbón ¼ W, 5%, 100 
de la figura. - 2 resistencias de carbón ¼ W, 5%, 180 
- 4 switch pulsadores para circuito
- 1 Jack para circuito impreso
impreso.
- 1 caimán color rojo tamaño pequeño
- 2 led Rojo de 5mm.
- 1 caimán color negro tamaño pequeño
- 2 condensadores cerámicos de 33 pf.
- Alambre telefónico para realizar
- 1 diodo 1N4148.
conexiones.
- 1 condensador 0.33 uf.
- 1 Multitester
- 1 condensador 0.01 uf.
- 1 regulador de voltaje 78L05.
- 1 alicate Universal
- 1 cristal 4 MHz. - 1 alicate de punta (opcional)

Profesor: Nelson Flores Espinoza


Página 3 de 39
Figura 1: Materiales para Experiencia 1

Descripción y procedimiento del protoboard, cortar el extremo y pelarlo, tal


como muestran las figuras 2 y 3.
Realizar las conexiones descritas en los
siguientes pasos, los cuales conexionan el
circuito descrito en la figura 14, y entregar el
circuito al profesor en la clase siguiente a la
entrega de este documento. Se sugiere
seguir atentamente las siguientes
instrucciones.

1.- Pelar el extremo de un cable de


preferencia de color negro, usando el alicate
universal (idealmente, ayudarse de un alicate
de punta), luego medir el tamaño requerido
para conectar las columnas de más afuera Figura 2: Pelado de Cables

Profesor: Nelson Flores Espinoza


Página 4 de 39
Figura 3: Midiendo Tamaño Cable

2.- Conectar el trozo de cable para unir las


columnas exteriores y repetir el paso 1 con
otros trozos de cable del mismo color para
conectar entre si las columnas exteriores del
Figura 5: Conexión líneas de Tierra y Alimentación
lado derecho e izquierdo del protoboard,
como muestra la figura 4. Con este paso
4.- Conectar, en la esquina superior
hemos realizado la línea de tierra para
izquierda del protoboard, el regulador de
nuestro circuito.
voltaje 78L05, cuidando que la parte
plana del integrado quede mirando el
lado derecho del protoboard, dejando dos
filas libres, como muestra la figura 6.

Figura 4: Línea de tierra del circuito Figura 6: Instalación Regulador

3.- Repetir los pasos 1 y 2, con un cable de 5.- Conectar al pin 3 del 78L05 (el más
preferencia de color rojo, para realizar la cercano a la esquina) un extremo del
línea de alimentación de nuestro circuito, tal condensador de 0.33 uf y el otro extremo
como muestra la figura 5. de éste a la línea de tierra que

Profesor: Nelson Flores Espinoza


Página 5 de 39
realizamos anteriormente, no importa 12.- Ahora conectar el extremo del cable
cual sea el extremo conectado a tierra, con el caimán negro a la línea de tierra y
ya que este condensador no tiene el del caimán rojo al pin 3 del 78L05 y
polaridad. luego conectar el caimán rojo al extremo
6.- Conectar al pin 2 del 78L05 (el del posterior del Jack y el caimán negro al
medio) un cable, de preferencia de color terminal inferior del Jack. En este
negro y previamente ajustado a la momento hemos armado nuestra fuente
distancia requerida, a la línea de tierra de alimentación regulada para una salida
del circuito. de 5 Volts, a la cual podemos conectar
7.- Conectar al pin 1 del 78L05 (el pin cualquier fuente de alimentación con
que queda libre) un extremo del niveles desde 7 a 30 Volts (como por
condensador de 0.01 uf y el otro extremo ejemplo el eliminador de pilas de una
de éste a la línea de tierra. consola de video juego). El resultado de
8.- Conectar un extremo de un cable, de la conexión se muestra en la figura 8.
preferencia de color rojo, al pin 1 del
78L05 y el otro extremo a la línea de
alimentación.
9.- Quitar las fundas plásticas de los
caimanes.
10.- Soldar un cable, de color negro, de
unos cinco centímetros al extremo del Figura 8: Fuente Regulada de 5V

caimán, pelar el extremo y volver a


colocar la funda (color negro). 13.- Conectar el PIC16F87X (puede ser
11.- Repetir el paso 10, pero con un el 74 o el 77, dependiendo de la
cable de color naranjo y colocar disponibilidad y precio en el mercado
nuevamente la funda. El resultado de los local) cuidando de dañar los pines del
pasos anteriores se muestra en la figura dispositivo, tal como muestra la figura 9.
7.

Figura 7: Terminado cables de alimentación


Figura 9: Montaje del PIC16F87X

Profesor: Nelson Flores Espinoza


Página 6 de 39
14.- Conectar el circuito de Reset, mostrado integrado y el circuito de reset del dispositivo.
en el diagrama de la figura 10, al pin 1 del El montaje en el protoboard debe quedar
PIC, en caso de problemas de conexión con similar al mostrado en la figura 11.
el pulsador, revisar la nota del paso 19.

Figura 10: Conexionado circuitos de Reset y Oscilador

15.- Conectar el circuito oscilador, mostrado


en el diagrama de la figura 10 a los pines 13
y 14 del PIC, no hay que tener ningún
Figura 11: Montaje circuitos de Reset y Oscilador
cuidado especial al conectar los extremos del
oscilador a cristal y los condensadores, ya
18.- Conectar entre la línea de alimentación y
que no tienen polaridad.
los pines 33, 34 y 35 las resistencias de 1
16.- Conectar unos cables entre la línea de
K.
alimentación y los pines 11 y 32 del PIC, de
19.- Conectar de los mismos pines 33, 34 y
preferencia de color rojo.
35 un extremo del pulsador, a través de
17.- Conectar unos cables entre la línea de
cables (de preferencia color negro) entre los
tierra y los pines 12 y 31 del PIC, de
pines del PIC y del pulsador, y el otro
preferencia de color negro. En este momento
extremo conectarlo a la línea de tierra,
hemos realizado la configuración mínima
ayudado nuevamente por trozos de cable.
para que el PIC pueda funcionar, aún no
Las conexiones descritas en el paso 18 y 19
hemos conectado lo necesario para realizar
pueden ser apreciadas en la figura 12. En
la experiencia 2, sólo hemos realizado las
este momento hemos realizado la conexión
conexiones que permiten que el PIC se
de las entradas digitales (S1 y S2 en la figura
alimente, el circuito de oscilación que
14) que comandarán la operación del PIC y
configura la velocidad de procesamiento del
el pulsador de interrupción externa (INT).

Profesor: Nelson Flores Espinoza


Página 7 de 39
NOTA: En caso de que no queden bien sujetos los pulsadores en el protoboard, adaptar los pines
de los pulsadores con un alicate, cuidando de no cortar los pines.

Figura 12: Conexión de entradas digitales

20.- Conectar a los pines 19 y 20 un extremo de la resistencia de 180  y el extremo sobrante


conectarlo al pin positivo de un led, el pin negativo del led conectarlo a la línea de tierra. En este
momento hemos terminado de realizar la conexión necesaria para poder ejecutar la segunda parte
de esta guía, el circuito final debe ser similar al mostrado en la figura 13 y debe corresponder al
diagrama mostrado en la figura 14. Este diagrama muestra el circuito completo que hemos
conectado y lo ocuparemos para revisar si nuestras conexiones están correctamente realizadas.

Figura 13: Circuito Terminado

Profesor: Nelson Flores Espinoza


Página 8 de 39
Figura 14: Esquema circuital para la experiencia

21.- Con el diagrama de la figura 14 sólo 23.- ATENCIÓN: Antes de alimentar el


podemos ver si hemos armado circuito realizado mostrar las conexiones
correctamente los componentes, pero no realizadas en el protoboard al profesor para
podemos verificar si existe conexión que éste corrobore el armado del circuito
eléctrica entre ellos, es por esto que con el diagrama de la figura 14.
debemos verificar nuestras conexiones con
un multímetro ajustado para medir
continuidad en todas las conexiones que
hemos realizado.
22.- Para poder comprobar que hemos
instalado en forma adecuada los
pulsadores debemos conectar el tester en
continuidad entre los terminales y al
presionar estos debemos escuchar un
“beep”

Profesor: Nelson Flores Espinoza


Página 9 de 39
Guía de autoevaluación para el alumno

1.- ¿Cómo podemos saber si conectamos correctamente el diodo, qué deberíamos medir y en
qué puntos? (Ayuda: Ocupe el tester en continuidad y revise la polaridad del diodo) ¿Ha
realizado esta comprobación en el circuito realizado?
2.- ¿Cómo podemos comprobar las conexiones de las líneas de alimentación y tierra, usando
un multitester? (Ayuda: ¿Dónde se debe colocar el selector del tester?) ¿En qué puntos
debo realizar las mediciones? (Ayuda: Compruebe las conexiones por líneas de
alimentación y tierra) ¿Qué resultados ha obtenido al realizar las mediciones en el
protoboard?
3.- Analizando el circuito de Reset ¿Qué función cumplirán las resistencias? (Ayuda: Analice
el caso de presionar el botón de Reset y lo que sucedería si no existiesen los resistores)
4.- ¿Podrá funcionar el PIC sin el circuito de Oscilación? ¿Por qué? (Ayuda: Analice lo visto en
clases y en la bibliografía anexa, referente al tiempo de ejecución de una instrucción
respecto a la frecuencia de operación)
5.- ¿Cuáles son los componentes esenciales para que el PIC16F87X pueda funcionar?
(Ayuda: revise los diagramas esquemáticos vistos en la actividad)

Profesor: Nelson Flores Espinoza


Página 10 de 39
Actividad 2: IDENTIFICACIÓN DE REGISTROS ESPECIALES

Equipos requeridos

- Circuito realizado en la actividad 1.


- 1 conversor AC-DC con salida mínima de 9V (Fuente de alimentación o Eliminador de Pila)
- 1 computador PC
- Multitester

Descripción y procedimiento

Utilizando el circuito realizado en la experiencia anterior, grabar un PIC16F87X, comprobar el


funcionamiento del circuito y cambiar ciertos parámetros para cambiar la operación del sistema
siguiendo los siguientes pasos.

1.- Instalar el software MPLAB, licencia freeware, el cual se puede obtener directamente
desde la página de Microchip http://www.microchip.com
2.- Ejecutar el programa MPLAB.exe
3.- En el menú File, seleccionar New (ver figura 15), para abrir una nueva hoja de trabajo

Figura 15: Abrir nueva hoja de trabajo


4.- Ahora se ha creado una hoja de trabajo sin título, como muestra la figura 16.

Profesor: Nelson Flores Espinoza


Página 11 de 39
Figura 16: Hoja de trabajo sin título

5.- Ahora, debemos ir a las propiedades de la hoja creada, en Edit\Properties, tal como
muestra la figura 17

Figura 17: Propiedades de la hoja de trabajo

6.- Habilitar número de líneas en el Editor de Opciones y presionar Aceptar, como muestra la
figura 18

Profesor: Nelson Flores Espinoza


Página 12 de 39
Figura 18: Editor de Opciones

7.- Ahora, en la esquina superior izquierda del documento sin título debe aparecer un número
1, indicando que es la primera línea. Maximizar el documento, como muestra la figura 19.

Figura 19: Maximizando el área de trabajo

8.- Guardar el documento, seleccionando File\Save As… con el nombre Apliacion1.asm en


una carpeta de fácil acceso como muestra la figura 20. Si no se sigue esta instrucción, al
compilar el programa puede ocurrir el siguiente errror “Source file path exceeds 62
characters (Ruta elegida)”, el cual significa que la ruta contiene muchos caracteres
(nombre muy largo) y por ello no se puede acceder.

Profesor: Nelson Flores Espinoza


Página 13 de 39
Figura 20: Pantalla Guardar Como…

9.- En el área de trabajo escribir el siguiente programa y cada cierto tiempo guardar el trabajo
realizado. Importante: Respete las tabulaciones y las mayúsculas, ya que de lo contrario
podrá obtener errores y el programa no compilará.

;Programa ejemplo para entender el funcionamiento y las conexiones de un PIC16F87X


;Este programa enciende un led por RD1, solo si presionan al mismo tiempo los pulsadores
;conectados a RB1 y RB2. Además cambia el estado de un led conectado al pin RD0, a través
;de una interrupción externa conectada al pin RB0/INT

list p=16f877
include <p16f877.inc>
__config (_WDT_OFF & _XT_OSC & _BODEN_OFF)
errorlevel -302 ;ignorar errores al almacenar en banco 1

;*******************************************************
;Definición de Variables
;*******************************************************
cblock 0x20
PDel0
PDel1
endc

org 0x0 ;Indica al ensamblador la dirección de memoria de la sig. instrucción


goto Inicio ;Va a la dirección de memoria marcada por "Inicio

;*******************************************************
;Vector de Interrupciones
;*******************************************************
org 0x4 ;Vector de Interrupciones
Interrupción btfss INTCON,1 ;es interrupción INT?
retfie ;retorna de interrupción y GIE=1
btfss PORTD,0 ;probar estado actual del LED
goto Prender ;va a encender el LED
Apagar bcf PORTD,0 ;apaga el LED
goto Espera
Prender bsf PORTD,0 ;enciende el LED
Espera btfss PORTB,0 ;espera a que se suelte el pulsador
goto Espera
bcf INTCON,1 ;borra bandera INT
retfie ;retorna de interrupción y GIE=1

;*******************************************************
;Configuración de registros
;*******************************************************

Profesor: Nelson Flores Espinoza


Página 14 de 39
Inicio org 0x50
bcf STATUS,RP1 ;selección del banco 1
bsf STATUS,RP0
clrf TRISE ; selecciona PORTD como I/O digitales
clrf TRISD ;selecciona PORTD como salida
movlw b'00000111'
movwf TRISB ;Configura RB0, RB1 y RB2 como entradas
bcf OPTION_REG,6 ;selección del flanco de bajada en el pin INT
bcf STATUS,RP0 ;selección de banco 0
clrf PORTD ;Apaga LED's
clrf PORTB ;Inicializa entradas
bsf INTCON,4 ;activar interrupción INT

;*******************************************************
;Programa Principal
;*******************************************************
ppal bsf INTCON,7 ;Habilitar interrupciones globales
compara btfsc PORTB,1 ;comprueba si RB1 se ha presionado
goto compara ;sino, vuelve a comparar
btfsc PORTB,2 ;Comprueba si RB2 se ha presionado, sólo si RB1 sigue presionado
goto compara
bsf PORTD,1 ;Enciende LED del RD1
call DEMORA ;Lo mantiene encendido por 1/2 segundo
bcf PORTD,1 ;Apaga el LED
goto ppal ;Repite el programa hasta que se produzca interrupción

;-------------------------------------------------------------
; Rutina de temporización para 500 ms (1/2 segundo)
;-------------------------------------------------------------
DEMORA movlw .239 ; 1 set numero de repetición (B)
movwf PDel0 ;1|
PLoop1 movlw .232 ; 1 set numero de repetición (A)
movwf PDel1 ;1|
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
;-------------------------------------------------------------
End ;Fin del programa

10.-Guardar el código seleccionando File\Save o presionando el diskette en la barra de


herramientas.
11.-Ahora crearemos un proyecto para compilar nuestra programa (esto se refiere a crear un
archivo .hex el cual se cargará al PIC16F87X para que éste efectúe la operación
programada). Para esto seleccionar Project\Project Wizard… como muestra la figura 21

Profesor: Nelson Flores Espinoza


Página 15 de 39
Figura 21: Creación de un Proyecto

12.-Al ingresar al Project Wizard, presionar el botón Siguente > (Ver figura 22)

Figura 22: Pantalla Project Wizard

13.-Seleccionar el dispositivo comprado (puede ser el PIC16F874 o el PIC16F877) y presionar


Siguiente> (Ver figura 23)

Profesor: Nelson Flores Espinoza


Página 16 de 39
Figura 23: Seleccionando el Dispositivo

14.-Cuando se ejecuta MPLAB por primera vez, generalmente no está configurado la librería
MPLIB, que es la que nos permite compilar nuestra aplicación, ver figura 24. Si este no es
su caso saltar al paso 16.

Figura 24: Configuración del Proyecto

15.-Buscar el directorio MPASM Suite a través del botón Browser… (ver figura 25)

Profesor: Nelson Flores Espinoza


Página 17 de 39
Figura 25: Buscando el directorio de la librería

16.-Cuando la librería está configurada correctamente (ver figura 26), presionar el botón
Siguiente>

Figura 267: Configuración del Proyecto

17.-Nombrar el proyecto como “Aplicacion 1” y seleccionar como directorio el mismo donde


guardamos nuestro código ASM.

Profesor: Nelson Flores Espinoza


Página 18 de 39
Figura 27: Nombre y ruta del proyecto

18.-Seleccionar el archivo ASM previamente realizado, en nuestro caso el archivo


Aplicacion1.asm, y hacer doble clic en él o presionar el botón Add>>, luego presionar
Siguiente> (Ver figura 28)

Figura 28: Selección del archivo ASM

19.-Revisar la pantalla para ver que se ha seleccionado correctamente la configuración de


nuestro proyecto y presionar el botón Finalizar

Profesor: Nelson Flores Espinoza


Página 19 de 39
Figura 29: Finalizando el Proyecto

20.-Al finalizar el proyecto perderemos nuestra área de trabajo (el archivo Aplicacion1.asm),
pero quedará incluido en el proyecto, como muestra la figura 30. Para ver el archivo se
debe hacer doble clic sobre el nombre del archivo ASM.

Figura 30: Archivos del Proyecto

21.-Ahora debemos compilar el proyecto seleccionando Proyect\Build All

Profesor: Nelson Flores Espinoza


Página 20 de 39
Figura 31: Compilación del Proyecto

22.-Mientras compila aparece una pantalla de fondo, llamada de Salida (Output), donde
obtendremos información del resultado de la compilación y sobre ésta aparecerá una
pantalla con una barra de progreso de la compilación.

Figura 32: Compilación de un Proyecto

Profesor: Nelson Flores Espinoza


Página 21 de 39
23.-Cuando la compilación sea exitosa la barra de progreso mostrará un 100% y se mantendrá
en verde por un pequeño periodo de tiempo y en la pantalla de Salida aparecerá un
mensaje como el de la figura 33

Figura 33: Pantalla de Salida

24.-Cuando sucede un error en la compilación y la barra de estado llega al 100%, esta cambia
de color verde a color rojo, la pantalla de salida muestra cuál es el error y en que línea del
código se encuentra el error (ver figura 34)

Profesor: Nelson Flores Espinoza


Página 22 de 39
Figura 34: Pantalla de Salida con error en la compilación

25.-En este caso el error se encuentra en la línea 60 y corresponde a un error de escritura, ya


que el opcode (comando o instrucción en lenguaje ASM) goto se escribió como gito, lo que
produjo el error. Para solucionarlo se debe corregir la palabra y guardar el código, luego
debemos compilar nuevamente hasta que no haya errores.
26.-Salvar el espacio de trabajo seleccionando File\Save WorkSpace.
27.-Guardar TODOS los archivos generados por el programa en la carpeta de trabajo, en algún
dispositivo para el transporte de archivos, como diskette, CD o pendrive.
28.-ATENCIÓN: Para grabar el PIC por primera vez, debe presentar el circuito de la
experiencia uno para revisión y seguir las instrucciones (vea indicación 39), metodológicas
y de seguridad, dadas por el profesor para realizar la grabación del microcontrolador,
además debe llevar el proyecto guardado en el dispositivo para el transporte de archivos.
Luego seguir con el paso 28, sólo cuando el profesor lo autorice.
29.-Copiar los archivos en una carpeta en el computador donde se ha dispuesto el grabador
PICSTART Plus de Microchip, por parte del profesor. La carpeta debe tener el mismo
nombre y ruta que la creada por Ud. en el computador donde realizó el proyecto. Si un
alumno ya efectuó esta operación la carpeta no estará vacía, por lo tanto, seleccione
Reemplazar todo al momento de copiar los archivos.
30.-Ejecutar el programa MPLAB.exe
31.-Abrir el proyecto seleccionando Project\Open y seleccionar el archivo Apliacion1.mcp

Figura 35: Pantalla Abrir Proyecto

32.-Seleccionar el grabador o programador PICSTART Plus en el menú Programmer\Select


Programmer\PICSTAR Plus (ver figura 36)

Profesor: Nelson Flores Espinoza


Página 23 de 39
Figura 36: Selección del Programador

33.-Habilitar el programador.
34.-Sacar el microcontrolador del protoboard ayudado de algo con punta, como las puntas de
prueba de un multitester, haciendo palanca de ambos lados cuidando de no dañar el
dispositivo y de no tocar los pines del microcontrolador.
35.-Montar el microcontrolador en el PICSTART Plus, cuidando de colocar el pin 1 del
dispositivo en la esquina superior izquierda del sócalo de conexión, tal como explicará el
profesor.
36.-Levantar la palanca del sócalo para presionar el PIC.
37.-En el software seleccionar Programmer\Erase Flash Device, para borrar la memoria del
dispositivo y luego seleccionar Programmer\Program para comenzar la programación, se
enciende un led amarillo en el PICSTART Plus, que indica que está transfiriendo el
programa a la memoria del Microcontrolador. Cuando se apaga la luz ha terminado la
grabación.
38.-Verificar la programación seleccionando Programmer\Verify
39.-Bajar la palanca, retirar el microcontrolador del PICSTART Plus y volver a colocarlo en el
circuito cuidando de que quede en la posición en la que estaba.
40.-ATENCIÓN: Llamar al profesor para que corrobore las conexiones antes de alimentar el
circuito.
41.-Ajustar un multitester como voltímetro y ajustar una fuente del laboratorio entre 9 y 12 volts
(mayor que siete y menor que 30 Volts) u ocupar su conversor AC/DC y conectar el Jack al
plug de la fuente, los terminales del Jack conectarlos a través de los caimanes, siguiendo
las instrucciones dadas por el profesor.
42.-Alimentar el circuito a través de los caimanes.
43.-Presionar el pulsador conectado a RB0 y corroborar el cambio de estado del led conectado
a RD0, primero se enciende al presionarlo y cuando ya está encendido se apaga.
44.-Presionar al mismo tiempo los pulsadores conectados a los pines RB1 y RB2, comprobar
que se enciende el led conectado a RD1 durante ½ segundo. Notar además que cuando
sólo se presiona uno de los dos pulsadores el led se mantiene apagado.
45.-Apagar el circuito.

Profesor: Nelson Flores Espinoza


Página 24 de 39
46.-En su puesto de trabajo abrir su proyecto, colocar un punto y coma (;) en la instrucción de
las línea 56 que corresponde al label (etiqueta) ppal y agregar (presionando enter) una
línea con el código “clrf INTCON ;Desactiva Interrupciones externas” , es decir debe
colocar lo que se muestra en rojo:

53 ;*******************************************************
54 ;Programa Principal
55 ;*******************************************************
56 ppal ;bsf INTCON,7 ;Habilitar interrupciones globales
57 clrf INTCON ;Desactiva Interrupciones externas
58 compara btfsc PORTB,1 ;comprueba si RB1 se ha presionado

47.-En el código del programa deberíamos obtener lo mostrado en la figura 37.


48.-Compilar el programa, grabar los archivos, llevar su microcontrolador al puesto donde se
ubica el PICSTART Plus y grabar el cambio realizado en su PIC.
49.-Instalar nuevamente el PIC y probar el funcionamiento. Como hemos desactivado las
interrupciones veremos que al presionar el pulsador conectado al RB0, el led conectado a
RD0 no se encenderá más.
50.-Terminada las preguntas de autoevaluación entregar la guía al profesor para que éste
evalué su actividad.

Guía de autoevaluación para el alumno

1.- ¿Cómo podemos saber si no hemos cometido un error de “tipeo” en el programa? (Ayuda:
Compilar el código y ver la pantalla de salida)
2.- Al ensayar el circuito ¿Obtuve los resultados esperados? Si le respuesta es no, ¿Por qué?
3.- ¿Qué función cumplió el registro INTCON en el funcionamiento del circuito? (Ayuda:
Comprare la operación antes y después del cambio efectuado en el código.)
4.- Si un circuito basado en microcontroladores no funciona ¿El error sólo se puede presentar
en la construcción del circuito?
5.- Si se enfrentara a la situación de la pregunta 6, ¿Qué haría Ud. para solucionar el
problema?

Profesor: Nelson Flores Espinoza


Página 25 de 39
Figura 37: Cambio en la configuración

III. Actividades Simuladas

Actividad 1: Creación de programa en MPLAB-IDE

A continuación, se presentarán ejemplos de programas para desarrollar con el microcontrolador


PIC16F84 y simularlos en el programa proteus. Antes de revisar los programas, descargue
MPLAB-IDE en su computadora, de la forma descrita al comienzo de este documento. Este
programa le servirá para compilar los programas y obtener el archivo HEX que necesitará cargar
en el microcontrolador de simulación de Proteus.

Los pasos generales para que funcione su proyecto son:


1. Crear una carpeta del proyecto.
2. Usar MPLAB-IDE para crear su proyecto y compilarlo (traducir a lenguaje de máquina)
usando los programas que le presento.
3. Crear su circuito en Proteus.
4. Cargar el programa compilado (.HEX) en el microcontrolador.
5. Ejecutar la simulación y puesta en marcha del proyecto.

Como orientación revise el siguiente link, que le describe paso a paso cómo ejecutar cada
indicación de los puntos anteriores. El link está cargado en el Aula virtual unidad 4.

https://www.youtube.com/watch?v=c8sonb4jgf8

Profesor: Nelson Flores Espinoza


Página 26 de 39
ELECTRÓNICA INTEGRADA DIGITAL

Programa 1 - Siete Segmentos

En MPLAB-IDE copie tal cual se presenta el programa, respetando comas, mayúsculas, etc.

;Etiqueta op-code operando Comentario


include p16f84a.inc ;Incluye todos los Equs de los PC
org 0
goto INICIO

;Rutina de Encendido del display


TABLA addwf PCL,1 ;Suma W al PCL
PCL_0 retlw 0x3f ;b’0011 1111’ = 0
PCL_1 retlw 0x06 ;b’0000 0110’ = 1
PCL_2 retlw 0x5b ;b’0101 1011’ = 2
PCL_3 retlw 0x4f ;b’0100 1111’ = 3
PCL_4 retlw 0x66 ;b’0110 0110’ = 4
PCL_5 retlw 0x6d ;b’0110 1101’ = 5
PCL_6 retlw 0x7d ;b’0111 1101’ = 6
PCL_7 retlw 0x07 ;b’0000 0111’ = 7
PCL_8 retlw 0x7f ;b’0111 1111’ = 8
PCL_9 retlw 0x67 ;b’0110 0111’ = 9

INICIO bsf STATUS,RP0 ;Selecta Banco 1


movlw 0xff ;Selecta como entrada
movwf TRISA ;el TRISA
clrf TRISB ;TRISB como salida
bcf STATUS,RP0 ;Selecta Banco 0
SALTO movf PORTA,0 ;Guarda en W el valor del PORTA
call TABLA ;Llama a subrutina TABLA
movwf PORTB ;Saca el valor del registro W
goto SALTO ;Vuelve a mirar la entrada PORTA

end

Profesor: Nelson Flores Espinoza


Página 27 de 39
En Proteus arme el siguiente circuito:

Profesor: Nelson Flores Espinoza


Página 28 de 39
ELECTRÓNICA INTEGRADA DIGITAL

Programa 2 – Control de un motor DC

En MPLAB-IDE copie tal cual se presenta el programa, respetando comas, mayúsculas, etc.

;Programa que enciende RB0 si el bit 0 del PORTA, es decir, RA0=1 y se apaga solo si
RA1=1
;Etiqueta Op-code Operando Comentario
org 0
bsf 0x03,5 ;Selecta Banco 1
bcf 0x03,6
bcf 0x06,0 ;Deja RB0 como salida
bsf 0x05,0 ;Deja el Bit 0 del PORTA como entrada
bsf 0x05,1 ;Deja el Bit 1 del PORTA como entrada
bcf 0x03,5 ;Selecta Banco 0
clrf 0x06 ;Apaga el PORTB
SALTO btfsc 0x05,0 ;Pregunta si el bit 0 del PORTA (Encendido) es
cero
NO_CERO goto ENCIEN ;Si no es cero (Vale 1) va a ENCIEN
ES_CERO btfsc 0x05,1 ;Si es cero, pregunta por bit 1 del PORTA
(Apagado)
ES_UNO goto APAGA ;Si es uno salta a APAGA
goto SALTO ;Si es cero Vuelve a preguntar por el
encendido
ENCIEN bsf 0x06,0 ;Enciende el bit 0 del PORTB
goto SALTO
APAGA bcf 0x06,0 ;Apaga el bit 0 del PORTB
goto SALTO
end

Profesor: Nelson Flores Espinoza


Página 29 de 39
En Proteus arme el siguiente circuito:

Profesor: Nelson Flores Espinoza


Página 30 de 39
ELECTRÓNICA INTEGRADA DIGITAL

Programa 3 – Programando un LCD

En MPLAB-IDE copie tal cual se presenta el programa, respetando comas, mayúsculas, etc.

;Programa del LCD, donde RA0 = DATA/Instruccion, RA1 = E y PORTB están los datos

;Etiqueta Op-code Operando Comentario


include p16f84a.inc
E equ 0x01 ;Enable es el bit 1 del PORTA
RS equ 0x00 ;RS es el bit 0 del PORTA
PDel0 equ 0x0c
org 0
bsf STATUS,5 ;Selecta Banco 1
bcf STATUS,6

clrf TRISB ;Deja al PORTB como salida


movlw b'11111100' ;Deja RA0 y RA1 (RS y E) como salida
movwf TRISA

bcf STATUS,5 ;Selecta Banco 0

movlw b'00111100' ;Selecta 8 bits (DL=1); 2 Lineas (N=1)


call INSTRUC ;Font 5x7 (F = 1) 0 0 1 DL N F x x

movlw b'00001100' ;Selecta Display on (D=1); Cursor off (C=0)


call INSTRUC ;Cursor Fijo (B=0) 0 0 0 1 D C B

movlw b'00000110' ;Selecta Incremento (I/D=1) y no


call INSTRUC ;desplaza (SH=0) 0 0 0 0 0 1 I/D SH

movlw b'00000001' ;Limpia el LCD


call INSTRUC

movlw b'10000101' ;Selecta el dato a partir de la posición cinco


call INSTRUC ;1 a a a a a a a

movlw a'M' ;Envia al Display la letra


call DATAS ;M

movlw a'i' ;Envia al Display la letra


call DATAS ;i

movlw a'c' ;Envia al Display la letra

Profesor: Nelson Flores Espinoza


Página 31 de 39
call DATAS ;c

movlw a'r' ;Envia al Display la letra


call DATAS ;r

movlw a'o' ;Envia al Display la letra


call DATAS ;o
movlw a' ' ;Envia al Display la letra
call DATAS ;espacio

movlw a'G' ;Envia al Display la letra


call DATAS ;G

movlw a'o' ;Envia al Display la letra


call DATAS ;o

movlw a'o' ;Envia al Display la letra


call DATAS ;o

movlw a'd' ;Envia al Display la letra


call DATAS ;d

movlw b'11000000' ;Cursor en posición 1 de 2da linea


call INSTRUC

movlw a'V' ;Envia al Display la letra


call DATAS ;V

movlw a'a' ;Envia al Display la letra


call DATAS ;a

movlw a'l' ;Envia al Display la letra


call DATAS ;l
movlw a'o' ;Envia al Display la letra
call DATAS ;o

movlw a'r' ;Envia al Display la letra


call DATAS ;r

movlw a'=' ;Envia al Display la letra


call DATAS ;=

PASO btfsc PORTA,4 ;Chequea si el bit 4 del PORTA es cero


NO goto UNO
CERO movlw b'11000111' ;Cursor en posición 7 de 2da linea
call INSTRUC

Profesor: Nelson Flores Espinoza


Página 32 de 39
movlw a'0' ;Envia al Display
call DATAS ;un CERO
goto PASO

UNO movlw b'11000111' ;Cursor en posición 7 de 2da linea


call INSTRUC

movlw a'1' ;Envia al Display


call DATAS ;un UNO
goto PASO

INSTRUC bcf PORTA,RS ;Pone RS =0, para quedar como intruccion


goto INGRESA

DATAS bsf PORTA,RS ;Pone RS =1, para quedar como DATO

INGRESA bsf PORTA,E ;Pone Enable =1, para habilitar el ingreso (E=1)
movwf PORTB ;Envia el valor de la INTRUUCION/DATO al PORTB
call DEMORA ;Espera un tiempo mayor a

bcf PORTA,E ;Pone Enable =o, para el ingreso (E=0)


call DEMORA ;Espera un tiempo mayor a 450 nano segundo
return

DEMORA movlw .248 ; 1 set numero de repeticion


movwf PDel0 ;1|
PLoop0 clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
end

Profesor: Nelson Flores Espinoza


Página 33 de 39
En Proteus arme el siguiente circuito:

Profesor: Nelson Flores Espinoza


Página 34 de 39
ELECTRÓNICA INTEGRADA DIGITAL

Programa 4 – Teclado Matricial

En MPLAB-IDE copie tal cual se presenta el programa, respetando comas, mayúsculas, etc.

; TECLADO MATRICIAL 7 8 9 A
; 4 5 6 B
; 1 2 3 C
; F 0 e d

;Etiqueta Op-code Operando comentario

include p16f84a.inc
TECLA equ 0x0c
PDel0 equ 0x0d
PDel1 equ 0x0e

;Inicializa la puerta B para el teclado. RB0 a RB3 como salidas y RB4-RB7


;como entradas con resistencias de polarizacion habilitadas.
KB_Port BSF STATUS,RP0 ;Selecta Banco 1
MOVLW b'11110000' ;PB4-7 Entrada
MOVWF TRISB ;PB0-3 salidas
clrf TRISA ;Puerto A salida
bcf OPTION_REG,7 ;Habilita

;R de polarizacion en entradas RB4 a RB7


BCF STATUS,RP0 ;Selecta Banco 0.
clrf PORTA ;Limpia PORTA

KB_Scan ;Escanea el teclado

FILA0 MOVLW b'11111110' ;Saca 0 a la


MOVWF PORTB ;primera fila
NOP ; estabiliza señal.
Cheq_Col1 movlw 0x07 ;Borra Tecla y
movwf TECLA ;prepara Tecla para primer código.
btfss PORTB,4 ;Chequea sí 1ra columna = 0
goto antirebotes ;Opcional.

Profesor: Nelson Flores Espinoza


Página 35 de 39
Cheq_Col2 movlw 0x08 ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,5 ;Cheq columna2 = 0
GOTO antirebotes ;Sale si se ha

Cheq_Col3
movlw 0x09 ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,6 ;Chequea columna3 = 0
GOTO antirebotes ;Sale si se pulso

Cheq_Col4 movlw 0x0A ;Borra Tecla y


movwf TECLA ;prepara Tecla
btfss PORTB,7 ;Cheq columna4 =0
GOTO antirebotes ;Sale si se ha pulsado tecla.

FILA_1
movlw b'11111101' ;Saca 0 2n 2da fila
movwf PORTB ;de la Puerta B
nop ; estabiliza señal.
Che_Col1 movlw 0x04 ;Borra Tecla y
movwf TECLA ;prepara primer código
btfss PORTB,4 ;Cheq columna1 = 0
GOTO antirebotes
Che_Col2 movlw 0x05 ;Borra Tecla y
movwf TECLA ;prepara 2do código.
btfss PORTB,5 ;Cheq columna2 = 0
GOTO antirebotes
che_col3 movlw 0x06 ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,6 ;Cheq columna3 = 0
GOTO antirebotes
che_col4 movlw 0x0B ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,7 ;Cheq columna4 = 0
GOTO antirebotes

FILA2 movlw b'11111011' ;Saca 0 por fila 3


movwf PORTB ;de la Puerta B
NOP ; estabiliza la señal.
Chq_Col1 movlw 0x01 ;Borra Tecla y
movwf TECLA ;prepara Tecla

Profesor: Nelson Flores Espinoza


Página 36 de 39
btfss PORTB,4 ;Cheq columna1 = 0
GOTO antirebotes
Chq_Col2 movlw 0x02 ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,5 ;Cheq columna2 = 0
GOTO antirebotes
Chq_Col3 movlw 0x03 ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,6 ;Cheq columna3 = 0
GOTO antirebotes
Chq_Col4 movlw 0x0C ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,7 ;Cheq columna7 = 0
GOTO antirebotes

FILA_3 movlw b'11110111' ;Saca 0 a la cuarta fila


movwf PORTB ;de la Puerta B
NOP ;Estabiliza de señal.
Cheq_Co1 movlw 0x0f ;Borra Tecla y
movwf TECLA ;prepara Tecla
btfss PORTB,4 ;Cheq si columna1 = 0
goto antirebotes ;Sale si ha pulsado tecla.
Cheq_Co2 movlw 0x00 ;Borra Tecla y
movwf TECLA ;prepara Tecla para código.
BTFSS PORTB,5 ;Cheq si columna2 = 0
GOTO antirebotes
Cheq_Co3 movlw 0x0e ;Borra Tecla y
movwf TECLA ;prepara Tecla para código.
btfss PORTB,6 ;Cheq si columna3 = 0
GOTO antirebotes
Cheq_Co4 movlw 0x0d ;Borra Tecla y
movwf TECLA ;prepara Tecla para código.
btfss PORTB,7 ;Cheq si columna4 = 0
goto antirebotes
goto KB_Scan

antirebotes ;Espera a que la tecla sea soltada


Espera1 call DEMORA
btfss PORTB,4 ;Si suelta tecla col 1
goto Espera1 ;vuelve a esperar.
call DEMORA
Espera2 btfss PORTB,5 ;Si suelta tecla col 2

Profesor: Nelson Flores Espinoza


Página 37 de 39
goto Espera2 ;vuelve a esperar.
call DEMORA
Espera3 btfss PORTB,6 ;Si suelta la tecla col 3
goto Espera3 ;vuelve a esperar.
call DEMORA
Espera4 btfss PORTB,7 ;Si suelta la tecla col4
goto Espera4 ;vuelve a esperar.
call DEMORA

SALIDA movf TECLA,W ;pone en w la variable


movwf PORTA ;Saca el valor en PORTA
goto KB_Scan

DEMORA movlw .8 ;1 set numero de repeticion


movwf PDel0 ;1|
PLoop1 movlw .249 ;Fija numero repeticion
movwf PDel1 ;1|
PLoop2 clrwdt ; 1 clear watchdog
clrwdt ; 1 ciclo delay
decfsz PDel1,1 ; tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel0,1 ;
goto PLoop1 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.

End

Profesor: Nelson Flores Espinoza


Página 38 de 39
En Proteus arme el siguiente circuito:

Profesor: Nelson Flores Espinoza


Página 39 de 39

También podría gustarte