Hola a todos:
Ya he conseguido que funcione, tenia un error muy tonto, pero muy tonto, antes de nada perdonar por la brasa que he dado y lo distanciado de mis respuestas.
Antes de nada, os digo el error, al venir la pulsacion por el puertob que actua por cambio de nivel, me daba problemas tb al dejar de pulsar, de hay que me hiciera eso. Entonces lo que he hecho a sido resetar el puerto cada vez
Hos pego el codigo, ya se que habria que depurarlo mucho (que habria que quitar muchas instrucciones, ya que he hecho mil pruebas para sacarlo, error de principiante, no aplicar la teoria a la practica, pero bueno asi se aprende,jejej)
Aqui teneis el codigo para el que quiera utilizarlo, de momento a mi me va, solo almacena datos en memoria, como tratarlos dependera de la aplicacion en cuestion
Un saludo
; Declaracion de micro
;-------------------------------------------------------------
list P=16f870
include "P16f870.inc"
; Declaracion de vectores, inicio e interrupcion
;-------------------------------------------------------------
org 0x00
goto inicio
org 0x04
goto interrupcion
org 0x05
; Configuracion del pic
;---------------------------------------------------------------
inicio
bsf STATUS,RP0
clrf TRISC
movlw b"00000110"
movwf ADCON1
clrf TRISA
movlw b"11111111"
movwf TRISB
movlw b"10010111"
movwf OPTION_REG
; Configuracion de vector de interrupcion para interrupcion RB4-7 y RB0
;------------------------------------------------------------------------------
movlw b"00011000"
movwf INTCON
bcf STATUS,RP0
clrf PORTA
clrf PORTB
clrf PORTC
; rutina principal
;-------------------------------------------------------------------
contador equ 0x20
contador2 equ 0x21
alarma equ 0x22
alarma2 equ 0x23
auxiliar equ 0x24
dig1 equ 0x28
dig2 equ 0x29
dig3 equ 0x2a
dig4 equ 0x2b
contador3 equ 0x25
contador4 equ 0x26
movlw 0x28
movwf FSR
bsf INTCON,GIE
movlw d"4"
;movwf contador4
;movlw 0x29
movwf contador3
aqui movlw d"3"
movwf contador
clrf contador2
alli movfw contador2
call cuenta
movwf PORTA
incf contador2
decfsz contador
goto alli
goto aqui
; tabla de salidas
;-------------------------------------------------------------------
cuenta:
addwf PCL,F
retlw b"00000001"
retlw b"00000010"
retlw b"00000100"
; inicio de codigo de interrupcion
;-------------------------------------------------------------------
interrupcion
; Rutina de visualizacion de tecla
;-------------------------------------------------------------------
call delay2
btfss INTCON,RBIF
retfie
clrf INTCON
fila1 btfss PORTB,4
goto fila2
btfss PORTA,0
goto columna2
clrf INTCON
clrf PORTB
movlw 0x01
movwf PORTC
clrf PORTB
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna2
btfss PORTA,1
goto columna3
clrf INTCON
clrf PORTB
movlw 0x02
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna3
clrf INTCON
clrf PORTB
movlw 0x03
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
fila2
btfss PORTB,5
goto fila3
call delay2
btfss PORTB,5
retfie
btfss PORTA,0
goto columna2b
clrf INTCON
clrf PORTB
movlw 0x04
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna2b
btfss PORTA,1
goto columna3b
clrf INTCON
clrf PORTB
movlw 0x05
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna3b
clrf INTCON
clrf PORTB
movlw 0x06
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
fila3
btfss PORTB,6
goto fila4
call delay2
btfss PORTB,6
retfie
btfss PORTA,0
goto columna2c
clrf INTCON
clrf PORTB
movlw 0x07
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna2c
btfss PORTA,1
goto columna3c
clrf INTCON
clrf PORTB
movlw 0x08
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
columna3c
clrf INTCON
clrf PORTB
movlw 0x09
movwf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
fila4 clrf INTCON
clrf PORTB
movlw 0x00
clrf PORTC
call delay2
call delay2
call delay2
clrf PORTC
goto final
; final
;--------------------------------------------------------------------
final
movwf INDF
incf FSR
clrf W
call delay2
call delay2
call delay2
call delay2
call delay2
call delay2
movlw b"00011000"
movwf INTCON
retfie
; rutina de retardo
;-------------------------------------------------------------------
delay2:
clrf PORTB
movwf auxiliar
movlw d"100"
movwf contador3
bcf INTCON,T0IF
movlw d"100"
movwf TMR0
delay1
btfss INTCON,T0IF
goto delay1
decfsz contador3
goto vuelta
goto delay2
vuelta
movfw auxiliar
return
end