Problema de estructura de codigo en mikrobasic

Hola,
Estoy haciendo un pequeño sistema que maneje luces de ocupado(led rojo) y desocupado (led verde) de acuerdo al estado de los sensores. Al momento de simularlo en Proteus, corre sin ningun problema, pero cuando lo cargo al pic tengo errores, el mas notorio es por ejemplo que dos led verdes no se encienden al mismo tiempo y el PIC se cuelga.. el pic que uso es el 16f887 a 8mhz.
Aca pongo el codigo en basic. Agradezco la ayuda....

program paqueo

const encendido as byte= %1
const apagado as byte =%0
dim parqueodispo1 as short
dim parqueodispo2 as short
dim parqueodispo3 as short
dim numparqueos1 as short
dim parqbusy1 as short
dim txtnum1 as string[3] 'variable string para convertir numparqueos del piso 1
dim numparqueos2 as short
dim parqbusy2 as short
dim txtnum2 as string[3] 'variable string para convertir numparqueos del piso 2
dim numparqueos3 as short
dim parqbusy3 as short
dim txtnum3 as string[3] 'variable string para convertir numparqueos del piso 3
dim textwelcome as string[16]
dim textparqueo as string[16]


main:

ANSEL =0
ANSELH=0 'hace que puerto a sea i/O digital
PORTA=0 'inicializa puerto a
TRISA =0 'define puerto a como input ???
PORTB=0 'inicializa el puerto B
TRISB=0 'define puerto B como output
PORTC=0
TRISC=0
PORTD = 0
TRISD = 0
PORTE = 0
TRISE = 0
numparqueos1= 0
numparqueos2= 0
numparqueos3= 0


Lcd_Config(PORTD,7,6,5,4,PORTE,2,1,0) ' Lcd_Init_with custom pin settings
LCD_Cmd(LCD_CLEAR) ' clear display
LCD_Cmd(LCD_CURSOR_OFF) ' turn cursor off

loopparqueo:

parqueodispo1=3
parqueodispo2=3
parqueodispo3=2
parqbusy1 = 0
parqbusy2 = 0
parqbusy3 = 0

If PORTA.0= 0 then
parqbusy1= parqbusy1 + 1
PORTC.1=encendido 'Enciende el LED ROJO
PORTC.0= apagado 'apaga el verde solamente si esta encendido
else
PORTC.0=encendido 'Enciende el LED VERDE
PORTC.1=apagado
end if

IF PORTA.1= 0 then
parqbusy1=parqbusy1 +1
PORTC.3=encendido 'Enciende el LED ROJO
PORTC.2=apagado 'apaga el verde solamente si esta encendido
else
clearbit(PORTC,3)
setbit (PORTC,2) 'Enciende el LED VERDE
end if


IF PORTA.2 = 0 then
parqbusy1=parqbusy1 + 1
PORTC.5 = encendido 'Enciende el LED ROJO
PORTC.4= apagado 'apaga el verde solamente si esta encendido
else
PORTC.5 = apagado
PORTC.4= encendido 'Enciende el LED VERDE
end if

If PORTA.3 = 0 then
parqbusy2=parqbusy2 + 1
PORTD.1 =encendido
PORTD.0=apagado
else
PORTD.1=apagado
PORTD.0= encendido
end if

If PORTA.4 = 0 then
parqbusy2=parqbusy2 + 1
PORTD.3 =encendido
PORTD.2=apagado
else
PORTD.3=apagado
PORTD.2= encendido
end if

If PORTA.5 = 0 then
parqbusy2=parqbusy2 + 1
PORTB.1 =encendido
PORTB.2=apagado
else
PORTB.1=apagado
PORTB.2= encendido
end if

If PORTA.6 = 0 then
parqbusy3 = parqbusy3 + 1
PORTB.3 = encendido
PORTB.4 = apagado
else
PORTB.3= apagado
PORTB.4= encendido
end if

If PORTA.7 = 0 then
parqbusy3 = parqbusy3 + 1
PORTB.5 = encendido
PORTB.6 = apagado
else
PORTB.5= apagado
PORTB.6= encendido
end if

numparqueos1 = parqueodispo1 - parqbusy1
numparqueos2 = parqueodispo2 - parqbusy2
numparqueos3 = parqueodispo3 - parqbusy3
BytetoStr(numparqueos1,txtnum1)
BytetoStr(numparqueos2,txtnum2)
BytetoStr(numparqueos3,txtnum3)
IF numparqueos1 + numparqueos2 + numparqueos3 = 0 then
LCD_Cmd(LCD_CLEAR) ' clear display
LCD_Out(2,2,"NO HAY LUGARES")
LCD_Out(3,0,"DISPONIBLES")

Delay_ms(500)
else
textparqueo = "Parq Disponibles"
LCD_Out(1,1, textparqueo) ' print textparqueo to LCD, 1st row, 1th column
Lcd_Cmd(LCD_Second_row)
LCD_OUT(2,1,"PRIMER PISO")
Lcd_Cmd(LCD_Third_row)
LCD_OUT(3,-3,"SEGUNDO PISO")
Lcd_Cmd(LCD_Fourth_row)
LCD_OUT(4,-3,"TERCER PISO")
LCD_OUT(2,13,txtnum1)
LCD_OUT(3,9,txtnum2)
LCD_OUT(4,9,txtnum3)
end if
'Delay_ms(50)

goto loopparqueo

end.
 
Última edición:
ok creo que los puertos a estan mal declarados ajaja aunq no se mucho de mikrobasic pero manejo bien pbp asi q intenta desabilitar los puertos a como analogos y pasalos a digital y pon un numero limitado de tus parqueos porque por eso se cuelga tu memoria del pic por ejemplo estas llevando a contar a mas de mil a un millon de veces mejor ponle un limite bueno eso es lo que veo aunq no entiendo muy bien lo que hace tu programa pero eso es lo que note ojala te ayude
 
Atrás
Arriba