TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanez en 03 de Mayo de 2008, 15:28:40
-
Hola, ¿Como se asigna un boton a una variable?, he probado lo siguiente y el ccs lo compila bien. pero parece que no funciona.
#define x pin_D0
#define y pin_D1
Lo que quiero es asignar por ejemplo la patilla D0 a la variable x, y en el programa en vez de comparar la patilla D0 comparar la variable x.
Saludos
-
Hola.
Esta es una forma: x=input(pin_d0)
Un saludo
-
Hola, no me as entendido.
Lo que quiero hacer es que la variable x siempre tenga el valor de la patilla D0, sin tener que estar comparandola todo el rato.
En PBP se hace asi : x var portD.0
-
Hola, utiliza la instrucción del preprocesador #bit. Supongamos que quieres que la variable X tenga el valor del pin 5 Del puerto D:
#byte Puerto_D = 0x08
#bit X = Puerto_D.5
El numero 0x08 depende del registro asignado al puerto en cuestión, asi que puedes evitar la instrucción #byte y colocar directamente la dirección en memoria del puerto en la instrucción #bit.
Saludos.
-
Vale ahora te has explicado mejor.
Una forma es como te dice Gonzalo y otra es como lo tienes tú: ¡ con el #define pin_x! ... que sí debiera de funcionar.
-
Saludos juanez!
Yo siempre uso para definir pines la forma que tienes tú:
#define nombre_que_quiero PIN_XX
y me funciona de lo lindo! :-/
En qué aspecto dices que no te funciona? Porque si lo compila bien... debería funcionar no? :?
Bueno luego nos comentarás...
Nos leemos! :mrgreen:
-
Hola de nuevo, he estado haciendo pruebas y lo del define si que funciona.
#define x pin_D0
Lo que ocurre es que esto funciona para poner a estado alto o bajo x por ejemplo con:
output_high(x);
output_low(x);
Asi funciona perfectamente.
Pero lo que yo quiero y no me funciona, es que el pin_D0 por poner un ejemplo por que podria ser cualquier otro pin.
Tengo conectado en proteus un pulsador al pin D0, y lo que quiero es que x siempre tenga el valor de este pulsador para poder compararlo en cualquier momento.
Saludos
-
Puedes hacerlo así: input(x)
Siendo x el pin que has definido antes.
Ese método sólo te valdrán en CCS. Si quieres, puedes definir el puerto que vas a utilizar como un byte, y cada pin como un bit, y entonces sí conseguirás el mismo resultado pero válido para cualquier compilador.
-
weno ya lo tengo un poco mas claro, gracias a todos.
-
Saludos! :-)
Hola de nuevo, he estado haciendo pruebas y lo del define si que funciona.
#define x pin_D0
Lo que ocurre es que esto funciona para poner a estado alto o bajo x por ejemplo con:
output_high(x);
output_low(x);
Asi funciona perfectamente.
Pero lo que yo quiero y no me funciona, es que el pin_D0 por poner un ejemplo por que podria ser cualquier otro pin.
Tengo conectado en proteus un pulsador al pin D0, y lo que quiero es que x siempre tenga el valor de este pulsador para poder compararlo en cualquier momento.
Saludos
Amigo juanez, si colocas #define x PIN_D0, esto no solo funciona para asignar valores, también funciona para hacer lo que tú quieres. :)
Verás, cuando se aplica esa sentencia, lo que estamos diciendole al compilador es que cada vez que el vea "x" en el programa, entienda que nos estamos refiriendo al pin declarado en el #define. Asi que en realidad "x" no existe, solo existe PIN_D0... el "x" es una simple ayuda visual al programador... pues si revisas el archivo .LST, donde se ve el código ASM generado por el compilador por cada instrucción de C, observarás que en las líneas donde escribiste "x" aparecerá "08.0", que es la dirección en el pic de esa pin en particular (RD0).
De manera que si tu quieres hacer por ejemplo "if(x==0)"... o cualquier otra comparación en cualquier momento, puedes estar seguro que lo que estarás diciendo es "if(PIN_D0==0)" o lo que hayas puesto. Es decir, en tu caso particular, "x" siempre tendrá el valor del pulsador, pues en realidad "x" es tu pulsador.
Espero haberme explicado bien, y haberte servido de algo.
Sigue probando y luego cuentas si pudiste resolver...
Nos leemos! :mrgreen: