Autor Tema: MODO SLEEP ¿¿¿¿como activarlo ???? pic 16f887  (Leído 1646 veces)

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

Desconectado juan_ruiz14

  • PIC10
  • *
  • Mensajes: 3
MODO SLEEP ¿¿¿¿como activarlo ???? pic 16f887
« en: 05 de Abril de 2022, 18:59:34 »
hola buenas recientemente tengo un proyecto que consta del conteo del 0 al 999 los cuales son activados mediante un push boton y 3 displays de ánodo común que tras 1 minuto sin testeo se pagan los displays y al detectar pulso se resetea y comienza el conteo de 0
pero yo lo hice mediante el TMR0 por desbordamiento eh interrupciones pero eso me genera que la pila de 9v a la cual esta conectado el circuito se consuma muy rápido y eh estado leyendo en foros que se puede activar el modo sleep en un pic el pic que yo uso es el 16f887 y viendo en su datashet si tiene ese modo SLEEP pero no tengo ni idea como entrarle ni como activarlo me gustaría si alguien me podría explicar como implementarlo en mi circuito para poder así reducir mi consumo de energía. Gracias.
Les comparto mi código que ya esta en uso para ver que se le quita y que se le agrega para el modo SLEEP.

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
v1
v2
v3
TCount

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
btfss PORTA,4 ;Prueba el bit b del registro f, Salta la siguiente instrucción si bit b es 1.
goto TESTEO_BOTON ;salta a la etiqueta
btfsc PORTA,4
goto $-1
call RET_1s ;salta a una subrutina indicada
     

   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
    CALL RET_1s

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

RET_1s
    movlw .125
    movwf v1
    movlw .250
    movwf v2
    movlw .3
    movwf v3
c1
    decfsz v1,F
    goto c1
    decfsz v2,F
    goto c1
    decfsz v3,F ;espera para el sguiente salto
    goto c1
    return

   END

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:MODO SLEEP ¿¿¿¿como activarlo ???? pic 16f887
« Respuesta #1 en: 05 de Abril de 2022, 19:13:10 »
hola buenas recientemente tengo un proyecto que consta del conteo del 0 al 999 los cuales son activados mediante un push boton y 3 displays de ánodo común que tras 1 minuto sin testeo se pagan los displays y al detectar pulso se resetea y comienza el conteo de 0
pero yo lo hice mediante el TMR0 por desbordamiento eh interrupciones pero eso me genera que la pila de 9v a la cual esta conectado el circuito se consuma muy rápido y eh estado leyendo en foros que se puede activar el modo sleep en un pic el pic que yo uso es el 16f887 y viendo en su datashet si tiene ese modo SLEEP pero no tengo ni idea como entrarle ni como activarlo me gustaría si alguien me podría explicar como implementarlo en mi circuito para poder así reducir mi consumo de energía. Gracias.
Les comparto mi código que ya esta en uso para ver que se le quita y que se le agrega para el modo SLEEP.

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
v1
v2
v3
TCount

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
btfss PORTA,4 ;Prueba el bit b del registro f, Salta la siguiente instrucción si bit b es 1.
goto TESTEO_BOTON ;salta a la etiqueta
btfsc PORTA,4
goto $-1
call RET_1s ;salta a una subrutina indicada
     

   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
    CALL RET_1s

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

RET_1s
    movlw .125
    movwf v1
    movlw .250
    movwf v2
    movlw .3
    movwf v3
c1
    decfsz v1,F
    goto c1
    decfsz v2,F
    goto c1
    decfsz v3,F ;espera para el sguiente salto
    goto c1
    return

   END

Este documento te puede servir.

http://www.schulheft-ottakring.eu/vane/Schule/Literatur/PIC/Gooligum/Intro%20to%20PIC%20Programming%20gooligum%20Base%20A/PIC_Base_A_7.pdf
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:MODO SLEEP ¿¿¿¿como activarlo ???? pic 16f887
« Respuesta #2 en: 05 de Abril de 2022, 19:16:23 »
hola buenas recientemente tengo un proyecto que consta del conteo del 0 al 999 los cuales son activados mediante un push boton y 3 displays de ánodo común que tras 1 minuto sin testeo se pagan los displays y al detectar pulso se resetea y comienza el conteo de 0
pero yo lo hice mediante el TMR0 por desbordamiento eh interrupciones pero eso me genera que la pila de 9v a la cual esta conectado el circuito se consuma muy rápido y eh estado leyendo en foros que se puede activar el modo sleep en un pic el pic que yo uso es el 16f887 y viendo en su datashet si tiene ese modo SLEEP pero no tengo ni idea como entrarle ni como activarlo me gustaría si alguien me podría explicar como implementarlo en mi circuito para poder así reducir mi consumo de energía. Gracias.
Les comparto mi código que ya esta en uso para ver que se le quita y que se le agrega para el modo SLEEP.

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
v1
v2
v3
TCount

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
btfss PORTA,4 ;Prueba el bit b del registro f, Salta la siguiente instrucción si bit b es 1.
goto TESTEO_BOTON ;salta a la etiqueta
btfsc PORTA,4
goto $-1
call RET_1s ;salta a una subrutina indicada
     

   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
    CALL RET_1s

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

RET_1s
    movlw .125
    movwf v1
    movlw .250
    movwf v2
    movlw .3
    movwf v3
c1
    decfsz v1,F
    goto c1
    decfsz v2,F
    goto c1
    decfsz v3,F ;espera para el sguiente salto
    goto c1
    return

   END

También este librito en español pueda que sea una guía.

https://es.b-ok.lat/book/11632880/86b1f5
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32


 

anything