Curso de programación de PIC en PICBasic Pro

Podrás copiar y pegar solo el programa?
De acuerdo.
Muchas gracias por tu interés.
Aquí está el código, pero cada que se actúa en el switch XSR se producen rebotes y no cuenta correctamente.
Saludos.
Perdón, dijiste copiar y pegar el programa y yo envié adjunto.
Aquí esta:
Código:
main:
if XSR = 1 then encendido '(si la entrada 0 es igual a 1, ir al sub programa…)
if XSR = 0 then contar '(si la entrada 0 es igual a 0, ir al sub programa ….)
goto main '(volver a la 1er línea del programa, osea, main)

encendido:
'***************Los bits del SELECTOR, anulan la memorización del piso solicitado********************
IF SELECTOR = 0 THEN
S0=1
ELSE
S0=0
ENDIF

IF SELECTOR = 1 THEN
S1=1         
ELSE
S1=0
ENDIF

IF SELECTOR = 2 THEN
S2=1       
ELSE
S2=0
ENDIF

llamadas:
'*************************LLAMADAS Y MEMORIZACIION DE PISO***********************************
if S0=0 and RP0=1 or XP0=1  then
RP0=1
led0=1
else
RP0=0
led0=0
endif

if S1=0 and RP1=1 or XP1=1  then
RP1=1
led1=1
else
RP1=0
led1=0
endif

if S2=0 and RP2=1 or XP2=1  then
RP2=1
led2=1
else
RP2=0
led2=0
endif

'GOTO INICIO
goto main '(volver a la etiqueta “main”)
'END

'**********************CONTADOR/SELECTOR*************************
'Conforme va subiendo de pisos el selector se va incrementando
contar:
'incrementar:
CONTA=CONTA+1 ; INCREMENTAMOS EL contador

IF CONTA=1 THEN
SELECTOR= SELECTOR+1
CONTA=0
ENDIF

If SELECTOR >= 3 Then SELECTOR = 0
goto llamadas
goto main '(volver a la etiqueta “main”)

END
 
Última edición por un moderador:
Pues ese no es el programa que has subido anteriormente. A mi me aparece esto: (No subo todo el código).

C:
IF XSR = 0  THEN    ; si XSR es accionado entonces
gosub ar            ; ir a antirebote             
gosub contar        ; ir a subrutina contar
endif

Que llama a este subrutina para quedarse a vivir en ella:

C:
'*****************************ANTIREBOTES*****************************
AR:                     
if XSR =0 then goto ar
return

'***********************************************************************


Alguien dijo algo así como que hay tantas formas de programar como programadores existen. Pero te repito, como te han repetido ya varias veces: Aprende a usar interrupciones y usa temporizadores.


Un ejemplo rápido (Que no lo mejor):

-> Interrupción por fin de carrera (Pulsador).
- Chequeo si terminó la temporalización. (Temporización activa).
Si no está activa:
- Activo bandera de que se detecto el fin de carrera.
- Marco para temporizar 1 Segundo (puede ser más, puede ser menos) (Temporizador echo también con interrupciones).
- Salgo de la interrupción.

Programa:

-Si la bandera de fin de carrera esta activa -> aumento el contador y borro la bandera.
- Goto programa :LOL:.
 
Pues ese no es el programa que has subido anteriormente. A mi me aparece esto: (No subo todo el código).

C:
IF XSR = 0  THEN    ; si XSR es accionado entonces
gosub ar            ; ir a antirebote          
gosub contar        ; ir a subrutina contar
endif

Que llama a este subrutina para quedarse a vivir en ella:

C:
'*****************************ANTIREBOTES*****************************
AR:                  
if XSR =0 then goto ar
return

'***********************************************************************


Alguien dijo algo así como que hay tantas formas de programar como programadores existen. Pero te repito, como te han repetido ya varias veces: Aprende a usar interrupciones y usa temporizadores.


Un ejemplo rápido (Que no lo mejor):

-> Interrupción por fin de carrera (Pulsador).
- Chequeo si terminó la temporalización. (Temporización activa).
Si no está activa:
- Activo bandera de que se detecto el fin de carrera.
- Marco para temporizar 1 Segundo (puede ser más, puede ser menos) (Temporizador echo también con interrupciones).
- Salgo de la interrupción.

Programa:

-Si la bandera de fin de carrera esta activa -> aumento el contador y borro la bandera.
- Goto programa :LOL:.
Buenas noches.
Gracias, todas las sugerencias las tomaré en cuenta.
Con respecto al antirebotes, si te fijas en el código actual, no lo estoy utilizando.
Es el mismo programa, pero con las modificaciones realizadas en base a los amables consejos de torres.electrónico.
únicamente no puse la parte superior donde está la declaración de variables, etc. porque creí que no era importante al estar ya en el archivo anterior.

Aquí lo pongo completo:
Saludos.
Código:
'//directivas

INCLUDE "modedefs.bas"

ADCON1=6                ;Apaga los comparadores de voltaje y digitaliza el puerto A (PIC16F876A)

@ ERRORLEVEL -306       ; anular el mensaje de limite de página rebasado

'@ device XT_osc        ; Utiliza un cristal externo de 4 MHz

'@ device BOD_OFF       ; APAGAMOS EL BODEN DE CONSUMO

'************************************************************

'//dimensionamiento

'VARIABLES     

B5          VAR BYTE    ;SELECTOR PISOS 0~3

C0          VAR BYTE    ;MEMORIA

n1          VAR BYTE    ;variable para intermitnte

n0          VAR byte    ;variable para retardo cerrar puerta

CNT         VAR BYTE    ;variable para conteo interrupción

CONTA       VAR BYTE    ;variable para incrementar o decrementar conteo         

SELECTOR    VAR BYTE    ;variable para almacenar conteo

'************************************************************

'//ALIAS


XP0         VAR  PORTA.0   ;llamada piso 0

XP1         VAR  PORTC.5   ;llamada piso 1

XP2         VAR  PORTA.2   ;llamada piso 2

XSR         VAR  PORTA.1   ;final de carrera selector (contador)         

'***************************SALIDAS************************

led0        VAR PORTB.0    ;Memoria PISO 0

led1        VAR PORTB.1    ;Memoria PISO 1

led2        VAR PORTB.2    ;Memoria PISO 2

    

'*********Variables dependiente del SELECTOR DE PISOS*********

S0          var B5.0       ;borra memoria Piso 0

S1          var B5.1       ;borra memoria Piso 1

S2          var B5.2       ;borra memoria Piso 2

'***********************MEMORIZACION DE PISOS*****************

RP0         VAR  C0.0       ;memoria Piso 0

RP1         VAR  C0.1       ;memoria Piso 1

RP2         VAR  C0.2       ;memoria Piso 2

'*************************************************************

'//configuraciones

TRISA=%11111111          ;Configuara el puerto A como ENTRADAS

TRISB=%10000000          ;Configuara el puerto B.7 como entrada, el resto como salidas

TRISC=%00101000          ;Configuara el puerto _C.3 y C.5 como entrada, el resto como salidas

PORTB=0

'SELECTOR=0


'inicio:



'\\Cuando el final de carrera XSR = 0, es decir, cuando es accionado, esto en la realidad dura

'unos 20 segundos o más, el programa se estanca y no se puede hacer las llamadas

'desde otros pisos y ninguna otra acción.



'IF XSR = 0  THEN    ; si XSR es accionado entonces

'gosub ar            ; ir a antirebote           

'gosub contar        ; ir a subrutina contar

'endif


main:

if XSR = 1 then encendido '(si la entrada 0 es igual a 1, ir al sub programa…)

if XSR = 0 then contar '(si la entrada 0 es igual a 0, ir al sub programa ….)

goto main '(volver a la 1er línea del programa, osea, main)


encendido:

'***************Los bits del SELECTOR, anulan la memorización del piso solicitado********************

IF SELECTOR = 0 THEN

S0=1

ELSE

S0=0

ENDIF


IF SELECTOR = 1 THEN

S1=1         

ELSE

S1=0

ENDIF

 

IF SELECTOR = 2 THEN

S2=1       

ELSE

S2=0

ENDIF


llamadas:

'*************************LLAMADAS Y MEMORIZACIION DE PISO***********************************

if S0=0 and RP0=1 or XP0=1  then

RP0=1

led0=1

else

RP0=0

led0=0

endif


if S1=0 and RP1=1 or XP1=1  then

RP1=1

led1=1

else

RP1=0

led1=0

endif


if S2=0 and RP2=1 or XP2=1  then

RP2=1

led2=1

else

RP2=0

led2=0

endif


'GOTO INICIO

goto main '(volver a la etiqueta “main”)

'END

'**********************CONTADOR/SELECTOR*************************

'Conforme va subiendo de pisos el selector se va incrementando

contar:

'incrementar:

CONTA=CONTA+1 ; INCREMENTAMOS EL contador

IF CONTA=1 THEN

SELECTOR= SELECTOR+1

CONTA=0

ENDIF

If SELECTOR >= 3 Then SELECTOR = 0

goto llamadas


goto main '(volver a la etiqueta “main”)

END

'*****************************ANTIREBOTES*****************************

AR:                   

if XSR =0 then goto ar

return


'***********************************************************************
Viendo el código que se produce con ese engendro de BASIC...está por darme algo...
Mejor voy a vomitar...:sick::sick::sick::sick::sick::sick:

PD: hace mas de 40 años que no uso goto + etiquetas
🤮🤮🤮🤮🤮🤮🤮🤮🤮
No sé por qué lo dices.
Nadie nace sabiendo, y si como novato que soy me sirve el Basic para iniciarme en esto de la programación de los microcontroladores, pues bien venido sea.
A propósito, cuál es el lenguaje que tu utilizas?
Me refiero al de programación.
Saludos!
 

Dr. Zoidberg

Well-known-Papá Pitufo
Nadie nace sabiendo, y si como novato que soy me sirve el Basic para iniciarme en esto de la programación de los microcontroladores, pues bien venido sea.
A propósito, cuál es el lenguaje que tu utilizas?
Me refiero al de programación
La crítica no es hacia vos sino hacia el lenguaje, que es una bestia prehistórica que debió morir en los 80's pero aún sigue viva destrozando la forma de pensar de los programadores...y en especial de los novatos.
Yo uso C y C++ hace muchos años para programar microntroladores, pero también los he programado en PLM y en assembler. También programo en Java y en Python, pero no microcontroladores...y a Python lo odio...
 
La crítica no es hacia vos sino hacia el lenguaje, que es una bestia prehistórica que debió morir en los 80's pero aún sigue viva destrozando la forma de pensar de los programadores...y en especial de los novatos.
Yo uso C y C++ hace muchos años para programar microntroladores, pero también los he programado en PLM y en assembler. También programo en Java y en Python, pero no microcontroladores...y a Python lo odio...
No hay problema!
Tomaré en cuenta tus observaciones.
Saludos!
 
Tranqui Oswald, es como el helado, te gustan unos y otros menos,.
Yo por ejemplo, siempre amé a Basic,(compilable o no) porque me permitía resolver pavadas en 10 minutos, que era mi necesidad inmediata, para resolver asuntos de reparar COSAS.
Al C en todas sus versiones, no le tuve paciencia y no me gustaba su sintaxis en general. Tampoco ahora. :giggle:
 
Tranqui Oswald, es como el helado, te gustan unos y otros menos,.
Yo por ejemplo, siempre amé a Basic,(compilable o no) porque me permitía resolver pavadas en 10 minutos, que era mi necesidad inmediata, para resolver asuntos de reparar COSAS.
Al C en todas sus versiones, no le tuve paciencia y no me gustaba su sintaxis en general. Tampoco ahora. :giggle:
Estimado unmonje, gracias por tus comentarios.
Algo parecido me pasa, me siento más cómodo con el lenguaje Basic, pero si tengo oportunidad más adelante si me gustaría curiosear el lenguaje C aunque sea para desanimarme.
Cordial saludo!
 
Última edición:
...y a Python lo odio...
"Ya no te ajunto"* :ROFLMAO:

Soy Pytoniso total, me encanta de la A a la Z

Yo aprendí a programar en basic de los 80, también ensamblador. Pasar a basic estructurado fue fácil, pasar a objetos no tanto.
C medio me aclaro pero nunca me ha gustado. C++ y C# lo justo tirando a "modificar un poco y ya"
He probado java, javascript, pascal... y por último python y claramente me quedo con la serpiente para todo caso y condición.

El resumen sería que hay que aprender de todo para poder elegir, y que a cada uno le irá una u otra cosa. Si no aprendes el lenguaje X no puedes elegir no usarlo, estás obligado a no usarlo porque lo desconoces.

*Es lo que decíamos en el cole a los 5 años cuando nos enfadábamos con un compañero.
 

Dr. Zoidberg

Well-known-Papá Pitufo
Hace muuuuchos me decidí a aprender Cobol por que en esa época era bastante bien pagado en aplicaciones de mainframe. No es que me gustara, solo que parecía que valía la pena y era potencialmente rentable poner algo de tiempo ahí...
Compré un pequeño libro ..tipo "Aprenda Cobol para mermos"...y creo que no llegué a la sexta página, cuando ví que había que tabular y usar espacios para una suerte de identado que definía los alcances de las estructuras de control 🤮 🤮🤮🤮
Y en Python es exactamente la misma porquería...
Si...ya sé que los editores se toman el trabajo de hacerlo, pero luego de años de usar delimitadores para las estructuras de control ...sencillamente no soporto su inexistencia 🤷‍♂️
 
Buenos días compañeros.
Como todos ustedes se habrán dado cuenta, soy nuevo en el foro de Picbasic Pro.
Agradezco el haberme permitido pertenecer a este fabuloso foro.

En este punto me gustaría aclarar un par de cosas.
En ningún momento mi intención ha sido que alguien de ustedes haga el programa por mí.
La ayuda que he solicitado es de orientación para saber cómo debo proceder para solucionar mis inquietudes y poder mejorar mi programa.
Si alguien amablemente me proporciona algún código, será para que yo lo analice y pueda utilizarlo como una base para lo que deseo desarrollar.

Agradezco a todas las personas que han respondido, en realidad valoro mucho su colaboración porque han invertido tiempo y paciencia para ayudarme.
Estoy buscando la teoría sobre los temas que me sugirieron tales como interrupciones, banderas, contadores, etc. Si alguien tiene ejemplos de código sobre estos temas donde se pueda aprender a utilizarlos les agradeceré muchísimo.

Para finalizar quiero decir que en relación a mi pregunta sobre el momntacargas, que creo que a más de uno ha confundido, lo que quise consultar es que si es posible detectar un pin de entrada solo en el momento que se produce el cambio de “1” a “0” es decir en el flanco de bajada. De lo que he podido leer al parecer es posible usando una interrupción, pero me gustaría saber si alguien conoce otra manera de hacerlo.
Saludos!
 

D@rkbytes

Moderador
Estoy buscando la teoría sobre los temas que me sugirieron tales como interrupciones, banderas, contadores, etc. Si alguien tiene ejemplos de código sobre estos temas donde se pueda aprender a utilizarlos les agradeceré muchísimo.
Sobre este mismo post hay bastantes ejemplos, y en el Foro también.
No necesitas salir cuando lo tienes todo en casa.
 
Sobre este mismo post hay bastantes ejemplos, y en el Foro también.
No necesitas salir cuando lo tienes todo en casa.
Gracias por tu respuesta amigo.
He buscado valga la redundancia con el Buscador que está en la parte superior derecha de la página donde está una lupa, pero me despliega unos resultados que cuando entro se trata de programación en C u otro diferente de Picbasic Pro. Estaré haciendo algo mal al momento de la búsqueda?
 

torres.electronico

Well-known-Alfil
La crítica no es hacia vos sino hacia el lenguaje, que es una bestia prehistórica que debió morir en los 80's pero aún sigue viva destrozando la forma de pensar de los programadores...y en especial de los novatos.
Yo uso C y C++ hace muchos años para programar microntroladores, pero también los he programado en PLM y en assembler. También programo en Java y en Python, pero no microcontroladores...y a Python lo odio...

... Este tópico no está referido a nada de lo que usas; Sería bueno Doc que tratemos de no desvirtuar el tema. Yo uso también otros lenguajes y sin embargo, me aferró al pedido concreto y al hilo del tópico "PICBASIC PRO"....

Volviendo al tema original, llegó a casa y te escribo unas líneas de ejemplo, pero con unas modificaciones, ya que el contador en caso de ser electrónico, te conviene hacerlo por una interrupción de hardware y un par de banderas para activar y desactivar la interrupción por puerto y no tener falsos disparos.
 

Dr. Zoidberg

Well-known-Papá Pitufo
... Este tópico no está referido a nada de lo que usas; Sería bueno Doc que tratemos de no desvirtuar el tema.
Yo solo le respondí lo que el me preguntó:
A propósito, cuál es el lenguaje que tu utilizas?
Me refiero al de programación.
y hasta ahí llegó mi explicación 🤷‍♂️. No escribí ningún ejemplo en C ni en ningún otro lenguaje, así que no creo desvirtuar nada...
 
Volviendo al tema original, llegó a casa y te escribo unas líneas de ejemplo, pero con unas modificaciones, ya que el contador en caso de ser electrónico, te conviene hacerlo por una interrupción de hardware y un par de banderas para activar y desactivar la interrupción por puerto y no tener falsos disparos.
Genial!
Muchas gracias amigo.
Aprecio mucho tu interés en ayudarme.
Perdona el atrevimiento, pero me gustaría pedirte que cuando escribas esas líneas de ejemplo que mencionas, por favor las comentes para de esa manera poder entender mejor y familiarizarme con los términos sobre interrupciones, banderas, etc.
Mientras tanto seguiré leyendo sobre esos temas.
Un Saludo!
 
Arriba