TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: japifer_22 en 27 de Septiembre de 2009, 20:36:34

Título: como leer todo el puerto B del pic 16f877a
Publicado por: japifer_22 en 27 de Septiembre de 2009, 20:36:34
hola gente otra vez. estoy teniendo un problema de creatividad y acudo a ustedes para que me den una manito. les comento quiero leer el puerto B del pic, este puerto lo tengo configurado como solo entrada, pero quiero chequear si estas entradas estan en 1 o 0. tambin quiero hacer que una variable X tome este registro del puerto. por ejemplo X=11001011.  como puedo hacer esto alguna idea ??
bueno saludos y espero que me puedan ayudar

estoy trabajando en CCS C.
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: gera en 27 de Septiembre de 2009, 21:08:49
Al principio de tu codigo pone la siguiente directiva:
#byte PORTB = 0x106

De ahi en mas podes ver y cambiar el estado del puerto de la siguiente manera:
int8 x;
x=PORTB;
PORTB=0xFF;

saludos!!
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: Suky en 27 de Septiembre de 2009, 21:29:49
Sino usando las directivas de CCS:

Código: C
  1. int x;
  2.  
  3. x=input_b();
  4.  
  5. output_b(x);
  6. output_b(0xAA);

Saludos!
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: japifer_22 en 27 de Septiembre de 2009, 22:24:06
hola grax por las respuestas era lo que andava buscando, nose que me paso hoy pero ando cero creatividad. :mrgreen:


PD: lean el mensaje de abajo, es otra pregunta  :oops: :oops:
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: japifer_22 en 07 de Diciembre de 2009, 01:01:33
hola de nuevo, parece que no es la creatividad sino de aprender mas  :?, por que ahora tengo el siguiente problema, el cual llevo 3 dias dandole sin conseguir nada.se trata de que hace un tiempo atras hice una alarma para mi casa por que me entraron a robar, y bueno me funciono bien, es decir funciona bien todavia, pero yo quiero cambiar el sistema de ver las zonas activadas, ya que en estos momentos las visualizo mediante led, pero quiero cambiar esta por una lcd 2x20. por una parte leo los 8 sensores por el puerto b del pic maestro mediante la linea x=input_B();, esto anda bien pero quiero cambiar el esclavo, donde aqui biene mi pregunta. si yo resivo este valor de x por rs232 en el esclavo, como puedo hacer que este valor me diga que zonas estan activadas en la lcd ???? saviendo que al tener las 8 zonas o mejor dicho el puerto B entero con sensores me puede generar 255 conbinaciones de activacion y desactivacion de zonas.
dicho en otras palabras, si yo tengo el puerto B con solo B0 y B2 en alto y todo los demas en bajos del master, enviandole por consiguiente al esclavo esta misma convinacion del puerto B del master, como podria hacer que por la lcd me diga que solo esta activado las zonas 1 y 3. bueno pero esto se tiene que dar para todas las conbinaciones que puede tomar el puerto B del master.
alguna idea al respecto ???????
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: Suky en 07 de Diciembre de 2009, 01:13:09
Puedes hacer un bit_test(x,0) para saber por ejemplo si esta activada la Zona 1, y dependiendo de su valor escribir en el LCD.

Saludos!
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: japifer_22 en 07 de Diciembre de 2009, 02:02:00
hola suky esta bien lo que dices..... , osea entindo pero el punto esque al pasar mediante la rs 232 el valor de x se va por el putc(x); hacia el esclavo y el esclavo lo recive por la interrupcion #int_RDA el cual queda guardado en lectura=GETC(); donde lectura es int, entonces para saver por ejemplo el estado de la zona 1 seria bit_test(lectura,0); ?????

PD: recordar que yo en el esclavo quiero ver como esta el puerto B del master, reflejando este en una lcd, pero en el esclavo reitero va la lcd. ademas la variable x del master es int16, o puede ser int nada más ???????
Título: Re: como leer todo el puerto B del pic 16f877a
Publicado por: Suky en 07 de Diciembre de 2009, 09:04:20
Por mas que hagas todo eso con el dato, si lo haces correctamente se mantendrá igual. En el esclavo lo único que haces es guardarlo en une variable global y testearla con bit_test cuando sea necesario.



Saludos!