الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

انا اريد في الاسمبلي+ PIC

مغلق
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

كيف اعمل في برنامج MPLAB التالي:

ازود متغير VARIABLE واحد و أغير tris portb

يا ريت توضحو لأنو فهمي على قد حالي وشاكرين الكم

For loop

If statement

#2
اقتباس
ازود متغير VARIABLE واحد
نفترض المتغير اسمه variable , الكود يكون :
INCF variable, 1

معناه زود القيمه الموجوده في المتغير variable وضع الناتج في المتغير نفسه

ولكن لو كتبت الكود بهذه الطريقة

INCF variable, 0

معناها زود القيمه الموجوده في المتغير variable وضع الناتج في السجل العام W

اقتباس
أغير tris portb
معنى التغيير في TRIS PORTB اي أنك ستغير من اتجاه المنفذ ( دخل / خرج ) وهذا يحتاج منك الى الانتقال الى البنك رقم 1 لأنه خاص بالـ TRIS , لهذا نحتاج لأمر تغيير البنك , بعدها نضع القيمه المطلوبه في PORTB , وطالما اننا في ألبنك 1 فالقيمه ستضع في الـ TRISB , بعدها نكتب أمر العوده للبنك صفر للتعامل مع المنفذ نفسه وليس اتجاهه
BSF STATUS, RP0; ننتقل الى البنك رقم 1
MOVLW B'00001111'; جعل 4 بيت دخل , 4 خرج
MOVWF PORTB; نقل القيمه من W الى TRISB
BCF STATUS, RP0; نعود الى البنك رقم صفر

طبعا في بداية البرنامج تنتقل الى البنك 1 مره واحده وتفعل به كل عمليات التحكم مره واحده ثم تعود للبنك صفر مره واحده وتتعامل بعدها مع البنك صفر الا اذا دعت الحاجه لاستخدام البنك 1 , وهذا لاختصار البرنامج

اقتباس
For loop
طبعا لترجمتها في الأسمبلي يجب فهم الفكره الأساسيه أولا

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

ننفذ هذا الكلام في الأسمبلي :

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

طبعا بم أنه لا يوجد فرق هنا بين الزياده والنقصان فاننا سنستخدم النقصان هنا للتسهيل , فسوف نبدأ من 200 وننتهي عند صفر , شاهد الكود :

MOVLW D'200'
MOVWF counter; القيمه الابتدائيه للعداد
loop:; بداية الكود المراد تكراره
NOP; الكود المراد تكراره يكتب هنا
DECFSZ counter, 1; انقص من المتغير واحد وضع الناتج فيه فاذا كان الناتج صفر تخطى الأمر التالي
GOTO loop; اذهب الى بداية الكود المراد تكراره. سيتم تخطيه اذا كان المتغير يساوي صفر
....; الكود ما بعد الدواره

اقتباس
If statement
تتوقف على نوع المقارنه التي تريدها , لأنه لا توجد تعليمة مقارنه في المتحكم ولكن تتم عملية طرح وتختبر الأعلام للاشارات والزائد وبناء عليه تنفذ الكود للجمل الشرطيه , حاول انت فيها وأرني الى ماذا توصلت

Guide to use the PIC

#3

الأخ

Asm4all

اشكرك اشكرك

و زي ما يقولوها في المنتديات :

مشكوووووووووووووووووووووووووووووووووووووووووووووووووووووور

هذا الموضوع مغلق.

مواضيع مشابهة