0% encontró este documento útil (0 votos)
22 vistas11 páginas

Interrupciones en PIC16F84A: Contador y LED

Cargado por

rolochat
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
22 vistas11 páginas

Interrupciones en PIC16F84A: Contador y LED

Cargado por

rolochat
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

; Descripción: Cada vez que presiona el pulsador conectado al pin RB0/INT

; se incrementa un contador que es visualizado en el módulo LCD.

; La lectura del pulsador se hará mediante interrupciones.

LIST P=16F84A ;Procesador PIC16f84A

INCLUDE <P16F84A.INC> ;Incluye las librerias

; CONFIGURACION DEL PIC16F84A

__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

; Definimos donde se conectara el pulsador

#DEFINE Pulsador PORTB,0

CBLOCK 0x0C

Contador ; El contador a visualizar.

ENDC

;CODIGO

ORG 0

GOTO INICIO

ORG 4 ;Vector de la interrupción

GOTO ServicioInterrupcion

INICIO

CALL LCD_Inicializa

BSF STATUS,RP0 ;Accedemos al Banco 1

BSF Pulsador ;El puerto RB0 se coloca como entrada

BCF OPTION_REG,NOT_RBPU ;Activamos las resistencias Pull-Up

BCF OPTION_REG,INTEDG ;Interrupción INT con flanco descendente

BCF STATUS,RP0 ;Accedemos al Banco 0

CLRF Contador ;Inicia el contador y lo visualiza

CALL VisualizaContador

1
MOVLW B'10010000' ; Habilita la interrupción INT y GIE

MOVWF INTCON

START

SLEEP ;El micro se pone en bajo consumo esperando

GOTO START ;las interrupciones

; Subrutina "Servicio Interrupción" ---------------------------------------------

ServicioInterrupcion

CALL Retardo_20ms ;Espera 20ms

BTFSC Pulsador ;¿Se pulso el interruptor?

GOTO FinInterrupcion ;No, era un rebote. Va a Fin

INCF Contador,F ;Si, incrementa el contador

VisualizaContador

CALL LCD_Linea1 ;Y se visualiza

MOVF Contador,W

CALL BIN_a_BCD

CALL LCD_Byte

FinInterrupcion

BCF INTCON,INTF ;Limpia Flag de reconocimiento (INTF)

RETFIE ;Retorna y habilita GIE = 1

INCLUDE <E:\PIC16F84A\Librerias\RETARDOS.INC>

INCLUDE <E:\PIC16F84A\Librerias\LCD.INC>

INCLUDE <E:\PIC16F84A\Librerias\BIN_BCD.INC>

END

2
; Descripción: Cada vez que presiona el pulsador conectado al pin RB0/INT

;se enciende y apaga un led, además se mostrara un mensaje en cada pulsación

LIST P=16F84A ; Procesador PIC16f84A

INCLUDE <P16F84A.INC> ; Incluye las librerías

; CONFIGURACION DEL PIC16F84A

__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

; Definimos donde se conectara el pulsador

#DEFINE Pulsador PORTB,0

#DEFINE LED PORTB,1

CBLOCK 0x0C

Activador ; Hará los cambios en el código

ENDC

;CODIGO

ORG 0

GOTO INICIO

ORG 4 ; Vector de la interrupción

GOTO ServicioInterrupcion

INICIO

CALL LCD_Inicializa

BSF STATUS,RP0 ;Accedemos al Banco 1

BSF Pulsador ;El puerto RB0 se coloca como entrada

BCF LED ;RB1 como salida

BCF OPTION_REG,NOT_RBPU ;Activamos las resistencias Pull-Up

BCF OPTION_REG,INTEDG ;Interrupción INT con flanco descendente

BCF STATUS,RP0 ;Accedemos al Banco 0

CLRF Activador

3
MOVLW B'10010000' ;Habilita la interrupción INT y GIE

MOVWF INTCON

START

CALL LCD_Linea1

MOVLW Mensaje_Predeterminado

BTFSC Activador,0

MOVLW Mensaje_Secundario

CALL LCD_Mensaje

CALL LCD_Linea2

MOVLW Mensaje_SegundaLinea

CALL LCD_Mensaje

CALL Retardo_200ms

CALL LCD_Linea2

BTFSC Activador,0

CALL LCD_LineaEnBlanco

CALL Retardo_200ms

GOTO START

; Subrutina "ServicioInterrupcion" ------------------------------------------------------

; Rutina predeterminada por MICROCHIP

CBLOCK

Guarda_W

Guarda_STATUS

Guarda_R_ContA

Guarda_R_ContB

ENDC

ServicioInterrupcion ; Conmuta el valor "Intermitencia",

movwf Guarda_W ; Guarda W y STATUS.

swapf STATUS,W ; Ya que "movf STATUS,W", corrompe el bit Z.

movwf Guarda_STATUS

4
bcf STATUS,RP0 ; Para asegurarse que trabaja con el banco 0.

movf R_ContA,W ; Guarda los registros utilizados en esta

movwf Guarda_R_ContA ; subrutina y también en la principal.

movf R_ContB,W

movwf Guarda_R_ContB

;Aca comienza el código que deseamos que haga cuando aparece la interrupción

CALL Retardo_20ms

BTFSC Pulsador

GOTO FinInterrupcion

COMF Activador,F

BTFSC LED

GOTO APAGADO

BSF LED

GOTO FinInterrupcion

APAGADO

BCF LED

GOTO FinInterrupcion

; Hasta acá es nuestro código

; Rutina predeterminada por MICROCHIP

FinInterrupcion

swapf Guarda_STATUS,W ; Restaura el STATUS.

movwf STATUS

swapf Guarda_W,F ; Restaura W como estaba antes de producirse

swapf Guarda_W,W ; interrupción.

movf Guarda_R_ContA,W ; Restaura los registros utilizados en esta

movwf R_ContA ; subrutina y también en la principal.

movf Guarda_R_ContB,W

movwf R_ContB

bcf INTCON,INTF

retfie

5
; "Mensajes" ----------------------------------------------------------------------------

Mensajes

ADDWF PCL,F

Mensaje_SegundaLinea

DT " Wels Theory", 0x00

Mensaje_Secundario

DT " Suscribete!! =D ", 0x00

Mensaje_Predeterminado

DT " Tutorial 12 INT", 0x00

INCLUDE <E:\PIC16F84A\Librerias\RETARDOS.INC>

INCLUDE <E:\PIC16F84A\Librerias\LCD.INC>

INCLUDE <E:\PIC16F84A\Librerias\BIN_BCD.INC>

INCLUDE <E:\PIC16F84A\Librerias\LCD_Mensaje.INC>

END

6
; Descripción: Los pines RB6 y RB7 están conectados a dos pulsadores,

; cada vez que son presionados producen una interrupción enviando diferentes

; mensajes a la LCD.

List P=16F84A ; Procesador PIC16f84A

#include "p16f84a.inc" ;Incluye las librerias

; CONFIGURACION DEL PIC16F84A

__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

; Definimos Variables

CBLOCK 0x0C

ENDC

; Variables definidas

#DEFINE Pulsador1 PORTB,7

#DEFINE Pulsador2 PORTB,6

;CODIGO

ORG 0

GOTO INICIO

ORG 4

GOTO ServicioInterrupcion

INICIO

CALL LCD_Inicializa

MOVLW Mensaje_1

CALL LCD_Mensaje

CALL LCD_Linea2

MOVLW .8

CALL LCD_PosicionLinea2

MOVLW Mensaje_2

7
CALL LCD_Mensaje

BSF STATUS,RP0

BSF Pulsador1 ;Entradas Pulsador1 y Pulsado 2

BSF Pulsador2

BCF STATUS,RP0 ; Acceso al Banco 0.

MOVLW B'10001000' ;GIE = 1 - RBI = 1

MOVWF INTCON

START

SLEEP

GOTO START

; Subrutina "ServicioInterrupcion" ------------------------------------------------------

ServicioInterrupcion

CALL Retardo_20ms ;Rebotes

BTFSS Pulsador1 ;

CALL Mensaje_pulsador1

BTFSS Pulsador2

CALL Mensaje_pulsador2

RETFIE ;GIE = 1

Mensaje_pulsador1

CALL LCD_Borra

MOVLW Mensaje_pulsador1_1

CALL LCD_Mensaje

CALL LCD_Linea2

MOVLW Mensaje_pulsador1_2

CALL LCD_Mensaje

RETURN

Mensaje_pulsador2

CALL LCD_Borra

MOVLW Mensaje_pulsador2_1

8
CALL LCD_Mensaje

CALL LCD_Linea2

MOVLW Mensaje_pulsador2_2

CALL LCD_Mensaje

RETURN

;Mensajes

Mensajes

ADDWF PCL,F

Mensaje_1

DT "Presiona un",0x00

Mensaje_2

DT "Pulsador",0x00

Mensaje_pulsador1_1

DT " SUSCRIBETE",0x00

Mensaje_pulsador1_2

DT " WELS THEORY",0x00

Mensaje_pulsador2_1

DT " EUREKA!!!",0x00

Mensaje_pulsador2_2

DT " FUNCIONA!!=D",0x00

INCLUDE <E:\PIC16F84A\Librerias\RETARDOS.INC>

INCLUDE <E:\PIC16F84A\Librerias\LCD.INC>

;INCLUDE <E:\PIC16F84A\Librerias\BIN_BCD.INC>

INCLUDE <E:\PIC16F84A\Librerias\LCD_Mensaje.INC>

END

9
; Descripción: Un led conectado a línea 3 del puerto B se

; enciende cada 600ms y apaga durante otros 300ms. Usar la

; interrupción del Time0

List P=16F84A ; Procesador PIC16f84A

#include "p16f84a.inc" ;Incluye las librerias

; CONFIGURACION DEL PIC16F84A

__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _CP_OFF

;Definimos Variables

CBLOCK 0x0C

Reg_Tiempos

ENDC

;Valores de definidos

Periodo_50ms EQU d'195' ; 195*256= 49920us = 50ms

Periodo_600ms EQU d'12'; 50ms*12=600ms

Periodo_300ms EQU d'6'; 50ms * 6 = 300ms

#DEFINE LED PORTB,3; SALIDA DEL LED

;CODIGO

ORG 0

GOTO INICIO

ORG 4

GOTO TMR0_INT

INICIO

BSF STATUS,RP0

BCF LED

MOVLW B'00000111'; 256 PRESCALER TMR0

10
MOVWF OPTION_REG

BCF STATUS,RP0

MOVLW Periodo_50ms

MOVWF TMR0

MOVLW Periodo_300ms

MOVWF Reg_Tiempos

MOVLW B'10100000'

MOVWF INTCON ;T0IE - GIE

START

GOTO $

;INTERRUPCION

TMR0_INT

MOVLW Periodo_50ms

MOVWF TMR0

DECFSZ Reg_Tiempos,F

GOTO FIN_INT

BTFSC LED ;ESTADO DEL LED

GOTO ENCENDIDO

APAGADO

BSF LED

MOVLW Periodo_600ms

GOTO Var_Tiempos

ENCENDIDO

BCF LED

MOVLW Periodo_300ms

Var_Tiempos

MOVWF Reg_Tiempos

FIN_INT

BCF INTCON,T0IF

RETFIE ;GIE

END

11

También podría gustarte