ayuda con codigo:
SE LOS AGRADESERE BASTANTE.
ES UN cronometro CON 6 DISPLAYS, dos para "MINUTOS", dos para "SEGUNDOS" Y dos para "MILISEGUNDOS", TENGO UN BOTON PARA RESETEAR EL CONTEO, PERO ____LA CUESTION AQUI ES ¿COMO AÑADO OTRO BOTON PARA PAUSAR LA CUENTA Y QUE NO SE RESETEEN LOS NUMEROS?
el codigo es el siguiente: (lo estoy simulando en isispuedo mandarles el archivo de la simulacion de ser necesario para que me ayuden)
list p=16f877 ;Se le dice al programa con que micro vamos a trabajar
include "p16f877.inc" ;Trae todas los equ predeterminados (TMR0, PORTA, PORTB, etc.)
__CONFIG H'3F71'
CONTA equ 0x20 ;Define variables
sb equ 0x21
sa equ 0x22
mb equ 0x23
ma equ 0x24
hb equ 0x25
ha equ 0x26
org 0x00
goto inicio
org 0x04 ;Vector de interrupcion
goto int
org 0x05
inicio
clrf PORTA ;Se limpia el puerto A
clrf PORTB ;Se limpia el puerto B
clrf PORTC ;Se limpia el puerto C
clrf PORTD ;Se limpia el puerto D
clrf CONTA
clrf sb
clrf sa
clrf mb
clrf ma
clrf hb
clrf ha
bsf STATUS, RP0 ;Cambio al banco 1
movlw 0x06
movwf ADCON1
movlw B'000000'
movwf TRISA
movlw 0x00 ;Configura RB7:RB1 como entradas
movwf TRISB ;Configura RB0 como salida
movlw 0x00
movwf TRISC
movlw 0x00
movwf TRISD
bsf PIE1, CCP1IE ;habilito interrupcion CCP1
bcf STATUS, RP0 ;Cambio al banco 0
movlw B'1011' ;Se pone el modulo CCP1
movwf CCP1CON ;en modo COMPARE
movlw B'000001' ;El TMR1 se incrementa con el reloj interno (Fosc/4)
movwf T1CON ;Predivisor de 1:1 (Tmax = 1*1 us*65536 = 65536 us = 65.536 ms)
bsf INTCON, PEIE ;Se habilita la interrupcion periferica (modulos CCP)
bsf INTCON, GIE ;Se habilitan las interrupciones
diezms
bcf PIR1, TMR1IF ;Se limpia la bandera de desbordamiento del TMR1
movlw 0xD8 ;Se carga el TMR1 con el 55544 decimal, 0xD8F8
movwf TMR1H ;originalmente era el 55536 decimal 0XD8F0, pero
movlw 0xF8 ;el contador de tiempo salio mas exacto con el D8F8
movwf TMR1L
fin goto fin
;.......................
int
btfss PIR1, CCP1IF ;es la interrupcion por el CCP1?
retfie ;Sale del servicio de interrupción
movlw 0x00 ;Se carga el TMR1 con el 3890 decimal, 0x0F32, originalmente era el 10000 decimal 0X2710
movwf CCPR1H ;pero como consume mas tiempo por las instrucciones se ajusto el contador con el
movlw 0x02 ;0F32 por que al final el valor de 1 seg sale ms exacto (1.000212. seg)
movwf CCPR1L
bcf PIR1, CCP1IF ;Se limpia la bandera
nop ;Y espera a que el TMR1 sea igual
btfss PIR1, CCP1IF ;A CCPR1
goto $-1
incf CONTA ;Cuenta 100 interrupciones de 10 ms
movlw D'100' ;Para obtener un valor de 1 seg
xorwf CONTA, W
btfss STATUS, Z
retfie
segundos
incf sb
swapf sa, W
addwf sb, W
movwf PORTB
swapf ma, W
addwf mb, W
movwf PORTC
swapf ha, W
addwf hb, W
movwf PORTD
movlw D'9'
xorwf sb, W
btfss STATUS, Z
retfie
incf sa
clrf sb
decf sb
movlw D'6'
xorwf sa, W
btfss STATUS, Z
retfie ;Sale del servicio de interrupción
minutos
clrf sa
clrf sb
incf mb
movlw D'10'
xorwf mb, W
btfss STATUS, Z
retfie
incf ma
clrf mb
movlw D'6'
xorwf ma, W
btfss STATUS, Z
retfie ;Sale del servicio de interrupción
horas
clrf ma
clrf mb
movlw D'2'
xorwf ha, W
btfss STATUS, Z
goto $+5
movlw D'3'
xorwf hb, W
btfsc STATUS, Z
goto $
incf hb
movlw D'10'
xorwf hb, W
btfss STATUS, Z
retfie
incf ha
clrf hb
retfie
;.......................
end