Autor Tema: como asignarle un dalay a un boton pulsador??? pic16f887  (Leído 1143 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado juan_ruiz14

  • PIC10
  • *
  • Mensajes: 3
como asignarle un dalay a un boton pulsador??? pic16f887
« en: 01 de Noviembre de 2021, 14:55:44 »
hola buenas tardes es mi primer programa que realizo y ya sale todo bien pero quiero meterle un dalay en el boton que estoy usando ya que me detecta como 4 pulsaciones cuando solo lo pulso una vez y quisiera que con cada pulso tardara 1segundo en detectar el otro y asi evitar varias pulsaciones alguien me puede ayudar en como meterle las pulsaciones? mi proyecto consta de un contador que funciona con un boton(pushbotton) cuanta del 1 al 999 con 3 displays de anodo comun y un pic 4f887 que cuando deja de ser utilizado se pone en modo suspencion y se recetea para cuando detecta otro pulso enciende eh inicia la cuenta desde cero mi codigo es el siguiente:
 include P16F887.INC

__CONFIG _CONFIG1, _FOSC_INTRC_NOCLKOUT & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF
__CONFIG _CONFIG2, _WRT_OFF & _BOR4V_BOR21V

CBLOCK 0x020

CENTENAS
DECENAS
UNIDADES

TIEMPO
TIEMPO_M
BANDERA_TMP

W_TEMP
STATUS_TEMP


ENDC

#DEFINE  BOTON   PORTA,4; AQUI PUEDES CAMBIAR EL BIT Y PUERTO QUE QUIERAS QUE SEA EL BOTON SIN NECESIDAD DE CAMBIAR EN TODO EL PROGRAMA



   ORG 0x00
   GOTO INICIO
   ORG 0X04
;=================================
;      INTERRUPCIONES
;=================================
INT_SUB:
   MOVWF W_TEMP
   SWAPF STATUS,W
   MOVWF STATUS_TEMP

   BCF INTCON, T0IF
   INCF TIEMPO,F
   MOVFW TIEMPO
   XORLW .153 ;TIEMPO PARA 10seg, lo necesitamos 6 veces mas para completar el minuto
   BTFSS STATUS, Z
   GOTO FIN_INTE
TERMINO_TMP
   CLRF TIEMPO
   INCF TIEMPO_M,F
   MOVFW TIEMPO_M
   XORLW .6   ;TESTEAMOS SI YA VAN 6 VECES DE 10 SEGUNDOS
   BTFSS STATUS,Z
   GOTO FIN_INTE
TERMINO_MINUTO
   BSF BANDERA_TMP,0
   CLRF TIEMPO
   CLRF TIEMPO_M

FIN_INTE:
   BSF INTCON, GIE
   SWAPF STATUS_TEMP,W
   MOVWF STATUS
   SWAPF W_TEMP,F
   SWAPF W_TEMP,W
   RETFIE

;=================================
;      TABLAS
;=================================

;Con display de anodo comun, EL BIT7 ES EL PUNTO DEL DISPLAY
BIN2SEVEN_SEG
   ANDLW B'00001111'
   ADDWF PCL,F
   RETLW B'11000000' ;'0'
   RETLW B'11111001' ;'1'
   RETLW B'10100100' ;'2'
   RETLW B'10110000' ;'3'
   RETLW B'10011001' ;'4'
   RETLW B'10010010' ;'5'
   RETLW B'10000010' ;'6'
   RETLW B'11111000' ;'7'
   RETLW B'10000000' ;'8'
   RETLW B'10011000' ;'9'
   RETLW B'10001000' ;'A'
   RETLW B'10000011' ;'B'
   RETLW B'11000110' ;'C'
   RETLW B'10100001' ;'D'


;;Con display de catodo comun, EL BIT0 ES EL PUNTO DEL DISPLAY
;BIN2SEVEN_SEG
;   ANDLW B'00001111'
;   ADDWF PCL,F
;   RETLW B'01111110' ;'0'
;   RETLW B'00001100' ;'1'
;   RETLW B'10110110' ;'2'
;   RETLW B'10011110' ;'3'
;   RETLW B'11001100' ;'4'
;   RETLW B'11011010' ;'5'
;   RETLW B'11111010' ;'6'
;   RETLW B'00001110' ;'7'
;   RETLW B'11111110' ;'8'
;   RETLW B'11001110' ;'9'
;   RETLW B'11101110' ;'A'
;   RETLW B'11111000' ;'B'
;   RETLW B'01110010' ;'C'
;   RETLW B'10111100' ;'D'

;=================
;   CONFIG
;=================
INICIO
   Banksel PORTA
   CLRF PORTA
   CLRF PORTB
   BANKSEL ANSEL
   CLRF ANSEL
   CLRF ANSELH


   BANKSEL TRISB;ENTRADAS Y SALIDAS
   CLRF PORTB
   CLRF PORTC
   CLRF PORTD
;   CLRF PORTA
   BSF BOTON

   BANKSEL OPTION_REG
   MOVLW b'11000111';OSC INTERNO, PREESCALER 1:256= 65.5 mS cada sobreflujo del TMR para que sean 10 segundos necesitamos que sea 153*65.5mS
   MOVWF OPTION_REG


   BANKSEL INTCON; HABILITACION DE LA INTERRUPCION DEL TMR0
   BSF INTCON, T0IE
   BSF INTCON, PEIE
   BCF INTCON, GIE ;AUN NO ENCENDEMOS LA INTERRUPCION

   BANKSEL PORTA
   CLRF TIEMPO
   CLRF BANDERA_TMP
   

;========================
;   PROGRAMA PRINCIPAL
;=======================

RESETEO:;AQUI VA A REGRESAR CADA VEZ QUE PASEN LOS 10 SEGUNDOS
   BCF INTCON, GIE
   CLRF TIEMPO
   CLRF TIEMPO_M
   CLRF BANDERA_TMP
   CLRF UNIDADES
   CLRF DECENAS
   CLRF CENTENAS
;   CLRF PORTA
   MOVLW 0XFF
   MOVWF PORTB
   MOVWF PORTC
   MOVWF PORTD
   
TESTEO_BOTON:
   BTFSS BOTON
   GOTO TESTEO_BOTON
   BTFSC BOTON
   GOTO $-1; ESTA INSTRUCCION ES COMO UN GOTO A LA INSTRUCCION ANTERIOR -1

   MOVLW 0X00   ;PARA ASEGURAR CEROS AL INICIO
   CALL BIN2SEVEN_SEG
;   MOVWF PORTA
   MOVWF PORTB
   MOVWF PORTC
   MOVWF PORTD

INICIA_CUENTA:

INC_UNI:
   MOVFW UNIDADES
   XORLW .9
   BTFSS STATUS,Z
   GOTO INC_UNI2
   CLRF UNIDADES
   MOVF UNIDADES,W
   CALL BIN2SEVEN_SEG
   MOVWF PORTD
   GOTO INC_DEC
INC_UNI2:
   INCF UNIDADES, F
   MOVFW UNIDADES
   CALL BIN2SEVEN_SEG
   MOVWF PORTD
   GOTO FIN_CUENTA
;------------------------
INC_DEC:
   MOVFW DECENAS
   XORLW .9
   BTFSS STATUS,Z
   GOTO INC_DEC2
   CLRF DECENAS
   MOVF DECENAS,W
   CALL BIN2SEVEN_SEG
   MOVWF PORTC
   GOTO INC_CENT
INC_DEC2:
   INCF DECENAS, F
   MOVFW DECENAS
   CALL BIN2SEVEN_SEG
   MOVWF PORTC
   GOTO FIN_CUENTA
;------------------------
INC_CENT:
   MOVFW CENTENAS
   XORLW .9
   BTFSS STATUS,Z
   GOTO INC_CENT2
   CLRF CENTENAS
   MOVF CENTENAS,W
   CALL BIN2SEVEN_SEG
   MOVWF PORTB
   GOTO INC_UNI
INC_CENT2:
   INCF CENTENAS,F
   MOVFW CENTENAS
   CALL BIN2SEVEN_SEG
   MOVWF PORTB
;--------------------------

FIN_CUENTA:
   CLRF TMR0
   BSF INTCON,GIE; EMPIEZA A CONTAR TMR0

ESPERA2:
   BTFSC BANDERA_TMP,0
   GOTO RESETEO
   BTFSS BOTON
   GOTO ESPERA2
   BTFSC BOTON
   GOTO $-1

   BCF INTCON, GIE
   CLRF TIEMPO
   CLRF TIEMPO_M
   CLRF BANDERA_TMP
   GOTO INICIA_CUENTA

   END



 

anything