Hola Arrhenius,
Tanto Leon PIC , como tapi8 tienen muchisima razon, porque no aprendes a programar!
Se entiende muy bien lo que decís, pero... "NOS GUSTA AYUDAR, NO HACER TODO EL TRABAJO!"
Te paso un esqueleto para tu codigo, espero que te sirva.
---
inicio:
bsf STATUS, 5 ; seteando el bit 5 de STATUS pasamos al banco 1
clrf PORTB ; portb es salida (todos sus bits a cero)
movlw b'11111111'
movwf PORTA ; porta es entrada (todo sus bits a uno)
bcf STATUS, 5 ; limpiando el bit 5 de STATUS pasamos al banco 0
bucle: ; Este es el bucle prinsipal del programa
clrf PORTA ; Ponemos inicialmente las salidas a cero
esperar:; esperamos que las cuatro entradas sean uno
movf PORTB, W ; movemos PORTB...
movwf temp ; ...a la variable temp
movlw 0x0F ; movemos a W la mascara 0x0F
andwf temp, F ; aplicamos la mascara sobre temp
movf temp, W ; comparamos temp...
xorlw 0x0F ; ...con 0x0F
btfss STATUS, Z ; si almenos una entrada vale 0 continuamos esperando...
goto esperar
; listo, las 4 entradas estan activas. activamos la primer salida
movlw 1 ; w = segundos a esperar
movwf PORTA
movlw 3 ; w = segundos a esperar
call esperar_segundos
; activamos la segunda salida (sin desactivar la primera)
movlw 3
movwf PORTA
movlw 6
call esperar_segundos
; continuamos en el bulce prinsipal.
goto bucle
esperar_segundos:
; aca te falta codigo
return
---