 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:
|
|
07-08-2010, 03:54 PM
المشاركة 26
|
|
ذاكرة البيانات: Data Memory
ذاكرة البيانات:Data Memory
أولا : العنونة المباشرة
دعنا نلقى نظرة على العنونة المباشرة لحيز ذاكرة البيانات . كمثال للعنونة المباشرة التعليمة MOVFW . التعليمة ذات 14-bits يأتى منها 7- bits من البيانات (كجزء من العنوان) . وهذا يسمح لنا بالوصول المباشر الى 128 سجل مختلف .
إذا أردنا الوصول إلى مسجلات إضافية ( كما هو الحال فى المنتجات التى تحتوى على ذاكرة RAM أكبر من 128 ) عندئذ نستخدم عدد 2-bits من سجل الحالة . هاتان الخانتان تعرفان باسم RP0 و RP1 , هاتان الخانتان تعطينا إمكانية حتى أربعة صفحات مختلفة من ذاكرة RAM . باستخدام هاتان الخانتان يتم زيادة مجال العنونة لمجموعة الملفات إلى 9-bits والذى يسمح بالوصول إلى أربع اضعاف العدد المستخدم ب 7-bits التى تعطينا اياها التعليمة نفسها .
ثانيا : العنونة الغير مباشرة
الأن سنناقش العنونة الغير مباشرة والتى تسمح لك بالزيادة فى " مؤشر" وبسهولة نذهب خلال جدول أو قائمة من البيانات محفوظة فى حيز ذاكرة البيانات .
عندما نستخدم العنونة الغير مباشرة يكون لدينا 9 خانات متاحة لحيز العنونة . الثمانى خانات المنخفضة للعنوان الغير مباشر تأتى من سجل اختيار الملف FSR بينما الخانة التاسعة تأتى من خانة مؤشر بنك المسجل الغير مباشر IRP فى سجل الحالة . الخانة IRP تعطى صفحتان من العناوين 8-bits . عندما تستخدم العنونة الغير مباشرة تحتاج للتاكد من أن الخانة IRP فى مسجل الحالة موضوعة فى الصفحة الصحيحة .
إذا نظرت إلى سجل الحالة هناك خانات أخرى مهمة . عرفنا الخانة IRP وخانة صفحة المسجل رقم 1
( RP1 ) و خانة صفحة المسجل رقم 0 ( RP0 ). الخانة TO هى خانة نهاية الزمن والخانة PD هى خانى هبوط القدرة . هاتان الخانتان تستخدمان مع غيرهما لتعريف سبب حدوث حالة "إعادة التشغيل" reset هل هى نتيجة إنتهاء زمن الحراسة watchdog timeout أو نتيجة إشارة reset على الطرف MCLR أو نتيجة تتابع هبوط القدرة . كما أن لدينا كذلك خانة الصفر zero bit وخانة نصف الحمل وخانة الحمل وهى لبيان حالة وحدة الحساب والمنطق فى نهاية كل عملية .
مثال على العنونة الغير مباشرة
فى هذا المثال سنقوم بمسح clear كل مواقع ذاكرة RAM من 0x20 إلى 0x7F
( عد عدد الخانات المطلوب مسحها وفى العنونة المباشرة كل خانة تحتاج الى تعليمة منفصلة).
نظرا لأن جميع مواقع الذاكرة التى سوف نمسحها متعاقبة فمن السهولة فعل ذلك باستخدام العنونة الغير مباشرة للذاكرة . سوف نستخدم مؤشر العنونة الغير مباشرة للقيام بذلك بتحميل أول عنوان نحتاج إلى مسحه فى سجل إختيار الملف ( FSR ) .
يتم تحميل السجل FSR باستخدام تعليمتان (وهى الطريقة المتبعة فى وضع قيمة ثابتة فى سجل ملف حيث يجب أولا وضعه فى السجل W ثم نقله من W إلى سجل الملف ).
التعليمة الأولى هى MOVLW 0x20 . هذه التعليمة تنقل (تضع) 20hفى السجل W لأن 20h هو أول عنوان سنقوم بمسحه .
التعليمة الثانية هى نقل محتوى السجل W إلى الملف FSR أى نسخ القيمة 20h من السجل W ووضعها فى السجل FSR .
يجب هنا ملاحظة أنه على الرغم من أننا نستخدم الاسم الحرفى ( أى من الحروف) FSR فى تعليماتنا وهو فى الحقيقة نفس الشىء كاستخدام العنوان المطلق 04h ( أى إما أن نستخدم FSR أو نستخدم ( 04h.
والآن سنتوجه إلى الحلقة loop التى بالفعل سوف تمسح محتويات كل السجلات بين 0x20 و 0x7F .
التعليمة الأولى فى الحلقة هى تعليمة مسح ملف CLRF INDF وهى تقوم بمسح سجل الملف الغير مباشر أو INDF . حيث أنه كلما استخدم INDF كاسم لسجل فى التعليمة فإن دائرة فك ( حل) الكود
( الشفرة) تترجم ذلك على أن هذه هى محتويات السجل الموجود فى الموقع 0x04 وهو كما أشرنا السجل FSR .
وبعبارة أخرى إذا استخدمت أسم السجل INDF فى التعليمة فإن المعالج سوف يذهب وياتى بمحتويات السجل FSR ويستخدم هذه القيمة كعنوان لسجل .
أى أن التعليمة تعنى : أمسح الملف الذى عنوانه موجود فى السجل FSR .
الآن الموقع 20h بذاكرة RAM به 0 لأنه عند تنفيذ التعليمة CLRF INDF فإن محتويات السجل FSR كانت 0x20 .
التعليمة التالية هى زيادة الملف FSR بمقدار واحد increment فى كل مرة وجعل الهدف هو f والذى يؤدى إلى وضع النتيجة مرة أخرى فى سجل الملف . هذه الزيادة للمسجل FSR من 20h إلى 21h ووضع النتيجة مرة اخرى فى المسجل FSR حيت يتم تحديث المحتويات ( محو القديم ووضع الجديد) .
التعليمة التالية التى سوف يتم تنفيذها هى BTFSS FSR,7 ( تعنى إختبر الخانة المذكورة وإقفز أو تخطى التعليمة التالية عندما تكون هذه الخانة مرتفعة ) هذه التعليمة تقوم باختبار الخانة ذو الأهمية القصوى (أقصى اليسار) للسجل FSR لبيان إذا تحولت إلى جهد مرتفع أم لا .
عندما تصل هذه الخانة إلى الجهد المرتفع تعنى (تبين) أننا وصلنا إلى 80 hex وتبين أننا قد قمنا بمسح جميع السجلات المطلوبة .
إذا لم تكن الخانة 7 لها القيمة 1 فسوف يتم تنفيذ التعليمة التى تلى التعليمة BTFSS مباشرة وهى التعليمة GOTO . وهذا يسبب قفز عداد البرنامج إلى العنوان “loop” وسوف نقوم بتنفيذ حلقتنا مرة ثانية .
والآن إذا استدعينا السجل FSR كان به 0x21 ولذلك فعند تنفيذ التعليمة CLRF INDF سوف نقوم بمسح محتويات العنوان 0x21 لتكون أصفار . بعد ذلك يتم زيادة السجل FSR مرة أخرى بواحد ووضع النتيجة مرة اخرى به فيكون محتواه 0x22 وهكذا فى كل مرة بعد كل حلقة وحتى يصل الى 0x80 عندها تكون الخانة السابعة مرتفعة الجهد . عندما يحدث ذلك فإن تعليمة إختبار الخانة تكون صحيحة وسوف يحدث تخطى skip للتعليمة GOTO ونخرج من الحلقة .عند هذه النقطة مسحنا كل مواقع الذاكرة من 20hex الى 7Fhex وجاهزين لتنفيذ التعليمة التالية فى برنامجنا .
ذاكرة البرنامج :
|