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

سؤال عن الماكرو

مغلق
بدأه فارس2005 في 8 نوفمبر 2005 · 17 رد · 1,559 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤال عن الماكرو وال MPLAP

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

أولا عملت مارو بسيط ووضعته في ملف بامتداد mac.inc

هذا الملف به الاكواد التالية

  bank0  macro
         bcf 03h,5
         endm
    
  bank1  macro
         bsf 03h,5
         endm
         end

الملف الاخر اسمه hh.asm ووضعت به الاكواد التالية مع العلم كل الملفات في فولدير واحد

 include "mac.inc"
     movlw 05h
     bank1
     movwf 085h
     bank0

بعد تجميع الملف الثاني وتصحيح الخطأ عن طريق برنامج ال mplap يظهر لي الرسالة التالية

Clean: Deleted file "D:\New Folder\hh.lst".
Clean: Done.
Executing: "D:\Program Files\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84A "hh.asm" /l"hh.lst" /e"hh.err"
Warning[207] D:\NEW FOLDER\MAC.INC 3 : Found label after column 1. (bank0)
Warning[207] D:\NEW FOLDER\MAC.INC 7 : Found label after column 1. (bank1)
Loaded D:\New Folder\hh.COD
BUILD SUCCEEDED: Tue Jan 01 01:39:44 2002

فما هو سبب المشكلة ؟؟؟؟وهل خطواتي صحيحة ؟؟؟

#2

المفروض انه يعمل دون مشاكل , ثم انه لا يوجد error فقط warning , وأعتقد انه بسبب المسافات

هذا المثال مجرب دون اي warning , لاحظ المسافات

; MACRO.INC
BANK1  MACRO
  BSF	STATUS,RP0
  ENDM

BANK0  MACRO
  BCF	STATUS,RP0
  ENDM


OUTB  MACRO	ARG1
  MOVLW	ARG1
  MOVWF	PORTB
  ENDM

OUTA  MACRO	ARG1
  MOVLW	ARG1
  MOVWF	PORTA
  ENDM

HANG  MACRO
  GOTO	$
  ENDM

    PROCESSOR  16F84A
    INCLUDE        P16F84A.INC
    INCLUDE        MACROS.INC
    __CONFIG      3FF1h

    ORG  00h
START:
    BANK1
    OUTA 0
    OUTB 0
    BANK0
    OUTB  10h
    END

ملحوظه : تضمن الملف P16F84A.inc في برنامجك يمكنك من استخدام الأسماء بدل ارقام السجلات والثوابت

المكتبه مرفقه مع MPLAB لكل متحكم

تم تعديل هذه المشاركة بواسطة Asm4all في 8 نوفمبر 2005 في 23:53

#3

أشكرك جزيل الشكر علي المساعدة

انا طبقت مثالك وغيرت به وجربت ونجح في التجربة ورجعت وطبقت مثالي ووأكتشفت ان سبب المشكلة الرئيسي هو وجود مسافة

بين بداية عنوان الماكرو واول عمود في صفحة الكود كما موضح في الصورة حيث ان العنوان الاول BANK0 عند اول عمود مباشرتا

وان العنوان الثاني الذي عليه السهم الاحمر يبعد عن اول عمود بمقدار عمودين فاعطي الكمبايلير خطأ او رسالة تحذير للعنوان الثاني ولم يعطي للعنوان الاول

ولكن اعتقد انه من غير المفروض ان يحدث هذا التحذير اما السبب الرئيسي في سؤالي انني استعمل برنامج PIC SIMULATOR IDE لتعقب خطوات التنفيذ

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

سلام

08_11_05_02_00_53_1131487253DD.JPG

#4

هناك مشكلة أتعبتني بعد تنفيذ مثالك مرة أخرى لم يعمل و اكتشفت بان ملف hh.hex لا يتغير حجمه كلما عملت كمبايل لل source code

حينما أغير بعض الاشياء او أضيفها علي ملف السورس وملف ال mac.inc ووجدت ان الكمبايلر يتجاهل تماما اي تعليمات

بين اسم الماكرو و endm وهذه كانت مشكلة رئيسية لي من البداية

#5
فارس2005 كتب:
هناك مشكلة أتعبتني بعد تنفيذ مثالك مرة أخرى  لم يعمل و اكتشفت بان ملف hh.hex لا يتغير حجمه كلما عملت كمبايل لل source code

حينما أغير بعض الاشياء او أضيفها علي ملف السورس وملف ال mac.inc  ووجدت ان الكمبايلر يتجاهل تماما اي تعليمات

بين اسم الماكرو و endm وهذه كانت مشكلة رئيسية لي من البداية

بعد التعديل في الملف يجب حفظه , وأعد تجميعه بعد حفظه ( انا مش مستطب MPLAB حاليا ده من الذاكره ) و لو ما اشتغلش قوللي تاني وانا أستطبهولك واشوف ايه الحكايه

#6

السلام عليكم

شباب انتو دايما بتشتغلو على MPLAB والا كيف؟؟

لأنو انا من المنتدى نزلت برمج تانية ‍‍‍‍‍‍‍ :blink: لكنها شغاله معي

انا اول شي بكتب البرنامج على filename.txt و الكود مختلف عن اللي بتكتبوه اسمه masm

فيه movlw,movwf.....

بعدين بعمل save as filename.asm

بعدين بعمل compile وبشوف الاخطاء وبصلحها

وبعدها بعمل simulate على برنامج اسمه PIC Simualtor

بعدين في برنامج اسمة icprog بينزل الهكسا فايل على الايس سي

اذا عندكم طريقة بتنصحوني لأنها اسهل ياريت اتدلونا...

تم تعديل هذه المشاركة بواسطة اشرف يوسف في 9 نوفمبر 2005 في 04:49

#7

تم حل المشكلة ولله الحمد بعد التفحيص والتمحيص :D

المشكلة كانت تكمن في الاتي

project ----> Build options من هذا المسار داخل البرنامج نختار اسم السورس كود

وسوف تفتح لنا نافذة جديدة وفيها سنجد macro definitions ونضغط علي add ونضيف كلا من macro و endm

ثم ok

هذه المشكلة سببت لي تجاهل ملف السورس لاي كود داخل الملف mac.inc وكذلك يظل ملف ال *.hex ثابت الحجم لا يتغير وحجمه كان 30 بايت

انا لا استعمل ال mplap في كل الاحوال ولكن من الممكم استعمل برنامج يعمل كمبايل لاكواد بيسك وفي نفس الوقت اضيف لها اكواد اسمبلي مثل كمبايلر

microcode studio pluse الذي يعمل كمبايل لاكواد البيسك ولكن مشكلة البرنامج انه لا يعالج الماكرو فقط

#8

اوكي عيش حياتك يا فارس :D

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

كما انه بيحتوي على ملفات بها كل الثوابت التي تتعامل معها مثل أسماء السجلات و الأعلام و مواصفات المتحكم وغيره

فهو فقط يسهل من عملية كتابة الكود مع الألوان والحركات :lol: , واهم حاجه الـ debug

#9

هناك مشكلة أخرى وهي أضافة parameters للماكرو مثل مثالك كلآتي

BANK1  MACRO x
 BSF STATUS,RP0
 ENDM

BANK0  MACRO y
 BCF STATUS,RP0
 ENDM

ال parameters هنا هم x,y

وفي البرنامج يكون

PROCESSOR  16F84A
   INCLUDE        P16F84A.INC
   INCLUDE        MACROS.INC
   __CONFIG      3FF1h

   ORG  00h
START:
   BANK1 5
   
   BANK0 5
 END

فهل ما عملته في اضافة الباراميترز اليهم صحيح ؟؟؟ لان الكمبايلر لا يتعرف علي هذه الباراميتيرز ومحاولتا لحل المشكلة أضفت

db x,y

ولكن لم تفلح وكذلك أضفت #define x

فهل من طريقة لتعريف البارامتيترات داخل الماكرو ؟؟؟

#10

وماذا تفعل بالباراميتر اصلا في هذا الماكرو ؟؟؟ أنت لم تستخدمه أصلا

راجع المشاركه الاولى لترى ماكرو يطلب باراميتر ويستخدمه في الداخل

ملحوظه باراميتر الماكرو ليس متغير , فقط اعادة تسميه للتسهيل , فلا تحتاج لعلنه مثلا أو شيء من هذا

فقط تكتب الماكرو كما بالمثال

OUTB  MACRO ARG1
 MOVLW ARG1
 MOVWF PORTB
 ENDM

حيث استخدمت ARG1 داخل الكود فوضعتها في السجل W

#11

non

تم تعديل هذه المشاركة بواسطة فارس2005 في 11 نوفمبر 2005 في 21:19

#12

آسف الاكواد الاخيرة بها خطأ كتبتها وانا في حالة أستعجال وهذه الاكواد التالي بشكلها الصحيح

BANK1  macro Y
       bsf  03h,Y
       endm

BANK0  macro X
       bcf  03h,X
       endm
         END

include mac.inc
    movlw 05h
    bank1 5
    movwf 085h
    bank0 5

اولا المشاركة الاولى كانت ماكرو بدون باراميترز ثم عدلت بها ووضعت بها باراميتر

أنا وضعت بارامتير عبارة عن رقم البيت الذي سوف يتم تغيير حالته كمثال بسيط فقط يعني عند طلب bank0 5 فان X ستستبدل بالقيمة 5

الماكرو مثل الدالة (function ) تقبل متغير او بارامتير المشكلة أنني عند عمل ماكرو وله بارامتير كما في المثال السابق

فان ال MPLAP يعطي لي الرسالة التالية

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "D:\Program Files\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F84A "hh.asm" /l"hh.lst" /e"hh.err" /c-
Error[128]   D:\NEW FOLDER\MAC.INC 7 : Missing argument(s)
Error[128]   D:\NEW FOLDER\MAC.INC 11 : Missing argument(s)
Halting build on first failure as requested.
BUILD FAILED: Tue Jan 01 01:34:48 2002
#13

الماكرو

BANK0  MACRO  X
  BCF	STATUS, X
  ENDM

استدعاؤه في البرنامج

    BANK0 5

الناتج في ملف الليست بدون اخطاء

                      00011     BANK0 5
0005   1283               M                 BCF     STATUS, 5

أعتقد المشكله عندك انت

#14

بصراحة انا تعبت المشكلة غريبة

طيب سأسرد لك الخطوات بالتفصيل كيف استعمل برنامج ال MPLAB

أولا انا عندي نسخة من البرنامج MPLAB IDE v6.60 بصراحة انا جديد علي البرنامج يعني لي حوالي 5 ايام فقط

1- لتصحيح أخطاء البرنامج أقوم بتشغيل البرنامج السابق

2- أعد ملف بامتداد asm وأضع به الاكواد السابقة

3- انشأ ملف بامتداد inc واسمه macros وأضع به الاكواد السابقة بدون زيادة او نقصان

4- أرجع للبرنامج السابق ثم أقم بعمل مشرع جديد project --- >new project

وأختر له اسم و دايريكتوري وسوف يكون عندي مشروع بامتداد mcw

5- أجد قوائم منسدلة كما بالصورة المرفقة ومن source files أختر الملف بامتداد asm

6- من القائمة object files اختر ملف ال macros.inc

7- سأجد الملفين ثم

8- عمل build all من قائمة project لتصحيح الاخطاء

9- من قائمة view نختار disassembly list لتعقب البرنامج

هذا كل ما طبقته ولكن هناك ملاحظة عند اختيار build options من قائمة project واختيار ملف الاسمبلي

أجد هناك خيار macro definitions اذا لم أضف اليه macro و endm فانه البرنامج لن يظهر به اي اخطاء

ولكن الاحظ ان حجم الملف بامتداد HEX ثابت الحجم مهما تغير حجم البرنامج الاصلي وهنا يكون 30 بايت وكذلك ملف الليست ليس به اي شئ

اما عند أضافة ما سبق يتغير حجم ال HEX ولكن المشكلة تكمن في البارميتيرات حتي وان أضفتها فسوف يظهر لي الرسالة Missing argument(s)

كما أشرت من قبل

بصراحة انا متوقف من الاستمرارية في التمرن علي الاسمبلي حتي انتهي من معرفة سبب المشكلة

post-33503-1131799525_thumb.jpg

#15

طيب ما تسيب MPLAB على جنب لغاية ما نعرف المشكله في الكود ولا لأ ؟؟

استخدم MPASM حتلاقيه موجود في مجلد MPLAB

جهز ملف الماكرو و الأسمبلي في مجلد واحد وشغل البرنامج وأدخل له اسم ملف السمبلي بهذا الشكل

12_11_05_05_37_23_1131845843MPASM.JPG

اضغط Assembly

لو نتج هذا الشكل

12_11_05_05_41_27_1131846087output.JPG

يبقى كله تمام

غير كدا يا ريت تنسخ الملف اللي امتداده ERR وتلسقه هنا

لأن من الممكن ان يكون العيب في الـ IDE فقط , وان شاء الله نلاقي صرفه ليها

#16

عن طريق MPASM لا ينتج أي خطأ ولكن لا يمر أو يتجاهل وجود ماكرو حتي أنني ألاحظ في ملف ال lst انه تجاهل

الامر movlw ولم يمر عليها أعتقد ان موضوع الماكرو بسيط جدا ولكن اعتقد بعد كل المحاولات ان نسخة البرنامج التي عندي

بها خلل لانني جربت أحد الامثلة التي بها ماكرو والتي تاتي مع الامثلة في البرنامج ولم ينفذ بالشكل المطلوب وان ملف ال hex

ثابت الحجم لا يتغير وكما ذكرت هو 30 بايت

أرفقت لك ملف به البرنامجين وملف الليست اما ملف ال error فهو فارغ

test.zip

#17

وضحت المشكلة , بل المشاكل ...

1 - في ملف الماكرو , أضفت في نهاية الملف السطر

END

مما قلب البرنامج راسا على عقب , حيث اعتبر ان ملف الماكرو هو كود البرنامج

2 - في ملف الكود لم يتضمن نوع الميكروكنترولر

لحلها نضيف هذا السطر

PROCESSOR  16F84A

وبصوره عامه تضيف السطر التالي لضبط اعدادات الميكروكنترولر ( نوع المذبذب , حالة الـ WD , ...)

    __CONFIG      3FF1h

هذا الثابت يمكن معرفة معناه من برنامج MPLAB او icprog

3 - لم تميز حالة الأحرف عند استدعاء الماكرو , bank0 لا يساوي BANK0

التعريف يختلف عن الاستدعاء

4 - لم تحدد نقطة بداية الكود بالسطر

    ORG  00h

وهو مهم جدا ليحدد بداية الكود في ذاكرة المتحكم , و بم انه لك الحريه في كتابة الكود في اي مكان في ذاكرة المتحكم فان المجمع لا يعارض عدم وجود هذا السطر , لكن اثناء التشغيل ربما لا يعمل البرنامج كما تشاء لأن الكود لا يبدا من العنوان صفر

#18

معك حق اكتشفتها أخيرا ووجدت ان end في نهاية الماكرو كانت السبب وأضفت لها directive list

حتي تعطي فاعلية اكثر

       list
       nolist  
bank1  macro y
       bsf  03h,y
       endm
      
bank0  macro x
       bcf  03h,x
       endm
       list

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

هم وراااااااااااااااااااااااااااااااح وكابوس ما ينعاد :D

تعبتك معي يا أبو الشباب :D

تم تعديل هذه المشاركة بواسطة فارس2005 في 14 نوفمبر 2005 في 03:50

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

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