قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 17-02-2009, 02:35 AM المشاركة 25   
افتراضي



ملحوظة أخيرة أود ذكرها ... أعتقد أنه من الافضل استخدام سويتشات من نوع آخر غير الذي تستخدمه في برنامج المحاكاه .. أرى أنه الأفضل استخدام push button . وأيضا يفضل جعل كلا السفن سيمجنت بجوار بعضهما البعض حتى يسهل عملية القراءة .. مع تنظيم السلوك بشكل أكبر ..
======================================= مجرد رأي

اعلانات

m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:
قديم 17-02-2009, 05:49 AM المشاركة 26   
افتراضي


بسم الله الرحمن الرحيم

-الكود الأول جميل وبسيط ولو كتبت البرنامج مرة أخرى سأكتبه بهذه الطريقة . ولكنه قريب بعض الشىء من الكود الذى قمت أنا بكتابته ونتيجة لبعض التعديلات التى قمت أنا بها فى برنامجى من اجل استكماله فلن أقوم بتعديله وخاصة أن الإختلافات ليست جوهية .ولكنى أرى كودك أفضل.
كود:
 if(porta.f0){while(porta.f0){}increment();}
جميلة جدا جملة while بس عايزة زمن داخل اللوب لإن كده هيزود بسرعة عالية.

- الكود الثانى جميل ولكن ماأريده هو الكود الأول
ولكن

كود:
 [QUOTE]while(portb.f0==1){}
            for(x=0;x<255;x++){
                      if(porta.f0){while(porta.f0){}increment();show();}
                      else if(porta.f1){while(porta.f1){}decrement();show();}
                      else {while(portb.f0){delay_ms(1000);x=254;}}
                      delay_ms(100);

                     }
INTCON.INTF=0;[/QUOTE
]

ممكن تخلى اللوب مستمر ويخرج منه ب goto

-بالنسبه لل eeprom أنا بستخدمها علشان لو فصلت الكهرباء وشغلتها من جديد الرقم اللى انا كنت محدده يفضل موجود ويبدأمن عنده وليس من 15
سؤال مكرر:
هل يوجد إعدادات داخل برنامج proteus من أجل الكتابة فى ال eeprom ؟

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 17-02-2009, 07:58 PM المشاركة 27   
افتراضي


جميلة جدا جملة while بس عايزة زمن داخل اللوب لإن كده هيزود بسرعة عالية.
لم أفهم ماذا تقصد جيدا.. جملة while الهدف منها أن لا ينفذ أي أمر حتى يرفع يده من على السويتش ( push button ) حتى لا يزود إلا رقم واحد مهما استمر في الضغط ( ينتظر إلى رفع يده) ........ أرجو توضيح ما تقصده ..؟؟!!

ممكن تخلى اللوب مستمر ويخرج منه ب goto
لا يمكن ... لأنني لو فعلت ذلك أكون قد غيرت أحد وظائف البرنامج التي اخبرتك بها وهي :
- عند الضغط على السويتش الواصل بـ rb0 مرة واحدة يتوقف العداد وينتظر البك مدة معينة حوالي خمسة وعشرين ثانية خلال هذه المدة يسمح لك بالضغط على سويتش واصل بـ a0 ليزيد القيمة أو a1 لينقص القيمة .
أي بعد مدة معينة سيرجع البرنامج للوضع الطبيعي .. (وهذا اختلاف عن مشروعك)

سؤال مكرر:
هل يوجد إعدادات داخل برنامج proteus من أجل الكتابة فى ال eeprom ؟
على حسب علمي الضيق لهذا البرنامج ... كل ما أعرفه أنك تكتب البرنامج الذي يستخدم eeprom وعند تجريبه وكان البرنامج مثلا يكتب على البك سيكتب البروتس عليه وعند توقف تشغيل البرنامج ثم تشغيله مرة أخرى ستجد أن ذاكرة eeprom لازالت محتفظة بالبيانات ولو حفظت ملف البروتس ستجد البك يحتفظ بآخر قيمة وضعتها في ال eeprom ... أما إذا أردت أن ترجع البك للوضع الطبيعي والأساسي (لم يكتب في ذاكرته بعد) فعليك أن تختار من قائمة Debug اختار منها Reset Persistent Model Data .
وبهذا تكون ذاكرة البك eeprom عادت لوضعها الطبيعي ..
ملحوظة عند الضغط على البك بالماوس مرتين انظر إلى advanced properties ستجد بها خصائص اكثر للـ eeprom .. وربما هناك معلومات أخرى عن هذا الموضوع ولكن ليست عندي فهذا كل ما أعرفه عن هذه النقطة .

----------------------------------------------------------------------------------
في انتظار الجزء الثالث والأخير

-----------------------------------------------------------------------------------

وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع


m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:
قديم 18-02-2009, 04:48 AM المشاركة 28   
افتراضي


بسم الله الرحمن الرحيم

جميلة جدا جملة while بس عايزة زمن داخل اللوب لإن كده هيزود بسرعة عالية.
لم أفهم ماذا تقصد جيدا.. جملة while الهدف منها أن لا ينفذ أي أمر حتى يرفع يده من على السويتش ( push button ) حتى لا يزود إلا رقم واحد مهما استمر في الضغط ( ينتظر إلى رفع يده) ........ أرجو توضيح ما تقصده ..؟؟!!
فعلا أنا أخطأت حيث أنك كتبت الكود هكذا
كود:
if(porta.f0){while(porta.f0){}increment();show();}
وأنا قرأته هكذا
كود:
 if(porta.f0){while(porta.f0){increment();show();}}
ايه رأيك فيه كده مش أحسن بس هو محتاج زمن داخل while بحيث لو انت فضلت ضاغط يزود العداد

بالنسبة للجزأ الثالث من البرنامج
هناك مشكلة فى هذا الكود لا أعلم ما سببه
هذه هى جملة if الثالثة داخل الإنتربت

كود:
else if (portb.f0)
 {
       while (portb.f0) {}

       EEprom_write(0x00,0x08);
       delay_ms(20);
       EEprom_write(0x01,0x07);
       delay_ms(20);
       return;}
}
الخطأ فى كود الإنتربت فى التنفيذ وليس فى الsyntax
وبالإضافة لجزء الإنتربت هذا سيتم تعديل الجزء التالى فى البرنامج وهو كالتالى
unsigned char temp;
void main()
{
intcon.f7=1; intcon.INTE=1; //rb0 interrupt
adcon1=0x06; trisa=0x03; // porta 0,1 as switches
trisb=0x01; trisc=0;
temp=Eeprom_read(0x01);
delay_ms(25);
if(temp==0xff){tens=1;ones=5;}
else {ones=temp;temp=Eeprom_read(0x01); delay_ms(25); tens=temp;}
start:
test:
show();
if(tens==0 && ones==0) {goto start;}
if(ones==0) {tens--; ones=9 ;goto test;}
ones--;
goto test;
}

أرجوا أن يوفقك الله فى إكتشاف المشكلة داخل الإنتربت وأخبرك بأننى مازلت أبحث عن سببها....
والسلام عليكم ورحمة الله


التعديل الأخير تم بواسطة : m_mansour2005 بتاريخ 18-02-2009 الساعة 04:54 AM

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 18-02-2009, 06:29 AM المشاركة 29   
افتراضي


كود:
if(porta.f0){while(porta.f0){increment();show();}}
ايه رأيك فيه كده مش أحسن بس هو محتاج زمن داخل while بحيث لو انت فضلت ضاغط يزود العداد
فكرة جميلة جدا...........



أخي الكريم ..................... إليك هذا الخبر السار تم اكتشاف المشكلة وتم حلها وعلى فكرة إنها ليست مشكلة واحدة بل اثنين .

خبر سيئ ......... لقد تعبت جدا وأحتاج إلى وقت لشرح المشكلة وبما أنني ذاهب للنوم الآن بعد ما أصلي الفجر ...... فانتظرني غداً بإذن الله .. حتى ذلك الوقت أحببت أن أخبرك بهذا الخبر السار فقط .. ولا تنسانا من دعواتك

وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع

والسلام عليكم ورحمة الله وبركاته


m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:
قديم 18-02-2009, 06:52 AM المشاركة 30   
افتراضي


بسم الله الرحمن الرحيم

سأنتظر ردك غدا إنشاء الله ....

هناك خطأقد وقعت أنا فيه دون قصد وأثناء بعض التعديلات أثناء كتابة الكود ... وهذا هو تصحيح لذلك الجزء
لا أعلم اذا كان هذا أحد الخطأين أم لا . ولكن فى كلا الحالتين فأنا منتظر ردك ........

كود:
temp=Eeprom_read(0x01);
delay_ms(25);
if(temp==0xff){temptens=1;tempones=5;}
else {tempones=temp;temp=Eeprom_read(0x01); delay_ms(25); temptens=temp;}
start:
 ones=tempones;
 tens=temptens;
 test:
شكراااااا على مجهودك الكبير معى


الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 18-02-2009, 11:12 PM المشاركة 31   
افتراضي


بسم الله الرحمن الرحيم
الحمد لله على نعمه التي لا تعد ولا تحصى ... ومن نعم الله الكبيرة علينا أن أنعم علينا بنعمة الإسلام وجعلنا إخوة متحابين نتفانى لمساعدة بعضنا البعض وأمرنا بالتواضع والتعاون المستمر بين أفراد المسلمين .. فالمسلم للمسلم .. وكما أخبرنا الرسول عليه الصلاة والسلام أن أحب الأعمال إلى الله سرور تدخله على مسلم ومن نعم الله علينا نعمة العلم فالعلم كله بيد الله يرزقه من يشاء ويقسمه كيف شاء فاللهم ارزقنا العلم النافع وبارك لنا فيه ووفقنا لنصرة الإسلام والمسلمين ...

لماذا هذه المقدمة ؟؟ لأنه بعون الله ستكون هذه المشاركة هي نهاية حل المشكلة لهذا الموضوع .. والذي كان فيه تعاون كبير بينك وبين أستاذنا الفاضل زكي شاكر الذي يمد يد العون للجميع وبين العبد الفقير محدثك . . فمن الجميل جدا أن تتم تبادل الخبرات و المعلومات وكذلك التعاون المستمر والمنظم تنظيما جيدا ..

ومشاركتك يا أخي الكريم مشاركة جميلة جداً تذكرني بمشاركة كانت بيني وبين أستاذي الفاضل زكي شاكر حول موضوع عن التحكم في درجة الحرارة بواسطة البك (بالاسمبلي) حيث استفدت كثيرا من أستاذي الفاضل زكي شاكر وكانت النتيجة النهائية لهذا الموضوع هو حل المشكلة بعدة طرق .... أكرمك الله يا أستاذ زكي وبارك في علمك ورزقك مزيدا منه وجعلك دائما عونا لإخوانك المسلمين في كل مكان . ( وقد كانت لدي فكرة معينة حول ذلك الموضوع وسأحاول وضعها بإذن الله كما وعدت الاستاذ زكي ولكني احتاج بعض الوقت لتكون هناك مشاركة قوية حول هذه الفكرة التي لدي )

وحتى لا أكثر عليك من الكلام هيا بنا لنختم هذه المشاركة بهذه المعلومات :

أولا : أخي m_mansour2005 لو كان لدينا دالة مقاطعة interrupt هذه الدالة وظيفتها مثلا إضاءة الليد ثم إطفاءه باستمرار عند الضغط على السويتش الواصل بـ b0 وفي حالة عدم الضغط على السويتش يظل الليد منطفئ دائما فسنكتب هذا البرنامج مثلا (علما بأن السويتش موصل بـ b0 والليد موصل بـ c0 )

كود:
void interrupt() { while(portb.f0==0){} portc=0; delay_ms(1000); portc=0xff; delay_ms(1000); } void main() { intcon.f7=1;intcon.INTE=1;adcon1=0x06;trisb=0x01; trisc=0; m: portc=0; goto m; }
هل تعلم ماذا سيحدث عند تطبيق هذا البرنامج ؟؟
عند تشغيل الدائرة لن يضيء الليد وعند الضغط على السويتش يضيء الليد ثم ينطفئ وهكذا باستمرار ... باستمرار . . كيف ذلك ؟؟ مع أنه لا يوجد loop داخل دالة المقاطعة .
نعم إذا كتبنا دالة الانتربت بهذا الشكل وعند تنفيذ البرنامج .. سيحدث ما يلي يظل البك ينفذ اللوب الذي في الدالة الرئيسية وعند الضغط على السويتش تحدث المقاطعة فينفذ البك الأوامر التي في هذه الدالة وعندها لن يجد أمر يجعله يرجع للدالة الرئيسية فينفذ الأوامر التي في دالة المقاطعة مرة أخرى وهكذا باستمرار . معنى هذا أنه إذا لم تكتب داخل دالة المقاطعة أمر يجعل البك يعود للدالة الرئيسية فإنه في تلك الحالة أي أوامر ستكتبها داخل الدالة ستكرر باستمرار كأنها داخل لووب.

ومعنى هذا أن البرنامج السابق لن يفرق أبدا عن البرنامج التالي


كود:
void interrupt() { qq: while(portb.f0==0){} portc=0; delay_ms(1000); portc=0xff; delay_ms(1000); goto qq; } void main() { intcon.f7=1;intcon.INTE=1;adcon1=0x06;trisb=0x01; trisc=0; m: portc=0; goto m; }
هذه أول ملحوظة .. الأمر الثاني هو كيف سأعود ( كيف سأأمر البك بالعودة ) من دالة المقاطعة . هل سأكتب return في نهاية دالة المقاطعة .. إذا كان الأمر return يجعل البك يرجع فمن المفترض عند تجريب الدائرة وعند الضغط على السويتش سيضيء الليد مرة واحدة فقط ثم يعود للدالة الرئيسية وبما أن المقاطعة هذه حدثت أثناء تنفيذ البك للوب m فسيرجع البك لـ m وبالتالي سينطفئ الليد ... ولكن هذا لن يحدث لماذا ؟؟ .. لأن الأمر return لن يرجع البك من دالة المقاطعة .. وهذه ملحوظة يجب التنبه إليها . ...

ولكن كيف أعود من دالة المقاطعة .. ببساطة بدل من أن تكتب return اكتب الأمر التالي
كود:
intcon.intf=0;
وعند كتابة هذا الأمر في نهاية دالة المقاطعة فإن البك سوف ينفذ الأوامر التي في دالة المقاطعة ثم يرجع للدالة الرئيسية في المكان الذي حدثت في المقاطعة أي في اللوب m
كما في الكود التالي :
كود:
void interrupt() { while(portb.f0==0){} portc=0; delay_ms(1000); portc=0xff; delay_ms(1000); intcon.intf=0; } void main() { intcon.f7=1;intcon.INTE=1;adcon1=0x06;trisb=0x01; trisc=0; m: portc=0; goto m; }
وبهذا لن تتكرر عملية الإضاءة والإطفاء باستمرار. وسيرجع البك من الانتربت
أرجو أن تكون فهمت ما أقصد ..

والآن في مشروعك وفي دالة المقاطعة يوجد اختبار للسويتشات هذا الإختبار يجب أن يكون باستمرار وعند الضغط على السويتش b0 مرة أخرى يرجع البك للدالة الرئيسية في المكان الذي حدثت فيه المقاطعة (اللوب) . لذلك في دالة المقاطعة سأجعل هناك لووب معين وليكن اسمه LL داخل هذا اللوب يتم اختبار السويتشات عن طريق استخدام جملة if مثلا ومن هذه السويتشات السويتش b0 الذي من المفترض أن يجعلنا نخرج من دالة الانتربت (المقاطعة) ولهذا يمكنني أن أكتب هذا الكود بالشكل التالي
كود:
void interrupt() { while(portb.f0==1){} scan: if(porta.f0){while(porta.f0){}increment();show();} else if(porta.f1){while(porta.f1){}decrement();show();} else {while(portb.f0){}goto RR;} goto scan; RR: INTCON.INTF=0; }
فعند الضغط على السويتش b0 يخرج البك من الانتربت عن طريق خروجه من اللوب scan والذهاب للعناون RR ..

==============================================

أهم نقطة أريد إخبارك بها
هي أنك داخل دالة الانتربت لايمكنك أن تستخدم الدوال الخاصة بـ eeprom .. أي أنه لا يمكنك استخدام المكتبة الجاهزة للـ EEPROM داخل دالة المقاطعة (الانتربت) ... ولكن لماذا ؟؟ لأن هذه الدالة تجعل البت GIE الخاص بـ INTCON بصفر أي أنها تلغي عملية المقاطعة ..

هل تخيلت ما يحدث عند استخدامك لهذه المكتبة داخل دالة المقاطعة .. ستلغي هي المقاطعة ولكن كيف تلغي المقاطعة وهي نفسها ستنفذ داخل المقاطعة ( لأنك وضعت أوامر استخدام هذه المكتبة داخل دالة المقاطعة )
إذن فلا تستغرب حينها أن تجد بعض السويتشات لا تعمل ولا تستغرب إذا وجدت كثيرا من التخاريف تظهر أمامك ...
ولتتأكد من كلامي اقرأ الهيلب الخاص باللغة الجزء الخاص بهذه المكتبة وستجد هذا الكلام فيها

Be aware that all interrupts will be disabled during execution of Eeprom_Write routine (GIE bit of INTCON register will be cleared). Routine will restore previous state of this bit on exit.
إذن يجب عليك عدم الكتابة على EEPROM داخل دالة الإنتربت بشكل مباشر.


ولكن ما هو الحل ؟؟؟ الحل هو أن تستخدم متغير إضافي هذا المتغير تكون قيمته صفر مثلا . وعند حدوث المقاطعة تصبح قيمته بواحد .. وفي الدالة الرئيسية تجعل البك في أول أمر داخل اللوب التي تجعل البك ينقص من القيمة باستمرار اجعل هناك جملة اختبار تختبر هل هذا المتغير بواحد إذا كان بواحد أي أن المقاطعة حدثت ومن ثم يستدعي دالة معينة تحتوي على استخدام EEPROM وتجعل هذه الدالة ترجع قيمة هذا المتغير للصفر مرة أخرى .

وإليك الآن الكود الذي كتبته ليحل هذه المشكلة ويعتبر مجرد مثال يمكنك التعديل عليه كما تشاء ( الغرض هو معرفة الفكرة فقط )
كود:
unsigned char B[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; unsigned char ones,tens,m=0; void show() { portb=B[tens]; portc=B[ones]; } void increment(){if (ones==9 && tens==9) {tens=0;ones=0;show();} else if (ones==9){ones=0; tens++; show();} else ones++; } void decrement(){if(tens==0 && ones==0) {tens=1;ones=5;show;} else if(ones==0) {tens--; ones=9 ;show;} else ones--;} void eee() {eeprom_write(0x00,8); delay_ms(50); ones=eeprom_read(0x00); m=0; } void interrupt() { //while(portb.f0==1){} char x; while(portb.f0==1){} for(x=0;x<255;x++){ if(porta.f0){while(porta.f0){}increment();show();} else if(porta.f1){while(porta.f1){}decrement();show();} else {while(portb.f0){delay_ms(1000); x=254;}} delay_ms(100); } m=1; INTCON.INTF=0; } void main() { intcon.f7=1;intcon.INTE=1;adcon1=0x06;trisa=0x03;trisb=0x01; trisc=0; // initaliztion tens=1; ones=5; test: if(m==1)eee(); show(); delay_ms(1000); decrement(); goto test; }
هذا مجرد مثال تجريبي فليست هذه الوظيفة المطلوبة .. افهم الفكرة فقط .

ملحوظة أأكد عليها : عند العودة من دالة الانربت سيقوم البك بالعودة للوب TEST وسينفذ الأمر الذي يختبر هل حدثت مقاطعة أم لا عن طريق اختباره للمتغير m .
لذلك إذا أردت أن يقرأ البك القيمة الموجودة في مكان ما في EEPROM التي كان السبب فيها دالة المقاطة فيجب عليك أن تكتب أمر القراءة هذا داخل اللوب test وليس خارجه .... أرجو أن تكون فهمت كلامي .. وفهمت قصدي جيدا .

هذا والحمد لله رب العالمين

==================================
تمهل جيدا واقرأ هذه المشاركة وحاول فهمها جيدا ... ثم اكتب البرنامج بشكله النهائي ثم ضعه هنا ....... تمنياتي لك بالتوفيق .
==================================

وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع

والسلام عليكم ورحمة الله وبركاته


التعديل الأخير تم بواسطة : ahmad_s_f بتاريخ 18-02-2009 الساعة 11:30 PM

m_mansour2005
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2009
المشاركات: 80
نشاط [ m_mansour2005 ]
قوة السمعة:
قديم 19-02-2009, 08:54 AM المشاركة 32   
افتراضي


بسم الله الرحمن الرحيم
أحب أن أشكرك مرارا وتكرارا على مجهوداتك الرائعة .
هذا الكلام بخصوص الإنتربت مفيد جدا ولم أكن أعلمه بل كنت أعلم أشياءا خاطئة ولكن بعد ماكتبت أنت أجريت أنا بعد الإختبارات .
أعتقد أنك تقصد
كود:
while(portb.f0==1){}
وليس
كود:
while(portb.f0==0){}
ولكن المهم

لاحظ الفرق بين الكودين التاليين

كود:
intcon.intf=0;
   return;
portc=1;
كود:
intcon.intf=0;
portc=1;
فى الكود الأول
لن تضىء الليد . وسوف يخرج من الانتربت.

فى الكود الثانى
ستضىء الليد . ثم يخرج من الانتربت.

************
كود:
void interrupt()
{
  while(portb.f0==1){}
           scan:
                      if(porta.f0){while(porta.f0){}increment();show();}
                      else if(porta.f1){while(porta.f1){}decrement();show();}
                      else {while(portb.f0){}goto RR;}
                      
           goto scan;

RR:
INTCON.INTF=0;
}
طريقة أخرى
يمكن ألا نستخدم جملة goto ونضع INTCON.INTF=0; داخل جملة else مباشرة ثم بعدها return
شكرا جدا على مجهودك وإخبارى بأنه لا يصح استخدام الeeprom داخل الانتربت.
فقد عانيت كثيراااا بسبب تلك المشكلة.
ولكن ألا تلاحظ أن بعد كل انتربت لابد من الكتابة فى الeeprom .ألا يوجد طريقة مباشرة للذهاب الى دالة تقوم بالكتابة فى الeeprom مباشرة بعد الخروج من الانتربت.

فى الحقيقة أنا مضطر الأن للذهاب إلى الجامعة الآن . ولكنى لم أكمل بعد قراءة بقية الرد ولكنى سأكمل بمجرد عودتى مباشرة وخاصة أن الجزء المتبقى يحتاج إلى تركيز .

آسف مرة ثانية



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:24 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)