Está en la página 1de 18

ETN 801 – MICROPROCESADORES Semestre II/2023

Ing. Marcelo Ramírez M. 06/11/2023


Univ. Gonzalo Choque Q.
Microsex N° 17 – Programación de
microcontroladores en lenguaje PIC877.

OBJETIVOS.

 Introducción al manejo del computador entrenador de laboratorio de microcontroladores


QL200 – H-DRAGON, al que conoceremos cariñosamente como el Dragón.
 Familiaridad con el microcontrolador PIC 16F877 (o PIC877), cerebro del Dragón.
 Introducción al manejo del lenguaje de programación del PIC877.

COMPETENCIAS.

A la conclusión satisfactoria de la práctica, el estudiante estará bastante familiarizado con:

 el manejo del Dragón y


 algunas instrucciones del PIC877.

INTRODUCCIÓN.

Microcontrolador: PIC16F877A
Fabricante: MICROCHIP TECHNOLOGY INC.®

Características básicas del dispositivo.

1
Microsex N° 17 – Programación de Microcontroladores.

Fuente: DS39582B PIC16F87XA Data Sheet

Placa de desarrollo para pruebas de laboratorio: H-DRAGON QL200

(1) Cambio entre fuente de alimentación a través de USB o fuente de alimentación externa.
(2) Módulos LCD 128*64 y LCD 16*2
(3) Se proporciona 32 LED.
(4) Módulo de teclado matricial 4×4
(5) Se proporciona 8 botones.
(6) Potenciómetros para simular entrada de tensión analógica.
(7) Módulo de comunicación IIC (24C01/02 EEPROM)
(8) Módulo de comunicación SPI (93C46 EEPROM)
(9) Reloj de tiempo real DS1302. (La batería no está incluida)
(10) Circuito de reinicio.
(11) Conector ICD2 para clientes que quieran utilizarlo.
(12) Módulo de programación integrado (Comunicación USB)
(13) Chip socket y selección de reloj del sistema
(14) Pantalla LED digital con 6 visores de 7 segmentos
(15) Módulo receptor y descodificador de control remoto
(16) Termómetro digital DS1820 para medición de temperatura de -55°C a 125°C.
(17) Módulo experimental Beeper
(18) Comunicación RS-232 para conexión con PC o cualquier otro dispositivo con conector DB9

2
Microsex N° 17 – Programación de Microcontroladores.

(19) Conversor serial de voltaje DA (TLC5615) de 10 bits para aplicaciones en dispositivos de medición
y regulación.
(20) Todos los pines se extraen de los conectores IDC10 para que estén disponibles para futuras
conexiones.
(21) Módulo de controlador de motor paso a paso
(22) Módulo de lectura/escritura de tarjeta SD/MMC
(23) Chip PIC16F877A-I/P

Programas necesarios para la práctica de laboratorio.

- MPLAB X IDE, programa oficial de la empresa Microchip Technology Inc.® para el


desarrollo de programas de sus dispositivos en diferentes lenguajes de programación
(programa gratuito que se puede descargar desde la página oficial de Microchip
Technology Inc.®).

- XC8 Compiler, compilador complementario de MPLAB X IDE para microcontroladores


de 8 bits (gratuito igual que el anterior).

- QL-PROG, software para grabar el programa desarrollado y compilado en el


microcontrolador de la tarjeta de desarrollo HDRAGON QL200. En nuestro caso es el
microcontrolador PIC16F877A (gratuito en diferentes páginas de internet).

Conjunto de instrucciones en lenguaje de ensamblador.

3
Microsex N° 17 – Programación de Microcontroladores.

ACTIVIDADES.

 Recopile la documentación y las herramientas señaladas.

o Datasheet PIC16F87X – Microchip Technology Inc. ®


o MPLAB XC8 PIC Assembler User's Guide – Microchip Technology Inc. ®
o Section 29. Instruction Set – Microchip Technology Inc. ®
o Manual QL200 PIC
o Enlace de descarga de archivos e instaladores necesarios:
https://drive.google.com/drive/folders/1feQH1fjF8x9-LFy4Sgy7yDZJbi2ZOc21?usp=sharing

 Emplee la documentación publicada en el tablón de la clase.


 Estudie la documentación.
 Tome apuntes prácticos para el trabajo.

LABORATORIO.

Generar un nuevo proyecto:

o Abrir el programa MPLAB X IDE.

o En la pestaña File dar clic en “New Project”.

4
Microsex N° 17 – Programación de Microcontroladores.

o Seleccionar “Standalone Project” y dar clic en “Next”.

o En Device escribir “PIC16F877A” y en Tool seleccionar “Simulator”, luego dar clic en


“Next”.

o Seleccionar el compilador “pic-as (v2.36)” y dar clic en “Next”.

5
Microsex N° 17 – Programación de Microcontroladores.

o Colocar el Project Name por ejemplo “Parpadeo”, en Browse direccionar la carpeta donde
se guardará el proyecto y dar clic en “Finish”.

o En la pestaña “Projects” observaremos el proyecto creado.

Crear un nuevo programa en lenguaje de ensamblador.

o En el proyecto dar clic derecho en Source Files, en New seleccionar la opción


“AssemblyFile.asm”.

6
Microsex N° 17 – Programación de Microcontroladores.

o Si la opción “AssemblyFile.asm” NO aparece en la lista seleccione “Other”, luego clic en


la carpeta “Assembler” y en la parte derecha de la ventana seleccionar
“AssemblyFile.asm”. Luego clic en “Next”.

o En File Name colocar el nombre del programa (puede tener el mismo nombre del
proyecto), por ejemplo “Parpadeo”, luego clic en “Finish”.

o Con ese procedimiento se obtiene la ventana donde se procede a desarrollar el código


del programa.

7
Microsex N° 17 – Programación de Microcontroladores.

Codificación del programa – Parpadeo del led RB7 del puerto B.

PROCESSOR 16F877A ;Microcontrolador a utilizar


#include <xc.inc> ;Incluye al compilador XC8

; Configuración inicial del microcontrolador


CONFIG FOSC = XT ; Selección del oscilador (XT oscilador de 4MHz)
CONFIG WDTE = OFF ; Inhabilita Watchdog Timer
CONFIG PWRTE = OFF ; Inhabilita Power-up Timer
CONFIG BOREN = ON ; Habilita Brown-out Reset (Restablecimiento por caida de tensión)
CONFIG LVP = OFF ; Inhabilita Low-Voltage (referente a comunicación serial)
CONFIG CPD = OFF ; Inhabilita protección de datos de la EEPROM Memory
CONFIG WRT = OFF ; Inhabilita la protección de escritura de la Flash Program Memory
CONFIG CP = OFF ; Inhabilita la protección de código de la Flash Program Memory

;Reserva espacios de memoria


PSECT udata
R_CONTA: ;Nombre de la variable 1
DS 1 ;Reserva 1 byte para R_CONTA
R_CONTB: ;Nombre de la variable 2
DS 1 ;Reserva 1 byte para R_CONTB
R_CONTC: ;Nombre de la variable 3
DS 1 ;Reserva 1 byte para R_CONTC

;Espacio de memoria para el programa


PSECT PROGRAMA,class=CODE,delta=2

PROGRAMA: ;Generación de programa


PAGESEL PRINCIPAL ;Selecciona la página PRINCIPAL
GOTO PRINCIPAL
PSECT code ;"code" debe estar anotado con letras minúsculas

;Configuración inicial del microcontrolador


PRINCIPAL:
;En Bank 1 configuramos los puertos de entrada y salida
BCF STATUS,6 ;Selecciona Bank 1
BSF STATUS,5
MOVLW 0x06 ;Inhabilitamos los puertos analógicos
MOVWF ADCON1
MOVLW 0 ;Configura pueto B como salida
MOVWF TRISB
BCF STATUS,5 ;Selecciona Bank 0
MOVLW 0 ;Inicializa todo el puerto B en 0 (leds apagados)
MOVWF PORTB
BUCLE:
BSF PORTB,7 ;Enciende led RB7
CALL RETARDO_1S ;Retardo de 1 segundo
BCF PORTB,7 ;Apaga led RB7
CALL RETARDO_1S ;Retardo de 1 segundo
GOTO BUCLE ;Encierra proceso

8
Microsex N° 17 – Programación de Microcontroladores.

RETARDO_1S: ;Subrutina de retardo de 1 segundo


MOVLW 10 ;10 -> 1seg , 20 -> 2seg , etc
RETARDO_1DECIMA:
MOVWF R_CONTC R1DECIMA_BUCLEEXTERNO2:
MOVLW 100
MOVWF R_CONTB
R1DECIMA_BUCLEEXTERNO:
MOVLW 249
MOVWF R_CONTA
R1DECIMA_BUCLEINTERNO:
NOP
DECFSZ R_CONTA,1
GOTO R1DECIMA_BUCLEINTERNO
DECFSZ R_CONTB,1
GOTO R1DECIMA_BUCLEEXTERNO
DECFSZ R_CONTC,1
GOTO R1DECIMA_BUCLEEXTERNO2
RETURN ;Retorno de subrutina

END PROGRAMA ;Fin de programa

Compilar el código.

o En el menú de herramientas dar clic en “Clean and Build Main Project”.

o Si la compilación del programa fue satisfactoria observaremos el mensaje BUILD


SUCCESSFUL.

9
Microsex N° 17 – Programación de Microcontroladores.

Ubicación del archivo a grabar en el microcontrolador.

o Ingresando a la carpeta donde se creó el proyecto observaremos los siguientes archivos.

o Ingresamos al siguiente directorio de carpetas Parpadeo.X\dist\default\production y se


obtiene los siguientes archivos.

o El archivo “Parpadeo.X.production.hex” es el archivo que se grabará en el


microcontrolador PIC16F877A.

Grabar programa en el microcontrolador en la tarjeta de desarrollo H-DRAGON


QL200 con el programa QL-PROG.

o Abrir el programa QL_Progen.exe.

10
Microsex N° 17 – Programación de Microcontroladores.

o Seleccionar el puerto USB conectado y el chip 16F877A.

o Ingresar a “Options/Select Programmer” y seleccionar “QL200”.

o Dar clic en “Load” y buscar el archivo Parpadeo.X.production.hex.

11
Microsex N° 17 – Programación de Microcontroladores.

o Dar clic en “Program”.

INFORME.

 Establezca conclusiones.

El estudio de una carrera luego de haber superado las materias básicas se convierte, en parte,
en entrenamiento para la vida laboral. Desarrolla tu metodología de estudio pensando en la
información que recibes y lees como parte de un entrenamiento profesional. Sácale el gusto al
estudio.
MR

12
Microsex N° 17 – Programación de Microcontroladores.

APÉNDICE - PROGRAMAS ADICIONALES PARA PRACTICAR.

Programa para rotar un led a la derecha o a la izquierda pulsando RA0 o RA1.

PROCESSOR 16F877a
#include <xc.inc>
; PIC16F877A Configuration Bit Settings
; Assembly source line config statements

; CONFIG
CONFIG FOSC = XT ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)

;VARIABLES
PSECT udata

R_CONTA:
DS 1
R_CONTB:
DS 1
R_CONTC:
DS 1

;"delta flag" indica memoria de programa de 2Bytes


PSECT PROGRAMA,class=CODE,delta=2

PROGRAMA:
PAGESEL PRINCIPAL ;Selecciona la página PRINCIPAL
GOTO PRINCIPAL
PSECT code ;"code" debe estar anotado con letras minúsculas

PRINCIPAL:
BCF STATUS,6 ;Configuraciones de registros de BANK 1
BSF STATUS,5
MOVLW 0x06 ;Entradas analógicas desactivadas
MOVWF ADCON1
CLRF TRISB ;Configura puerto B como salida
BSF TRISA,0 ;Configura RA0 como entrada
BSF TRISA,1 ;Configura RA1 como entrada
BCF STATUS,5 ;Configuraciones de registros de BANK 0
MOVLW 0X01 ;Puerto B con un bit encendido
MOVWF PORTB ;Limpia bandera C
BCF STATUS,0

BUCLE:
BTFSS PORTA,0 ;Si se presiona RA0 rota a la izquierda
CALL ROTA_IZQUIERDA
BTFSS PORTA,1 ;Si se presiona RA1 rota a la derecha
CALL ROTA_DERECHA
GOTO BUCLE

13
Microsex N° 17 – Programación de Microcontroladores.

ROTA_DERECHA: ;Rotación a la derecha


CALL RETARDO_1ms
RRF PORTB,1
AUN_PRESIONA2: ;Espera a que se deje de presionar RA0
BTFSS PORTA,1
GOTO AUN_PRESIONA2
RETURN

ROTA_IZQUIERDA: ;Rotación a la izquierda


CALL RETARDO_1ms
RLF PORTB,1
AUN_PRESIONA1: ;Espera a que se deje de presionar RA1
BTFSS PORTA,0
GOTO AUN_PRESIONA1
RETURN

RETARDO_1ms: ;Retardo de 1 ms
MOVLW 1
RETARDO_1DECIMA:
MOVWF R_CONTC
R1DECIMA_BUCLEEXTERNO2:
MOVLW 100
MOVWF R_CONTB
R1DECIMA_BUCLEEXTERNO:
MOVLW 249
MOVWF R_CONTA
R1DECIMA_BUCLEINTERNO:
NOP
DECFSZ R_CONTA,1
GOTO R1DECIMA_BUCLEINTERNO
DECFSZ R_CONTB,1
GOTO R1DECIMA_BUCLEEXTERNO
DECFSZ R_CONTC,1
GOTO R1DECIMA_BUCLEEXTERNO2
RETURN

END PROGRAMA

14
Microsex N° 17 – Programación de Microcontroladores.

Programa que lee un teclado matricial 4x4 y muestra en número de tecla pulsada
en el puerto B.

PROCESSOR 16F877a
#include <xc.inc>
; PIC16F877A Configuration Bit Settings
; Assembly source line config statements

; CONFIG
CONFIG FOSC = XT ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = OFF ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = ON ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits
CONFIG CP = OFF ; Flash Program Memory Code Protection bit

;VARIABLES
PSECT udata

CONT1 EQU 0X20 ;Contador1 de la pausa en la dirección 0x20


CONT2 EQU 0X21 ;Contador2 de la pausa en la dirección 0x21
CONT3 EQU 0X22 ;Contador3 de la pausa en la dirección 0x22
TECLA EQU 0X23 ;Número de Tecla en la dirección 0x23

;"delta flag" indica que la memoria de programa usa 2 bytes


PSECT PROGRAMA,class=CODE,delta=2

PROGRAMA:
PAGESEL PRINCIPAL ;Selecciona la página PRINCIPAL
GOTO PRINCIPAL
PSECT code ;"code" debe estar anotado con letras minúsculas
PRINCIPAL:
BCF STATUS,6 ;Configuraciones de registros de BANK 1
BSF STATUS,5
MOVLW 0x06 ;Entradas analógicas desactivadas
MOVWF ADCON1
BCF TRISE,4 ;Puerto D configurado como I/O de propósito general
CLRF TRISB ;Puerto B como salida
CLRF TRISD ;Puerto D como salida
MOVLW 0XF0 ;RC0 a RC3 como salida y
MOVWF TRISC ;RC4 a RC7 como entrada
BCF STATUS,5 ;Configuraciones de registros de BANK 0
BCF STATUS,2 ;Limpia bandera Z
BCF STATUS,0 ;Limpia bandera C
CLRF PORTB ;Puerto B en cero (leds apagados)
CLRF PORTC ;Puerto C en cero
CLRF PORTD ;Puerto D en cero
BUCLE:
CLRF CONT1 ;Limpia el contador1
CLRF CONT2 ;Limpia el contador2
MOVLW 0X03
MOVWF CONT3 ;Carga valor para retardo aproximado de 0.5 seg
BCF PORTD,4 ;Limpia indicador de tecla pulsada
SIGFILA:
CLRF TECLA ;Tecla actual = 0
BCF STATUS,2 ;Limpia bandera Z
MOVLW 0X0E
MOVWF PORTC ;Saca 0 a la fila 1, para testearla

15
Microsex N° 17 – Programación de Microcontroladores.

LEETECL:
BTFSS PORTC,4 ;Chequea la columna 0 en busca de un '0'
GOTO NUMTECLA ;si encuentra un 0 muestra el número de tecla pulsada
INCF TECLA ;si no encuentra el 0, incrementa el número de tecla
BTFSS PORTC,5 ;Chequea la columna 1 en busca de un '0'
GOTO NUMTECLA ;si encuentra un 0 muestra el número de tecla pulsada

INCF TECLA ;si no encuentra el 0, incrementa el número de tecla


BTFSS PORTC,6 ;Chequea la columna 2 en busca de un '0'
GOTO NUMTECLA ;si encuentra un 0 muestra el número de tecla pulsada

INCF TECLA ;si no encuentra el 0, incrementa el número de tecla


BTFSS PORTC,7 ;Chequea la columna 3 en busca de un '0'
GOTO NUMTECLA ;si encuentra un 0 muestra el número de tecla pulsada

INCF TECLA ;si no encuentra el 0, incrementa el número de tecla


MOVLW 0X10 ;Carga W con el número de teclas +1
SUBWF TECLA,0 ;y lo compara con el valor actual de tecla
BTFSC STATUS,2 ;Si hemos llegado a Tecla+1 acabamos el ciclo de filas

GOTO SIGFILA ;y no se habrá pulsado ninguna tecla


BSF STATUS,0 ;Y ponemos a 1 el bit C para que la fila 1 pase a ser
RLF PORTC,1 ; un 1 en la rotación de pilas y el 0 se desplace
GOTO LEETECL
NUMTECLA:
MOVF TECLA,0
MOVWF PORTB ;Pasa el valor de la tecla a los LED's
BSF PORTD,4 ;y activa el indicador de tecla pulsada
PAUSA:
DECFSZ CONT1 ;Bucle anidado de 3 niveles
GOTO PAUSA ;que retarda aprox. 0.5 segundos
DECFSZ CONT2
GOTO PAUSA
DECFSZ CONT3
GOTO PAUSA
GOTO BUCLE

END PROGRAMA

16
Microsex N° 17 – Programación de Microcontroladores.

Programa que realiza la conversión análogo digital en el puerto RA0 y muestra el


valor en binario en los puertos B y C.

PROCESSOR 16F877a
#include <xc.inc>
; PIC16F877A Configuration Bit Settings
; Assembly source line config statements

; CONFIG
CONFIG FOSC = XT ; Oscillator Selection bits (HS oscillator)
CONFIG WDTE = OFF ; Watchdog Timer Enable bit (WDT disabled)
CONFIG PWRTE = ON ; Power-up Timer Enable bit (PWRT disabled)
CONFIG BOREN = OFF ; Brown-out Reset Enable bit (BOR enabled)
CONFIG LVP = OFF ; Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable
; bit (RB3 is digital I/O, HV on MCLR must be used for programming)
CONFIG CPD = OFF ; Data EEPROM Memory Code Protection bit
; (Data EEPROM code protection off)
CONFIG WRT = OFF ; Flash Program Memory Write Enable bits (Write protection off
; all program memory may be written to by EECON control)
CONFIG CP = OFF ; Flash Program Memory Code Protection bit (Code protection off)

;VARIABLES
PSECT udata

R_CONTA: ;Nombre de la variable 1


DS 1 ;Reserva 1 byte para R_CONTA
R_CONTB: ;Nombre de la variable 2
DS 1 ;Reserva 1 byte para R_CONTB
R_CONTC: ;Nombre de la variable 3
DS 1 ;Reserva 1 byte para R_CONTC

;"delta flag" indica que la memoria de programa usa 2 bytes


PSECT PROGRAMA,class=CODE,delta=2

PROGRAMA:
PAGESEL PRINCIPAL ;Selecciona la página PRINCIPAL
GOTO PRINCIPAL
PSECT code ;"code" debe estar anotado con letras minúsculas

PRINCIPAL:
BCF STATUS,6 ;Configuraciones de registros de BANK 1
BSF STATUS,5
CLRF TRISC ;Puerto C somo salida
CLRF TRISB ;Puerto B como salida
BSF TRISA,0 ;Puerto RA0 como entrada
MOVLW 0x8E ;ADRESH:ADRESL con justificación derecha, frec. de
MOVWF ADCON1 ;conversión a Fosc/32 y AN0 activado
BCF STATUS,5 ;Configuraciones de registros de BANK 0
MOVLW 0x81 ;Clock de conversión Fosc/32, Seleccionamos canal AN0,
MOVWF ADCON0 ;modo espera para iniciar la conversión y módulo ADC activado

BUCLE:
BSF ADCON0,2 ;Inicio de conversión
ESPERA:
BTFSC ADCON0,2 ;Terminó la conversión?
GOTO ESPERA ;No, espera
MOVF ADRESH,0 ;Byte alto del valor binario en puerto C
MOVWF PORTC
BSF STATUS,5 ;Cambio al Bank 1
MOVF ADRESL,0 ;Byte bajo del valor binario en puerto B

17
Microsex N° 17 – Programación de Microcontroladores.

BCF STATUS,5
MOVWF PORTB
CALL RETARDO_1ms ;Retardo de 1 ms
GOTO BUCLE

RETARDO_1ms: ;Subrutina de retardo de 1 ms


MOVLW 1
RETARDO_1DECIMA:
MOVWF R_CONTC
R1DECIMA_BUCLEEXTERNO2:
MOVLW 100
MOVWF R_CONTB R1
DECIMA_BUCLEEXTERNO:
MOVLW 249
MOVWF R_CONTA
R1DECIMA_BUCLEINTERNO:
NOP
DECFSZ R_CONTA,1
GOTO R1DECIMA_BUCLEINTERNO
DECFSZ R_CONTB,1
GOTO R1DECIMA_BUCLEEXTERNO
DECFSZ R_CONTC,1
GOTO R1DECIMA_BUCLEEXTERNO2
RETURN

END PROGRAMA

18

También podría gustarte