Pues creo que si esta bien.... hay muchas maneras de hacerlos y mientras funcione y no consuman muchos recursos cualquiera es bueno...
mira casi lo mismo que el tuyo pero de como lo haria yo...
la unica diferencia es que en el tuyo esta refrescando la pantalla constantemente, y en el mio la refresca solo cuando es necesario... y en teoria es mas rapido lo que no importa porque estamos hablando de nanosegundos
*no lo probe en el simulador espero que no haya cometido ningun error...
mira casi lo mismo que el tuyo pero de como lo haria yo...
Código:
DEFINE OSC 4
Define LCD_BITS 4 'Defino el tamaño del bus de datos
Define LCD_DREG PORTB 'Defino el puerto B como puerto de datos
Define LCD_DBIT 4 'Inicio los datos en el Bit 4 (B4 a B7)
Define LCD_RSREG PORTB 'Defino el puerto B como el conectado al RS del
Define LCD_RSBIT 1 'Defino que el pin 1 esta conectado al RS del LCD
Define LCD_EREG PORTB 'Defino el puerto B como el conectado al E del
Define LCD_EBIT 2 'Defino que el pin 2 esta conectado al E del LCD
define LCD_LINES 2 'Defino un LCD de 2x16
CMCON=7 'Convierto todos los puertos como digitales
TRISA=%00000111 'Establezco el puerto A como entrada
TRISB=%00000000 'Establezco el puerto B como salida
FLAG VAR BYTE
PAUSE 500 'Pausa de inicio del LCD
'Entradas BCD 'A2 A1 A0
Main:
IF PORTA=%00000000 and FLAG<>1 THEN
LCDOUT $FE,1 'Borra la pantalla del LCD. Si es 1 es porque el conmutador
lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
FLAG = 1 'Pone la bandera a 1 y por tanto el conmutador esta en la
ENDIF
IF PORTA=%00000001 and flag<>2 then '0 0 1
LCDOUT $FE,1
LCDOUT $FE,2,"MOTOR 1"
lcdout $FE,$C0,"CONECTADO"
FLAG = 2
ENDIF
IF PORTA=%00000010 and FLAG<>3 THEN '0 1 0
LCDOUT $FE,1
LCDOUT $FE,2,"MOTOR 2"
lcdout $FE,$C0,"CONECTADO"
FLAG = 3
ENDIF
IF PORTA=%00000011 and Flag<>4 THEN '0 1 1
LCDOUT $FE,1
LCDOUT $FE,2,"MOTOR 3"
lcdout $FE,$C0,"CONECTADO"
FLAG = 4
ENDIF
IF PORTA=%00000100 and flag<>5 THEN
LCDOUT $FE,1
lcdout $FE,2,"DESCONECTADO"
FLAG = 5
ENDIF
IF PORTA=%00000101 and flag<>6 THEN '1 0 1
LCDOUT $FE,1 'Borra la pantalla del LCD. Si es 1 es porque el conmutador
lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
FLAG = 6 'Pone la bandera a 1 y por tanto el conmutador esta en la
ENDIF
IF PORTA=%00000110 and flag<>7 THEN '1 1 0
LCDOUT $FE,1 'Borra la pantalla del LCD. Si es 1 es porque el conmutador
lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
FLAG = 7 'Pone la bandera a 1 y por tanto el conmutador esta en la
ENDIF
IF PORTA=%00000111 and flag<>8 THEN '1 1 1
LCDOUT $FE,1 'Borra la pantalla del LCD. Si es 1 es porque el conmutador
lcdout $FE,2,"DESCONECTADO" 'Escribe "Desconectado"
FLAG = 8 'Pone la bandera a 1 y por tanto el conmutador esta en la
ENDIF
Goto Main
END
la unica diferencia es que en el tuyo esta refrescando la pantalla constantemente, y en el mio la refresca solo cuando es necesario... y en teoria es mas rapido lo que no importa porque estamos hablando de nanosegundos
*no lo probe en el simulador espero que no haya cometido ningun error...
Última edición: