microprogramacion - interrupciones y timers

17
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

Upload: marco-calderon

Post on 13-Jun-2015

1.348 views

Category:

Education


0 download

DESCRIPTION

Microcontroladores y Microprogramacion - Interrupciones y timers

TRANSCRIPT

Page 1: Microprogramacion - Interrupciones y timers

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

Page 2: Microprogramacion - Interrupciones y timers

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

Page 3: Microprogramacion - Interrupciones y timers

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

Page 4: Microprogramacion - Interrupciones y timers

INGENIERIA ELECTRONICA

LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN

4

DIAGRAMA DE FLUJO:

CBLOCK 0X20

UNIDADES DECENAS

TEMPORIZADOR CONTADOR

CONTADOR1 CIFRA

ENDC

INICIO

BTFSS MODO

Page 5: Microprogramacion - Interrupciones y timers

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

Page 6: Microprogramacion - Interrupciones y timers

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

Page 7: Microprogramacion - Interrupciones y timers

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

Page 8: Microprogramacion - Interrupciones y timers

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

Page 9: Microprogramacion - Interrupciones y timers

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

Page 10: Microprogramacion - Interrupciones y timers

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

Page 11: Microprogramacion - Interrupciones y timers

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

Page 12: Microprogramacion - Interrupciones y timers

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

Page 13: Microprogramacion - Interrupciones y timers

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

Page 14: Microprogramacion - Interrupciones y timers

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

Page 15: Microprogramacion - Interrupciones y timers

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

Page 16: Microprogramacion - Interrupciones y timers

INGENIERIA ELECTRONICA

LABORATORIO DE MIICROCONTROLADORES Y MICROPROGRAMACIÓN

16

SIMULACION

Para poder obtener la simulación usamos la herramienta ISIS del software Proteus.

Page 17: Microprogramacion - Interrupciones y timers

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