TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: overnat en 16 de Junio de 2006, 07:31:53

Título: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 16 de Junio de 2006, 07:31:53
Haber tengo que comprobar el estado de un bit  y no se como hacerlo.

en esamblador seria

btfss Status,4;

pero en CCS

hago esto y no me va

#byte DATOS=PIN_B6
byte var;
var=bit_test(DATOS,3);

el estado siempre es cero pase lo que pase.

o es q esta mal

Salu2
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 16 de Junio de 2006, 07:53:47
Estas declarando tipo byte la variable y le estas asignado un bit, ademas el bit asignado es el 6 del puerto B y despues compruebas el bit 3, suponiendo que el bit 6 se asigne correctamente en esa posicion el bit 3 siempre tendra lo mismo. Puedes poner directamente:

#define DATOS pin_b6

byte var;

var=input(DATOS);

Un saludo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 16 de Junio de 2006, 10:37:46
gracias por la respuesta .

A lo mejor me explique mal pero haber ahora jaja


Por la pata PIN_B6 osea la pata RB6 del chip entrar 8 bits y estos son los que quiero controlar

Gracias .


Salu2
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 16 de Junio de 2006, 13:29:53
Te refieres a recibir 8 bits en serie por el pinn RB6? Podrias ampliar un poco mas que es lo que quieres hacer.

Saludos
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 17 de Junio de 2006, 16:25:28
si exacto .

Lo que quiero hacer es recibir 8bits que envio atraves de serial.

Soy muy novato en esto de la programacion de pics .

Haber recibo esos 8 datos 01010101 y tengo que saber si el carry es 0 y el bit 7 es 0 si no es asi pues lo mato jajaj no en serio si no es asi pues hace una cosa y sino no la hace.

espero que me entiendas ahora.

Gracias por la ayuda tio\a
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 17 de Junio de 2006, 16:31:55
Debo entender que es una comunicación serie por sonsiguiente lo que tienes que hacer es habilitar el puerto serie y recibir los datos por el mismo. La habilitación la haces con:

#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)

Y para leer el byte recibido habilitamos la interrupcion:

#INT_RDA

con var = getc();

obtenemos el byte recivido.

Un saludo
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 17 de Junio de 2006, 17:19:18
ok  eso tambien me vale , pero , exactamente tampoco es. ( Pero muchas gracias  )

haber si yo recojo unos datos por unas de las patas , ejemplo Rb6 . Estos datos los va almacenando temporalmente en la Ram , es decir en FSR  no ?

o lo hace en en la ram pero en PCL y PCH .

Estoy un poco liado podrias explicarme esto un poco.

Salu2
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 17 de Junio de 2006, 20:14:25
Cuando se realiza una comunicacion serie, se recibe la informacion por una de las patillas que nosotros definamos para el ejemplo:

#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)

la recepción de la informacion se hace por el pin A3 que es el que hemos definido.

Cada vez que se recive un byte, se activa la interrupción INT_RDA y nosotros dentro de la interrupcion capturamos el byte transmitido de la siguiente forma:

#int_RDA
RDA_isr()
{
   valor = getc();
}
#ENDIF

Y en el programa principal (main) procesamos la variable como queramos. Por cierto hay que especificar la velocidad de transmision.

Un saludo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 17 de Junio de 2006, 23:28:23
perdona tio por las molestias , pero creo que no me se explicar bien.


Los datos me llegan de un aparato externo pero no es un ordenador , y eston llegan en modo 5v 0v .

Me imagino que estos bits se iran almacenando en la como te dije antes no ?



Salu2
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 17 de Junio de 2006, 23:35:55
Las comunicaciones serie no tienen por que ser con un ordenador pueden ser de cualquier aparato. Es necesario saber la velocidad a la que trasmite la información. La forma mas eficiente de capturar la informacion es mediante el puerto de comunicacion serie. Por ser la señal de 0 y 5V no hace falta adecuarla mediante el maxim232, si no que se pude conectar directamente a la patilla en cuestion. Por ultimo decirte que lo que quieres hacer de asignar una patilla a una variable, no funciona de ninguna de las maneras.

Un saludo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: overnat en 18 de Junio de 2006, 00:04:02
La comunicacion que hago es TTL a Entradas TTL  del pic y el envio de datos que recibe el pic son lo que quiero verificar , pero , dentro del mismo chip , no fuera desde el pc .

Creo que los bits que van entrando , por direccionamiento indirecto , van a parar a FSR no ? .

estos bits serian colocados en PCL y PCH como LSB y MSB no ? .

Joder no se si me explico bien vaya mierda.....


Salu2 y gracias por todo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 18 de Junio de 2006, 05:29:03
No estas equivocado, lo que recives en un puerto via serie lo tienes que procesar tu (tienes que definir por que pin lo recives, a que velocidad, con que protocolo, etc) y despues cada vez que recives el byte, ver como procesarlo. Si estas utilizando el mismo PIC para enviar y recivir datos puedes definir dos puertos de comunicación y unir la patilla de entra del primero con la del segundo. Los puertos de comunicacion si no pones un interface RS232, te trabajan a TTL y por consiguiente simplemente unes las patillas que hayas definido y ya esta.

No se si es esto lo que quieres o no, si no es asi por que no nos comentas cual es tu proyecto completo e intentamos buscar la solucion para  implementarlo.

Un saludo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: MGLSOFT en 22 de Junio de 2006, 10:06:00
Perdon que me meta, por lo que leo la comunicacion es solo de entrada y lo que quieres verificar son 8 bits, no es cierto??

Entonces te conviene meter cada bit en un byte por desplazamiento, pero alli necesitas una señal de clock para saber cuando esta el nuevo bit y sincronizar el desplazamiento.

Eso seria una comunicacion sincronica...
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: vszener en 22 de Junio de 2006, 10:33:32
Buenas!!!! yo me voy a limitar a contestar el primer mensaje
Código: C
  1. #byte DATOS=PIN_B6
  2. byte var;
  3. var=bit_test(DATOS,3);

Vamos haber, primero intentas declarar un pin(el cual seria entodo caso 1 bit) como byte(es decir 8 bits) por lo tanto ya vamos malamente
Asi NO:
Código: C
  1. #byte DATOS=PIN_B6
Podria ser asi:
Código: C
  1. #bit RB6=0x106.6   //definicion pin potrb B6

Si lo que quieres es almacenar 8 bits en una variable byte, podrias hacerlo asi:
Código: C
  1. shift_right(&data,1,input(PIN_B6));  //almacena en la variable data la informacion del PIN B6

Y para compararlo, pues es como tu lo has puesto, en definitiva el programa seria algo asi:
Código: C
  1. boolean comprobacion;
  2. byte var;
  3. shift_right(&var,1,input(PIN_B6));
  4. comprobacion=bit_test(var,3);        //te puedes ahorrar la variable comprobacion y usar directamente un if....


Suerte!!! :wink:
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 22 de Junio de 2006, 15:35:05
Hola vszener, una pregunta:

como captura 8 bits esta función:

Citar
shift_right(&var,1,input(PIN_B6));

Un saludo.
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: vszener en 23 de Junio de 2006, 08:41:46
La funcion shif_right desplaza un bit la derecha, por lo tanto los argumentos son el byte para almacenar la informacion, el numero de desplazamiento de un bit, en este caso un desplazamiento hacia la derecha y otra opcion es la entrada de los datos en el byte a desplazar, en este caso introducimos el valor de la patita B6 en el byte declarado var y lo desplzamos 1 bit hacia la derecha, por supuesto en ese codigo, falta meterla en un bucle for que cuente hasta 8(ya que la variable var es 1 byte = 8 bits) y ya tendremos almacenadas en 1 byte la informacion que nos da el pin B6.


Suerte!!! :wink:
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: jfh900 en 23 de Junio de 2006, 08:58:56
Y a que velocidad realizas el bucle para que coincida con la velocidad de la transmisión?.

No es mas facil utilizar el puerto serie?.

Un saludo
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: vszener en 23 de Junio de 2006, 09:17:31
Hombre como he dicho en mi post anterior, 'me limito a contestar el primer post de este mensaje' jeje es decir, de como almacenar la informacion d eun pin en 1 byte y despues su posterior testeo, ahora bien, si usamos el serial, pues lo mas facil que se me ocurre es usar la interrupcion del serial para recibir los datos del mismo(en caso de que el pic tenga uart)... aunque la instruccion(en este caso sin el bucle for) shif_right se puede usar en la interrupcion a cada dato que se reciba del pin del serial y despues realizar su tratamiento....

Suerte!!! :wink:
Título: Re: Como Comprobar el estado de un Bit dentro de un byte ?
Publicado por: dragondgold en 27 de Septiembre de 2010, 21:09:05
Hola, estoy realizando también una transmisión serie pero no quiero usar el módulo que incorpora el PIC sino que voy testeando bit por bit cada 50uS y recibo la información, el problema es que quiero unir todos esos bits en un entero de 8 bits (INT8) pero no se como puedo hacerlo. ALguna idea?

Gracias!!