PRÁCTICA ALARMA DESCENDENTE PROGRAMABLE.
valgesExamen27 de Octubre de 2013
14.470 Palabras (58 Páginas)252 Visitas
TAREA 15. PRÁCTICA ALARMA DESCENDENTE PROGRAMABLE.
Implementación:
Para lograr la implementación de una ALARMA DESCENDENTE PROGRAMABLE debemos de manejar varios puertos de entrada como salida, de la misma forma para crear el circuito y visualizar los valores necesitamos del uso de displays de cátodo común como el uso de latchs(74LS373), a través de señales de entrada podríamos controlar los valores de diferentes variables e irlas decrementando hasta que lleve un valor 0 y avise cuando llegue a este valor con ayuda de un buzzer.
Para realizar las funciones mencionadas necesitamos programar el PIC16F877A con el siguiente programa a partir de la siguiente lista de funciones.
B0=botón de encendido ó apagado
B1=botón selección de unidades(Segundos/Minutos).
B2= botón de correr ó parar.
B3=botón de aumento.
B4=botón de aumento.
B5=Buzzer.
Por lo tanto a partir de la lista de funciones podemos escribir el siguiente código en MPLAB, obteniendo:
list p=16f877a ;selección de dispositivO
ORG 0X00 ;SELECCIONAMOS EL ORIGEN
#INCLUDE<P16F877A.INC> ;INCLUIMOS LAS BIBLIOTECAS
VALOR EQU 0X20 ;CREAMOS LA VARIBALE VALOR
VAL2 EQU 0X21 ;CREAMOS LA VARIBALE VAL2
VAL3 EQU 0X22 ;CREAMOS LA VARIBALE VAL3
CONTADOR EQU 0X23 ;CREAMOS LA VARIBALE CONTADOR
SUMA2 EQU 0X24
SUMA3 EQU 0X25 ;CREAMOS LA VARIABLE NUMERO
SUMA EQU 0X26 ;CREAMOS LA VARIABLE SUMA
SUMA4 EQU 0X27 ;CREAMOS LA VARIBALE SUMA4
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF;CONFIGURAMOS EL PIC PARA SU CORRECTO FUNCIONAMIENTO
BSF STATUS,0x05 ;Se cambio un bit del registro status para cambiar del banco 0 al 1
CLRF TRISD ;Limpiamos trisd
CLRF TRISC ;CONFIGURAMOS EL TRISC COMO SALIDAS
MOVLW B'11011111'
MOVWF TRISB ;CONFIGURAMOS TRISB COMO ENTRADAS
BCF STATUS,0x05 ;Regresamos al banco cero
GOTO RETARDO ;VAMOS A LA SUBRUTINA RETARDO
LUT ADDWF PCL,1 ;CREAMOS LA SUBRUTINA LUT
RETLW B'00111111';0
RETLW B'00000110';1
RETLW B'01011011';2
RETLW B'01001111';3
RETLW B'01100110';4
RETLW B'01101101';5
RETLW B'01111101';6
RETLW B'00100111';7
RETLW B'01111111';8
RETLW B'01100111';9
RETARDO GOTO FOR25 ;SIRVE PARA EVITAR EFECTO REBOTE EN PUSH BOTON
CONTINUARFOR25
APAGARENCENDER BTFSS PORTB,0 ;CHECAMOS EL BIT0 DLE PORTB PARA COMPROBAR SI ESTA PRENDIDO O APAGADO EL CIRCUITO
GOTO APAGAR ;SI ES 0 APAGADMOS EL CIRCUITO
GOTO ENCENDER ;SI ES 1 ENCENDEMOS EL CIRCUITO
APAGAR MOVLW B'00001111' ;EN ESTA SUBRUTINA APAGAMOS EL CIRCUITO
MOVWF PORTC
MOVLW 0X00
MOVWF PORTD
MOVLW B'00000000'
MOVWF PORTC
CLRF SUMA
CLRF SUMA2
GOTO RETARDO ;REGRESAMOS AL RETARDO
ENCENDER GOTO EFECTOREBOTE2 ;EVITAMOS EL EFECTO REBOTE
CONTINUARREBOTE2 BTFSC PORTB,2
GOTO CORRER ;SI ESTA PRENDIDO EL B2 DE PORTB VAMOS A CORRER
GOTO PARAR
PARAR BTFSS PORTB,1 ;SI ESTA APAGADO VAMOS A PARAR
GOTO CHECARBIT
INCF CONTADOR,1
CHECARBIT BTFSS CONTADOR,0 ;CHECAMOS QUE DESEA FIJAR MINUTOS O SEGUNDOS
GOTO CONTADOR0
GOTO CONTADOR1
CONTADOR0 BTFSS CONTADOR,1
GOTO CONTADOR00
GOTO CONTADOR10
CONTADOR1 BTFSS CONTADOR,1
GOTO CONTADOR01
GOTO CONTADOR11
CONTADOR10 BTFSS CONTADOR,2
GOTO SEGUNDO2;CONTADOR010
MOVLW 0X00;CONTADOR110
MOVWF CONTADOR
GOTO APAGARENCENDER
CONTADOR01 BTFSS CONTADOR,2
GOTO SEGUNDO1;CONTADOR001
MOVLW 0X00;CONTADOR101
MOVWF CONTADOR
GOTO APAGARENCENDER
CONTADOR11 BTFSS CONTADOR,2
GOTO MINUTO1;CONTADOR011
MOVLW 0X00 ;CONTADOR111
MOVWF CONTADOR
GOTO APAGARENCENDER
CONTADOR00 BTFSS CONTADOR,2
GOTO APAGARENCENDER;CONTADOR000
GOTO MINUTO2;CONTADOR100
;ESTA PARTE FIJAREMOS EL TIEMPO A PARTIR DE LA DECISION DEL USUARIO
SEGUNDO1 GOTO EFECTOREBOTE ;EVITAMOS EFECTO REBOTE
CONTINUARREBOTE BTFSS PORTB,3 ;REGRESAMOS DONDE LO LLAMAMOS
GOTO RESTAR ;SI NO ESCOGIO NADA COMPROBAMOS EL BOTON RESTAR
GOTO SUMAR ;SI ESOGIO SUMAR VAMOS A INCREMENTAR EL VALOR
SUMAR
BTFSS SUMA,3
GOTO PROCESO2
BTFSS SUMA,0
GOTO PROCESO2
GOTO VOLVERCERO
PROCESO2 INCF SUMA,1 ;DECREMENTAMOS EL VALOR DE SUMA
MOVLW B'00000001' ;COMPROBAMOS SI DESEA SUMAR EN SEGUNDO1, POR LO CUAL MOVEREMOS EL VALOR DE SEGUNDO1
MOVWF PORTC ;CONFIGURAMOS EL VALOR QUE SE VERA EN EL DISPLAY
MOVFW SUMA ;Y VAMOS A LA TABLA LUT PARA PONER EL VALOR
CALL LUT
MOVWF PORTD ;LO COLOCAMOS EN EL DISPLAY
MOVLW 0X00 ;FIJAMOS EL VALOR EN EL DISPLAY
MOVWF PORTC ;GUARDAMOS EL VALOR ESCOGIDO
GOTO APAGARENCENDER
VOLVERCERO MOVLW B'00000001' ;COMPROBAMOS SI DESEA SUMAR EN SEGUNDO1, POR LO CUAL MOVEREMOS EL VALOR DE SEGUNDO1
MOVWF PORTC ;CONFIGURAMOS EL VALOR QUE SE VERA EN EL DISPLAY
MOVLW 0X00
MOVWF SUMA
MOVFW SUMA ;Y VAMOS A LA TABLA LUT PARA PONER EL VALOR
CALL LUT
MOVWF PORTD ;LO COLOCAMOS EN EL DISPLAY
MOVLW 0X00 ;FIJAMOS EL VALOR EN EL DISPLAY
MOVWF PORTC ;GUARDAMOS EL VALOR ESCOGIDO
MOVLW 0X00
MOVWF SUMA
GOTO APAGARENCENDER ;RECTIFICAMOS SI DESEA TERMINAR EL FIJAR TIEMPO
RESTAR BTFSS PORTB,4
GOTO APAGARENCENDER
GOTO SEGUIRRESTANDO
SEGUIRRESTANDO
BTFSC SUMA,0
GOTO PROCESO
BTFSC SUMA,1
GOTO PROCESO
BTFSC SUMA,2
GOTO PROCESO
BTFSC SUMA,3
GOTO PROCESO
GOTO RESTABLECERSUMA
PROCESO DECF SUMA,1 ;DECREMENTAMOS EL VALOR DE SUMA
MOVLW B'00000001' ;COMPROBAMOS SI DESEA SUMAR EN SEGUNDO1, POR LO CUAL MOVEREMOS EL VALOR DE SEGUNDO1
MOVWF PORTC ;CONFIGURAMOS EL VALOR QUE SE VERA EN EL DISPLAY
MOVFW SUMA ;Y VAMOS A LA TABLA LUT PARA PONER EL VALOR
CALL LUT
MOVWF PORTD ;LO COLOCAMOS EN EL DISPLAY
MOVLW 0X00 ;FIJAMOS EL VALOR EN EL DISPLAY
MOVWF PORTC ;GUARDAMOS EL VALOR ESCOGIDO
GOTO APAGARENCENDER
RESTABLECERSUMA MOVLW B'00000001' ;COMPROBAMOS SI DESEA SUMAR EN SEGUNDO1, POR LO CUAL MOVEREMOS EL VALOR DE SEGUNDO1
MOVWF PORTC ;CONFIGURAMOS EL VALOR QUE SE VERA EN EL DISPLAY
MOVLW 0X09
MOVWF SUMA
...