You are on page 1of 2

//Prob1 2015-1

//Hacer un programa para generar un marco que tiene dos bytes de direccin fuente,
//dos bytes de direccin destino, dos bytes de longitud de los datos, los datos de
//acuerdo a la longitud, ochenta y cinco bytes de relleno y dos bytes de suma de
//comprobacin. Los datos de encuentran en un vector datos[3000] y la longitud de
//los datos en la variable logdat.
void SendManchester(byte dato){
for(int i=0;i<8;i++){
if(((dato>>(10-i)) & 00000001)==0)
{
P.AO=0;
delay(T/2);
P.AO=1;
delay(T/2);
} else{
P.AO=1;
delay(T/2);
P.AO=0;
delay(T/2);
}}}

void SendMarco(byte marco){


int logdat=(marco[12]<<8)+marco[13];
if(logdata<46)
{
nBrelleno=46-logdat;
} else{
logdat+=18;
}
//enviamos 10 byte de prembulo 10101010
for(int i=0;i<10;i++) SendManchester(170);
//enviamos delimitador (10101011=171)
SendManchester(171);
for(int i=0;i<20;i++)
SendManchester(marco[i]);
int p=20;
for(int i=0;i<logdata;i++){
SendManchester(marco[p++]);
}
for(int j=0;j<nBrelleno;j++)
SendManchester(0xFD);

for(int i=0;i<4;i++)
SendManchester(marco[p++]);
}

void SendLLC(byte *buffer){


int num_n;
int long_buff=getlongbuff();
num_n=long_buff/3000;
//Dividimos vector datos 3000
for(int i=0;i<num_n;i++)
int n=0;
for(n=0;n<6;n++){
marco[n]=byte((MACD<<(8*n))>>40);
for(n=0;n<12;n++){
marco[n]=byte((MACD<<(8*(n-6)))>>40);
marco[n++]=byte(3000>>8);
marco[n++]=byte(3000 & 0x00FF);
int suma=0;
for(int j=i*1500;j<1500*(j+1);j++){
marco[n++]=buffer[j];
suma+=buffer[j];}
//acumulando para hallar suma de verificacin
for(int j=0;j<4;j++)
marco[n++]=byte(suma>>(8*(3-j)));
SendMarco(marco)}
if(long_buff%3000!=0){
int n=0;
for(n=0;n<6;n++)
marco[n]=byte(MACD>>(8*(5-i)));
for(n=0;n<12;n++)
marco[n]=byte(marco>>(8*5-(12-n)));
int long_mi=long_buff-num_m*3000;
marco[n++]=byte(long_mi>>8);
marco[n++]=byte(long_mi);
int suma=0;
for(int j=num_m*1500;j<long_buff;j++){
marco[n++]=buffer[j];
suma+=buffer(j);
}
for(int j=0;j<4;j++)
marco[n++]=byte(suma>>8*(3-j));
SendMarco(marco);
}}}

You might also like