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

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 16-09-2013, 01:35 PM المشاركة 9   
افتراضي



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

أخى الكريم

شكرا جزيلا لك

تقدير أعتز به

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

مع تمنياتى بدوام التوفيق

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:15 AM المشاركة 10   
افتراضي


المؤقت Timer0
الجزء الثانى
الهدف :
فى نهاية هذا الجزء يجب أن تكون قادرا على :
1- تطوير (إنشاء) برنامج لتوليد مقاطعات نتيجة تجاوز السجل TMR0 من أجل فترة زمنية محددة .
2- تطوير (إنشاء) برنامج باستخدام مصدر ساعة خارجى مع موديول المؤقت / العداد Timer0 .
3- تطوير (إنشاء) برنامج لمصدر ساعة خارجى لموديول المؤقت Timer0 .

مقاطعة موديول المؤقت / العداد Timer0 :
يمكن اختبار حدوث تجاوز السجل TMR0 حده الأقصى (255) بطريقتين :
الطريقة الأولى : طريقة "التقصى" Polling
وفيها يتم التحقق بشكل دورى من قيمة بت علم المقاطعة بالمؤقت Timer0 ( البت T0IF بالسجل INCON) ، وذلك لرؤية ما إذا تم تحديدها بواحد "1" ، وهذا يدل على أن السجل TMR0 قد حدث له تجاوز وعندئذ يمكن عمل تزايد لمتغير ما .
فى هذه الطريقة ، الاختبار الدورى للبت T0IF يقيد المعالج طالما أنه يقوم بتنفيذ الاختبار . هذا قد يكون مقبولا لبعض التطبيقات .

الطريقة الثانية : طريقة "المقاطعة" Interrupt :
سوف يأتى الوقت الذى ترغب فيه فى أن يقوم المعالج بالقيام بمهمة مختلفة وفقط يهتم (يولى عناية) أو يخدم تزايد للمتغير عندما يحدث تحديد "1" للبت T0IF نتيجة التجاوز بدون الحاجة للاختبار المستمر من حالتها . يتم تنفيذ ذلك بسهولة باستخدام المقاطعات والتى تعمل كإنذار (تنبيه) alarm يعطى إشارة على أن حدث معين قد وقع ( مثل تحديد البت T0IF) .
الشكل التالى يبين جهة اليمين مخطط مسار لتقنية "التقصى" polling ، بينما جهة اليسار يوجد مخطط مسار يمثل تقنية روتين المقاطعة .

يمكن إعداد الميكروكونترولر PIC لتنفيذ مهمة محددة عند حدوث المقاطعة ، يسمى ذلك "روتين خدمة المقاطعة" ISR . عند حدوث أى مقاطعة ، يمكن أن يكون هناك أكثر من واحدة ، فإن المعالج سوف يتوقف على الفور من العمل الذى يقوم به ويقفز إلى روتين خدمة المقاطعة لخدمة هذه المقاطعة . بمجرد الانتهاء من روتين خدمة المقاطعة ، يعود المعالج إلى ما كان يقوم به قبل أن يتم مقاطعته .


إعداد المقاطعات بالمؤقت Timer0 :

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:17 AM المشاركة 11   
افتراضي


إعداد المقاطعات بالمؤقت Timer0 :
تحدث المقاطعة عندما تتجاوز قيمة السجل TMR0 القيمة من 255 إلى 0 . يتم الإعداد عن طريق سجل التحكم فى المقاطعة INTCON ( الوضع الافتراضى لجميع البتات هو أصفار ) .
الشكل التالى يبين السجل INTCON والبتات المستخدمة :

يوجد فى الأساس ثلاثة بتات إعداد رئيسية تستخدم فى إعداد أى مقاطعة ( عموم المقاطعات ، والمقاطعة المحددة ، وعلم المقاطعة المحددة) وهى :
1- البت الأولى بت "تمكين عموم المقاطعة" GIE : والتى تعمل كنوع من "مفتاح التحويل الرئيسى" , ويجب تحديد هذه البت بواحد لتمكين عموم المقاطعات للميكروكونترولر PIC . هذه البت سوف يتم مسحها "0" تلقائيا عندما تحدث المقاطعة , وذلك لضمان عدم حدوث مقاطعات أخرى أثناء تنفيذ روتين خدمة المقاطعة . لذلك ، بمجرد أن يكتمل روتين خدمة المقاطعة ، يجب تحديد البت GIE بواحد مرة أخرى لتمكين المقاطعات المقبلة .
2- البت الثانية بت تمكين مقاطعة بعينها : كل جهاز طرفى سوف يكون له بتات تمكين مقاطعة منفردة . هذه البتات المنفردة قد تكون محتواه داخل سجل لمقاطعة الأجهزة السطحية منفصل (PIRx)Peripheral Interrupt Register . لكن بت تمكين المؤقت / العداد Timer0 وهى T0IE (وهو جهاز سطحى ) توجد بالسجل INTCON .
3- البت الثالثة "بت علم المقاطعة" : عندما يحدث تجاوز بالسجل TMR0 ، يتم تحديد بت علم المقاطعة T0IF بواحد "1" ، وتظل بواحد حتى يتم مسحها "0" فى البرنامج . هذه تحتاح إلى المسح عند الحاجة لمقاطعات مقبلة بهذا المؤقت .

ينصح باتباع التسلسل التالى عند إعداد أى مقاطعة وتتيع أى روتين خدمة مقاطعة :
1- مسح clear بت علم المقاطعة (T0IF =0 ) .
2- تمكين المقاطعة السطحية peripheral interrupt ( تحديد set بت تمكين المقاطعة T0IE=1)
3- تمكين عموم المقاطعات بتحديد البت GIE=1 .
إعداد المقاطعة باستخدام هذه الخطوات سوف يضمن أن المقاطعات لن تحدث خلال التهيئة ، فتتسبب فى نتائج غير متوقعة .

تدريبات :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:20 AM المشاركة 12   
افتراضي


تدريبات :
مقدمة :
الأمر On Interrupt ولغة Basic والمترجم Proton
الغرض :
تمكين معالجة المقاطعات عن طريق روتين فرعى .
المقاطعات ميزة برمجية هامة ، ولذلك سوف نخصص لها الكثير من الوقت لشرح كيفية استخدام هذا الأمر . فى الميكروكونترولر PIC16F84A ، على سبيل المثال ، أربعة مصادر محتملة للمقاطعة : إشارة خارجية على الطرف RB0/INT و تجاوز سعةoverflowالمؤقت TMR0 ، وتغيير حالة الأطراف RB4:RB7 و اكتمال كتابة البيانات إلى الذاكرة EEPROM .
الصيغة العامة :

كود:
On Interrupt Gato Label

عند حدوث المقاطعة ، فإنها تؤدى إلى تحديد set بت العلم flag بالسجل INTCON "سجل التحكم فى المقاطعة" (السجل هو موقع بالذاكرة بحجم بايت byte واحد ) .
هذا السجل يسجل طلبات المقاطعة الفردية عن طريق إعداد البتات الفردية التى تناظر مقاطعة معينة . على سبيل المثال ، المقاطعة نتيجة إشارة خارجية على الطرف RB0/INTسوف تحدد (تجعلها بواحد) البت bit1بالسجلINTCON. البتات ، هذا النوع من البتات تسمى أعلام flags. الميكروكونترولر يستجيب لهذه الأعلام التى تم تحديدها عن طريق تشغيل روتين المقاطعة .
بالإضافة إلى تسجيل المقاطعات ، يستخدم السجل INTCON البتات الأخرى إما لتمكين أو تعطيل المقاطعات. يحتوى السجل INTCON أيضا على بت تمكين عموم المقاطعة GIE (bit 7).
من أجل التعرف على أى مقاطعة ، يجب تمكين set البت GIE . إذا تم مسح clear (0) البتGIE ، فسوف لا يتم الاستجابة لأى مقاطعة . وبالإضافة إلى ذلك ، يمكن أيضا تمكين أو تعطيل المقاطعات الفردية عن طريق تحديد أو مسح بت التحكم المناظرة بالسجل INTCON.

على سبيل المثال ، البت bit 4 (INTE) لتمكين المقاطعة بالطرف RB0/INT. لتمكين المقاطعات عن طريق هذا الطرف ، يجب تحديد البت GIE (bit 7) بالإضافة إلى البت bit 4 . يجب تمكين المقاطعة قبل استخدام الدالة On Interrupt .
فى لغة Basic والمترجم Proton يمكنك تمكين المقاطعات بالطرف RB0/INT كما يلى :



كود:
INTCON = %1001000 or INTCON = 144

عند حدوث المقاطعة ، فإن الميكروكونترولر لا يقفز فورا إلى روتين المقاطعة المستدعى بالعنوان Label الموجود بالدالة بل يجب عليه أولا إكمال الأمر الذى يتم معالجتة حاليا ، وهذا يمكن أن يخلق تأخير بين لحظة أشارة المقاطعة وإلى حين أن يتم التعامل معها واقعيا ، فى بعض الحالات يكون التأخير كبير .
مثال :
كود:
DelayMs 10000 'pause 10 seconds

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


كود:
For x = 1 to 10000 DelayMs 1 next x

باستخدام هذا الاسلوب للتأخير ، يكون زمن الاستجابة للمقاطعة ليس سوى عدد قليل من الملى ثانية.


سوف تحتاج إلى أن معرفة ثلاثة أوامر قبل أن تتمكن من كتابة برنامج مقاطعة بسيط ، وهما أمر التمكين Enable وأمر تعطيل التمكين Disable وأمر العودة Resume.
الأمر Disable :
الغرض :
تسمح بتنفيذ أقسام من برنامج بلغة Basic دون إمكانية المقاطعة . توضع الدالة Disable مباشرة "قبل" روتين معالجة المقاطعة .
الأمر Enable :
الغرض :
إستعادة قدرة الميكروكونترولر للاستجابة للمقاطعات .
كل من Disable و Enable ليست أوامر حقيقية ، بل هى توجيهات للمترجم . فعندما يصادف المترجم Disable فى البرنامج ، فإنه يخبر المترجم بعدم الاستجابة للمقاطعة فى جزء البرنامج الذى يليها ويستمر فى ذلك حتى يصادف Enable. هذا هو السبب فى وضع Disable قبل روتين معالجة المقاطعة مباشرة ووضع Enable بعده مباشرة .

الأمر Resume :
وجود الأمر Resume فى نهاية روتين خدمة المقاطعة يؤدى إلى مسح clear(0) بت عموم المقاطعات GIE أى "تعطيل تمكين جميع المقاطعات" ، وإعادة مسار تنفيذ البرنامج من حيث حدثت المقاطعة .


الهيكل العام لاستخدام المقاطعة فى لغة Basic يوضحه البرنامج التالى :

كود:
ON INTERRUPT GOTO myint ; Interrupt handler is myint INTCON = %10010000 ; Enable RB0 interrupt DISABLE ; Disable interrupts in handler myint: led = 1 ; Turn on LED when interrupted INTCON.1 = 0 ; Clear interrupt flag RESUME ; Return to main program ENABLE ; Enable interrupts after handler



مثال لبرنامج مقاطعة بسيط :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:23 AM المشاركة 13   
افتراضي


مثال لبرنامج مقاطعة بسيط :
هذا البرنامج يبين طريقة الاستجابة للمقاطعة على الطرف RB0 :







البرنامج :
كود:
;This program responds to an interrupt on pin RBO Device = 16F628A Xtal 4 All_Digital TRUE OPTION_REG = %11111111 ; Default , bit 6 = INTEDG = 1 Low to High RB0 interrupt INTCON = %10010000 ;Enable RBO/INT : bit 7 = GIE = 1 And bit 4 = INTE = 1 Input PORTB.0 ; Set RB0 as input Output PORTB.1 ; Set RB1 as Output Symbol LED = PORTB.1 ; Indication LED Low LED ; Turn OFF LED On Interrupt GoTo Light start: ;Main Program Goes Here pause 1 GoTo start ;Interrupt Routine follows Disable ;Disable all interrupts Light: ;Light an LED connected to RBI Toggle LED ; Change the state of LED INTCON.1 = 0 ; Clear interrupt flag Resume ;Return to main program Enable;Enable interrupts


· هذا البرنامج بسيط جدا ، فهو يظل فى حلقة start: ….GoTo start .
· المقاطعة على الطرف RB0 سوف تؤدى إلى تفيير حالة الليد المتصل بالطرف PORTB.1 .
· لإطلاق المقاطعة يتم وضع إشارة على الطرف RB0 عن طريق مفتاح ضاغط ومقاومة سحب لأعلى أو مقاومة سحب لأسفل . هذه الإشارة سوف ترفع الجهد وتخفض الجهد على الطرف RB0 بين +5V والأرضى . يسمح لك البت bit6 بالسجل Option_Reg باختيار تولد المقاطعة على الطرف RB0 عند الانتقال من الجهد المنخفض إلى الجهد المرتفع أو العكس .
ملحوظة :
الوضع الافتراضى لجميع بتات السجل OPTION_REG هو الآحاد ، هذا يعنى أن الوضع الافتراضى للبت
bit 6 = INTEDG = 1 أى المقاطعة عند الحافة الصاعدة (Low to High) لإشارة المقاطعة المطبقة على الطرف RB0 .

مثال بشكل آخر :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:25 AM المشاركة 14   
افتراضي


مثال بشكل آخر :


البرنامج :

كود:
Device=16F628A Xtal 4 All_Digital TRUE Symbol LED = PORTB.1 Symbol GIE = INTCON.7 ; Name for INTCON.7 Symbol INTE = INTCON.4 ;Name for INTCON.4 Symbol INTF = INTCON.1 Name For INTCON.1 TRISB=%00000001 ; RB0 only as input PORTB=0 On Interrupt GoTo INT ; on interrupt go to label INT GIE=1 ; Enable all interrupts bit INTE=1 ; Enable external interrupt on pin RB0/INT bit High LED ; LED ON START: DelayMS 50 ; Lopping wait for interrupt , execute ISR , return back GoTo START Disable ; Disable any interrupt during ISR INT: GIE=0 ;Disable all interrupts bit INTE=0 ; Disable external interrupt on pin RB0/INT bit INTF=0 ;Clear RB0/INT flag bit Toggle LED ; As a result of RB0/INT change LED state INTE=1 ; Enable external interrupt on pin RB0/INT bit GIE=1 ; Enable all interrupts bit Resume; Return to main program Enable; Enable interrupts after handler End
تدريب على TMR0 :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:28 AM المشاركة 15   
افتراضي


تدريب على TMR0 :
الهدف :
تنفيذ مهمتين فى نفس الوقت :
· المهمة الأولى خرج فى شكل عداد ثنائى على المنفذ PORTB .
· المهمة الثانية تحويل حالة ليد متصل بالطرف RA0 عن طريق التأخير الزمنى باستخدام المقاطعة بسجل المؤقت TMR0 .




البرنامج :

كود:
Device 16F628A Xtal 4 All_Digital TRUE OPTION_REG = %00000011 ;TMR0 as "timer" with prescaler ratio 1/16 (011) Symbol LED = PORTA.0 ; Name for PORTA.0' Symbol GIE=INTCON.7 ;Name for (INTCON.7 = GIE) bit (global interrupts bit ) Symbol TMR0F=INTCON.2 ;Name for ( INTCON.2 = TMR0F ) bit (Tmr0 interrupt Flag bit ) Symbol TMR0E=INTCON.5 ;Name for ( INTCON.5 = TMR0E ) bit ( Tmr0 enable bit) TMR0E=1 ;Enable TMR0 interrupt bit GIE=1 ;Enable global interrupts bit Output PORTA Low PORTA Output PORTB Low PORTB Dim COUNTING As Byte Dim VAR1 As Byte On Interrupt GoTo ISR ;On interrupt go to label "ISR" TMR0=6 ;Load Tmr0 with 6 START: ; START Loop For VAR1=$00 To $FF ;From 00 up to FF PORTB=VAR1 ;Copy to PORTB DelayMS 1 ;Wait for 1 ms Next GoTo START 'Go to START Label ;ISR --- Disable ; OFF All Software interrupts during ISR ISR: ;ISR Label TMR0=6 ;Reload TMR0 with 6 TMR0F=0 ' ;Clear TMR0 FLAG bit Inc COUNTING ;Increment "COUNTING" variable each TMR0 interrupt ( 4 ms) If COUNTING=125 Then ;Is COUNTING = 125 ? (500 ms) Toggle LED ;Yes , LED TOGGLE COUNTING=0 ;Clear "COUNTING" variable EndIf Resume; Return to main program Enable; Enable interrupts after handler ;ISR END ----- End ; Program END
الحسابات :
· تردد المذبذب الخارجى Fosc = 4MHz
· تردد ساعة دورة التعليمات الداخلية Fint = Fosc/4 = 1MHz = 1000000Hz
· الزمن الدورى لساعة التعليمات الداخلية Tint = 1/Fint = 1/1000000 = 1s .
· نتيجة لإعداد السجل OPTION_REG = %00000011 تكون نسبة القسمة للمقياس سابق prescaler1:16 ، أى أن السجل TMR0 يتزايد بواحد كل 16 دورة من دورات ساعة التعليمات 1MHz .
· ونظرا لأنه يتم تحميل السجل TMR0 بقيمة ابتدائية "TMR0 = 6 " فأن هذا السجل سوف يمتلىء ويحدث له تجاوز overflow بعد "256 – 6 = 250" دورة على دخله وبعد أخذ تأثير استخدام المقياس السابق prescaler بالقيمة "16" ، يكون زمن تجاوز السجل TMR0 هو أى "250 * 16 = 4000s = 4ms" .
· بعد حدوث "125" تجاوز ( يتم استخدام متغير لحفظ عدد التجاوزات) يكون الزمن الكلى المنقضى هو " 4 * 125 = 500ms" أى نصف ثانية .

مثال آخر :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 17-09-2013, 03:30 AM المشاركة 16   
افتراضي


مثال آخر :
البرنامج :
كود:
Device 16F628A Xtal 4 All_Digital TRUE Symbol LED = PORTB.1 ; LED name for PORTB.1 Dim counting As Byte ; Temporary counter Output PORTB; Pins of PORTB are output Low PORTB; Clear all of PortB , PORTB = 0 INTCON = %00100000 ; Enable interrupt TMR0 OPTION_REG = %10000100 ; Set prescaler to 1:32 (100) counting = 0 ; Initialization of temporary counter TMR0 = 96 ; Initialization of TMR0 On Interrupt GoTo ISR ; Interrupt vector INTCON = %10100000 ;Enable interrupts Main: ; Beginning of the program If counting = 200 Then ;Change the state of LED Toggle LED ; on every 200 * 5ms = 1s counting = 0 ; Reset the counter EndIf GoTo Main ;Jump to main Disable ISR: counting = counting + 1 ; Increase counter by 1 TMR0 = 96 ; Initialize TMR0 INTCON.2 = 0 ; Clear T0IF flag Resume ;Return to the main program Enable End

الحسابات :
سجل المؤقت TMR0 هو سجل 8 بت يعمل فى المدى "255" . بفرض استخدام تردد كريستال المذبذب Fosc = 4MHz ، فإن الفترة الزمية التى يمكن للسجل TMR0 قياسها تقع فى المدى 0-256us ( السجل TMR0 يتزايد بساعة دورة التعليمات وهى تساوى Fosc/4 أى يتزايد كل واحد ميكروثانية) . يستخدم المقياس السابق prescaler لتطويل هذه الفترة الومنية ( حيث يقوم بقسمة ساعة دورة التعليمات Fosc/5 على نسبة قسمة معينة ، يتم تحديدها بالثلاثة بتات الأولى بالسجل OPTION_REG ) .
البرنامج يبين استخدام السجل TMR0 فى إنتاج فترة زمنية قدرها واحد ثانية .
يتم تحديد prescaler على القيمة 1:32 ، بحيث يتم قسمة الساعة الداخلية على "32" ويتزايد السجل TMR0 كل "32" ميكروثانية . فإذا تم تحميل السجل TMR0 فى البداية بالقيمة "96" ، فإن التجاوز سوف يحدث بعد (256-96)*32 us = 5 ms . فإذا تم تزايد المتغير counting فى كل مرة يحدث فيها مقاطعة يمكننا قياس الزمن تبعا لقيمة المتغير counting . فإذا تم إعداد المتغير counting = 200 ، فإن الزمن الكلى سوف يكون 200*5=1second .
قبل بداية البرنامج الرئيسى يجب تمكين المقاطعة بالسجل TMR0 عن طريق تحديد "1" البت bit 5 (T0IE) والبت bit 7 (GIE) فى السجل INTCON = %10100000 ( الوضع الافتراضى لجميع البتات أصفار) .

كود:
Fosc = 4 MHz Fint = Fosc/4 = 1 MHz Tint = 1/ Fint = 1µs For prescaler = 1: 32 TMR0 increases by "1" every 32 * T =32µs For initialize TMR0 = 96 TMR0 will overflow after (256-96) = 160 pulse =160 * 32 = 5120µs For 200 overflow Ttotal = 5120 * 200 = 1024000µs = 1sec



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