Hola amigos del foro,, quisiera saber si hay (debe haber) alguna manera de hacer que este programa que adjunto se pueda reducir, no se, obviando algunas cosas q podrian estar de mas o utilizando un metodo mas reducido,, el problema es qe al momento de compilar me sale ocupa mucha memoria del pic 16f877a,, y creo que me esta trayendo problemas a la hora de probarlo....
la idea del programa es la de controlar un intercomunicador, al pin0 del portd esta conectdo un pulsador que he difinico como cuenta,, en el se va a almacenar la cantidad de veces que se ha pulsado que significa el numero de usuario que quiero conectar el intercomunicador por un tiempo de 4seg, luego va a verificar si se encuentra mandando un pulso a un piezo electrico al usuario, si se encuentra activará el swtich conectado el portd.1 y comenzara la comunicacion y en el lcd aparecerá "conectado.." y ccuando cuelgue aparecerá ·fin..adios", y si no, aparecera en el lcd "no disponible"
el codigo es el sgte:
' Conexiones obligatorias a la LCD, no requiere inicializar puertos del PIC.
' LCD PIC
' DB4 PortB.0
' DB5 PortB.1
' DB6 PortB.2
' DB7 PortB.3
' RS PortB.4
' E PortB.5
' RW Ground
' Vdd 5 volts
' Vss Ground
' Vo 20K potentiometer (or ground)
' DB0-3 No connect
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_LINES 4
led0 var PORTC.0
led1 var portc.1
led2 var portc.2
led3 var portc.3
led4 var portc.4
led5 var portc.5
led6 var portc.6
led7 var portc.7
boton var PORTD.0
contesta var PORTD.1
i var byte
j var byte
m var byte
p var byte
aux var byte
cuenta var byte
CLEAR
Pause 500 ' Inicialización de LCD, 0.5 segundos.
'******************************************************
com: lcdouT $fe, 1 ' Limpia pantalla LCD
FOR i=0 to 15
lookup i,["cargando, espere.."],aux
LCDOUT aux
pause 200
next i
'*******************************************************
ini:
CLEAR
PORTC=0
CUENTA=0
LcdouT $fe, 1 ' Limpia pantalla LCD
pause 250
Lcdout "Presione las bcs" ' Despliega mensaje
pause 100
Lcdout $fe, $C0 ' Salta a segunda línea
lcdout "para llamar....."
TRISD.0=1
TRISD.1=1
count boton,4000,cuenta
pause 100
IF CUENTA=0 THEN
GOTO INI
ENDIF
llamando
LCDOUT $fe, 1
pause 250
lcdout "llamando........"
pause 100
lcdout $fe, $C0
lcdout "....espere......"
select case cuenta
case 1
high led4
pause 1000
low led4
pause 1000
high led4
pause 1000
low led4
pause 1000
GOTO contest
case 2
high led5
pause 1000
low led5
pause 1000
high led5
pause 1000
low led5
pause 1000
GOTO contest
case 3
high led6
pause 1000
low led6
pause 1000
high led6
pause 1000
low led6
pause 1000
GOTO contest
case 4
high led7
pause 1000
low led7
pause 1000
high led7
pause 1000
low led7
pause 1000
GOTO contest
end select
'pause 3000
contest
SELECT CASE contesta
case 0
lcdout $fe,1
'pause 250
lcdout "no disponible..."
pause 250
goto ini
CASE 1
pause 250
lcdout $fe,1
pause 250
lcdout "conectado......."
goto conectar
END SELECT
conectar
select case cuenta
case 1
high led0
goto loop
case 2
high led1
goto loop
case 3
high led2
goto loop
CASE 4
HIGH led3
GOTO loop
end select
loop
if contesta=1 then
goto loop
else
lcdout $fe,1
pause 250
lcdout "fin... adios"
pause 1000
goto ini
endif
end