Input 16F877A en Mikrobasic

#1
Hola, tengo una dunda como hacer un input con un boton, con un pic 16F877A en Mikrobasic. estoy recien empezando en esto de programar pero no logro configurar un boton para prender un led.
el codigo que estoy haciendo es este:

program boton
main:

TRISB = 1 ' set PORTB to be input
TRISD = 0 ' set PORTD como salida
PORTD = 0xFF ' borrar puertoD


if (PORTB.0 = 1) then
PORTD.1 = 0
else
if (PORTB.3 = 1) then
PORTD.2 = 0
end if
end if

end.

alguna ayuda?, se supone que tengo 4 botones en RB0 a RB3 y los leds en RD, no tengo problemas en prender leds, logre hacer varios codigos con encender los leds, pero me complican los botones.
Saludos
 
Última edición:
#5
Creo que lo que necesitas es introducir tu programa en un bucle y por alli ponerle un retardo
aqui te pasoun ejemplo, lo que hace es simplemente reflejar el estado del puerto b0 en el puerto d1


program unit4


main:

TRISB = 0xff ' set PORTB to be input
portb=0
TRISD = 0 ' set PORTD como salida
PORTD = 0x00 ' borrar puertoD

while true
if (PORTB.0 = 1) then
PORTD.1 = 1
else
PORTD.1 = 0
end if
wend
end.
 
Última edición:
#8
nose si te pueda ayudar de mucho
pero yo talvez tenga esa respuesta.
yo trabajo con el proton
pero son casi el mismo lenguaje lo cual es el "basic"
ya aver
te doy un ejemplo
IF X & 1 = 0 THEN
A = 0
B = 1
ELSE
A = 1
ENDIF


IF X = 10 THEN
HIGH LED1
ELSEIF X = 20 THEN
HIGH LED2
ELSE
HIGH LED3
ENDIF




y ahora tu pusiste asi:
if (PORTB.0 = 1) then
PORTD.1 = 0
else
if (PORTB.3 = 1) then
PORTD.2 = 0
end if
end if

si vas a poner un else deberías de ponerlo asi:
IF .... THEN
.........
ELSEIF .... THEN
..........
ELSEIF .... THEN
..........
ELSE
.......
ENDIF

fijate que al ultimo se pone el else solo
ahora otra forma de poner else:
IF .... THEN
..........
ELSE
.......
ENDIF
ahora fijate q como es el ultimo else entopnces no va acompañado del IF
aora tu problema es q pusiste un ELSE y luego un IF THEN
nose si me dejo explicar pero esa es tu falla
revisa los ejemplos
y no dudes en preguntar alguna duda si lo tuvieras
 
#9
bueno, mas que nada lo unico que quiero es poder prender un led con un boton. y nisiquiera el siguiente codigo me funciona :confused::confused:

program boton
main:

TRISB = 0xff ' set PORTB to be input

TRISD = 0 ' set PORTD como salida
PORTD = 0xFF ' borrar puertoD

while true
if (PORTB.0 = 1 ) then
delay_ms(500)
PORTD.1 = 0

end if
wend

end.

Saludos

este es el esquema con el que estoy trabajando
 

Adjuntos

Última edición:
#10
primero que nada pon que pic vas a usar
luego el crystal
despues pon esto


TRISB = 0xff ' set PORTB to be input

TRISD = 0 ' set PORTD como salida

bucle
if (PORTB.0 = 1 ) then
PORTD.1 = 0
else
PORTD.1 = 1
end if
goto bucle
end

pero si no te funciona te recomendaria que uses el picbasik pro
despues siguas con el proton y por ultimo con el microbasik
porque tu no vas a empezar desde lo dificil

primero empieza desde lo mas facil y llega hasta lo dificil

esa es mi recomendacion
yo ahora estoy en proton
y despues voy a manejar el microbasik

asi que no te puedo ser de mucha utilidad pero si funciona eso que te puse entonces a buena hora
pero si no, te recomiendo que pases al pic basik pro con el micricode
si quieres te mando un manual buenisimo del pic basik pro como para que comienses
pero dejame buscarlo lo encuentro y te lo envio
Saludos!
 
#11
te falta declarar la frecuencia del cristal, si es que usas oscilador interno o no, y tambien tenes que poner las salidas/entradas como digitales. busca ANSEL y OSCCON en la hoja de datos
 

Temas similares

Arriba