السلام عليكم :
كيف اعمل في برنامج MPLAB التالي:
ازود متغير VARIABLE واحد و أغير tris portb
يا ريت توضحو لأنو فهمي على قد حالي وشاكرين الكم
For loop
If statement
السلام عليكم :
كيف اعمل في برنامج MPLAB التالي:
ازود متغير VARIABLE واحد و أغير tris portb
يا ريت توضحو لأنو فهمي على قد حالي وشاكرين الكم
For loop
If statement
نفترض المتغير اسمه variable , الكود يكون :اقتباسازود متغير VARIABLE واحد
INCF variable, 1
معناه زود القيمه الموجوده في المتغير variable وضع الناتج في المتغير نفسه
ولكن لو كتبت الكود بهذه الطريقة
INCF variable, 0
معناها زود القيمه الموجوده في المتغير variable وضع الناتج في السجل العام W
معنى التغيير في TRIS PORTB اي أنك ستغير من اتجاه المنفذ ( دخل / خرج ) وهذا يحتاج منك الى الانتقال الى البنك رقم 1 لأنه خاص بالـ TRIS , لهذا نحتاج لأمر تغيير البنك , بعدها نضع القيمه المطلوبه في PORTB , وطالما اننا في ألبنك 1 فالقيمه ستضع في الـ TRISB , بعدها نكتب أمر العوده للبنك صفر للتعامل مع المنفذ نفسه وليس اتجاههاقتباسأغير tris portb
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
الأخ
Asm4all
اشكرك اشكرك
و زي ما يقولوها في المنتديات :
مشكوووووووووووووووووووووووووووووووووووووووووووووووووووووور
هذا الموضوع مغلق.