Define CONF_WORD = 0x3ff9 'Definicion de bit OK
Define CLOCK_FREQUENCY = 4 'Frecuencia del cristal imagino que 4Mhz modo XT
Define LCD_BITS = 4
Define LCD_RSREG = PORTA
Define LCD_RSBIT = 3
Define LCD_EREG = PORTA
Define LCD_EBIT = 4
Define LCD_COMMANDUS = 2000 'Es el tiempo que tarda en ejecutarce el comando mas largo, borrado completo del LCD
Define LCD_DATAUS = 100 'Tiempo intermedio de espera despues de enviar dato, puede ser menor pero no todos los LCDs lo soportan
Define LCD_INITMS = 50 'Tiempo de incio del LCD, puede variar tambien segun el fabricante.
'Lcdinit 0
Dim izq As Byte
Dim der As Byte
Dim cen As Byte
Dim control As Byte
Lcdcmdout LcdClear
control = 0
izq = 0
der = 0
cen = 0
AllDigital 'En este pic puede que no haga falta, pero nocuesta trabajo ponerlo
TRISB.0 = 0
TRISB.1 = 0
TRISB.2 = 0
TRISB.3 = 0
Lcdinit 0 'Mejor aqui, despues de configurar los puertos
WaitMs 100 'Espera de estabilizacion de señales, puede ser mucho mas pequeño
grande:
If PORTA.0 = 0 And PORTA.1 = 0 And PORTA.2 = 0 Then
PORTB.0 = 1
PORTB.1 = 0
PORTB.2 = 1
PORTB.3 = 0
If control = 0 Then
Lcdout "Buscando Linea"
Endif
control = 1
Else
loop:
If PORTA.0 = 1 And PORTA.1 = 0 And PORTA.2 = 0 Then
PORTB.0 = 1
PORTB.1 = 0
PORTB.2 = 1
PORTB.3 = 0
If cen = 0 Then
Lcdcmdout LcdClear
Lcdout "Linea recta"
Endif
izq = 0
der = 0
cen = 1
Endif
If PORTA.0 = 1 And PORTA.1 = 1 And PORTA.2 = 1 Then
PORTB.0 = 1
PORTB.1 = 0
PORTB.2 = 1
PORTB.3 = 0
If cen = 0 Then
Lcdcmdout LcdClear
Lcdout "Linea recta"
Endif
izq = 0
der = 0
cen = 1
Endif
If PORTA.0 = 1 And PORTA.1 = 1 And PORTA.2 = 0 Then
PORTB.0 = 0
PORTB.1 = 1
PORTB.2 = 1
PORTB.3 = 0
If der = 0 Then
Lcdcmdout LcdClear
Lcdout "Gira derecha"
Endif
izq = 0
der = 1
cen = 0
Endif
If PORTA.0 = 0 And PORTA.1 = 1 And PORTA.2 = 0 Then
PORTB.0 = 0
PORTB.1 = 0
PORTB.2 = 1
PORTB.3 = 0
If der = 0 Then
Lcdcmdout LcdClear
Lcdout "Gira derecha"
Endif
izq = 0
der = 1
cen = 0
Endif
If PORTA.0 = 1 And PORTA.1 = 0 And PORTA.2 = 1 Then
PORTB.0 = 1
PORTB.1 = 0
PORTB.2 = 0
PORTB.3 = 1
If izq = 0 Then
Lcdcmdout LcdClear
Lcdout "Gira izquierda"
Endif
izq = 1
der = 0
cen = 0
Endif
If PORTA.0 = 0 And PORTA.1 = 0 And PORTA.2 = 1 Then
PORTB.0 = 1
PORTB.1 = 0
PORTB.2 = 0
PORTB.3 = 0
If izq = 0 Then
Lcdcmdout LcdClear
Lcdout "Gira izquierda"
Endif
izq = 1
der = 0
cen = 0
Endif
If PORTA.0 = 0 And PORTA.1 = 0 And PORTA.2 = 0 Then
PORTB.0 = 0
PORTB.1 = 0
PORTB.2 = 0
PORTB.3 = 0
Endif
Goto loop
Endif
Goto grande 'Estructura rara con los gotos, pero si funciona pues bien