قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 26-11-2008, 05:18 PM المشاركة 9   
افتراضي



هل جربت البرنامج على MPLAB ؟
التجربة علىMPLAB وخاصة باستعمال step into ستبين لك كيف تتم العملية .. ويمكنك محاكاة المفاتيح باستعمال وظيفة stimulus ، (ضمن لائحة Debugger).
لتسهيل المهمة اضع لك البرنامج القابل للنسخ..
من جهة اخرى السطور التي اعنيها ليست تلك التي على يسار الصورة السابقة ، وانما السطور التي تبدأ ب ;1; وتنتهي ب ;26; والافضل ان تكون هي المرجعية اثناء المناقشة حول التعليمة RETLW
علما بان L ليس تابثا وانما عدد متغير . كما ان PCL لا تساوي 16 الا في السطر 16 وتزيد قيمتها بواحد مع كل سطر موالي.. وقد تختلف قيمتها الى اقل او اكثر بحسب عدد سطور كل برنامج..
وعلى فكرة فكلمة سطور غير دقيقة الوصف ، هي فقط لتيسير الشرح والمناقشة..
هذا البرنامج اعرفه جيدا لانني انا من أعده لذلك يمكنك الاستفسار عن كل ما يتعلق به .. وقد جربته على مبلاب وعلى بروتوس و النتائج تحقق الهدف..
كود:
;RETLW
كود:
 
;****************************************************************************************
errorlevel -302 ;Message[302]
LIST p=16f84a ; Définition de processeur
#include <p16f84a.inc> ; Définitions de constantes
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC ;****************************************************************************************
; Démarrage sur Reset ;**************************************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;**************************************************************************************** ;Initialisation ;**************************************************************************************** init BCF STATUS,RP0 ;1; ; banque 0 CLRF PORTA ;2; CLRF PORTB ;3; BSF STATUS,RP0 ;4; ; banque 1 MOVLW 0xFF ;5; MOVWF TRISA ;6; MOVLW 0x00 ;7; MOVWF TRISB ;8; BCF STATUS,RP0 ;9; ; banque 0 goto START ;10; ; => programme principal ;************************************************************************************* ; Programme principal ;************************************************************************************* START MOVF PORTA,0 ;11; ;lecture du port A CALL CONVERT ;12; ;appel du sous programme de conversion MOVWF PORTB ;13; ; W = PORTB (7 segments) goto START ;14; ; Prêt pour une autre conversion CONVERT ;conversion: 1 instruction + retour: ADDWF PCL,F ;15; ; W + PCL ; W = PORTA & PCL = 15. RETLW B'00111111' ;16; ; W = 0 => PCL = 16+0 =16 => 0 RETLW B'00000110' ;17; ; W = 1 => PCL = 16+1 =17 => 1 RETLW B'01011011' ;18; ; W = 2 => PCL = 16+2 =18 => 2 RETLW B'01001111' ;19; ; W = 3 => PCL = 16+3 =19 => 3 RETLW B'01100110' ;20; ; W = 4 => PCL = 16+4 =20 => 4 RETLW B'01101101' ;21; ; W = 5 => PCL = 16+5 =21 => 5 RETLW B'01111101' ;22; ; W = 6 => PCL = 16+6 =22 => 6 RETLW B'00000111' ;23; ; W = 7 => PCL = 16+7 =23 => 7 RETLW B'01111111' ;24; ; W = 8 => PCL = 16+8 =24 => 8 RETLW B'01101111' ;25; ; W = 9 => PCL = 16+9 =25 => 9 END ;26;

السلام عليكم
قرأت الشرح و أريد أن أستفسر عن بعض الأشياء
فى البدية أمرRETLW هو يعنى أرجع من البرنامج الفرعى الى البرنامج الرئيسى مع تحميل قيمة L فى السجل W إذا كان هذا المبدأ سليم فما فهمتة من البرنامج المشروح فى الأعلى هو البرنامج الرئيسى start
1-يحرك منفذ أ الى W
2-يستدعى البرنامج الفرعى convert
3-عندما يذهب الى البرنامج الفرعى تكون أول تعليمة هى جمع محتويات w,pcl
صحيح .. المشكل عندك هنا في رقم 4-:
4-ثم يطبق RETLW وهو يعود من البرنامج الفرعى الى الرئيسى مرة أخرى مع وضع قيمة الثابت L التى تساوى 16 فى W
الخطوة صحيحة لكن L ليس ثابت و لا يساوي 16 بل يساوي العدد المكتوب امام التعليمة RETLW وهو العدد الذي سينقله W الى PORTB ، عدد يمكن ان تختاره انت كما تشاء: من 0 الى 255 كما تعلم ..
في مثالي السابق اخترت الارقام بطريقة تجعلها تظهر على العارضة السباعية على شكل ارقام مفهومة من 0 الى 9..
لكن لا شيء يمنعك من اختيار ترتيب آخر للقيمتين 1 و 0 فتكون عددا تضعه في PORTB ، حرف ، رقم ...
وهذا هو أساس عمل مصفوفة ..
5 -وبعد ذالك فى البرنامج الرئسى يحرك العدد الموجود فىW الى منفذ ب
6- ثم يرجع الى البداية مرة أخرى
صحيح
عند تنفيذ الأمرRETLW فى السطر 38 المرة الأولى ينتقل الى البرنامج الرئسى فلن يطبق أمر RETLW فى السطر 39 لأنة سينتقل الى البرنامج الرئسى و بعدذالك يستكمل البرنامج الرئسى و يكرر نفسة وبتالى فلن يمر على باقى أوامر RETLW
أرجو التوضيح لأن هذا الأمر هو كان و لايزال مربط الفرس
صحيح .. مادام PORTA = 0 .. لكن اذا غيرت القيمة على PORTA ، سيتغير الوضع.
لنفرض انك جعلت PORTA = 7 ..ماذا سيفعل البرنامج؟
1- يضع 7 في W
2- ينتقل الى convert
3- يجمع W مع PCL ..ويضع الناتج في PCL
ركز معي الان:
W=7 و PCL=16 ، اصبح السجل PCL يساوي 23 .. ماهي الفائدة من هذه العملية؟
عندما كتبنا الرقم 23 في PCL معنى ذلك اننا وجهناه لان ينفذ السطر 23 من البرنامج وهو : RETLW B'00000111'
اي ان المطلوب هو جعل التعليمة RETLW تضع L في W وتعود به الى اعلى وبالضبط لتنفيذ التعليمة : MOVWF PORTB
وهذا ما يحدث فعلا ..
وكما بينت لك يمكن ان يكون L اي عدد تختاره انت من 00000000 الى 11111111 (8bits)..
ربما الاشكال الذي حدث لك ، انك تصورت ان تعليماتRETLW ، تنفذ واحدة بعد الاخرى من 0 الى 9..
ليس الامر كذلك ، انت من يحدد وينتقي السطر المراد تنفيذه
العدد الذي تضعه في PORTA يسارع البرنامج الى السطر المناسب له ، دون اي ترتيب .
و لا مانع من اضافة اسطر اخرى من تعليمات RETLW لتكبير الجدول .
الامكانيات سترتفع.
اتحدث عن PORTB . اما الدارة ب 4511 والعارضة فلا تستطيع اظهار اكثر من 10 ارقام ..
جرب البرنامج على MPLAB و نفذه خطوة خطوة باستعمال الخيارstep into ..
اضف تعليمة "محايدة" مثل nop بعد السطر .ADDWF PCL,F.
سيتغير العدد في PCL طبعا لكن المبدأ يبقى هو هو .. فقط تأخذ بعين الاعتبار الترتيب الجديد ..


التعديل الأخير تم بواسطة : زكي شاكر بتاريخ 28-11-2008 الساعة 08:49 PM
اعلانات

وائل عبد الرحمن
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 25
نشاط [ وائل عبد الرحمن ]
قوة السمعة:
قديم 27-11-2008, 12:59 PM المشاركة 10   
افتراضي


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

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

زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 27-11-2008, 06:26 PM المشاركة 11   
افتراضي


ساقراء الشرح بتركيز و أرجو منك المتابعه
توضيح أنا لست مهندس أنا طالب مجستير فى الفيزياء النووية بجامعه الأزهر تعلمت الميكرو من المنتديات لانة سأستخدمة فى عرض البينات و معالجتها فأرجو الصبر معى
بالمناسبة أن لست شاكك فى صحة البرنامج لكن شكك فى فهمى لة
وفقك الله أخي وائل في دراستك .. تأكد ان هدف الكثيرين من أعضاء القرية هو الافادة والاستفادة . وان شاء الله ستجد المساعدة التي تريدها ..
اخي الكريم اخبرتك بان البرنامج مجرب .. فقط لتطمئن الى انه يعمل ولن يكون مضيعة للوقت. كثير من البرامج على النت لا تعمل..
ماذا تعنى التعليمات TRISF ,SWAPF وجزاك الله خيرا
اولا SWAPF هي فعلا تعليمة اما TRISF فهو سجل ذاكرة اي له وجود فيزيائي حقيقي في شريحة البيك.
ثانيا:
1/
عندك سجل اسميته مثلا variable
تعلم ان السجلات تتألف من bits 8 واسم هذه الثمان بيت: "بايت" byte
كل 4 "بيت" bit من الثمانية سموها " نيبل" فكل "بايت" يتكون اذن من 2 " نيبل"
التعليمة SWAPF : SWAP nibbles in F
تستخدمها لتغير مكان النيبل الاول مع الثاني في السجل variable
مثال:
كود:
movlw 11001001 movwf variable ; variable =11001001 swapf variable , f ; variable =10011100
2/
السجل TRISX سجل إعداد المنافذ كمداخل او كمخارج في البيك حيت يرمز X إلى اسم المنفذ كمجموعة بالحروف :
A, B, C, D,E تضاف الى PORT فتعطي مثلا PORTB..
اذا كان احد انواع البيك بتوفر على منفذ PORTF ؟ فان سجل إعداده سيكون: TRISF


وائل عبد الرحمن
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 25
نشاط [ وائل عبد الرحمن ]
قوة السمعة:
قديم 28-11-2008, 10:07 AM المشاركة 12   
افتراضي


السلام عليكم
أن عاجز عن الشكر و يكفى ردك السريع و المتابعة
أن الأن فهمت
أن ناتج عملية الجمع يوضع فى عداد البرامج و بتالى يذهب البرنامج الى العنوان الموجود فى عداد البرامج ليحمل W بقيمة الموجودة فىRTLW ثم يستكمل البرنامج بشكل طبيعى
بعد أذنك سؤال بعد تنفيذ البرنامج و الوصول الى goto start ماهى القيمة التى تكون موجودة فىW هل هى قيمةL أم سيكون فارغ
و هل يمكن جعل البرنامج ينفذ الجدول بالتتابع أى ينفذ أوامر RTLW واحد تلو الأخر كماكنت أظن فى البداية وياريت لو تحدث باستفاضة عن عداد البرمج لأن وجدت الشرح عنة قليل ولى أستفسار أخ لماذا حتى الأن لايتم شرح برنامج MPLAB لاأقصد الأسمبلى ولاكن وجه البرنامج أستخدام المحاكة و الواجة وهكذا وأسف للأزعاج


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 28-11-2008, 02:34 PM المشاركة 13   
افتراضي


بعد تنفيذ البرنامج و الوصول الى goto start ماهى القيمة التى تكون موجودة فىW هل هى قيمةL أم سيكون فارغ
w يحمل آخر قيمة L (الموضوعة في PORTB) فلم يحدث بعد اي تغيير
و هل يمكن جعل البرنامج ينفذ الجدول بالتتابع أى ينفذ أوامر RTLW واحد تلو الأخر كماكنت أظن فى البداية
نعم يمكن ذلك:
1- تخصص سجلا في منطقة الذاكرة تسميه بما تشاء ctr مثلا ..
2- تجعله يؤدي وظيفة عداد بواسطة التعليمة INCFSZ : INCrement F, Skip if Zero داخل حلقة. عداد يعد من 0 الى n مع n = عدد اسطر جدول تعليمات Retlw
مع ادخال توقيت مناسب لك يؤدي وظيفة الحركة الدائرية
ولا تنسى ان اكبر قيمة لسجل واحد هي 255 عشري FF هيكس، لكن يمكنك اضافة عداد اخر ان شئت
3- في البرنامج الكلي تستبدل PORTA ب ctr
ويمكنك الاحتفاظ ب PORTA ووضع محتوى ctr به ..
وياريت لو تحدث باستفاضة عن عداد البرمج لأن وجدت الشرح عنة قليل
عداد البرنامج الكامل PC او Program Counter سجل يتألف من 13 بيت .
وبما ان السجلات في البيك لا تتعدى 8 بيت فقد خصصت له ميكروشيب سجلين اثنين: احدهما ب8 بيت سمته PC Low او PCL والثاني ب 5 بيت سمته PCLATH او PC LATch counter High
PCLATH + PCL = PC
اغلب البرامج تحتاج فقط PCL لان محتواه من 0 الى 255 كاف لاغلب التطبيقات..
ربما مع بيك به اكثر من صفحتين مثل 16F876او 16F877 تحتاج لاستعمال PCLATH اذا كان البرنامج يستعمل الذاكرة بشكل جد موسع..
ولى أستفسار أخ لماذا حتى الأن لايتم شرح برنامج MPLAB لاأقصد الأسمبلى ولاكن وجه البرنامج أستخدام المحاكة و الواجة وهكذا
لا بالعكس ابحث بواسطة جوجل تحت اسم مثل Mplab tuto تجد الكثير او اذهب مباشرة الى موقع Microchip ..
الا اذا كنت تقصد الشرح بالعربي ..
بعض الروابط الاجنبية:
http://wwwdsa.uqac.ca/~rbeguena/Systemes_Microprocesseurs/Version2008/Cours/MPLAB%20tutorial%20(v6.62).pdf
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=64
كلمة اخيرة .. الاسمبلي جيد ومفيد ما في ذلك شك.. لكنه يحتاج الى نفس طويل وتفرغ..
من اجل ذلك تحول الكثيرون الى لغات لا يحتاجون معها التدقيق في كيفية عمل سجلات الميكروكونترولر..مثل
Mikrobasic
Picbasicpro
وبعض البرامج ذات الواجهة الرسومية مثل FLOWCODE
او حتى لغة C
ارجو لك التوفيق ..


وائل عبد الرحمن
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 25
نشاط [ وائل عبد الرحمن ]
قوة السمعة:
قديم 01-12-2008, 02:01 PM المشاركة 14   
افتراضي


السلام عليكم و رحمة الله و بركاتة
أنا الأن أستوعبت الدرس بالكامل و جزاك الله خيرا على مجهودك معى و كل عام و أنت بخير


زكي شاكر
:: عضو ماسي ::
تاريخ التسجيل: May 2006
الدولة: المغرب
المشاركات: 2,945
نشاط [ زكي شاكر ]
قوة السمعة:
قديم 01-01-2009, 08:41 PM المشاركة 15   
افتراضي إضافة


السلام عليكم
توفر MPLAB تعليمة (Directive) هامة ،هي DT ، تختصر مجموع تعليمات Retlw في سطر واحد.
عوض ما كان هنا:
يمكن الكتابة كما هنا:
كود:
START 
MOVF PORTA,W; port Aقراءة
CALL Table  ;Tableاستدعاء السطر المطلوب من الجدول 
MOVWF PORTB  ; W = PORTB (7 segments) 
goto START ; استعداد
Table ;conversion
ADDWF PCL,F  ; W + PCL (=> résultat dans PCL) ;(W = PORTA & PCL = 15).
DT .63,.6,.91,.79,.102,.109,.125,.7,.127,.111 ; (Pcl = 16,17,18....25)
END
ملاحظة
استبدلت CONVERT ( في المثال السابق) ب Table ،فقط للتوضيح
كما كتبت الارقام امام DT بالنظام العشري بدل الثنائي تسهيلا للمهمة.
مثال:
63 : اشعال الليدات التي تشكل الرقم 0 يعني (00111111) على PORTB
6: اشعال الليدات التي تشكل الرقم 1 يعني (00000110) على PORTB
...
111: اشعال الليدات التي تشكل الرقم 9 يعني (01101111) على PORTB


التعديل الأخير تم بواسطة : زكي شاكر بتاريخ 01-01-2009 الساعة 10:53 PM

وائل عبد الرحمن
:: مهندس ::
تاريخ التسجيل: Nov 2006
المشاركات: 25
نشاط [ وائل عبد الرحمن ]
قوة السمعة:
قديم 07-01-2009, 10:08 PM المشاركة 16   
x5


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



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