Enviar entero por un pin - pic

#1
Bueno tengo una consulta digamos que declaro esta variable:
int8 a = 92; // binario: 01011100

y pues me gustaria enviar esa variable (en binario) a travéz de 1 pin del pic,
digamos rb4.

En pocas palabras:
Enviar primero el 0 , despues de un tiempo X el 1 y asi hasta completar el envio
de los 8 bits, ojala me haya explicado bien, espero sugerencias y
gracias de antemano! :aplauso:

P.D.: me gustaría poder realizarlo en las menores lineas posibles, ya que lo
primero que se me ocurrio fue guardar los 8 bits en un array y luego enviarlos
a través de la funcion output_bit().
 
#2
Así como lo planteas, claro que se debe de poder, es en forma serie.
Tal vez te convenga utilizar la función UART. Pero de que se puede, se puede.
Saludos.
 
#3
sencillo seria cargar el numero, generar un reloj por otro pin y rotar el reg donde guardas el dato e ir sacando el bit a bit sincronizado con el reloj, chauuuuuuuu
 
#4
Usa una uart por software, tienen muchas desventajas pero son sencillas y conocidas. La segunda parte es que después lo tendrás que leer con algo y si usas un sistema raro tendrás que hacer un lector específico.
 
#5
con PIC BASIC PRO es muy facil...


Enviar var byte
enviar = (Dato a enviar)
Inicio:
PORTB.4 = enviar.0
enviar = enviar >> 1
pause 1
goto inicio

el dato a enviar lo pones en el registro Enviar y la informacion saldra por el pin PORTB.4 en este ejemplo y hace una pausa de 1 Ms por cada Bit enviado

en este ejemplo la informacion se envia comenzando por el Bit 0 al 7 pero puedes escojer si comienzas por el Bit 7 al 0 cambiando la funcion ">>" por "<<"

tu escojes el pin de salida remplazando PORTB.4 en el ejemplo y la pausa entre cada Bit con intervalos en Ms con la funcion "pause" o en us con la funcion "pauseus"
 
#6
Bueno tengo una consulta digamos que declaro esta variable:
int8 a = 92; // binario: 01011100

y pues me gustaría enviar esa variable (en binario) a través de 1 pin del pic,
digamos rb4.

En pocas palabras:
Enviar primero el 0 , después de un tiempo X el 1 y así hasta completar el envió
de los 8 bits
Saludos.
Puedes hacerlo de esta forma, usando rs232 por software...
Código:
void ByteToBin(int8 Value,int16 TimeMs)
{
int8 i;

   for (i = 0; i < 8; i++)
   {
   if (Value & 0x80)    // Se comprueba el MSB (Bit mas significante "Bit7")
   putc('1');           // Si este es 1, la salida será un 1
   else
   putc('0');           // Si este es 0, la salida será un 0
   delay_ms(TimeMs);      // Esperar cierto tiempo (Time en milisegundos)
   Value <<= 1;         // Rotar los Bits a la izquierda 1 Bit
   }
   puts("\r");          // Enviar un Cr (Carriage Return)
}
Adjunto un ejemplo de como usar la función, y puedes usar el HyperTerminal para ver el resultado.

Nota:
En vez de usar putc(), puedes usar output_high/low()

Suerte.
 

Adjuntos

Última edición:
#7
Saludos.
Puedes hacerlo de esta forma, usando rs232 por software...
Código:
void ByteToBin(int8 Value,int16 TimeMs)
{
int8 i;

   for (i = 0; i < 8; i++)
   {
   if (Value & 0x80)    // Se comprueba el MSB (Bit mas significante "Bit7")
   putc('1');           // Si este es 1, la salida será un 1
   else
   putc('0');           // Si este es 0, la salida será un 0
   delay_ms(TimeMs);      // Esperar cierto tiempo (Time en milisegundos)
   Value <<= 1;         // Rotar los Bits a la izquierda 1 Bit
   }
   puts("\r");          // Enviar un Cr (Carriage Return)
}
Adjunto un ejemplo de como usar la función, y puedes usar el HyperTerminal para ver el resultado.

Nota:
En vez de usar putc(), puedes usar output_high/low()

Suerte.
Gracias justo lo que necesitaba (y)
 
#8
Hola esta muy bueno la función para mandar bit por bit, supongamos que lo hacemos por un solo pin y lo queremos recibir por otro pin de otro pic, como lo debería recepcionar? se puede mandar un int16?
 
Última edición por un moderador:
Arriba