Hola. Me estoy volviendo loco. No doy con la solución y no sé qué hago mal.
Les agradecería un poco de ayuda.
Les explico. Estoy haciendo un programa algo más complejo para la universidad pero he hecho un programa sencillo para comprobar si funcionaba o no la rutina de servicio de interrupciones por la patilla RB0 y nada.
Se trata básicamente de un bucle que va incrementando una variable, de uno en uno, hasta que pulsas el botón.
Entonces debe mostrar el valor de dicha variable de manera intermitente, apagando y encendiendo un display de 7 segmentos tres veces.
Cuando termina, debe volver al bucle hasta que reciba otro estímulo por la patilla RB0/INT.
Aquí les dejo el código.
He probado ya tropecientas posibilidades y nada. Gracias de antemano.
Les agradecería un poco de ayuda.
Les explico. Estoy haciendo un programa algo más complejo para la universidad pero he hecho un programa sencillo para comprobar si funcionaba o no la rutina de servicio de interrupciones por la patilla RB0 y nada.
Se trata básicamente de un bucle que va incrementando una variable, de uno en uno, hasta que pulsas el botón.
Entonces debe mostrar el valor de dicha variable de manera intermitente, apagando y encendiendo un display de 7 segmentos tres veces.
Cuando termina, debe volver al bucle hasta que reciba otro estímulo por la patilla RB0/INT.
Aquí les dejo el código.
PHP:
list p=16F84A
#include <P16F84A.inc>
radix HEX
VALOR equ 0x30
TMP equ 0x31
TMP1 equ 0x32
TMP2 equ 0x33
TMP3 equ 0x34
org 0x00
goto Inicio
org 0x04
goto RSI
Display addwf PCL,1
retlw b'01111110';0
retlw b'00001100';1
retlw b'01101110';2
retlw b'10011110';3
retlw b'10111100';4
retlw b'10111010';5
retlw b'11111000';6
retlw b'00001110';7
retlw b'11111110';8
retlw b'10011110';9
Inicio bsf STATUS,RP0
movlw b'00000001'
movwf TRISA
movwf TRISB
bsf OPTION_REG,6
movlw b'10010000'
movwf INTCON
bcf STATUS,RP0
clrf PORTA
clrf PORTB
movlw d'3'
movwf VALOR
Bucle incf VALOR,1
movlw d'10'
subwf VALOR,0
btfsc STATUS,Z
clrf VALOR
goto Bucle
RSI btfsc INTCON,INTF
goto INTRB0
retfie
INTRB0 bcf INTCON,INTF
call Mostrar
call MedioS
call Apagar
call MedioS
call Mostrar
call MedioS
call Apagar
call MedioS
call Mostrar
call MedioS
call Apagar
call MedioS
retfie
Mostrar movf VALOR,0
call Display
movwf PORTB
return
Apagar movlw b'00000000'
movwf PORTB
call Delay
return
Delay movlw d'250'
movwf TMP
Atras decfsz TMP,1
goto Atras
return
MedioS movlw d'20'
movwf TMP1
Atras3 movlw d'50'
movwf TMP2
Atras2 movlw d'250'
movwf TMP3
Atras1 decfsz TMP3,1
goto Atras1
decfsz TMP2,1
goto Atras2
decfsz TMP1,1
goto Atras3
return
end
He probado ya tropecientas posibilidades y nada. Gracias de antemano.
Adjuntos
Última edición por un moderador: