منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 27-04-2014, 12:28 PM المشاركة 9   
افتراضي



الخطوة التالية : كتابة البرنامج :
بمجرد اكتمال مخطط الانسياب ، يجب عليك تحميل "قالب برنامج الميكروكونترولر PIC" على جهاز الكمبيوتر ( سوف نتناول ذلك قريبا) وكتابة البرنامج الخاص بك به . كل هذا يمكن القيام به ببرنامج نصوص بسيط مثل المفكرة Notepad والذى يأتى مع النوافذ (أو أى حزمة تطوير أخرى مناسبة ) .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 27-04-2014, 12:30 PM المشاركة 10   
افتراضي


الخطوة التالية : التجميع (الترجمة) :
عندما تنتهى من كتابة البرنامج ، يكون جاهزا للترجمة . وهذا يعنى تحويل ما كتبته ( والذى يتكون فى الغالب من الكلمات) إلى سلسلة من الأعداد التى يفهمها الكمبيوتر وسوف تكون قادرة على الاستخدام للتحميل على الميكروكونترولر PIC . هذا الشكل الجديد للبرنامج يتكون فقط من الأعداد وهو يسمى الكود السداسى عشر hex code أو الملف السداسى عشر hex file ويكون له الامتداد (.hex) .
فى الأساس ، لغة الميكروكونترولر PIC "المعقدة" التى سوف تتعلمها قريبا هى هنا ببساطة لجعل كتابة البرنامج أكثر سهولة . جميع البرامج الأولية تتكون من أعداد ( بعض الأشخاص يكتب البرامج فعليا باستخدام الأعداد فقط ولكن ذلك بالتأكيد ليس من المستحسن كما أن إصلاح المشاكل يكون مثل الكابوس ) . لذلك فإن المجمع (المترجم) أو الأسمبلر ، وهو قطعة من البرمجيات تقوم بترجمة كلماتك إلى أعداد . إذا فشلت فى التعرف على أحد كلماتك فسوف تسجل خطأ (الخطأ الأكيد) . وقد تسجل تحذير للأخطاء المحتملة ( أشياء بالتأكيد غير عادية ولكن ليس بالضرورة غير صحيحة) . الشىء الآخر الذى قد تعطيه لك هو "رسالة" message ( شىء لايكون خطأ ، ولكن عند الترجمة كان غير مألوف .
لا تقلق إذا كنت مرتبكا نتيجة للغة الأسمبلى ، فكل شىء سوف يكون واضحا كلما تقدمت فى البرمجة الفعلية .
فأنت الأن يجب أن تكون على استعداد لبدء كتابة البرنامج الأول الخاص بك .....

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

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 27-04-2014, 06:34 PM المشاركة 11   
افتراضي


سجلات الملف The file registers :
"مفتاح" الميكروكونترولر PIC هو "سجلات الملف" file registers الخاصة به . إذا فهمتها تكون قد قطعت نصف الطريق . تخيل أن الميكروكونترولرPIC كأنه "خزانة ملفات" (مثل الشانون) ، به العديد من الأدراج ، كل درج يحتوى على عدد ذو 8 بت ( بايت) . هذه الأدراج هى سجلات الملف . بالإضافة إلى سجلات الملف هذه يوجد "السجل العامل" working register . هذا السجل يكون مختلف لأنه ليس جزءا من خزانة الملفات . هذا السجل ضرورى لأنه لا يمكن إلا فتح درج واحد فقط (أى سجل ملف واحد فقط) فى نفس الوقت . لذلك ، تخيل نقل عدد من أحد الأدراج إلى درج آخر . أولا ، تقوم بفتح الدرج الأول ، وأخذ العدد خارجه ثم إغلاقه ، والآن ... أين يكون العدد ؟ الإجابة تكون أنه فى "السجل العامل" ، كنوع من الجسر bridge (قنطرة عبور) بين اثنين من سجلات الملف ( فكر فيه على أنه العامل الذى يقف أمام خزانة الملفات لخدمتها) . يتم حفظ العدد مؤقتا فى السجل العامل حتى يتم فتح الدرج الثانى ، حيث يتم وضع العدد بهذا الدرج .


وكما ترى من الشكل أعلاه ، يتم تخصيص (تعيين) رقم معين لكل سجل ملف . يجب عليك استدعاء سجلات الملف بأسمائها الفعلية عند كتابة البرنامج ( لأن ذلك يكون أسهل بكثير فى المتابعة) ، ومن ثم فإن المترجم (الأسمبلر) سوف يترجم هذه الأسماء إلى أرقام مرة أخرى عند إنشاء الملف السداسى عشر .
لا تقلق بشأن أسماء ووظائف سجلات الملف هذه ، فسوف يتم مناقشتها فى وقت لاحق .
ومع ذلك ، يمكن تلخيصها فيما يلى :
• السجلات "00" إلى "06" لها وظائف محددة "أغراض خاصة" .
• والسجلات من "07" إلى "1F" هى سجلات "أغراض عامة" ، والتى يكون لك السيطرة الكاملة
عليها . يمكنك استخدام سجلات ملف الأغراض العامة لتخزين الأرقام ويمكن أن تعطى لها الاسم الذى تريده . وبطبيعة الحال سوف تحتاج إلى إخبار المترجم كيف يترجم الأسماء الخاصة بك إلى أرقام .
على سبيل المثال ، إذا كنت تريد استخدام سجل الملف "0C" لتخزين عدد الساعات التى مرت ، فربما كنت تريد أن تسميها باسم مثل "الساعات" Hours . لكن ، عندما يعمل المترجم خلال البرنامج الخاص بك ، فإنه لن يفهم ما قصدته بكلمة ‘Hours’ إلا إذا كنت قد أعلنته أولا . سوف تعرف كيف وأين تعلن سجلات الملف الخاصة بك قريبا ، عندما ننظر فى قالب البرنامج .
قبل ذلك ، نحتاج لمقدمة موجزة للسجلات "05" و "06" :
المنافذ ports هى الوصلات بين الميكروكونترولر PIC والعالم الخارجى ، فهى مدخلاته inputs ومخرجاته outputs . المنفذ الأول ، Port A ، لديه أربعة بتات فقط ، أى أنه يحتفظ بنبل nibble بدلا من بايت كامل ، وهو السجل الوحيد الذى يفعل ذلك . كل بت bit تقابل طرف دخل / خرج خاص ، لذلك فإن البت bit 0 بالمنفذ Port A تقابل الطرف المسمى RA0 ( الطرف 17 فى PIC16F54 والطرف 6 فى PIC16F57 كما فى الشكل أدناه ) .


ولذلك عندما تكتب عدد 8-bit إلى المنفذ Port A ، يتم تجاهل الأربعة بتات ذات القيمة الأعلى ، وكذلك عندما تقرأ عدد 8-bit من المنفذ Port A ، يتم قراءة الأربعة بتات ذات القيمة الأعلى كأصفار "0" .
على سبيل المثال ، دعنا نقول أن RA0, RA1, RA2 , RA3 تعمل كمداخل inputs ، وهناك مفتاح ضاغط بين كل دخل والجهد (+5 V) . إذا تم الضغط على جميع هذه المفاتيح الضاغطة ، فإن العدد العشرى "15" ( العدد الثنائى "1111") سوف يكون فى المنفذ Port A .
وعلى العكس ، إذا كانت الأطراف تعمل كمخارج وتم توصيلها جميعا إلى ليدات كما فى الشكل أدناه ، فإن تحريك (نقل) العدد "15" إلى المنفذ Port A سوف يؤدى إلى تشغيل الليدات الأربعة .


تمرين :
باعتبار الترتيب الموجود بالشكل إعلاه ، فمن أجل إنشاء أضواء متحركة (جراى) chase مكونة من أربعة ليدات ( كما بالشكل أدناه) ، يجب نقل سلسلة من الأعداد إلى المنفذ Port A واحد تلو الآخر . فما هى هذه الأعداد (مطلوب الإجابة بالثنائى والعشرى والسداسى عشر) ؟

المنفذ Port B ( والمنفذ Port C بالميكروكونترولر PIC16F57 ) هو ببساطة منفذ دخل / خرج آخر ، تماما مثل المنفذ Port A فى جميع النواحى ما عدا أن لديه 8 بتات ( أى يحفظ بايت) . المنفذ Port C بالميكروكونترولر PIC16F57 هو السجل "07" ، لذلك لاحظ أن سجلات الأغراض العامة فى هذا الجهاز تبدأ من "08" فصاعدا .

http://fathallaabdelaziz.forumarabia.com/


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


قالب البرنامج A program template :
فى هذا الجزء والأجزاء اللاحقة سوف نبدأ فى النظر فى "التعليمات" . قد تجد أنها غير مألوفة ، ولكن لحسن الحظ هناك عدد قليل من القواعد العامة التى يمكن استخدامها لفك شفرة التعليمات المجهولة .
القاعدة الأولى :
أينما تواجه الحرف "f" فى التعليمة ، فهو يشير إلى "سجل ملف" file register .
والحرف "w" دائما تقريبا يعنى "السجل العامل" working register ، والحرف "b" تشير إلى البت bit فى الغالبية العظمى من الحالات . وأخيرا الحرف "l" عادة يشير إلى "الحرفى" literal ، وهو ما يعنى فعليا "العدد" . ولذلك فإن التعليمة التى تحتوى على الحرف "l" تتطلب "عدد" ليتم تحديده بعد ذلك . على سبيل المثال ، التعليمة المستخدمة فى المثال القادم (bsf) "تحدد" set بت فى سجل الملف ( تجعلها بواحد) .
مثال :


كود:
(Label) bsf porta, 0 ; turns on LED
هناك عدد قليل من العناصر الأساسية لكتابة برنامج PIC ، واحدة من هذه القواعد هى " بنية السطر" . المثال السابق يوضح "عينة لسطر برمجة" .
• "الاختيارى" الأول هو التسمية أو العنوان label ، وهو مطلوب إذا كنت تريد أن تقفز إلى هذا المكان فى البرنامج .
• بعد ذلك تأتى "التعليمة الفعلية" : وهى "bsf" ، وتعنى "ماذا أنت فاعل" .
• بعد ذلك يأتى "المفعول به" إى المقصود بالفعل .
• وأخيرا يأتى شرح بكلمات خاصة بك بما قمت بفعله للتو . من المهم أن تلاحظ أنه يمكنك كتابة ما تريد فى برنامج PIC طالما أنه يأتى "بعد فاصلة منقوطة" . وإلا فإن المترجم سيحاول ترجمة ما كتبته ( على سبيل المثال ‘turns on LED’ ) ، وبالطبع سوف يفشل ويعطىك خطأ ERROR . أثناء قيام الأسمبلر بالمسح خلال السطر تلو الآخر ، فسوف يقفز إلى أسفر إلى السطر التالى بمجرج أن يأتى إلى الفاصلة المنقوطة . لا أستطيع أن أؤكد كم هو مهم شرح كل سطر تكتبه . أولا ما كتبته قد يكون له معنى إثناء كتابته ، ولكن عند العودة إلية بعد فترة من الوقت ، سوف يكون من الصعب فهمه .
وثانيا ، فإنه يسمح لشخص آخر أن يقرأ خلال البرنامج الخاص بك بسهولة معقولة . يمكن فى بعض الأحيان أن يكون من الصعب جدا كتابة شرح جيد ، لأنه يجب أن يكون واضح جدا وفى نفس الوقت غير طويل جدا .
مثال :

كود:
bsf porta, 0 ; sets bit 0 of Port A

التعليق أعلاه يعنى القليل جدا ( فمن السهل أن ترى أن البت bit 0 يتم تحديدها) . فمن الأفضل القول "لماذا" كتبت ما كتبته ، والآثار المترتبة على ذلك .


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 28-04-2014 الساعة 12:57 AM

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


الآن دعونا ننظر فى "قالب البرنامج" ، مع الوضع فى الاعتبار أن هذا ما هو إلا مثال بسيط وقد ترغب فى إضافة أو إزالة عناوين من أجل القالب الشخصى الخاص بك . بشكل عام ، مع البرنامج بأكمله ، تكون فكرة جيدة استخدام الفراغات بين الأشياء ، وتقسيم الأقسام ذات الصلة بسطور . أقترح إنشاء ذلك بعلامة التساوى (=) ، وبيطبيعة الحال تحتاج للفاصلة المنقوطة ( فى بداية كل سطر .
كود:
Program template
;************************************
; written by: *
; date: *
; version: *
; file saved as: *
; for PIC… *
; clock frequency: *
;************************************
; PROGRAM FUNCTION: _______________________________________
;______________________________________________________________
list P = 16F5x
include “c:\pic\p16f5x.inc”
;============
; Declarations:
porta equ 05
portb equ 06
(portc equ 07)
org 1FFh
goto Start
org 0
;===========
; Subroutines:
Init clrf porta ; resets input/output ports
clrf portb
(clrf portc)
movlw b’xxxx’ ; sets up which pins are inputs and which
tris porta ; are outputs
movlw b’xxxxxxxx’
tris portb
(movlw b’xxxxxxxx’
tris portc)
retlw 0
;=============
; Program Start:
Start
call Init
Main
(Write your program here)
END


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


الجزء الأول :
"رأس أو مقدمة أو عنوان البرنامج " المحاط بسطرين لرمز النجمة (*) ( بهدف الأناقة ليس إلا ) :
كود:
;************************************
; written by: *
; date: *
; version: *
; file saved as: *
; for PIC… *
; clock frequency: *
;************************************
يحتوى هذا الجزء على بعض العناوين (الرؤوس) التى تسمح لأى قارىء آخر الحصول بسرعة على فكرة البرنامج . أهم ما يوجد به :
• "for PIC…." ، لكى يتم إدراج رقم نموذج الجهاز مثل 16F54 أو 16F57 ، اعتمادا على الميكروكونترولر PIC الذى تستخدمه .
• clock frequency: لبيان تردد المذبذب ( مقاومة / مكثف أو كريستال ) الذى قمت بتوصيله . الميكروكونترولر PIC يحتاج إلى إشارة ثابتة (مستقرة) لتخبره متى يتحرك (ينتقل) إلى التعليمة التالية ( فى الواقع ينفذ تعليمة كل أربع دورات للساعة ) ، لذلك إذا ، على سبيل المثال ، قمت بتوصيل مذبذب
4 MHz ( أى أربعة ملايين إشارة كل ثانية) فإن الميكروكونترولر PIC سوف ينفذ مليون تعليمة فى الثانية الواحدة . فى هذه الحالة يكون تردد الساعة 4 MHz .


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


الجزء الثانى :
كود:
;_______________________
list P = 16F5x
include “c:\pic\p16f5x.inc”
;============

والأهم أكثر بكثير من هذه العناوين هى الإجراءات (الأفعال) الأولية الفعلية التى يجب أداؤها .
• السطر list P = 16F5x : وهو غير مكتمل . يتم استبدال 5x برقم الميكروكونترولر PIC الذة تسنخدمه ( على سبيل المثال 54) ، ولذلك سوف تكون عينة السطر هى list P = 16F54 . هذا السطر "يخبر المترجم" (الأسمبلر) بنوع الميكروكونترولر PIC الذى تستخدمه .
• السطر include “c:\pic\p16f5x.inc” : يمكن المترجم لتحميل ما يعرف باسم "ملف البحث أو التفتيش " look-up file . هذا الملف مثل "قاموس الترجمة " للمترجم . سوف يفهم المترجم معظم البنود التى كتبتها ، ولكنه قد يحتاج للبحث ترجمات لبعضها الآخر . جميع سجلات الملف ذات الوظائف الخاصة (00 to 07) يتم إعلانها (تعريفها) فى ملف البحث . عند تثبيت برمجيات PIC سيتم تلقائيا إنشاء ملفات البحث هذه ووضعها فى دليل ( على سبيل المثال
“C:/Program Files/Microchip/MPASM Suite/” ) . أقترح عليك نسخ ملفات البحث ذات الصلة ( بالامتداد .inc) فى مجلد يسمى "PIC" على محرك الأقراص "C" بحيث يكون من الأسهل أن تتذكر المسار الصحيح ، ولكن هذا الأمر متروك لك . وبغض النظر ، يجب أن تكتب مسار صالح لملف البحث .


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


الجزء الثالث :
كود:
;============
; Declarations:
porta equ 05
portb equ 06
(portc equ 07)
org 1FFh
goto Start
org 0
;===========
بعد ذلك يأتى فراغ من أجلك لعمل الإعلانات (التعريفات)declarations الخاصة بك . هذه الإعلانات ، بمعنى من المعانى ، هى الإضافات الخاصة بك إلى قاموس الترجمة . فإذا كان عليك أن تعلن Hours على أنها سجل الملف 0C ، يجب أن تكتب ما يلى :

كود:
;============
; Declarations:
Hours equ 0Ch
قد تحتاج أيضا إلى إعادة إعلان بعض سجلات الملف لوظائف محددة . وذلك لأن المترجم قد يكون حساس للحروف الصغيرو والكبيرة . على سبيل المثال ، ملف البحث يعلن سجل الملف "05" باعتباره PORTA . وقد يكون من الأفضل كتابته بالشكل porta ( قد تفضل أن تترك كل شىء على ما هو عليه ولكننا بصدد التوضيح) ، لذلك سوف يتم إعادة "05" باعتباره porta جنبا إلى جنب مع باقى الإعلانات الأخرى كما يلى :
كود:
;============
; Declarations:
porta equ 05h
Hours equ 0Ch


وهذا يعنى أنه يمكنك كتابة porta أو PORTA وسوف يفهم المترجم كل منهما باعتباره سجل الملف "5" ، من المفضل أيضا إعلان أرقام سجلات الملف بترتيب تصاعدى .
أسفل الإعلانات يوجد ثلاثة سطور :
كود:
org 1FFh
goto Start
org 0
الغرض من هذه السطور لضمان أن تقوم الشريحة بتشغيل البرنامج بدءا من القسم المسمى (المعنون) labelled بكلمة "البداية" start . لفهم هذا المبدأ يجب أن تفهم أن "كل سطر تعليمة" ( وليس مجرد فراغ أو سطر ببعض التعليقات) يكون "له رقم معين" (أو عنوان address ) يخصص (يعين) له .
مثال رقم 1 :
كود:
start
0043  bsf porta, 0  ; turns on LED
; (This is to prove comments aren’t counted)
0044  goto start  ; loops back to start
لاحظ كيف أن السطور التى بها تعليمات فقط هى التى لها عناوين ( البداية تكون مجرد تسمية وليست تعليمة). الآن ، مواقع العناوين تكون منهجية ، العد التصاعدة كلما ذهبت إلى أسفل البرنامج ، إلا إذا ذكرت غير ذلك . يمكنك فعليا تسمية السطر التالى بعنوان معين ، وبالتالى فإنه فى السطر التالى سوف يستمر العد التصاعدى .
بعد ذلك يأتى أمر المترجم "org" ، متبوعا برقم العنوان الذى ترغب فى إعطائه للسطر التالى .

مثال رقم 2 :
كود:
start
0043  bsf porta, 0  ; turns on LED
org 3   ; makes the address number of the next
; instruction 3
0003  bsf porta, 1  ; turns on buzzer
0004  goto start  ; loops back to start
لاحظ أن الأمر "org" لا يتم إعطاؤه عنوان . وهذا بسبب أنه ليس تعليمة من التعليمات الذى يقوم الميكروكونترولر PIC بتنفيذها ، بل هو ملاحظة من أجل المترجم لتخبر بلصق التعليمة التالية عند (على سبيل المثال) العنوان "0003" فى ذاكرة برنامج الميكروكونترولر PIC . المثال السابق لن يعمل ، لأنه بعد تنفيذ العنوان "0043" ، فإن الشريحة ستحاول تنفيذ العنوان "0044" ، ولكن بغض النظر عن ذلك فإن المثال يوضح مبدأ عمل الأمر "org" .
الميكروكونترولر PIC16F54 له "512" عنوان ( 200h بالسداسى عشر) فى ذاكرة البرنامج الخاصة به ، وبعبارة أخرى أنه يمكن حفظ البرامج التى تصل إلى "512" تعليمة فى الطول .

أول تعليمة يتم تنفيذها عندما يتم تشغيل الميكروكونترولر PIC ( أو عند إعادة التعيين reset) هى المسماه "متجه إعادة التعيين" reset vector ، وتشير للعنوان 1FFh بالنسبة للميكروكونترولر PIC16F54 . ونحن نريد أن يبدأ الميمروكونترولر PIC من عند مكان فى البرنامج والذى قمنا سميناه start ، لذلك حتى نضمن أن التعليمة الموجودة عند العنوان 1FFh تكون goto start . فى القالب ، يتم استخدام "org" لوضع التعليمة goto start عند العنوان 1FFh ، مما يجعلها أول ما يتم تنفيذه . ومع ذلك ، فإن التعليمات اللاحقة يجب أن تبدأ العد من الصفر ، وبالتالى فإن الأمر التالى يكون "org 0 " . كتابة عنوان ذاكرة البرنامج بواسطة التعليمة يوضح كيف تعمل :
كود:
org 1FF 
01FF  goto start
org 0
;===========
; Subroutines:
0000  Init  clrf porta ;
0001   clrf portb ;
etc.

التعليمة الأولى التى يتم تنفيذها (goto start) تجعل الشريحة تذهب (تقفز) إلى الجزء من البرنامج المسمى "start" ، وبالتالى سوف يبدأ الميكروكونترولر PIC فى تشغيل البرنامج من المكان الذى قمت بكتابة start فيه . الأنواع المختلفة من الميكروكونترولر PIC لها متجهات إعادة تعيين مختلفة ، لذلك يجب تغيير قالب البرنامج وفقا لذلك .



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