|
الاخ نبيل أردت أن أوضح شيء :
ان ال usb يرسل المعلومة BYTE ثم BYTE ثم BYTE وهكذا وكل BYTE تحتوي
8BITS أي أكبر عدد يمكن أن ترسله في الدفعة هو 256 بمعنى لا يمكن ارسال
متغير من 16BITS
أي يجب أن ترسل المعلومة بال BYTE ثم تضم 2BYTE في المستقبل وليس في
الباعث أي يجب أن تعمل هكذا :
Write_buffer[0] = 'P'; Write_buffer[1] = '=';...................................0
Write_buffer[2] =portb;write_buffer[3]=portd;.............................0
Write_buffer[4] = 'T';.............................................. .............0
Hid_Write(&Write_buffer,5);....................... .......................... .0
ثم تضم ال byte رقم 2 و ال byte رقم 3 بعد الارسال
أي write_buffer[2] et write_buffer[3].......0
بالطريقة المذكورة سابقا أي :
ليكن tt يحتوي قيمة write_buffer[2].0
ليكن gg يحتوي قيمة write_buffer[3].0
k هو المتغير 16bits ونريد أن نضع فيه tt في 8bits الاولى و gg في 8bits الاخيرة :
k =tt;..........................................0
k =k<<8;...........................................0
k =k+gg;........................................0
هذا بعد الارسال وليس قبل الارسال أي في المستقبل
الان نحول الى ال benary من gray
لعمل ذلك نستعمل الدالة التالية :
unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0
^ تعني xor و << تعني ازاحة الى اليمين
بعد أن تكتب الدالة كما هي في بداية البرنامج يمكن أن تستعملها للتحويل
من ال gray الى benary كما يلي :
ليكن num في ال gray
k في ال benary
k=grayToBinary(num);........................0
أرجو أن أكون قد أوضحت وسوف أصحح أي خطأ قد أكتشفه
والسلام عليكم ورحمة الله تعالى وبركاته.
|
quote=lahoioui;343223]الاخ نبيل أردت أن أوضح شيء :
ان ال usb يرسل المعلومة BYTE ثم BYTE ثم BYTE وهكذا وكل BYTE تحتوي
8BITS أي أكبر عدد يمكن أن ترسله في الدفعة هو 256 بمعنى لا يمكن ارسال
متغير من 16BITS
أي يجب أن ترسل المعلومة بال BYTE ثم تضم 2BYTE في المستقبل وليس في
الباعث أي يجب أن تعمل هكذا :
Write_buffer[0] = 'P'; Write_buffer[1] = '=';...................................0
Write_buffer[2] =portb;write_buffer[3]=portd;.............................0
Write_buffer[4] = 'T';.............................................. .............0
Hid_Write(&Write_buffer,5);....................... .......................... .0
ثم تضم ال byte رقم 2 و ال byte رقم 3 بعد الارسال
أي write_buffer[2] et write_buffer[3].......0
السلام عليكم
بارك الله فيك الاخ lahoioui على هذه المعلومات القيمة وزادك الله علما
نعم هذا البرنامج صحيح كما يمكنك كتابته بالشكل التالي
Write_buffer[0] =portb;....................0
Write_buffer[1] =portd;....................0
Hid_Write(&Write_buffer,4);.............0
بالطريقة المذكورة سابقا أي :
ليكن tt يحتوي قيمة write_buffer[2].0
ليكن gg يحتوي قيمة write_buffer[3].0
k هو المتغير 16bits ونريد أن نضع فيه tt في 8bits الاولى و gg في 8bits الاخيرة :
k =tt;..........................................0
k =k<<8;...........................................0
k =k+gg;........................................0
هذا بعد الارسال وليس قبل الارسال أي في المستقبل
العلاقة صحيحة في السي لكن برنامج المستقبل الذي استعمله بالفيجوال
الان نحول الى ال benary من gray
لعمل ذلك نستعمل الدالة التالية :
unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0
^ تعني xor و << تعني ازاحة الى اليمين
بعد أن تكتب الدالة كما هي في بداية البرنامج يمكن أن تستعملها للتحويل
من ال gray الى benary كما يلي :
ليكن num في ال gray
k في ال benary
k=grayToBinary(num);........................0
أرجو أن أكون قد أوضحت وسوف أصحح أي خطأ قد أكتشفه
والسلام عليكم ورحمة الله تعالى وبركاته.[/quote]
هل هذه الدالة تحول 8 بيت فقط واذا اردت تحويل 16 بيت هل استعمل هذه الدالة
عندي سؤال آخر وهو نفس البرنامج لكن مع زيادة temperature فكيف يتم ارسال
Write_buffer و temperature مع بعضهما(قيمة temperature تظهر في خانة و قيمة Write_buffer تظهر في خانة اخرى في المستقبل) اي يجب ارسال Write_buffer في 2 بايت و temperature في 4 بايت
unsigned int i,j,k;............................................ ..................................0
unsigned long Vin;.............................................. ..............................0
unsigned char l,m;.............................................. ..............................0
unsigned int num;.............................................. ...............................0
unsigned char op[7],temperature[64],Write_buffer[64];.......................0
0................................................. .........................for(;

// do forever
{
Vin = Adc_Read(1); // Read from channel 0 (AN0)..............................0
WordToStr(Vin,op); // Convert to string in "op"...................................0
for(j=0; j<3; j++)temperature[j]=' ';................................................ .0
j=0;.............................................. .................................................. 0
for(i=0;i<=6;i++)................................. ............................................0
{
if(op[i] != ' ') // If a blank............................................. ....................0
{
temperature[j]=op[i];................................................. .....................0
j++;.............................................. .................................................0
}
}
l=portb;.......................................... ................................................0
m=portd;.......................................... ..............................................0
Write_buffer[0] =l;............................................... ...........................0
Write_buffer[1] = m;................................................ .......................0
Delay_ms(1000);................................... ..........................................0
Hid_Write(temperature,4)&Hid_Write(Write_buffer,4) ;........................0
Delay_ms(1000);................................... ..........................................0
}
}