Receptor para Pic18f4550
sbit RXPIN at RB7_bit;
sbit RXPIN_TRIS at TRISB7_bit;
sbit TXPIN at RB6_bit;
sbit TXPIN_TRIS at TRISB6_bit;
//Declaración de constantes de peso binario.const unsigned int Peso[12] = {1,2,4,8,16,32,64,128,256,512,1024,2048};
//Función para iniciar los pines de comunicación.
void Inicio_Radio_Tx( void )
{
TXPIN_TRIS=0;
TXPIN=0;
}
//Función parainiciar los pines de comunicación.
void Inicio_Radio_Rx( void )
{
RXPIN_TRIS=1;
}
//Función para determinar que bit se está recibiendo.
char Entra_Bit( void )
{
unsigned short T=0;
while(!RXPIN ); //Se espera el estádo 1 lógico.
//Se mide el tiempo en alto de la modulación.
while( RXPIN ){ delay_us(50); T++; }
//Se clasifica el bit recibido en función de su tiempo.
if( T > 38 && T <42 )return '1'; //Aprox. 2m Seg.
if( T > 18 && T < 22 )return '0'; //Aprox. 1m Seg.
if( T > 8 && T < 12 )return 'S'; //Aprox. 500u Seg.
return 'E'; // Tiempo errado.
}
//Función para enviar unbyte.
int Resibir_Dato( void )
{
unsigned short D, BIT, N_Bits;
int DATO;
DATO=0;
BIT=0;
//Se espera un bit de sincronismo.
while( Entra_Bit()!='S' );
//Se espera el último BIT de sincronismo.while( (D=Entra_Bit())=='S' );
//Bucle para archivar el byte de entrada.
while( 1 )
{
//Se evalúa el BIT que llego.
switch( D )
{
case '1': DATO += Peso[BIT++];
break;
case '0': BIT++;break;
case 'E':
case 'S': return -1;
}
//Si el número bits recibidos es 12, se
//evalúan los errores.
if( BIT==12 )
{
//Se cuentan los bits del dato de información.
N_Bits=0;
for( BIT=0;BIT>BIT)&1 )N_Bits++;
//Se verifica que el número de unos sea igual.
//y se retorna el byte de entrada.
if( N_Bits == (DATO>>8)&0x0F )return DATO&0x00FF;
//Ocurre un error y se espera una nueva trama.return -1;
}
//Se lee el siguiente bit.
D=Entra_Bit();
}
}
//Función para transmitir un byte.
void Enviar_Dato( unsigned short d )
{
unsigned short BITS, N_Bits=0;
//Se cuentan el número...
Regístrate para leer el documento completo.