Que tal amigos, soy nuevo en el foro, nunca he usado uno anteriormente por ende esta es mi primera vez, basicamente el programa que tengo es bastante sencillo, esta programado en PBP, el PIC, tiene conectado en los pines RB0:RB2 (INTO, INT1, INT2) tres transistores NPN, y ademas una resistencia pull up en cada uno de los pines. Basicamente lo que hace es detectar una interrupcion en cualquiera de estos 3 registros y sacar en el LCD un mensaje dependiendo del puerto. El problema se genera el momento de hacer reiteradas (es decir, varias) interrupciones, el PIC se queda colgado y me toca reiniciar el sistema. Les agradezco de antemano su gentil ayuda. El codigo:
DEFINE OSC 20
PAUSEUS 50
DEFINE LCD_DREG PORTB
DEFINE LCD_BITS 4
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
Define ADC_BITS 10
DEFINE ADC_SAMPLEUS 50
ON INTERRUPT GOTO INTERRUPCION
UCON.3=0
UCFG.3=1
TECLA VAR WORD
BAN VAR BIT
BAN1 VAR BIT
VEC VAR BIT[16]
CONT VAR BYTE
TP VAR BYTE
X VAR BYTE
Y VAR BYTE
X1 VAR BYTE
SUM VAR BYTE
B0 VAR BIT
B1 VAR BIT
B2 VAR BIT
BAN=0
BAN1=0
X=0
TP=500
SUM=0
b0=1
B1=1
B2=1
ADCON1=%00001110
ADCON2=%10000100
TRISA=%00011001
TRISB=%00000111
TRISC=%00110000
PORTA=0
PORTB=0
PORTC=0
PAUSE 1000
LCDOUT $fe, 1
LCDOUT $fe, 2, "AUTO RESET..."
PAUSE 3000
Symbol TIM0 = INTCON2.6
SYMBOL TIM1 = INTCON2.5
SYMBOL TIM2 = INTCON2.4
INTCON=%10010000
INTCON3=%11011000
TIM0 = 0
TIM1 = 0
TIM2 = 0
INTERRUPCION:
DISABLE
PAUSE 500
LCDOUT $fe, 1
LCDOUT $fe, 2, "INTERRUPCION"
PAUSE 500
PORTA.2=1
PAUSE 15
PORTA.2=0
PAUSE 50
IF ((PORTB.0 = 0) AND (B0 = 0)) THEN
LCDOUT $fe, 1
LCDOUT $fe, 2, "B0 ACTIVADO"
B0=1
FOR CONT = 1 TO 5
PORTA.2=1
PAUSEUS 1000
PORTA.2=0
PAUSEUS 5000
NEXT CONT
PAUSE 1000
ENDIF
IF ((PORTB.1 = 0) AND (B1 = 0)) THEN
LCDOUT $fe, 1
LCDOUT $fe, 2, "B1 ACTIVADO"
B1=1
FOR CONT = 1 TO 5
PORTA.2=1
PAUSEUS 2000
PORTA.2=0
PAUSEUS 5000
NEXT CONT
PAUSE 1000
ENDIF
IF ((PORTB.2 = 0) AND (B2 = 0)) THEN
LCDOUT $fe, 1
LCDOUT $fe, 2, "B2 ACTIVADO"
B2=1
FOR CONT = 1 TO 5
PORTA.2=1
PAUSEUS 3000
PORTA.2=0
PAUSEUS 5000
NEXT CONT
PAUSE 1000
ENDIF
IF (PORTB.0 = 1) THEN B0=0
IF (PORTB.1 = 1) THEN B1=0
IF (PORTB.2 = 1) THEN B2=0
INTCON=%10010000
INTCON3=%11011000
ADCON2=%10000100
TRISA=%00010001
TRISB=%00000111
TRISC=%00000000
ENABLE
PAUSEUS 100
GOTO CLAVE
END
Por favor si lguien tiene alguna idea, les agradezco,
Saludos