Hey! Darkbytes si me sirvió tu ejemplo voy a seguir practicando para intentar otros programas.
Muchas gracias
Muchas gracias
Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature currently requires accessing the site using the built-in Safari browser.
@ DEVICE PROTECT_OFF,WDT_OFF,PWRT_On,xt_osc
define osc 4 ; especifica que se va a utilizar uno de 4 Mhz
bot1 var porta.0 ;arriba
bot2 var porta.1 ;abajo
bot3 var porta.2 ;derecha
bot4 var porta.3 ;izquierda
sal1 var portb.0
sal2 var portb.1
sal3 var portb.2
sal4 var portb.3
inicio
if (bot1=1) and (bot2=0) then arriba
if (bot1=0) and (bot2=1) then abajo
if (bot1=1) and (bot2=1) then doble1 ; arriba abajo
if (bot3=1) and (bot4=0) then derecha
if (bot3=1) and (bot4=1) then doble2 ;derecha izquierda
if (bot3=0) and (bot4=1) then izquierda
if (bot1=1) and (bot3=1) then doble3 ;arriba derecha
if (bot2=1) and (bot3=1) then doble4 ;abajo derecha
if (bot4=1) and (bot2=1) then doble5 ;izquierda abajo
if (bot4=1) and (bot1=1) then doble6 ;arriba izquierda
low sal1
low sal2
low sal3
low sal4
goto inicio
doble3
high sal1
high sal3
low sal2
low sal1
goto inicio
doble4
high sal2
high sal3
low sal1
low sal4
goto inicio
doble5
high sal4
high sal2
low sal1
low sal3
goto inicio
doble6
high sal4
high sal1
low sal2
low sal3
goto inicio
arriba
HIGH SAL1
low sal2
low sal3
low sal4
goto Inicio
abajo
high sal2
low sal1
low sal3
low sal4
goto inicio
derecha
high sal3
low sal1
low sal2
low sal4
goto inicio
izquierda
high sal4
low sal1
low sal2
low sal3
goto inicio
doble1
high sal1
high sal2
low sal3
low sal4
goto inicio
doble2
high sal3
high sal4
low sal1
low sal2
goto inicio
end
lo logre en asm
así en asm pero como se logra hacer esto en picbasic pro?Código:Principal movf PORTA,W ; Carga el registro de datos del Puerto A en (W). movwf PORTB ; El contenido de W se deposita en el puerto de salida. goto Principal ; Crea un bucle cerrado e infinito. END ; Fin del programa.
al presionar una vez sw1 y una vez sw2 el led enciende una vez, al presionar 2 veces sw1 y una vez sw2 el led se enciende 3 veces
B0 VAR Byte
Counter VAR Byte
led = 0
Clear
Program:
if sw1=0 and sw2=0 then Prender1
;if sw1=0 and sw1=0 and sw2=0 then Prender2
If Counter = 2 And sw2 = 0 Then
Counter = 0
GoTo Prender2
EndIf
Button sw1,0,255,20,B0,0,Program
Counter = Counter + 1
If Counter >= 3 Then Counter = 0
goto Program
lo simulo en proteus y no me hace nada de nada.
@ DEVICE PIC16F628A ; Microcontrolador utilizado
; Palabra de configuración
@ DEVICE INTRC_OSC_NOCLKOUT,PROTECT_OFF,CPD_OFF,WDT_OFF,MCLR_ON,PWRT_ON,BOD_OFF,LVP_OFF
;*******************************************************************************
DEFINE OSC 4 ; Definir que se trabajará con 4MHz.
;CMCON = 7 ; Comparadores analógicos OFF
;TRISA = $FF ; Puerto A = b'11111111' (255)
TRISB = $FB ; Puerto B = b'11111011' (251)
Estuve algo ocupado estos días y no pude contestar antes.amigo d@rkbytes, perdón por la demora, pero tuve una calamidad familiar, y solamente hasta hoy puedo volver a retomar todo. En cuanto a tu ayuda, hice cuanto me indicaste (según lo que he aprendido hasta ahora), pude compilar el programa, pero al simularlo en proteus, no me funciona como debe ser, adjunto los archivos (el del pbp, el hex y el diagrama en proteus) para que me ayudes y me indiques cual puede ser el problema y de haber alguno, indicarme por favor en que me he equivocado.
cuando quiero usar el mismo botón en cualquier parte del programa cambiando la etiqueta, me ejecuta tal cual estaba la primera vez.
Es decir que no puedo usar el mismo botón para diferentes cosas, si lo usé para encender un led primero, en cualquier parte del programa que use el mismo botón me enciende el led, por más que cambie las instrucciones del mismo.
Mi pregunta es: esto es asi? una vez asignado un boton a una tarea solo realiza esa tarea el boton?
por ejemplo con un button enciendo un led y quiero con el mismo boton apagarlo pero me lo intenta encender de nuevo, claro que le digo que ponga a 0 la salida del led.
La ayuda de PICBasic Pro dijo:Bvar
Variable con tamaño de byte usada internamente para conteo de demoras y repeticiones.
Debe ser inicializada a 0 antes de ser usada y no ser usada en cualquier lugar del programa.
Eso es normal y está explicado en la ayuda de PICBasic Pro.
Por cada instrucción Button que se usa dentro del programa, se le debe asignar una variable diferente. (Bvar).
Así es, cada instrucción Button debe tener una variable de conteo única.¿Entonces para usar el mismo botón para distintas tareas, debo definir y usar otra variable, por ejemplo; A var byte para encender el led y usar una B var byte para apagarlo?
jmth dijo:Edito porque me he equivocado, me he hecho un lío. Tienes 2 botones y 2 leds. Cada botón controla cada LED. Lo que necesitas es evitar que "rebote", para ello, coloca un while. No sé cómo es la sintaxis ahí pero sería algo como:
Encender1:
while pulsador1 = 0 (que no haga nada pero se quede atascado aquí, hasta soltar el botón)
...
Encender2:
while pulsador2 = 0 (lo mismo)
...
no logro poder detener la salida , como es un bucle cambia como podria detenerlo
LED1 var portb.0 ;designamos LED1 al portb.0
pulsador1 var porta.1 ;designamos pulsador1 a porta.1
inicio:
WHILE pulsador1 =0 ; si se pulsa 0 se enciende
HIGH led1
WEND ;si es 1 apaga led
low led1
GOTO INICIO
END
LED1 var portb.0 ;designamos LED1 al portb.0
LED2 var portb.1
LED3 VAR portb.2
LED4 VAR portb.3
pulsador1 var porta.0 ;designamos pulsador1 a porta.0
pulsador2 Var porta.1
pulsador3 var porta.2
pulsador4 Var porta.3
IF pulsador1 = 0 THEN
WHILE pulsador1 = 0
PAUSE 200
WEND
toggle led1
ENDIF
IF pulsador2 = 0 THEN
WHILE pulsador2 = 0
PAUSE 200
WEND
toggle led2
ENDIF
IF pulsador3 = 0 THEN
WHILE pulsador3 = 0
PAUSE 200
WEND
toggle led3
ENDIF
IF pulsador4 = 0 THEN
WHILE pulsador4 = 0
PAUSE 200
WEND
toggle led4
ENDIF
symbol int=portb.0
symbol pul=portb.1
symbol led=portb.2
symbol led1=portb.3
trisb.0=1
trisb.1=1
trisb.2=0
trisb.3=0
led=0
led1=0
inicio:
if int=0 and pul=0 then
toggle led
pause 1000
high led
else
low led
high led1
pause 100
low led1
pause 100
endif
goto inicio
inicio:
Symbol pulsador1 = PORTB.0
Symbol pulsador2 = PORTB.1
Symbol led = PORTB.2
contador Var Word
OPTION_REG.7 = 0
TRISB = %11110011
PORTB = 0
programa:
If pulsador1 = 0 And pulsador2 = 0 Then
High led
While pulsador1 = 0 And pulsador2 = 0
contador = contador + 1
Pause 1
If contador > 2000 Then
Low led
While pulsador1 = 0 And pulsador2 = 0
@ NOP
Wend
EndIf
Wend
Low led
contador = 0
EndIf
GoTo programa
End