 |
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: القاهرة - مصر
المشاركات: 1,484
|
|
نشاط [ wleed antar ]
قوة السمعة:
|
|
27-09-2013, 10:56 PM
المشاركة 21
|
|
السلام عليكم
مرحبا بكم من جديد
بعد أن عرفنا مقدمة عن عملية الربط بين المتحكمات وطريقتها نقوم بإلقاء الضوء بشكل أعمق ،
- داخل المتحكم الفرعي حلقة لا يدخل إليها البرنامج إلا فى حالة استقبال الكود 15 متبوعا برقم هذا المتحكم الفرعي ، وإلا فلن يدخل البرنامج داخل هذه الحلقة ولن يهتم بهذا ،
- بعدما يتحقق هذا الشرط فإن هذا المتحكم الفرعي هو يكون هو المقصود من قِبل المتحكم الرئيسي فيدخل البرنامج على الفور للحلقة ويبدأ فى إرسال الطلبات بالترتيب ، فيبدأ كالتالى :-
1- إرسال الخانة اليسرى للقيمة المطلوب إرسالها سواء كانت عشرات أو مئات أو آلاف ، حسب البرنامج وحسب المعطيات .
2- ينتظر المتحكم الرئيسي الإجابة حتى يستلم هذه القيمة ثم يقطع إشارة الطلب فلا يصل من المتحكم الرئيسي للمتحكم الفرعي أى إشارات وينتظر المتحكم الرئيسي حتى يتوقف المتحكم الفرعي هو الآخر عن عملية ارسال الجواب المطلوب .
هكذا تمت عملية نقل الخانة الأولى ، وقبل التكملة يجب أن نذكر أن كل خانة نريد إرسالها يجب أن يكون مضاف إليها واحد صحيح فمثلا الرقم 4 سيكون 5 ، والرقم 8 سيكون 9 والرقم 0 سيكون واحد والرقم 9 سيكون 10 وبعد ذلك عندما يستقبل المتحكم الرئيسي هذا الرقم سيقوم بطرح واحد من الرقم الذى استقبله ليحصل على القيمة الصحيحة ، والهدف من هذه العملية هو تفادى الأخطاء لأن المتحكم إذا أراد نقل احدى الخانات وكانت صفر فإن المتحكم الآخر لن يستقبل شئ وسيظل منتظر دون اشارات ،
3- يقوم المتحكم الرئيسي بإرسال اشارة لطلب الخانة التالية من البيانات فيستقبل المتحكم الفرعي هذه الإشارة ثم يقوم بإرسال الخانة التالية من الناتج المراد إرسالة وهكذا حتى تمام العملية فيخرج البرنامج من الحلقة ولا يدخل فيها حتى يتحقق الشرط الأول والخاص بهذا المتحكم الفرعي .
ملاحظة :-
البيانات المراد نقلها يجب أن نقوم بتجزئتها إلى خانات فمثلا الرقم 345 سنقوم بتجزئته خانات فيتم ارسال كل خانة على حدة فنبدأ بـ 3 ثم 4 ثم 5 وهكذا ، وعلى المقابل يقوم المتحكم الرئيسي بتجميع هذه الخانات ،
أترككم مع ملفات البرنامج ثم نكمل الشرح ، وأنتظر منكم أى استفسارات ،

والآن مع البرنامج الرئيسي للمتحكم الرئيسي
include"LCD_pin.c" // pin for lcd#
include "cpu_unit.h" // unit file#
استدعاء الملف الفرعي لأطراف الشاشة
استدعاء الملف الفرعي لبرنامج المتحكم الرئيسي
; unsigned Num
; void main(){ trisa.f0=1
;PORTOUT=0 ; adcon0=0b00; option_reg=0x84
; trisout= 0x0f
Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); // lcd setting
Lcd_Out(1,1,"P1:"); //text for pot 1
Lcd_Out(1,9,"P2:"); //text for pot 2
while (1){ // start loop
send_addres( 10 ); // send to slave pic
Lcd_chr( 1,4, 48+ var[1] ); // out num
Lcd_chr( 1,5, 48+ var[2] ); // out num
Lcd_chr( 1,6, 48+ var[4] ); // out num
send_addres( 11 ); // send to slave pic
Lcd_chr( 1,12, 48+ var[1] ); // out num
Lcd_chr( 1,13, 48+ var[2] ); // out num
Lcd_chr( 1,14, 48+ var[4] ); // out num
delay_ms(1); // delay 1 ms
{
{
يتبع ،
|