Autor Tema: forma optima de sacar variables por diferentes puertos  (Leído 1981 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
forma optima de sacar variables por diferentes puertos
« en: 18 de Noviembre de 2009, 07:10:11 »
   Hola, antes de nada quería dar las gracias a todos los que respondeis las dudas tontas de los "novatos" como yo. La verdad es que se agradece mucho cuando se está empezando.
   Bueno, al grano. La duda es si existe una forma eficiente de pasar el contenido de una variable a diferentes puertos del pic sin tener que hacerlo bit a bit. Me explico mejor con un ejemplo:
   supongamos que estamos usando un PIC16f88 y deseamos usar los pines A1, A3, A4, B1, B5, B6, B7 para polarizar un display de 7 segmentos porque el resto de pines están ocupados. ¿Cuál sería la manera óptima de llevar el contenido de una variable a esos pines? Si estuviese el puerto B entero libre bastaría con una sola instrucción pero en este caso sólo se me ocurre hacer bit a bit. ¿Se podría hacer con struct? No se... a ver qué se nos ocurre :-)

saludos

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #1 en: 18 de Noviembre de 2009, 13:11:05 »
Hola, usando máscaras.

Digamos que tus bits a colocar en A1, A3, A4, B1, B5, B6, B7 son respectivamente 101 1000. Luego los ordenas para el puerto A usando los 3 bits correspondientes y colocándolos en un byte:

0001 0010 //A1, A3, A4 = 101

Y los intercalas en el puerto A con una Or inclusiva

output_a(input_a() | 0b00010010);

Lo mismo pasa con B

00000010 //B1, B5, B6, B7 = 1000

output_b(input_b() | 0b00000010);

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #2 en: 19 de Noviembre de 2009, 11:26:54 »
Hola migsantiago,      

   Muchas gracias por tu respuesta! He intentado lo que dices, pero creo que soy un poco torpe y no consigo que funcione. Según lo estoy haciendo, la salida depende del estado inicial del puerto. Por ejemplo, si quisiera poner los pines A1, A2 y A3 a 101 respectivamente:
Código: [Seleccionar]
        0000 1010 //máscara A1, A2, A3 (101)
0000 0000 //estado inicial del puerto (input_a())
0000 1010 //etado final del puerto (or exclusivo)
         
   sin embargo si el estado inicial del puerto es 0xFF cambia el resultado:
            
Código: [Seleccionar]
        0000 1010 //máscara A1, A2, A3 (101)
1111 1111 //estado inicial del puerto (input_a())
1111 0101 //estado final del puerto (or exclusivo)
         
   Funcionaría si primero borrasemos A1, A2 y A3 y posteriormente se hace el OR, pero de esa forma estaría haciendo 2 cambios en el puerto lo cual podría no ser deseable según el circuito. Seguramente habré entendido algo mal... me podrías explicar en qué me estoy equivocando?
« Última modificación: 19 de Noviembre de 2009, 11:29:10 por erdanieee »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #3 en: 19 de Noviembre de 2009, 13:20:55 »
Es que debes usar OR inclusivas para levantar bits y AND para bajar bits, olvidé comentártelo en el primer mensaje.  :oops:

Digamos que quieres poner a 1 los pines A1 y A7 y después poner a 0 los pines A4 y A5...

Código: [Seleccionar]
output_a(input_a() | 0b10000010); //pone unos en A1 y A7 dejando intactos los demás
output_a(input_a() & 0b11001111); //pone ceros en A4 y A5 dejando intactos los demás

La desventaja es como tú dices, se requieren varias instrucciones para hacerlo.
« Última modificación: 19 de Noviembre de 2009, 13:22:58 por migsantiago »

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #4 en: 24 de Noviembre de 2009, 05:41:40 »
Muchas gracias migsantiago, ya me quedó más claro. Lo malo de los tutoriales de los lenguajes de programación es que te enseñan la sintaxis pero no te enseñan los pequeños trucos que diferencian un buen código de uno chapucero.

Saludos

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #5 en: 24 de Noviembre de 2009, 12:47:49 »
Muchas gracias migsantiago, ya me quedó más claro. Lo malo de los tutoriales de los lenguajes de programación es que te enseñan la sintaxis pero no te enseñan los pequeños trucos que diferencian un buen código de uno chapucero.

Saludos

 :D :D

jeje eso de las máscaras también lo aprendí de otra persona y no de los libros  ;-)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #6 en: 24 de Noviembre de 2009, 13:02:28 »

Muchas gracias migsantiago, ya me quedó más claro. Lo malo de los tutoriales de los lenguajes de programación es que te enseñan la sintaxis pero no te enseñan los pequeños trucos que diferencian un buen código de uno chapucero.

Saludos

Eeee!! Seria muy fácil! Para eso está la practica que lleva a la experiencia, y si se es inteligente a la eficiencia  :mrgreen:

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: forma optima de sacar variables por diferentes puertos
« Respuesta #7 en: 24 de Noviembre de 2009, 13:06:33 »
Para eso está la practica que lleva a la experiencia, y si se es inteligente a la eficiencia  :mrgreen:




 

anything