Académique Documents
Professionnel Documents
Culture Documents
Objetivo General: Diseñar un sistema para presentar distintas secuencias de encendido de Leds por medio de
switches/pulsantes.
Objetivos Específicos:
Implementar tres secuencias de visualización distintas en un conjunto de 8 leds. Los dispositivos de visualización
led estarán conectados en un único puerto del uC.
Implementar un control por medio de micro-switch para modificar la exhibición de las distintas secuencias de
visualización.
Regular la velocidad de exhibición (temporización) de las distintas secuencias por medio de pulsadores de
Incremento/Decremento.
Sustento teórico:
Software Mplab
MPLAB-X es un entorno integrado de desarrollo IDE, del inglés Integrated Development Environment, lo que básicamente
significa que es un software para programar y desarrollar aplicaciones, en este caso, completamente enfocadas a los
microcontroladores de Microchip. [1]
Permite programar aplicaciones con diferentes compiladores y lenguajes, principalmente fue intencionado para C y C++
con los compiladores XC, aunque de todas maneras mantiene la misma utilidad como IDE al programar en Assembler
(MPASMWIN) u otras variantes del C como Hi-Tec C e incluso GCC o CSS. [1]
Software Proteus
Es una aplicación para la ejecución de proyectos de construcción de equipos electrónicos en todas sus etapas: diseño del
esquema electrónico, programación del software, construcción de la placa de circuito impreso, simulación de todo el
conjunto, depuración de errores, documentación y construcción. [2]
Si se desea simular el funcionamiento electrónico del circuito, el funcionamiento lógico del programa cargado en el
microprocesador, construir la placa de circuito impreso, documentar todo el proceso y obtener vistas en tres dimensiones,
Proteus le ofrece una herramienta completa a un precio competitivo. [2]
PIC 16F877A
Es un microcontrolador de Microchip Technology fabricado en tecnología CMOS, su consumo de potencia es muy bajo y
además es completamente estático (esto quiere decir que el reloj puede detenerse y los datos de memoria no se pierden)
capaz de realizar diferentes actividades que requieran del procesamiento de datos digitales y del control y comunicación
digital de diferentes dispositivos. [3]
Interrupciones
Habilitar el uso de las interrupciones con el PIC se utiliza el registro INTCON, cada microntrolador PIC tiene su registro
INTCON, que es un registro legible y escribible, que contiene varios bits de habilitación y bandera para el desbordamiento
de registro TMR0, cambio de puerto RB0 y externo. [3]
Retardos
Es un tiempo en el cual el microcontrolador queda en espera antes de ejecutar una función específica.
Procedimiento:
1. Realizar detalladamente el diagrama de flujo de la práctica.
2. Realizar el programa mediante el software de MPLAB mediante ensamblador.
3. Entender la configuración para el PIC 16F877A, interrupciones y manejo de puertos.
4. Realizar el circuito en Proteus para la simulación implementando el código de MPLAB.
5. Implementar el circuito para el verificar el funcionamiento.
6. Presentación de la practica 1.
Registro de Resultados:
Calculo de retardos
DIAGRAMAS DE FLUJO
Código de programación:
;**********************************
; Universidad: Politecnica Salesiana
; Progama: Secuencia de Leds
; PIC: PIC16F877A
; Fecha de Inicio: 1/7/2019
; Nombre: Ignacio Castro
; **********************************
LIST P=16F877A
INCLUDE P16F877A.INC
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF &
_CP_OFF
ORG 0
GOTO INICIO
ORG 4
GOTO INTERRU
;*********************************
; Programa Principal
;*********************************
INICIO CLRF PORTB
CLRF PORTC
BSF STATUS,RP0
MOVLW B'00111110'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
BCF STATUS,RP0
MOVLW B'10001000' ;habilitamos las interrupciones no enmascaradas(GIE)
MOVWF INTCON ;habilitamos la interrupcion por cambio(RBIE)
MOVLW .6
MOVWF i
;*********************************
; Switch
;*********************************
SWITCH1 BTFSC PORTB,1 ;testea el bit si es 0 no ejecuta
GOTO SWITCH2
GOTO SEC1
SWITCH2 BTFSC PORTB,2
GOTO SWITCH3
GOTO SEC2
SWITCH3 BTFSC PORTB,3
GOTO SWITCH1
GOTO SEC3
;*********************************
; Secuencia
;*********************************
SEC1 MOVLW B'00000011'
MOVWF PORTC
CALL RET
MOVLW B'00001100'
MOVWF PORTC
CALL RET
MOVLW B'00110000'
MOVWF PORTC
CALL RET
MOVLW B'11000000'
MOVWF PORTC
CALL RET
MOVLW B'00000000'
MOVWF PORTC
CALL RET
GOTO SWITCH1
SEC2 MOVLW B'10000001'
MOVWF PORTC
CALL RET
MOVLW B'01000010'
MOVWF PORTC
CALL RET
MOVLW B'00100100'
MOVWF PORTC
CALL RET
MOVLW B'00011000'
MOVWF PORTC
CALL RET
MOVLW B'00000000'
MOVWF PORTC
CALL RET
GOTO SWITCH2
SEC3 MOVLW B'11000000'
MOVWF PORTC
CALL RET
MOVLW B'00110000'
MOVWF PORTC
CALL RET
MOVLW B'00001100'
MOVWF PORTC
CALL RET
MOVLW B'00000011'
MOVWF PORTC
CALL RET
MOVLW B'00000000'
MOVWF PORTC
CALL RET
GOTO SWITCH3
;********************************
; Retardo
;********************************
RET MOVF i,W ;copia el valor de i en w 1
MOVWF DELAY1 ;y se pasa a delay1 1
BUCLE1 MOVLW c ;250 i
MOVWF DELAY2 ; i
BUCLE2 MOVLW h ;132 i*c
MOVWF DELAY3 ; i*c
BUCLE3 DECFSZ DELAY3,F ;Decremento y si es (i*c*h)(i*c)
GOTO BUCLE3 ;Disitinto de cero sigo repitiendo 2(i*c*h)-2(i*c)
DECFSZ DELAY2,F ; (i*c)+i
GOTO BUCLE2 ; 2(i*c)-2*i
DECFSZ DELAY1,F ; i+1
GOTO BUCLE1 ; 2*i-2
RETURN ;Final de la subrutina retardo 2
;*************************
; Interrupciones
;*************************
INTERRU CALL Delay
BTFSC PORTB,4 ;testea el bit si es 0 no ejecuta
GOTO INCRE
BTFSC PORTB,5 ;testea el bit si es 0 no ejecuta
GOTO DECRE
GOTO TERMINA
INCRE INCF i,F ;increments i en 1
MOVLW .11 ;movemos el acumulador w el valor de 11
SUBWF i,W ;se resta 7-11 (f-W) y lo guarda en w
BTFSS STATUS,Z ;si z=1 salta la siguiente intruccion
GOTO TERMINA
MOVLW .10 ;movemos el acumulador w el valor de 10
MOVWF i
GOTO TERMINA
DECRE DECF i,F ;decrementa el pulso en 1
MOVLW .0 ;movemos el acumulador w el valor de 0
SUBWF i,W ;resta w a f(f-w)
BTFSS STATUS,Z ;si z=1 salta la siguiente intruccion
GOTO TERMINA
MOVLW .1 ;movemos el acumulador w el valor de 1
MOVWF i ;llevamos el valor del acumulador a i
GOTO TERMINA
TERMINA BCF INTCON,RBIF ;ponemos en 0 señalizador de cambio RB4-RB7
RETFIE
;************************
; Anti rebote
;************************
Delay
movlw 0x9E
movwf d1
movlw 0x10
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
goto $+1
nop
return
END
Conclusiones y Recomendaciones:
o Conocer la configuración del PIC16F877A a programar ya que no todas los PIC son iguales, además del poderse
moverse en los bancos para la configuración de los puertos y registros que son necesarios en el programa.
o Usar el software Proteus ayuda para verificar el funcionamiento del programa debido a que facilita el poder hacer
la comprobación instantáneamente o mediante el mismo software de programación de Mplab que tiene la opción
de simulación mediante los estímulos, también para verificar el tiempo de retardo con el StopWatch.
o Cuando se requiera hacer la grabación del programa al PIC revisar que el archivo tipo. Hex este bien configurado y
se pase con todas las propiedades para evitar errores de funcionamiento.
o Cuando se desee pasar el programa al Micro Procesador conocer el funcionamiento del grabador del PIC ya que
estos programas también permiten la configuración del PIC antes del grabado como el caso de que tipo de oscilador
se va utilizar o si se desea borrar el PIC antes de grabar el nuevo programa.
Bibliografía:
[1] Software MPLAB: https://pwmlabs.wordpress.com/2016/09/06/programacion-en-assembler-con-mplab-x/
[2] Software Proteus: http://www.hubor-proteus.com/proteus-pcb/proteus-pcb/230 como_trabajar_con_proteus.html
[3] Características del PIC 16F877A: http://ww1.microchip.com/downloads/en/devicedoc/39582b.pdf