مشاهدة النسخة كاملة : الدرس السابع : مكونات لغة الاسمبلى


ahmedeldeep
14-10-2006, 12:40 AM
مكونات لغة الاسمبلى



تتكون لغة الاسمبلى من









1 Labels
2 Instructions
3 Operands
4 Directives
5 Comments











اولا :











1 Labels











وكما عرفنا سابقا انها عبارة عن نصوص تكون موجودة فى البرنامج للتوضيح او لتنفيذ البرامج الفرعية مثل GOTO ويجب ان تبدا بحرف او Underscore وطولها يصل الى 32 حرف ويجب ان تبدا من العمود الاول .









Instructions






وهى التعليمات وتكون معرفة من قبل الشركة المصنعة للميكرو وتسمى التعليمة فى لغات البرمجة بى syntax










Operands









وهى المعاملات التى تكون مع اى تعليمة وتكون غالبا مسجلات او متغيرات او ثوابت .









Comments









وهى كلام قام بكتابه المبرمج حتى يساعده فى تتبع الاخطاء فى البرنامج او حتى يكون من السهل على اى مبرمج أخر فهم طريقة عمل البرنامج المكتوب وتكون بعد التعليمة مباشرة ويجب ان تبدا بالعلامة الاتية ;









Directives









وهى تشبة التعليمات الى حد ما ولكن تعتمد على البرنامج نفسه وتوضح خصائص لغة الاسمبلى
مثلا LEVEL وعند كتابة هذه الكلمة يكون من المعروف ان تشير الى متغير موجود فى الذاكرة فى المكان الاتى 0Dh .







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



http://www.almohandes.org/vb/uploaded/micro/34.gif







ونلاحظ من البرنامج السابق انه يجب وضع ال directive بعد التعليق مباشرة



وال directive الموجود مهم جدا حتى تعجل الميكرو يعمل جيدا وهو يحتوى على نوع الميكرو ونوع المذبذب

واول سطر فى البرنامج مهم جدا لاننا يجب ان نقوم بتحديد عنوان معين يبدا منه الميكرو بالتنفيذ وهو org 0x00 وفى حالة حدوث ال interrupt يبدا الميكرو من org 0x04 وسوف نعرف لاحقا ما معنى interrupt







وتكون كلمة main هى البداية الحقيقية للبرنامج



اما بالنسبة لباقى التعليمات الموجودة فى البرنامج فاعتقد انها واضحه .

ahmedeldeep
14-10-2006, 12:42 AM
Control directives






وهى
تحتوى على مجموعة من الاوامر او directives ومن امثلة ذلك






الامر
#DEFINE








ويستخدم فى تغيير مكان جزء من النص الى مكان اخر ويكون على الصيغة الاتية #define<text> [<another text>]







ومثال على ذلك :






#define turned_on 1 #define turned_off 0







وهذا معناه انه فى كل مرة تظهر
turned_on فى البرنامج ستتغير 1 وبالمثل فى turned_off ستتغير الى صفر

ahmedeldeep
14-10-2006, 12:43 AM
2- الامر

INCLUDE



ويستخدم فى ارفاق ملف اضافى ضمن البرنامج الموجود ويعتبر هذا الملف انه ضمن البرنامج الحالى ويتم تنفيذه على حسب مكان وجود الامر INCLUDE ويكون على الصورة الاتية



#include <file_name> #include "file_name"



وحالة الاقواس تستخدم عندما يكون الملف للنظام System file



اما فى حالة الاقتباس فان الملف يكون للمستخدم User file



أمثلة على الامر :



#include <regs.h> #include "subprog.asm"

ahmedeldeep
14-10-2006, 12:44 AM
3- الامر CONSTANT





وهو امر يقوم بتحديد قيمة عددية لاسم حرفى

وشكله كما فى الصورة الاتية




Constant <name>=<value>







ومن الامثلة على هذا الامر






Constant MAXIMUM=100





وهذا معناه انه فى كل مرة يتم ظهور كلمة MAXIMUMفى البرنامج سيتم استبدالها بالقيمة 100

ahmedeldeep
14-10-2006, 12:45 AM
4- الامر VARIABLE

وهو مثل الامر السابق حيث يقوم بوضع قيمة عددية لاسم حرفى وصورته كما يلى






Variable<name>=<value>




والفرق بينه وبين CONSTANT ان قيمته من الممكن ان تتغير اثناء البرنامج ومن الامثلة على هذا الامر




variable level=20


variable time=13

ahmedeldeep
14-10-2006, 12:46 AM
5- الامر SET

وهو مشابه ايضا للامران السابقان ولكن يستخدم فى تعريف متغيرات المترجم assembler

Defining assembler variable

و يكون شكله العام كما يلى :

<name_variable>set<value>

وهذا يعنى انه يقوم القيمة value فى المتغير name_variable

ومن الامثلة على استخدام الامر

length set 12

ahmedeldeep
14-10-2006, 12:47 AM
6- الامر EQU






ويستخدم فى تعريف ثوابت الاسمبلر






Defining assembler constant







ويكون على الصورة الاتية






<name_constant> equ <value>




ومثال على ذلك :







five equ 5




اى يقوم باضافة القيمة 5 الى الاسم five

ahmedeldeep
14-10-2006, 12:48 AM
7- الامر ORG

يقوم بتعرف العنوان الذى سيكون بداية لتخزين البرنامج فى ذاكرة الميكروكنترولر ويكون على الصورة الاتية

<label>org<value>

ومثال على هذا الامر





Start org 0×00

movlw 0xFF
movwf PORTB




اى يقوم الميكرو بتخزين التعليمتين ابتدا من العنوان 00

ahmedeldeep
14-10-2006, 12:48 AM
8- الامر END


ويكون على الصورة الاتية

end
وهذا الامر مهم جدا للدلالة على نهاية البرنامج

ahmedeldeep
14-10-2006, 12:49 AM
Conditional instructions




التعليمات الشرطية






وهى تعليمات شائعة فى اغلب لغات البرمجة وتستخدم فى تحويل مسارات البرنامج


الامر IF



وصورته العامة كما يلى

if<conditional_term>

ومثال على ذلك :

if

level=100
goto FILL
else
goto
DISCHARGE
endif



وهذا معناه ان الميكرو يقوم باختبار الشرط level=100 فاذا كان صحيح فانه يقوم يقوم بالذهاب الى FILL واذا كان الشرط غير صحيح فانه يذهب الى DISCHARGE ثم يستكمل باقى البرنامج .
وقد لاحظنا استعمال الامر
ELSE
وهو كما عرفنا يستخدم كحل بديل اذا كان الشرط الموجود فى جملة IF غير صحيح
اما الامر
ENDIF
فانه يستخدم فى انهاء الفقرة الشرطية .

ahmedeldeep
14-10-2006, 12:51 AM
الامر WHILE


وصورته العامة كما يلى

while<condition>

.
.
.
endw

وهنا يقوم الميكرو بتنفيذ التعليمات الموجود بين WHILE و endw طالما ان الشرط الموجود فى جملة WHILE متحقق واذا كان الشرط غير متحقق فان الميكرو يقوم بتنفيذ endw والخروج من جملة while



ويمكن ان تصل عدد تعليمات البرنامج الموجودة بين WHILE و endw الى 100 تعليمة مع 256 مره تنفيذ
مثال على ذلك فى البرنامج الاتى

While i<10

i=i+1

endw

ahmedeldeep
14-10-2006, 12:58 AM
الامر IFDEF
وفائدة هذا الامر انه يقوم بتنفيذ مجموعة تعليمات البرنامج فى حالة اذا تم تعريف رمز معين باستخدام الامر DEFINE
وصورته العامة كما يلى :
ifdef<designation>
ومثال على الامر :
#define test
.
ifdef test ;هل تم تعريف الرمز test
......; سيتم تنفيذ هذه التعليمات اذا تم تعريف الرمز
endif

ahmedeldeep
14-10-2006, 01:00 AM
الامر IFNDEF
وهو عكس الامر السابق ويقوم بتنفيذ مجموعة من تعليمات البرنامج فى حالة اذا لم يتم تعريف رمز معين
وصورته العامة كما يلى
ifndef<designation>
ويستخدم غالبا اذا كان الرمز غير معرف او تم مسح تعريفه بواسطة الامر
#UNDEFINE
وهو عكس الامر DEFINE ومثال على ذلك
#define test
..........
#undefine test ;لالغاء تعريف الرمز
..........
ifndef test ;هل الرمز غير معرف
..... .; هذه التعليمات سيتم تعريفها لان الرمز غير معرف
endif

ahmedeldeep
14-10-2006, 01:00 AM
Data Directives
تعليمات البيانات


الامر CBLOCK
ويقوم بتعريف بلوك معين ليحتوى على مجموعة من الثوابت وصورته العامة كما يلى :
Cblock [<term>]
<label>[:<increment>], <label>[:<increment>]......
endc

وهذا الامر يقوم بوضع القيمة الموجودة فى العبارة term كقيمة ابتدائية الى اول ثابت label ويقوم بالزيادة بمقدار واحد للثابت الذى يليه مع اضافى قيمه الزيادة increment ان وجدت
وايضا القيمة الابتدائية ان لم تكن موجوده فيتم اعتبارها تساوى صفر
والمثال الاتى يوضح هذا :
Cblock 0x02
First, second, third ;first=0x02, second=0x03,third=0x04
endc

وهنا نلاحظ عدم وجود increment فتم اعتبارها تساوى واحد.
ونلاحظ فى هذا المثال وجود increment فلذلك تم اضافتها الى الثابت

cblock 0x02
first : 4, second : 2, third ;first=0x06, second=0x08,third=0x09
endc


الامر endc
ويستخدم فى انهاء بلوك تعريف الثوابت وموضحة فى الامثلة السابقة

ahmedeldeep
14-10-2006, 01:01 AM
الامر DB
يستخدم فى تعريف بيانات بايت واحد
وصورته العامة كما يلى

[<label>]db <term> [, <term>,.....,<term>]
ووظيفته يقوم بحجز بايت فى ذاكرة البرنامج واذا كان الامر يحتوى على اكثر من متغير يتطلب لكل منها بايت خاص فان الميكرو يقوم بحجز البايت الاول ثم الذى يليه
والمثال الاتى يوضح هذا :
db 't', 0×0f, 'e', 's', 0×12

ahmedeldeep
14-10-2006, 01:01 AM
الامر DE
وهو مشابه تماما للامر السابق ولكن يقوم بحجز البيت فى الذاكرة EEPROM وليس ذاكرة البرنامج وصورته العامة كما يلى :

[<term>] de <term> [, <term>,....., <term>]
ومثال على ذلك :
org H'2100'
de "Version 1.0" , 0

ahmedeldeep
14-10-2006, 01:02 AM
الامر DT
وظيفة هذا الامر هى تعريف جدول بيانات وصورته العامة كما يلى :
[<label>] dt <term> [, <term>,........., <term>]
ومثال على ذلك :
dt "Message", 0
dt first, second, third
حيث يقوم بتوليد مجموعة من تعليمات RETLW لكل term
اذن المثال السابق يصبح كما يلى :
RETLW Message
RETLW 0
RETLW first
RETLW second
RETLW third
وهذا المثال يقوم بعمل جدول يحتوى على الثوابت الموجود امام RETLW والتى تكون مخزنه فى المسجل W

ahmedeldeep
14-10-2006, 01:03 AM
Configurational directives
وهى الاوامر التعريفية للميكروكنترولر
ومن اهم هذه الاوامر الامر
_CONFIG
وصورته العامة كما يلى

_ _config<term> or_ _config<address>,<term>
ويكون كما فى المثال الاتى :
_CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
ويستخدم فى تعريف المذبذب وال Watchdog ودائرة الريسيت ويجب مراعاه تعريف نوع الميكروكنترولر المستخدم قبل استخدام هذ الامر

ahmedeldeep
14-10-2006, 01:03 AM
الامر PROCESSOR
تستخدم فى تعريف نوع الميكرو المستخدم
وهو على الصورة الاتية :
Processor <microcontroller_type>
وبالنسبة للميكرو الخاص بنا يكون الامر كما يلى :
processor 16F84

ahmedeldeep
14-10-2006, 01:04 AM
Assembler arithmetic operators
هى مجموعة من العلامات والرموز الخاصة التى يستخدم الاسمبلى
وهى موضحة فى الجدول الاتى مع استخدام كل منهما
http://www.almohandes.org/vb/uploaded/micro/35.gif

ahmedeldeep
14-10-2006, 01:04 AM
الملفات المتكونة بعد عملية الترجمة

لبرنامج مكتوب بلغة الاسمبلى
هى :
Executing file (Program_Name.HEX)
Program errors file (Program_Name.ERR)
List file (Program_Name.LST)
الملف الاول يحتوى على البرنامج بعدما تم ترجمته حتى يكون مفهوم للميكروكنترولر ولا يمكن للمستخدم ان يفهم منه شى .

الملف الثانى يحتوى على الاخطاء المتولده اثناء عملية الترجمة .
الملف الثالث هو ملف مفيد جدا للمستخدم حيث يحتوى على معلومات عن البرنامج والتعليمات المستخدمة والمتغيرات وبيانات الذاكرة وايضا يحتوى على الاخطاء وهو مفيد جدا فى حالة البرامج الكبيرة والتى يصعب تتبعها أو التعديل فيها ويكون بمثابة فهرس للبرنامج
وفى الصورة الاتية نرى نموذج للملف List file
http://www.almohandes.org/vb/uploaded/micro/36.gif

رحال حول العالم
14-10-2006, 03:36 AM
مشكوووووووووووووووور

رحال حول العالم
14-10-2006, 03:41 AM
ارجو توفير نسخة من البرنامج الخاص بالبرمجة و المحاكاة ليتسنى للجميع كتابة الاكواد و عمل Compiling و كذا مراقبة النتيجة لتنفيذ هذه الاوامر

ahmedeldeep
14-10-2006, 03:51 AM
ارجو توفير نسخة من البرنامج الخاص بالبرمجة و المحاكاة ليتسنى للجميع كتابة الاكواد و عمل Compiling و كذا مراقبة النتيجة لتنفيذ هذه الاوامر
نسخة البرنامج MPLAB موجودة فى المنتدى بالفعل

dr reda
15-10-2006, 01:29 PM
بارك الله فيكم على هذا الجهد المتميز

برجاء كتابة الرابط الخاص بنسخة البرنامج Mplab حتى يتسنى لنا تحميلها

وجزاك الله كل الخير

رحال حول العالم
15-10-2006, 11:45 PM
نسخة البرنامج MPLAB موجودة فى المنتدى بالفعل


شكراً جزيلاً على التنبيه و قد تم التحميل من الصفحة الحالية
http://www.almohandes.org/vb/showthread.php?t=3312&highlight=Mplab

عباس العراقي
20-10-2006, 05:38 PM
شكرا اخي العزيز
على هذا المجهود ارائع

الآلوسي
22-10-2006, 05:02 PM
هل من الممكن الشرح التفصيلي لعملية الدخول و تشغيل و استخدام برنامج Mplab
مع الشكر والتقدير على المجهود المضني من قبلك اخ احمد لاخراج هذه الدوره بهذا الشرح المبسط

علي الدين
23-10-2006, 02:03 PM
كنت أراجع الدروس و أحاول عمل تطبيق عملى عندما فوجئت بتساؤل حيرني و أوقفني سأورده كما كتبته لحظتها :
يوجد لذاكرة البياناتDATA MEMORY بنكين : بنك صفر و بنك واحد و كل بنك منهما يحتوي على مجموعة من مسجلات الأغراض الخاصة SFRs يبلغ عددها 11 مسجلا لكل بنك و مساحة من الذاكرة الرام تبلغ مساحتها 68 بايت لكل بنك . كل هذا ورد في الداتا شيت ، و لكن الذي حيرني هو كالتالي :

يوجد بعض المسجلات مكررة في كلا البنكين ، و بالتحديد نجد :

المسجل INDIRECT ADDR. مكرر مرة بالبنك صفر بالعنوان 00h و مرة بالبنك واحد بالعنوان 80h .
المسجل PCL مكرر مرة بالبنك صفر بالعنوان 02h و مرة بالبنك واحد بالعنوان 82h .
المسجل STATUS مكرر مرة بالبنك صفر بالعنوان 03h و مرة بالبنك واحد بالعنوان 83h .
المسجل FSR مكرر مرة بالبنك صفر بالعنوان 04h و مرة بالبنك واحد بالعنوان 84h .
المسجل PCLATH مكرر مرة بالبنك صفر بالعنوان 0Ah و مرة بالبنك واحد بالعنوان 8Ah .
المسجل INTCON مكرر مرة بالبنك صفر بالعنوان 0Bh و مرة بالبنك واحد بالعنوان 8Bh .

إن أول ما نتعامل معه من المسجلات هو مسجل الحالة STATUS REGISTER الذي نختار عن طريق البت رقم 5 فيه توجيه تعاملنا إلى أحد البنكين ، فإذا وضعناها بصفر كان التعامل مع البنك صفر و إذا وضعناها بةاحد كان التعامل مع البنك واحد بينما في جميع الحالات نضع البتين رقم 6 و رقم 7 بصفر لأنها غير مستخدمة في الـ PIC 16F84A .

و هذا يعنى أن أمامنا مسجلا حالة و ليس واحدا فقط ، فمع أيهما نتعامل و في أية ظروف نتعامل مع كل منهما ؟

نفس الشيء بالنسبة للمسجلات المكررة التي جاء ذكرها : مع أيها نتعامل و متى . :sm168: :sm135:
:sm153:

عباس العراقي
27-10-2006, 05:53 PM
لا عليك يا اخي
انا اتوقع واظن توقعي صحيح انه لا يوجد مسجلان بل مسجل واحد لكن له عنوانان كالبيت الذي له بابان فتستطيع الدخول من اي باب وكذلك المسجل تستطيع الوصول اليه من مكانين

علي الدين
29-10-2006, 05:43 AM
شكرا يا أخي العزيز ... كلامك يبدو منطقيا ... فهل ينطبق هذا على الرام أيضا ؟

eng_hema
29-10-2006, 01:35 PM
جزاكم الله خيرا يا باشمهندس وجعلك سببا فى رفعةى الامة

عباس العراقي
09-11-2006, 07:36 PM
شكرا يا أخي العزيز ... كلامك يبدو منطقيا ... فهل ينطبق هذا على الرام أيضا ؟

اسف على التأخير في الرد اخي
ينطبق على المسجلات التي تحوي نفس الاسم

ibrahim_damt
12-01-2007, 12:31 AM
بسم الله
انا احاول تعلم الميكروكنتروللر وهناك اشياء لا افهمها وارجو المساعدة
اولا كيف يتم الربط بين الدائرة الالكترونية والكمبيوتر
هل يتم عن طريق serialport or parallel port
وجدت عدد اطراف البورت اكثر من 9 اطراف فى مبرمج الميكروكنتروللر فكيف يتم ربطها بالسيريال بورت للكمبيوتر
هل هناك ترتيب معين وهل يجب ربط كل الاطراف بالكمبيوتر .
سؤال اخر
متى يتم تشغيل الدائرة الالكترونية هل عند عمل run للبرنامج ام ماذا

محمد البسيونى
06-03-2007, 05:40 AM
جزاك الله خيرا أخى الكريم أحمد الديب وبارك الله فيك . ولو سمحت تنزل الشرح على ملف pdf
لأن كثير من الصور لا تظهر . ووفقنا الله وإياكم الى ما يحبه ويرضاه

ذياب خليل
23-03-2007, 10:43 AM
شكرا يا "ذيب" البرمجة على هذه المعلومات الله يوفقك

eng_no1
26-03-2007, 08:58 PM
اريد معرفة كيف يفكر الميكرو بداية من الدخل القادم من العالم الخارجة حتى يخرجة مرة اخرى الى العالم الخارجة بعد معالجتة
وجزاكم الله خيرا

عباده
29-03-2007, 09:06 PM
بارك الله لك اخي الحبيب شرح وافي وماقصرت