Post on 13-Jun-2015
description
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
1
INTERRUPCIONES Y TIMERS
OBJETIVOS
Configurar el Timer del Pic para diferentes maneras.
Configurar lo puertos de I/O del microcontrolador.
Realizar programas, esquemas de simulación e implementar el hardware necesario que implique el uso del Timer del PIC en la solución de problematicas planteadas.
ESQUEMA A IMPLEMENTAR
ESPECIFICACIONES
Implementar un sistema, según la figura anterior. El sistema según la selección del MODO será un contador ascendente (de 0 a 99 y se repite) o será un temporizador regresivo (99 a 0 en intervalos de 1 segundo o 0.5 segundos según una selección de intervalo) una vez terminada la cuenta regresiva se enciende un led que indica que la cuenta a terminado.
Elaborar el algoritmo y el diagrama de flujo del programa que soluciona el problema planteado. Presentar una tabla donde se especifique los recursos empleados así como las variables, etiquetas, etc. Utilizadas en el programa. El
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
2
conteo y la temporización se hará empleando el Timer del PIC. Realizar y presentar los cálculos necesarios para conseguir los tiempos requeridos por el problema.
Codificar el programa que soluciona y comentar todas las líneas (obligatorio). Separar las partes del programa con comentarios pertinentes (obligatorio).
Simular el programa en MPLAB. Agregue las variables necesarias para poder observar los cambios de valor de las variables y verificar los resultados.
Implementar el circuito solución en proteus y quemar el programa desarrollado en el microcontrolador luego simular y verificar los resultados.
INDICACIONES
Elaborar un informe del trabajo desarrollado, la carpeta con el proyecto MPLAB, los archivos de simulación proteus y las conclusiones obtenidas. Presentar según la hora y fecha indicadas en formato digital ( un solo archivo comprimido formato zip o rar) TRAVE DEL AULA VIRTUAL (NO SE ACEPTARAN TRABAJOS ENVIADOS POR CORREO ELECTRONICO). Colocar este formato como caratula del informe consignando el número de grupo y los integrantes del mismo.
Fecha de presentación
DESARROLLO
ESPECIFICACIONES
Implementar un sistema.el sistema según la selección de modo será un contador
ascendente o descendente o será un temporizador regresivo del 99 al 0 en intervalos de
1seg y 0.5 seg según se seleccione una vez terminada la cuenta regresiva se encienda un
led
Para poder tener los retardos de 0.5 segundos usaremos retardos
RETARDO_0_5S
MOVLW D'8'
MOVWF CONTADOR
BUCLE_EXTERNO
MOVLW D'12' ; cargamos 12 am TMR0
MOVWF TMR0
BCF INTCON,T0IF ;limpiamos la banderita del TMR0
BUCLE_INTERNO
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
3
BTFSS INTCON,T0IF;testeamos si se a desbordado el TMR0
GOTO BUCLE_INTERNO
DECFSZ CONTADOR,1 ;decrementamos hasta q acabe de decrementar luego
salta
GOTO BUCLE_EXTERNO
Retardo de un segundo
RETARDO_1S
MOVLW D'16'
MOVWF CONTADOR
BUCLE_EXTERNO1
MOVLW D'12'
MOVWF TMR0
BCF INTCON,T0IF
BUCLE_INTERNO1
BTFSS INTCON,T0IF
GOTO BUCLE_INTERNO1
DECFSZ CONTADOR,1
GOTO BUCLE_EXTERNO1
GOTO REGRESION
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
4
DIAGRAMA DE FLUJO:
CBLOCK 0X20
UNIDADES DECENAS
TEMPORIZADOR CONTADOR
CONTADOR1 CIFRA
ENDC
INICIO
BTFSS MODO
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
5
REGRESION MOVLW D'1'
SUBWF TEMPORIZADOR,1
RETARDO_0_
5S
GOTO RETARDO_1S
MOVLW D'99'
MOVWF TEMPORIZADOR ;cargamos 99 en decimal al temporizador
BTFSS INTERVALO
CONTEO_DESC
CONTEO_ASC
MOVF TMR0,0
CALL VISUALIZACION
BTFSS TIPO_CONT
MOVLW 0X02
SUBWF TMR0,1
MOVLW D'99'
MOVWF TMR0
MOVF TMR0,0
CALL VISUALIZACION
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
6
VISUALIZACION
MOSTRAR
MOVF TMR0,0
CALL VISUALIZACION
GOTO TEST_SWITCH
CALL
RETARDO_20
MS
BTFSC SWITCH
MOVLW D'10'
SUBWF UNIDADES,0
DECIMAL_FIN BTFSS STATUS,C
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
7
IMPRIMIR
MOVF UNIDADES,0
MOVWF PORTC
MOVF DECENAS,0
MOVWF PORTD
RETURN
DECIMAL_RESTA10
MOVF UNIDADES,0
CALL COD_7SEG
MOVWF UNIDADES
MOVF DECENAS,0
CALL COD_7SEG
MOVWF DECENAS
BTFSS STATUS,C
MOVWF UNIDADES
INCF DECENAS,1
END
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
8
RECURSOS DEL PIC
Para elaborar el programa utilizamos varios registros del PIC para la configuración del
puerto A para que funcione acorde a nuestras necesidades
REGISTRO USO
STATUS Para direccionar los bancos
ADCON1 Para usar los pines del puerto A como digitales
PORTA Para configurar las entradas y salidas
TMR0 PARA USARLO COMO TEMPORIZADOR Y CONTADOR
Para poder hacer más entendible el programa también usamos etiquetas, es listado de
etiquetas usadas en el programa se muestra en la tabla
INSTRUCCIÓN USO
Btfsc f,b Si el numero b del registro f es “0” la instrucción que sigue a esta
se ignora
Btfss f,b Si el numero b del registro f es “1” la instrucción que sigue a esta
se ignora
Goto k Salto incondicional a la dirección k
Bcf f,b Pone a 1 el bit b
Bsf f,b Pone a 0 el bit b
Call k Salvaguarda la dirección de vuelta en la pila y después llama a la
subrutina situada en la dirección cargada el la PC
Movlw l Mueve el contenido de l en el registro de trabajo w
Movwf f Mueve el contenido del registro w al registro f
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
9
VARIABLES USO
UNIDADES
REGISTRO PARA GURADAR EL VALOR DE LAS UNIDADES DEL
DISLPAY
DECENAS
REGISTRO PARA GURADAR EL VALOR DE LAS DECENAS DEL
DISLPAY
TEMPORIZADOR
REGITRO PAR HACER LAS TEMPORIACIONES
CONTADOR
Para el bucle : BUCLE_INTERNO
CONTADOR1
Para el bucle : BUCLE_EXTERNO1
CIFRA
REGISTRO PARA GUARDAR UNA VARIABLE
Codificar el programa que soluciona el problema y comentar todas las líneas (obligatorias). Separar las partes del programa con comentarios pertinentes (obligatorio).
LIST P=16F877A
RADIX HEX
__CONFIG 3F31H
#INCLUDE P16F877A.INC
#DEFINE MODO PORTB,5
#DEFINE INTERVALO PORTA,1
#DEFINE TIPO_CONT PORTB,4
#DEFINE SWITCH PORTA,4
#DEFINE LED PORTA,0
CBLOCK 0X20
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
10
UNIDADES ; registro para las unidades
DECENAS ; registro para las decenas
TEMPORIZADOR ; registro para el temporizador
CONTADOR ;
CONTADOR1 ;
CIFRA ;
ENDC
ORG 0 ; vector de inicio
GOTO INICIO ;
ORG 4 ; dirección de interrupción
GOTO INTERRUPCION ;
ORG 5 ;
INICIO
BCF STATUS,RP0 ;seleccionamos el banco 0
BCF STATUS,RP1 ;
CLRF PORTA ; ponemos el PORTA a nivel bajo
BSF STATUS,RP0 ;accedemos al banco1
MOVLW 0X06 ; configuramos las entradas salidas como digitales
MOVWF ADCON1
MOVLW B'00010010' ; los bits 1 y 4 como entradas los demás como salidas
; para él puerto A
MOVWF TRISA
CLRF TRISC ; configuramos el portC y portD como salidas
CLRF TRISD
MOVLW B'11111111'
BCF STATUS,RP0
CLRF TMR0 ; limpiamos el timer 0
MOVLW B'10001000' ; configuramos los bits del registro INTCON GIE y RBIE
MOVWF INTCON
CLRF PORTB
BUCLE
GOTO BUCLE ; cargamos un bucle infinito
; configuramos la interrupción apagar LED testeamos modo si es cero saltamos a
; TMR0_CONT si es uno a TMRO_TEMP
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
11
INTERRUPCION
BCF LED ; LED APAGADO
BTFSS MODO ; testeamos MODO
GOTO TMR0_CONT ; si es 0 saltamos a TMR0_CONT
TMR0_TEM ; si es 1 ejecutamos
BSF STATUS,RP0 ;
MOVLW B'11010111' ; configuramos el registro option_reg
MOVWF OPTION_REG ; pull ap desabilitadas trabajamos con flanco
; Ascendente
; Divisor asignado al TMRO con presacalador de 256
BCF STATUS,RP0 ;
MOVLW D'99' ; cargamos el acumulador con 99
MOVWF TEMPORIZADOR ; cargamos 99 en decimal al temporizador
MOVLW B'10001000' ; configuramos el registro INTCON para las
; Interrupciones
MOVWF INTCON
CUENTA_REGRE
MOVF TEMPORIZADOR,0 ;
CALL VISUALIZACION
BTFSS INTERVALO ; testea a que intervalo debe de estar a un segundo o
; medio segundo
GOTO RETARDO_1S
; retardo de medio segundo donde se carga 8 en decimal al contador
RETARDO_0_5S
MOVLW D'8'
MOVWF CONTADOR
BUCLE_EXTERNO
MOVLW D'12' ; cargamos 12 am TMR0
MOVWF TMR0
BCF INTCON,T0IF ; limpiamos la banderita del TMR0
BUCLE_INTERNO
BTFSS INTCON,T0IF ; testeamos si se ha desbordado el TMR0
GOTO BUCLE_INTERNO
DECFSZ CONTADOR,1 ;decrementos hasta q acabe de decrementos luego
GOTO BUCLE_EXTERNO
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
12
; cuando termine de hacer la cuenta regresiva lo que debe hacer el microcontrolador es
;encender un LED
; así en bucle infinito a menos que salga con una interrupción
REGRESION
MOVLW D'1'
SUBWF TEMPORIZADOR,1
BTFSC STATUS,C
GOTO CUENTA_REGRE
BSF LED
PRENDE_LED
GOTO PRENDE_LED
; Retardo de un segundo que se obtiene cargando 16 en decimal al contador
; Luego 12 al TMR0 y esperar que desborde el TMR0
RETARDO_1S
MOVLW D'16'
MOVWF CONTADOR
BUCLE_EXTERNO1
MOVLW D'12'
MOVWF TMR0
BCF INTCON,T0IF
BUCLE_INTERNO1
BTFSS INTCON,T0IF
GOTO BUCLE_INTERNO1
DECFSZ CONTADOR,1
GOTO BUCLE_EXTERNO1
GOTO REGRESION
; En esta parte del programa se configura el microcontrolador para que funcione como
; Contador ascendente o descendente
; GIE y RBIE que será mediante el cual se haga la interrupción que es el bit 4 del PORTA
TMR0_CONT
BSF STATUS,RP0
MOVLW B'11111000'
MOVWF OPTION_REG
BCF STATUS,RP0
CLRF TMR0
BTFSS TIPO_CONT
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
13
GOTO CONTEO_DESC
; Mediante interruptor se observa que en el conteo ascendente primero se configura la
; Interrupción por
CONTEO_ASC
MOVF TMR0,0
CALL VISUALIZACION
MOVLW B'10001000'
MOVWF INTCON
TEST_SWITCH
BTFSC SWITCH
GOTO TEST_SWITCH
CALL RETARDO_20MS
BCF INTCON,T0IF
BTFSS INTCON,T0IF
GOTO MOSTRAR
MOVLW D'55'
MOVWF TMR0
GOTO TEST_SWITCH
MOSTRAR
MOVF TMR0,0
CALL VISUALIZACION
GOTO TEST_SWITCH
; el conteo descendente también se hace con el TMR0 y el bit 4 del portA
CONTEO_DESC
MOVLW D'99'
MOVWF TMR0
MOVF TMR0,0
CALL VISUALIZACION
MOVLW B'10001000'
MOVWF INTCON
TEST_SWITCH1
BTFSC SWITCH
GOTO TEST_SWITCH1
CALL RETARDO_20MS
BTFSC SWITCH
GOTO TEST_SWITCH1
SUELTA
BTFSS SWITCH ;testea porta,4
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
14
GOTO SUELTA ;testea si se suelta
MOVLW 0X02 ;carga el valor de 2 en W
SUBWF TMR0,1
MOVF TMR0,0
CALL VISUALIZACION
BTFSS STATUS,Z ;testea el bt Z
GOTO TEST_SWITCH1
MOVLW D'100'
MOVWF TMR0
GOTO TEST_SWITCH1
; Limpia todos los registro de unidades y decenas
VISUALIZACION
CLRF DECENAS ; limpiamos decenas y cargamos el contenido W en
; de unidades
MOVWF UNIDADES ;
DECIMAL_RESTA10
MOVLW D'10' ; restamos a unidades el valor de 10 en decimal
SUBWF UNIDADES,0
BTFSS STATUS,C ;testeamos el carry para saber si ya llego al 9
GOTO DECIMAL_FIN
; Si es así entonces incrementamos decenas
; lo mismo hacemos con las decenas
DECIMAL_INCREMENTADECENAS
MOVWF UNIDADES
INCF DECENAS,1
MOVLW D'10'
SUBWF DECENAS,0
BTFSS STATUS,C
GOTO DECIMAL_RESTA10
; carga el contenido de unidades en W
; llama la tabla de 7 segmentos lo mismo hace con las decenas
DECIMAL_FIN
MOVF UNIDADES,0
CALL COD_7SEG
MOVWF UNIDADES
MOVF DECENAS,0
CALL COD_7SEG
MOVWF DECENAS
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
15
; El contenido de unidades lo pasa al portC y el contenido de las decenas lo pasa a copiar a
; portD
IMPRIMIR
MOVF UNIDADES,0
MOVWF PORTC
MOVF DECENAS,0
MOVWF PORTD
RETURN
;la tabla del codigo de 7 segmentos
COD_7SEG
MOVWF CIFRA
MOVF CIFRA,0
ADDWF PCL,1
RETLW B'00111111'
RETLW B'00000110'
RETLW B'01011011'
RETLW B'01001111'
RETLW B'01100110'
RETLW B'01101101'
RETLW B'01111101'
RETLW B'00000111'
RETLW B'01111111'
RETLW B'01101111'
;un retardo de 20 ms
RETARDO_20MS
MOVLW D'20'
MOVWF CONTADOR1
BUCLE1
MOVLW D'249'
MOVWF CONTADOR
BUCLE2
NOP
DECFSZ CONTADOR,1
GOTO BUCLE2
DECFSZ CONTADOR1,1
GOTO BUCLE1
RETURN
END
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
16
SIMULACION
Para poder obtener la simulación usamos la herramienta ISIS del software Proteus.
INGENIERIA ELECTRONICA
LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN
17
CONCLUCIONES
Para producir los retardos en este laboratorio aprendimos a utilizar el TMR0 en este ejemplo fue para crear retardos de medio y un segundo
la interrupción por cambio de estado de los bits RB4:RB7 son muy útiles en el momento de utilizar varios interruptores que van a cambiar de estado
Para producir el conteo también utilizamos el TMR0 que es muy práctico ya que antes utilizamos rutinas para hacer el conteo y ocupado.
Aprendimos a configurar el Timer del Pic de distintas maneras.
Logramos configurar correctamente las I/O del microcontrolador a la ves de crear un programa usando Timer del PIC.
BIBLIOGRAFÍA (Consigne la bibliografía utilizada por usted para el desarrollo de la práctica).
- MICROCONTROLADORES PIC16F877 – DESARROLLO DE PROYECTOS 2da Edicion, ENRIQUE PALACIOS M. - DATASHEET PIC 16F877A - CURSO: MICROCONTROLADORES Y MICROPROGRAMACION –CLACES PRACTICAS. ING. WILDOR FERREL SERRUTO, 2011