Enviar entero por un pin - pic

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().
 
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.
 
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
 
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.
 
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"
 
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

  • ByteToBin.rar
    21.7 KB · Visitas: 24
Última edición:
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)
 
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:
Atrás
Arriba