الان اترككم مع اهم دوال البرمجه للتعامل مع منفذ اليو اس بي
البرمجة :
الآن حان وقت البرمجة .
الميكروسى يضم مكتبة للاتصال التسلسلى العام USB library . يمكنك أن تجدها فى "إدارة المكتبة" “Library Manager” .
للتفاصيل حول روتينات دوال المكتبة يمكنك تتبع :
Help→mikroC PRO for PIC Libraries→Hardware Libraries
فى نهاية القائمة سوف تجد “USB Library” .
مكتبة USB بالميكروسى :
يوفر الميكروسى نوعين من مكتبة USB . واحدة للاتصال العام للناقل USB والأخرى للاتصال للفئة
HID USB . سوف نناقش النوع الأخير .
دوال المكتبة :
1- الدالة HID Enable :
الصيغة :
void HID_Enable(char *readbuff, char *writebuff);
الغرض :
لتمكين الاتصال USB HID .
البارامترات :
بارامتران :- ReadBuffer: المتغير (بعبارة أدق المصفوفة) حيث تريد حفظ بيانات USB التى تأتى من الكومبيوتر .
- WriteBuffer : حيث تريد أن تخزن البيانات التى سوف ترسلها إلى الكومبيوتر .
العائد :
لا يوجد .
المتطلبات :
لا يوجد .
يجب إستدعاء هذه الدالة قبل استخدام الدوال الأخرى من المكتبة USB HID .
مثال :
HID_Enable(&readbuff,&writebuff);
ملاحظة :
وفقا للداتا شيت هذه المتغيرات يجب أن تكون فى الذاكرة USB RAM . الميكروكونترولر به
1 Kbyte USB RAM , تبدأ من 400h إلى 7FF .
من العنوان 400h إلى العنوان 4FFh من أجل "الواصف" descriptor . لذلك لدينا فعليا من العنوان 500h إلى العنوان 7FFh بتخزين البيانات . لذلك سوف يتم إعلان المتغيران كما يلى :
unsigned char readbuff[64] absolute 0x500;
unsigned char writebuff[64] absolute 0x540;
تذكر :
التوجيه “absolute”Directive :
يحدد عنوان البداية فى ذاكرة RAM "للمتغير" أو عنوان البداية فى ذاكرة ROM "للثابت". إذا كان المتغير أو الثابت متعدد البايتات , فإن البايتات الأعلى سوف يتم تخزينها عند المواقع المتتابعة .
يتم إلحاق التوجيه absolute لإعلان المتغير أو الثابت كما يلى : - المتغير x سوف يحتل 1 بايت عند العنوان 0x2 :
// Variable x will occupy 1 byte at address 0x22 :short x absolute 0x22;
· المتغير y سوف يحتل 2 بايت عند العناوين 0x23 و
0x24 :// Variable y will occupy 2 bytes at addresses 0x23 and 0x24 :int y absolute 0x23;
· عناصر المصفوفة ConstantArray سوف توضع فى مواقع متعاقبة بداية من العنوان 0x1000 :
// Array elements will be placed on the consecutive locations starting from 0x1000 :const short ConstantArray[] = {1,2,3} absolute 0x1000;
ملحوظة :
إذا أردت وضع ثابت من النوع البسيط فى ذاكرة Flash memory فبدلا من الإعلان التالى :
const short SimpeConstant = 0xAA absolute 0x2000;
استخدم مصفوفة مكونة من عنصر مفرد كما يلى :const short
SimpleConstant[] = {0xAA} absolute 0x2000;
فى الحالة الأولى , سوف يتعرف المترجم على محاولتك , لكن من أجل توفير حيز ذاكرة الفلاش , ولرفع الأداء , سوف يقوم تلقائيا باستبدال كل مثيل لهذا الثابت بالبرنامج بالقيمة الحرفية له . فى الحالة الثانية , سوف يتم وضع الثابت فى ذاكرة الفلاش فى الموقع المحدد تماما . توخى الحذر عندما تستخدم التوجيه absolute , لإنه قد يحدث تداخل لمتغيران عن طريق الصدفة كما يلى :
· المتغير i سوف يحتل 1 بايت عند العنوان0x33 :
// Variable i will occupy 1 byte at address 0x33char i absolute 0x33;
· المتغير سوف يحتل 4 بايت عند العناوين
0x30, 0x31, 0x32, 0x33// Variable will occupy 4 bytes at 0x30, 0x31, 0x32, 0x33; thus,long jjjj absolute 0x30;
تغيير i يتسبب فى تغيير إعلى بايت فى jjjj فى نفس الوقت والعكس بالعكس .