El problema es este al estar en la rutina ATOTAL no me lee ningun pin y solo lee si mantengo precionado la tecla 1 del teclado matricial... pero no me explico xq y otra cosa más el ciclo for en la rutina sirena no esta funcionando alguien me puede ayudar o decirme q es lo q pasa... gracias
aqui esta el codigo lo estoy compilando en microcode studio picbasic pro2.6
DEFINE LCD_DREG PORTD 'LCD data port
DEFINE LCD_DBIT 4 'LCD data starting bit 0 or 4
DEFINE LCD_RSREG PORTD 'LCD register select port
DEFINE LCD_RSBIT 2 'LCD register select bit
DEFINE LCD_EREG PORTD 'LCD enable port
DEFINE LCD_EBIT 3 'LCD enable bit
DEFINE LCD_BITS 4 'LCD bus size 4 or 8
DEFINE LCD_LINES 2 'Number lines on LCD
DEFINE LCD_COMMANDUS 2000 'Command delay time in us
DEFINE LCD_DATAUS 50 'Data delay time in us
ADCON1=%0110
TRISA = %11111111
TRISC = %11111010
NUMERO VAR BYTE
KEY1 VAR BYTE
KEY2 VAR BYTE
KEY3 VAR BYTE
KEY4 VAR BYTE
I VAR BYTE
R VAR BYTE
BIP VAR PORTC.2
'DOOR VAR PORTC.4
A VAR PORTB.4
B VAR PORTB.5
C VAR PORTB.6
D VAR PORTB.7
UNO VAR PORTB.0
DOS VAR PORTB.1
TRES VAR PORTB.2
CUATRO VAR PORTB.3
SEN1 VAR PORTC.1
SEN2 VAR PORTA.0
INICIANDO:
HIGH BIP
PAUSE 500
LOW BIP
LCDOUT $FE, 1
LCDOUT $FE, 2, "1) TOTAL"
LCDOUT $FE, $C0, "2) PARCIAL"
GOTO TECLAUNO
BARRIDO:
LOW A
IF UNO=0 THEN NUMERO=1 :RETURN
IF DOS=0 THEN NUMERO=2 :RETURN
IF TRES=0 THEN NUMERO=3 :RETURN
IF CUATRO=0 THEN NUMERO=10 :RETURN
HIGH A
LOW B
IF UNO=0 THEN NUMERO=4 :RETURN
IF DOS=0 THEN NUMERO=5 :RETURN
IF TRES=0 THEN NUMERO=6 :RETURN
IF CUATRO=0 THEN NUMERO=11 :RETURN
HIGH B
LOW C
IF UNO=0 THEN NUMERO=7 :RETURN
IF DOS=0 THEN NUMERO=8 :RETURN
IF TRES=0 THEN NUMERO=9 :RETURN
IF CUATRO=0 THEN NUMERO=12 :RETURN
HIGH C
LOW D
IF UNO=0 THEN NUMERO=14 :RETURN
IF DOS=0 THEN NUMERO=0 :RETURN
IF TRES=0 THEN NUMERO=15 :RETURN
IF CUATRO=0 THEN NUMERO=13 :RETURN
HIGH D
PAUSE 10
GOTO BARRIDO
'-------------------
PTECLA:
HIGH BIP
PAUSE 100
LOW BIP
ESPACIO:
IF UNO=0 THEN ESPACIO
IF DOS=0 THEN ESPACIO
IF TRES=0 THEN ESPACIO
IF CUATRO=0 THEN ESPACIO
PAUSE 25
RETURN
'-------------------
TECLAUNO:
GOSUB BARRIDO
GOSUB PTECLA
'LCDOUT $FE, $C0, DEC NUMERO
IF NUMERO = 1 THEN TOTAL'TECLADOS
GOTO TECLAUNO
TECLADOS:
GOSUB BARRIDO:GOSUB PTECLA
LCDOUT, DEC NUMERO
'IF NUMERO = 2 THEN TECLATRES
'GOTO FALSO1
TOTAL:
LCDOUT $FE, 1
TOTAL1:
LCDOUT $FE, 2, " TOTAL"
LCDOUT $FE, $C0, "1) ON 3) SALIR"
GOSUB BARRIDO
GOSUB PTECLA
'LCDOUT $FE, $C0, DEC NUMERO
IF NUMERO = 1 THEN CLAVEIN1'TECLADOS
'IF NUMERO = 2 THEN CLAVEOUT1
IF NUMERO = 3 THEN INICIANDO
goto TOTAL1
CLAVEIN1:
LCDOUT $FE, 1
CLAVEIN11:
LCDOUT $FE, 2, "INGRESE CLAVE"
DAT1:
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
KEY1 = NUMERO
IF KEY1 < 16 THEN DAT2
GOTO DAT1
DAT2:
LCDOUT $FE, $C0, DEC KEY1
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
KEY2 = NUMERO
IF KEY2 < 16 THEN DAT3
GOTO DAT2
DAT3:
LCDOUT, DEC KEY2
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
KEY3 = NUMERO
IF KEY3 < 16 THEN DAT4
GOTO DAT3
DAT4:
LCDOUT, DEC KEY3
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
KEY4 = NUMERO
IF KEY4 < 16 THEN CLAVFIN
GOTO DAT4
CLAVFIN:
LCDOUT, DEC KEY4
PAUSE 1000
GOTO ALARMATOTAL
ALARMATOTAL:
LCDOUT $FE, 1
LCDOUT $FE, 2, "ACTIVADO"
PAUSE 5000 'TIEMPO PARA SALIR DE LA CASA
LCDOUT $FE, 1
ATOTAL:
LCDOUT $FE, 2, " PRESIONE * "
LCDOUT $FE, $C0, " PARA SALIR "
gosub SENSAR
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO = 14 THEN CLAVEOUT1'TECLADOS
GOTO ATOTAL
CLAVEOUT1:
LCDOUT $FE, 1
CLAVEOUT11:
LCDOUT $FE, 2, "INGRESE CLAVE"
DATOUT1:
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO = KEY1 THEN DATOUT2
GOTO MDAT2
DATOUT2:
LCDOUT $FE, $C0, DEC KEY1
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO = KEY2 THEN DATOUT3
GOTO MDAT3
DATOUT3:
LCDOUT, DEC KEY2
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO = KEY3 THEN DATOUT4
GOTO MDAT4
DATOUT4:
LCDOUT, DEC KEY3
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO = KEY4 THEN CLAVOUTFIN
GOTO MDATSALIR
CLAVOUTFIN:
LCDOUT, DEC KEY4
PAUSE 1000
LCDOUT $FE, 1, "DESACTIVADO"
PAUSE 1000
I=0
GOTO TOTAL
MDAT2:
LCDOUT $FE, $C0, DEC NUMERO
MDAT22:
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO < 16 THEN MDAT3
GOTO MDAT22
MDAT3:
LCDOUT, DEC NUMERO
MDAT33:
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO < 16 THEN MDAT4
GOTO MDAT33
MDAT4:
LCDOUT, DEC NUMERO
MDAT44:
NUMERO=16
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO < 16 THEN MDATSALIR
GOTO MDAT44
MDATSALIR
LCDOUT, DEC NUMERO
PAUSE 1000
LCDOUT $FE, 1, "ERROR"
PAUSE 1000
GOTO CLAVEOUT1
SIRENA:
LCDOUT $FE, 1
for i=1 to 3000
lCDOUT $FE, 2, "PRESIONE * "
LCDOUT $FE, $C0, "PARA SALIR "
GOSUB BARRIDO
GOSUB PTECLA
'LCDOUT $FE, $C0, DEC NUMERO
IF NUMERO = 14 THEN CLAVEOUT1'TECLADOS
next i
GOTO CHILLAR
CHILLAR:
HIGH BIP
PAUSE 500
LOW BIP
PAUSE 500
GOTO CHILLAR
SENSAR:
PAUSE 100
IF SEN1 = 1 THEN SIRENA
IF SEN2 = 1 THEN SIRENA
RETURN
END