Hla si lo he hecho al final por el puerto A Ra3 y Ra4, tengo lo siguiente para la cuenta.. sirve bien.. lo ke llevo pero aun kiero hacerlo en lcd. etc.. mirad a ver ke os parece.
;*********************************************************************************************
;
;Programa CIRCUITO.ASM FECHA:
;
;Circuito de carreras controlado por un microcontrolador que nos indicara el tiempo que cada coche
;emplea en dar una vuelta.
;
;Programa para el PIC 16F84A Velocidad de reloj: 4 MHz Ciclo de Instrucion:1 MHz
;
;Perro guardian: Desactivado Tipo de reloj:XT Proteccion de codigo:OFF
;
;****************************SELECCION DEL PIC Y SISTEMA DE NUMERACION************************
LIST p=16F84A ;Tipo de microcontrolador
RADIX hex ;Seleciona el sistema hexadecimal por defecto
;***************************DEFINICION DE VARIABLES Y REGISTROS ESPECIALES*************
include <p16F84A.inc> ;Define todos los registros y variables
;del PIC 16F84
CONTADOR1 EQU 0X0C ;Registro del contador1
CONTADOR2 EQU 0X0D ;Registro del contador2
CONTADOR3 EQU 0X0E ;Registro del contador3
CONTADOR4 EQU 0X0F ;Registro del contador4
CONTADOR5 EQU 0X10 ;Registro del contador5
CONTADOR6 EQU 0X11 ;Registro del contador6
CONTADOR7 EQU 0X12 ;Registro del contador7
CONTADOR8 EQU 0X13 ;Registro del contador8
CONTADOR9 EQU 0X14 ;Registro del contador9
CONTADOR10 EQU 0X15 ;Registro del contador10
CONTADOR11 EQU 0X16 ;Registro del contador11
CONTADOR12 EQU 0X17 ;Registro del contador12
#DEFINE BANCO1 bsf STATUS,RP0
#DEFINE BANCO0 bcf STATUS,RP0
;*************************COMIENZO DEL PROGRAMA*************************************
ORG 0X00 ;Direccion del vector reset
goto INICIO ;Comienza el programa
INICIO BANCO1 ;Seleciona el banco1
movlw b"00011000" ;Carga un 1 en el registro de trabajo w
movwf TRISA ;Pone el TRISA de PORTA como entradas y salidas
clrf TRISB ;Pone el TRISB de PORTB como salida
movlw b"00000000" ;Carga un 0 en el registro de trabajo w
movwf TRISB ;Mueve el contenido de w en TRISB
BORRADO BANCO0 ;Selecciona el BANCO 0
clrf PORTB ;Borra el contenido del PORTB
clrf CONTADOR1 ;Borra el contenido del contador1
clrf CONTADOR2 ;Borra el contenido del contador2
clrf CONTADOR3 ;Borra el contenido del contador3
clrf CONTADOR4 ;Borra el contenido del contador4
clrf CONTADOR5 ;Borra el contenido del contador5
clrf CONTADOR6 ;Borra el contenido del contador6
movlw .10 ;Carga 10 decimal en el registro w
movwf CONTADOR4 ;Mueve el contenido de w en CONTADOR4
movlw .9 ;Carga 9 decimal en el registro w
movwf CONTADOR5 ;Mueve el contenido de w en CONTADOR5
movlw .5 ;Carga 6 decimal en el registro w
movwf CONTADOR6
TESTEO
btfsc PORTA,3 ;Testea y comprueba si la entrada RA0 es
;1 lee instruccion si es 0 salta
;a la siguiente instruccion
goto RELOJ ;Vete a la subrutina RELOJ
btfsc PORTA,4 ;Testea y comprueba si la entrada RA0 es
;1 lee instruccion si es 0 salta
;a la siguiente instruccion
goto RELOJ2 ;Vete a la subrutina RELOJ
goto TESTEO ;Vete a la subrutina TESTEO
RELOJ clrf CONTADOR1 ;Borra el contenido del contador1
clrf CONTADOR2 ;Borra el contenido del contador2
clrf CONTADOR3 ;Borra el contenido del contador3
clrf PORTB ;Borra el contenido del puerto b
nop
nop
movlw .100
movwf CONTADOR2
BUCLE1 movlw .199
movwf CONTADOR1
BUCLE0 nop
nop
decfsz CONTADOR1,F
goto BUCLE0
decfsz CONTADOR2,F
goto BUCLE1
movlw .31
movwf CONTADOR3
BUCLE2 decfsz CONTADOR3,F
goto BUCLE2
nop
nop ;Hasta aqui, hace la cuenta de las decimas (100ms)
bsf PORTB,0 ;Indica que ha pasado una decima
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR4,F
goto RELOJ
bsf PORTB,1 ;Indica que ha pasado un segundo
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR5,F
goto CARGA
bsf PORTB,2 ;Indica que han pasado 10 segundos
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
decfsz CONTADOR6,F
goto CARGA2
bsf PORTB,3 ;Indica que ha pasado un minuto
btfsc PORTA,3
btfsc PORTA,4
goto BORRADO2
goto BORRADO
CARGA
movlw .10
movwf CONTADOR4
goto RELOJ
CARGA2
movlw .10
movwf CONTADOR4
movlw .10
movwf CONTADOR5
goto RELOJ
BORRADO2 BANCO0 ;Selecciona el BANCO 0
clrf PORTB ;Borra el contenido del PORTB
clrf CONTADOR7 ;Borra el contenido del contador1
clrf CONTADOR8 ;Borra el contenido del contador2
clrf CONTADOR9 ;Borra el contenido del contador3
clrf CONTADOR10 ;Borra el contenido del contador4
clrf CONTADOR11 ;Borra el contenido del contador5
clrf CONTADOR12 ;Borra el contenido del contador6
movlw .10 ;Carga 10 decimal en el registro w
movwf CONTADOR10 ;Mueve el contenido de w en CONTADOR4
movlw .9 ;Carga 9 decimal en el registro w
movwf CONTADOR11 ;Mueve el contenido de w en CONTADOR5
movlw .5 ;Carga 6 decimal en el registro w
movwf CONTADOR12
RELOJ2 clrf CONTADOR7 ;Borra el contenido del contador1
clrf CONTADOR8 ;Borra el contenido del contador2
clrf CONTADOR9 ;Borra el contenido del contador3
clrf PORTB ;Borra el contenido del puerto b
nop
nop
movlw .100
movwf CONTADOR8
BUCLEB movlw .199
movwf CONTADOR7
BUCLEA nop
nop
decfsz CONTADOR7,F
goto BUCLEA
decfsz CONTADOR8,F
goto BUCLEB
movlw .31
movwf CONTADOR9
BUCLEC decfsz CONTADOR9,F
goto BUCLEC
nop
nop ;Hasta aqui, hace la cuenta de las decimas (100ms)
bsf PORTB,4 ;Indica que ha pasado una decima
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR10,F
goto RELOJ2
bsf PORTB,5 ;Indica que ha pasado un segundo
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR11,F
goto CARGA3
bsf PORTB,6 ;Indica que han pasado 10 segundos
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
decfsz CONTADOR12,F
goto CARGA4
bsf PORTB,7 ;Indica que ha pasado un minuto
btfsc PORTA,4
btfsc PORTA,3
goto BORRADO
goto BORRADO2
CARGA3
movlw .10
movwf CONTADOR10
goto RELOJ2
CARGA4
movlw .10
movwf CONTADOR10
movlw .10
movwf CONTADOR11
goto RELOJ2
end