List p=16F628a ;Tipo de procesador
include "P16F628a.INC" ;Definiciones de registros internos
f EQU 1
d1 EQU 10Ch
d2 EQU 10Eh
d3 EQU 10Fh
org 0x00 ;Vector de Reset
goto Inicio
org 0x05 ;Salva el vector de interrupción
Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'10000000'
movwf TRISB ;Puerta A se configura como entrada
movlw b'01111111'
movwf TRISA ;Puerta A se configura como entrada
bcf STATUS,RP0 ;Selecciona banco 0
movlw b'01111111'
movwf PORTB
;999997 cycles
movlw 0x1A
movwf d1
movlw 0x8B
movwf d2
movlw 0x07
movwf d3
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
;3 cycles
goto $+3
nop
marcha: nop ;Refrescar el WDT
btfsc PORTA,0 ;Comprueba el estado de RA0
goto primera ;Si está activo salta a primera
btfsc PORTA,1 ;Comprueba el estado de RA1
goto segunda ;Si está activo salta a segunda
btfsc PORTA,2 ;Comprueba el estado de RA2
goto tercera ;Si está activo salta a tercera
btfsc PORTA,3 ;Comprueba el estado de RA3
goto cuarta ;Si está activo salta a cuarta
btfsc PORTA,4 ;Comprueba el estado de RA4
goto quinta ;Si está activo salta a cuarta
btfsc PORTB,7
goto sexta
movlw b'01010100' ;Neutro
movwf PORTB ;Si están todas a 0 aparece
goto marcha
sexta movlw b'01111101'
movwf PORTB
goto marcha
quinta movlw b'01101101'
movwf PORTB
goto marcha
cuarta movlw b'01100110'
movwf PORTB
goto marcha
tercera movlw b'01001111'
movwf PORTB
goto marcha
segunda movlw b'01011011'
movwf PORTB
goto marcha
primera movlw b'00000110'
movwf PORTB
goto marcha
end ;Fin del programa fuente