Sisis lo que planteo es que con la informacion que vos me das....
Tenes estos dos pasos necesarios para aprender:
- Aprender a programar en ASM (Lenguaje, instrucciones, como definir los registros a usar vos, etc)
- Aprender como funciona el PIC, debido a que en ASM es necesario. En C tambien, pero podes obviar algunas cosas.
El problema que no es "corto"/"rapido" hacerlo, a no ser que ya tengas una buena base de programacion, y sepas leer en ingles para manejarte con el datasheet del micro.
Por ejemplo, en tu programa necesitaria que aprendas a usar tablas, para cargar el 7 segmento (a no s er que usen un conversor por fuera por ejemplo un 4511). Que también aprendas de los bancos del PIC, modulos, etc.
Un esqueleto/casi completo de tu programa (no recuerdo el PIC) seria:
#include .inc de tu PIC
cblock 0x20 (0x20 de la posicion de inicio de los registros de uso general)
CONT_U
CONT_D
FLAGS
endc
TABLA
addwf PCL, F
retlw 0x00 ;Digito 0
retlw 0x00 ; Digito 1
retlw 0x00 ; Digito 2
retlw 0x00
retlw 0x00
retlw 0x00
TABLAD
addwf PCL, F
retlw 0x00 ; LED 0
retlw 0x00 ; LED 1
retlw 0x00 ; LED 2
retlw 0x00
ORG 0x00
; Aca todo lo que es configuracion de las entradas/salidas
ANSEL/ADCON
TRIS
PRINCIPAL:
CALL CHECK_SENSOR
CALL INC_COUNTER
CALL MOSTRAR
GOTO PRINCIPAL
CHECK_SENSOR:
BTFSS PORTx,0 (detecto si eta presionado sensor)
GOTO CHECK_SENSOR
CHECK_SENSOR:2:
BTFSC PORTx,0 (espero que se suelte sensor)
GOTO CHECK_SENSOR
BSF FLAGS, 0
RETURN
INC_COUNTER:
BTFSS FLAGS,0
RETURN
INCF CONT_U, F
MOVF CONT_U, W
ANDLW d'10' ;AND para saber si llego a 10
BTFSS STATUS, Z
RETURN
CLRF CONT_U ; LLego a 10, pasa a 0
INCF CONT_D, F
;Aca necesito comprobar que CONT_D sea menor a 4
RETURN
MOSTRAR:
MOVF CONT_U, W
CALL TABLA
MOVWF PORTB
MOVF CONT_D, W
CALL_TABLAD
MOVWF PORTA
RETURN
Eso es masomenos lo que vendria a ser tu programa.