You are on page 1of 28

‫إعداد ‪ :‬األستاذ ولدقادة نجادي‬

‫‪Email : marouaneouldkada@gmail.com‬‬ ‫في الـحاسوب أن كل من الذاكرات‬


‫‪Face book: Nedjadi Ouldkada‬‬ ‫والمعالج في مكان مختلف‪.‬‬

‫‪ -1‬طرح االشكال‪:‬‬

‫االيجابي في الـ‪ PIC‬أن كل من الذاكرات‬


‫والمعالج مدمجة في دارة واحدة‪.‬‬

‫‪ -1‬االستعمال‪:‬‬

‫‪ -2‬دراسة الميكرومراقب ‪:PIC16F84A‬‬


‫‪1‬ـ تعريف‪ :‬هو دارة مندمجة صنع من طرف شركة أمريكية في أريزونا تدعى ميكروشيب " ‪ " Microchip‬وهو وحدة لمعالجة‬
‫المعلومات أضيف له بعض المحيطات (‪ )périphérique‬الداخلية تسمح بتسهيل االتصال بالمحيط الخارجي وبدون إضافة‬
‫محيطات خارجية ‪ ،‬لذلك يعتبر الميكرومراقب دارة كاملة ‪.‬‬

‫‪ 1‬ـ عائلة ‪: BASE-LINE‬‬


‫‪ 2‬ـ عائلة ‪: MID- RANGE‬‬
‫‪:‬‬ ‫‪ 3‬ـ عائلة ‪HIGH-END‬‬

‫‪-2‬دراسة الميكرومراقب ‪:PIC16F84A‬‬

‫‪1‬ـ ‪ : RA0/ RA4‬مداخل أو مخارج ‪.‬‬


‫‪2‬ـ ‪ : RB0/RB7‬مداخل أو مخارج‪.‬‬
‫‪3‬ـ ‪ : VDD ، VSS‬توتر التغذية ‪.‬‬
‫‪4‬ـ ‪ : OSC1 ، OSC2‬إشارة ساعة(الميقاتية) ‪.‬‬
‫‪5‬ـ ‪ : MCLR‬العادة التشغيل ‪.‬‬

‫‪ -3‬دراسة الميكرومراقب ‪:PIC16F84A‬‬


‫يتكون الميكرومراقب من ‪:‬‬
‫‪ 1‬ـ ذاكـرة برنامج ‪( ROM‬تخزين البرنامج المراد تنفيذه) من نوع ‪ ( Flash‬أي قابلة للبرمجة عدة مرات) ‪.‬‬
‫‪ 2‬ـ ذاكـرة معطيات من نوع ‪( RAM‬مؤقتة)‪.‬‬
‫‪ 3‬ـ ذاكـرة معطيات من نوع ‪.EEPROM‬‬

‫‪ 4‬ـ مداخل‪ /‬مخارج ‪.PORTA / PORTAB‬‬


‫معتمدة وخاصة بالشركة ‪MOCROCHIP‬‬
‫‪ 5‬ـ وحدة حسابية منطقية‪. ALU‬‬

‫‪ 6‬ـ ساعة داخلية (ميقاتية) ‪.‬‬

‫‪ -4‬اشارة الساعة الميكرومراقب ‪:PIC16F84A‬‬


‫معظم الدارات المندمجة تحتاج إلى إشارة ساعة كالعدادات ‪ .....‬حيث يتم توليد إشارة الساعة بعدة طرق منها الدارة المندمجة‬
‫‪..... NE555‬‬

‫اشارة الساعة‬

‫اشارة الساعة‬

‫كذلك الميكرومراقب يحتاج إلى إشارة الساعة‪ .‬حيث يتم توليد إشارة الساعة بعدة طرق منها‪:‬‬
‫‪1‬ـ استعمال الكوارتز ‪Quartez :‬‬

‫الكوارتز (‪)Quartez‬‬

‫‪2‬ـ استعمال الدارة ‪: RC‬‬


‫برمجة الميكرو مراقب‪:‬‬ ‫‪-1‬‬

‫من اجل برمجة الميكرومراقب البد من ما يلي‪:‬‬


‫‪ 1‬ـ كتابة دفتر المعطيات‪.‬‬
‫‪ 2‬ـ تحويل دفتر المعطيات الى لغة بيانية (الخوارزمية)‪.‬‬
‫‪ 3‬ـ تحويل الخوارزمية الى لغة التجميع (‪.)Assembleur‬‬
‫‪ 4‬ـ تحويل لغة التجميع ‪ ))assempleur) )ASM‬إلى لغة الميكرومراقب ‪.))HEX‬‬
‫‪ 5‬ـ نقل البرنامج المكتوب بلغة ‪ ))HEX‬إلى الميكرومراقب ‪.‬‬

‫‪ 1‬ـ كتابة دفتر المعطيات‪.‬‬

‫نريد انجاز تركيب خاص بإشارة المرور ‪ ,‬يحتوي‬


‫على ثالث اشارات‪..............................‬‬

‫‪ 2‬ـ تحويل دفتر المعطيات الى لغة بيانية (الخوارزمية)‪.‬‬

‫نريد انجاز تركيب خاص بإشارة المرور ‪ ,‬يحتوي‬


‫على ثالث اشارات‪..............................‬‬

‫مالحظة‪:‬‬

‫ـ إنشاء دفتر الشروط يتم من طرف المتعامل‪.‬‬


‫ـ إنشاء الخوارزمية يتم من طرف المتعامل‪.‬‬

‫‪ 3‬ـ تحويل الخوارزمية الى لغة التجميع (‪.)Assembleur‬‬

‫مالحظة‪:‬‬

‫ـ يتم تحويل الخوارزمية الى لغة التجميع بواسطة مبرمجات والتي منها‪:‬‬

‫المبرمج ‪ Flow code‬يمكن من إنشاء الخوارزمية‬

‫‪ 4‬ـ تحويل لغة التجميع ‪ :))assempleur) )ASM‬من اجل الكتابة بلغة التجميع (‪ )ASM‬البد من ما يلي‪:‬‬

‫‪ 1‬ـ معرفة بنية الميكرومراقب ‪.‬‬


‫‪ 2‬ـ معرفة بصفة خاصة دور السجالت ‪.Les Registres‬‬
‫‪ 3‬ـ معرفة التعليمات ‪.Les Instructions‬‬
‫‪ 4‬ـ معرفة التوجيهات ‪Les Directives‬‬
‫‪ 1‬ـ معرفة بنية الميكرومراقب ‪ :‬معرفة بنية الميكرومراقب ( تم الحديث عنها)‪.‬‬

‫‪ 2‬ـ معرفة بصفة خاصة دور السجالت ‪ :Les Registres‬من اجل معرفة دور السجالت البد من معرفة ما يلي‪:‬‬

‫‪1‬ـ أين يوضع البرنامج المراد تنفيذه ؟‬


‫‪ 2‬ـ بماذا يتم برمجة اقطاب الميكرومراقب ؟‬
‫‪ 3‬ـ كيف يتم برمجة اقطاب الميكرومراقب كمداخل او مخارج؟‬
‫‪ 4‬ـ كيف يتم برمجة اشارة الساعة الميكرومراقب ؟‬

‫‪1‬ـ أين يوضع البرنامج المراد تنفيذه (مثال تنفيذ برنامج تنظيم إشارة المرور ‪.))Tricolore‬‬

‫‪FLASH‬تنفيذه في الذاكرة (ذاكرة ‪ ROM‬من نوع ‪.) FLASH‬‬


‫نوع المراد‬
‫البرنامج‬ ‫ذاكرةيوضع‬
‫‪ ROM‬من‬ ‫اذن‬
‫ـ الذاكرة (ذاكرة ‪ ROM‬من نوع ‪.) Flash‬‬

‫‪:‬مالحظة ‪(3FF-4=3FB) =(1019)10‬‬

‫‪ 2‬ـ بماذا يتم برمجة اقطاب الميكرومراقب ؟‬


‫‪ ......‬في الدارات المندمجة مثل البوابات ‪ ،‬العدادات ‪ ،‬السجالت ‪ ......‬تكون المداخل والمخارج مبرمجة مسبقا إما بطريقة ‪TTL‬‬
‫أو ‪ .... RTL‬وال يمكن تغير ذلك( غير قابلة للبرمجة)‪.‬‬

‫‪ .....‬هناك دارات مندمجة أخرى مخصصة للتحكم ال يمكن تغير محتوى برنامجها مثل ‪...... ، SAA1027‬‬
‫أما في دارة الميكرومراقب ‪ PIC 16F84‬فالعكس من ذلك ‪:‬‬
‫ـ نستطيع برمجة أقطابه كمداخل أو كمخارج ( دارات قابلة للبرمجة)‪.‬‬

‫اذن يتم برمجة اقطاب الميكرومراقب ( مثل المداخل ‪ ،‬المخارج ‪ )....‬بواسطة استعمال السجالت (‪.)Les Registres‬‬

‫موجودة في الذاكرة ‪. RAM‬‬


‫‪RAM‬‬ ‫السجالت‬
‫هذه الذاكرة‬

‫ذاكـرة من نوع ‪: RAM‬‬


‫هذه الذاكرة مقسمة إلى جزأين ‪:‬‬
‫‪ 1‬ـ الجزء األول‪ :‬يحتوي على ‪ 24‬خانة تحتوي مجموعة من السجالت تدعى سجالت خاصة ‪SFR‬‬
‫(‪ )Special Function Registers‬وهو مقسم إلى جزأين‪:‬‬
‫ـ القسم األول ‪ :‬يدعى الصفحة األولى (‪ )BANK0‬يبدأ من العنوان ‪ 00h‬إلى ‪.0Bh‬‬
‫ـ القسم الثاني‪ :‬يدعى الصفحة الثانية (‪ )BANK1‬يبدأ من العنوان ‪ 80h‬إلى ‪.8Bh‬‬

‫‪2‬ـ الجزء الثاني ‪ :‬يبدأ من العنوان ‪ OCh‬إلى العنوان ‪ 2F‬وهو مخصص للسجالت العامة ‪GPR ( General‬‬
‫)‪ Purpose Register‬ويضع في هذا الجزء بعض السجالت المقترحة(غير موجودة في الميكرومراقب) ومتغيرات البرنامج ‪.‬‬

‫يحتوي الميكرومراقب على ‪ 13‬قطب يمكن برمجتها كمدخل أو مخرج ‪ ،‬ويمكن تصنيفها إلى‪:‬‬
‫ـ أقطاب (‪ ، )RA0,RA1,RA2,RA3‬تدعى بالمرفأ )‪. A (PORTA‬‬
‫ـ أقطاب (‪ ، )RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7‬تدعى بالمرفأ )‪.B (PORTB‬‬
‫‪ 3‬ـ كيف يتم برمجة اقطاب الميكرومراقب كمداخل او مخارج؟‬

‫يتم برمجة أقطاب الميكرومراقب كمداخل أو مخارج باستعمال سجالت التوجيه ‪:‬‬

‫سجالت التوجيه هي ‪ TRISA :‬و ‪TRISB‬‬

‫يقع في العنوان ‪( 85h‬الصفحة‪ )1‬من الذاكرة ‪ RAM‬وله ‪ 8‬بيت ‪ 3 ,‬منها ال تستعمل‪.‬‬ ‫‪ 1‬ـ السجل ‪: TRISA‬‬

‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪RA4‬‬ ‫‪RA3‬‬ ‫‪RA2‬‬ ‫‪RA1‬‬ ‫‪RA0‬‬


‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫‪ 2‬ـ السجل ‪: TRISB‬‬


‫يقع في العنوان ‪( 86h‬الصفحة‪ )1‬من الذاكرة ‪RAM‬‬

‫‪RB7‬‬ ‫‪RB6‬‬ ‫‪RB5‬‬ ‫‪RB4‬‬ ‫‪RB3‬‬ ‫‪RB2‬‬ ‫‪RB1‬‬ ‫‪RB0‬‬


‫‪Bit7‬‬ ‫‪Bit6‬‬ ‫‪Bit5‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫سجالت التوجيه هي ‪ TRISA :‬و ‪TRISB‬‬


‫القاعدة ‪:‬‬
‫مثال‪:‬‬

‫مخرج‬
‫مدخل‬

‫مدخل‬

‫مدخل‬

‫مخرج‬
‫مخرج‬

‫مخرج‬
‫مخرج‬

‫مدخل‬

‫مدخل‬

‫ـ تم توجيه مخارج الميكرومراقب ولكن كيف يتم الحصول على )‪ 5V (mise a 1‬او )‪ 0V (mise à 0‬على مستوى المخارج‪.‬‬

‫يتم ذلك بواسطة السجالت ‪ PORTA‬و ‪.PORTAB‬‬

‫السجل ‪ : PORTA‬يقع في العنوان ‪( 05h‬الصفحة‪ )0‬من الذاكرة ‪. RAM‬‬


‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪RA4‬‬ ‫‪RA3‬‬ ‫‪RA2‬‬ ‫‪RA1‬‬ ‫‪RA0‬‬
‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫ملتقط ‪) ‬مدخل(‪RA3‬‬

‫منفذ متصدر‪) ‬مخرج(‪RA3‬‬

‫السجل ‪ : PORTB‬يقع في العنوان (الصفحة‪ )0‬من الذاكرة ‪RAM‬‬


‫‪RB7‬‬ ‫‪RB6‬‬ ‫‪RB5‬‬ ‫‪RB4‬‬ ‫‪RB3‬‬ ‫‪RB2‬‬ ‫‪RB1‬‬ ‫‪RB0‬‬
‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫مالحظة هامة جدا‪ :‬هناك فرق بين السجالت التوجيه (‪ TRISA‬و ‪ – )TRISB‬داخل المكرومراقب‪ -‬والمرافئ (‪ PORTA‬و‬
‫‪-)PORTB‬االتصال بالخارج‪ -‬فشحن ‪ TRISA‬أو ‪ TRISB‬بالقيمة ”‪ “1‬أو“‪( “0‬فقط توجيهه كمدخل أو مخرج دون توفير‬
‫الطاقة الكهربائية (‪ )5V‬على مستوى ذلك القطب ) وإرغام ‪ PORTA‬أو ‪ PORTB‬اخذ القيمة ”‪ “1‬أو ”‪ “0‬يعني توفير الطاقة‬
‫الكهربائية (‪)5V‬على مستوى ذلك القطب من اجل مثال إشعال مصباح(‪ )LED‬وإطفائه‪.‬‬

‫ـ هذه السجالت موجودة إما في الصفحة األولى(‪ )BANK0‬أو في الصفحة الثانية (‪ )BANK1‬فكيف يتم اختيار الصفحة لكي يتم‬
‫التعامل مع هذه السجالت‪.‬‬
‫يتم ذلك بواسطة السجل ‪.STATUS‬‬
‫‪1‬ـ السجل ‪ : STATUS‬يقع في العنوان ‪ 03h‬و ‪ 83h‬يسمح هذا السجل باختيار الصفحة األولى أو الثانية للذاكرة " ‪" RAM‬‬
‫وكذلك حالة ناتج العمليات الحسابية وهو ذو ‪(. BIT 8‬تكراره مرتين حتى يتسنى العمل بالسجالت الموجودة في الصفحة ‪ 0‬أو‬
‫الموجودة في الصفحة ‪.)1‬‬

‫الصفحة ‪RP0=1 1‬‬ ‫الصفحة ‪RP0=0 0‬‬

‫‪IRP‬‬ ‫‪RP1‬‬ ‫‪RP0‬‬ ‫‪T0‬‬ ‫‪PD‬‬ ‫‪Z‬‬ ‫‪DC‬‬ ‫‪C‬‬


‫‪Bit7‬‬ ‫‪Bit6‬‬ ‫‪Bit5‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫سجل العمل )‪ : W (regitre de travail‬يستعمل كوسيط في عمل الشحن وكذلك العملية الحسابية‪.‬‬

‫ـ اذا اردنا استعمال التأجيل في برنامج معين (اشارة المرور) فكيف يتم ذلك؟‬
‫يتم ذلك بواسطة السجل ‪.TMRO‬‬

‫السجل ‪ : TMR0‬يقع في العنوان ‪ 01h‬وهو سجل ذو ‪ 8‬بيت وله نمطين للتشغيل ‪:‬‬
‫‪1‬ـ نمط المؤقت ( ‪. :) temporisateur-timer‬‬
‫‪ 2‬ـ نمط العـداد (‪. : ) compteur‬‬

‫‪ 4‬ـ كيف يتم برمجة إشارة الساعة الميكرومراقب ؟‬


‫يتم برمجة إشارة الساعة بواسطة السجل ‪Configuration.‬‬
Registre De Configuration

1FFF + 1 = 2000:‫مالحظة‬
‫مالحظة ‪ :‬في أسفل الذاكرة ‪ ROM‬تحتوي على ‪ 8‬خانات من العنوان ‪ 2000‬إلى ‪ 2007‬مخصصة للميكرومراقب ( غير ممثل‬
‫في الذاكرة ‪ ROM‬ذات ‪.( 1kilot‬‬
‫ـ العنوان ‪ 2007‬مخصص لسجل (‪ )Configuration‬للميكرومراقب مرمز على‪ 14‬بيت (‪ ) bit‬وهو يحدد وسائط الترميز‬
‫للميكرمراقب أثناء البرمجة ‪ ،‬على الشكل التالي ‪:‬‬

‫ـ السجل ‪ Configuration.‬وبه يتم برمجة إشارة الساعة للميكرومراقب‪.‬‬

‫‪ : FCSC0 ، FCSC1‬اختيار نوع المذبذب ويتم وفق الجدول التالي‪:‬‬

‫ـ ) ‪ : WDTE (WATCH-DOG TIMER ENABLE‬مخصص لحماية البرنامج من التعطيل أثناء عملية تنفيذه بحيث‪:‬‬
‫‪ WDTE = 1‬مسموح له بالعمل ‪.‬‬
‫‪ WDTE = 0‬غير مسموح له بالعمل ‪.‬‬

‫ـ ‪ : PWRTE‬مخصص لتأجيل الميكرومراقب عن بداية تنفيذ البرنامج لمدة ‪ 72mS‬مباشرة بعد وضعه تحت التوتر بحيث ‪:‬‬
‫‪ : PWRTE‬التأجيل مفعل‪.‬‬ ‫‪=0‬‬
‫‪ : PWRTE‬التأجيل غير مفعل‪.‬‬ ‫‪=1‬‬
‫ـ ‪ : CP‬مخصص لحماية البرنامج من القراءة لعدم تقليده بحيث‪:‬‬
‫‪ : CP = 0‬البرنامج محمي من القـراءة (الحماية مفعلة)‪.‬‬
‫‪ : CP = 1‬البرنامج غير محمي من القـراءة (الحماية غير مفعلة)‪.‬‬

‫مثال ‪:‬‬

‫‪ : CP = 0‬البرنامج محمي من القـراءة (الحماية مفعلة)‪.‬‬


‫‪ WDTE = 0‬غير مسموح له بالعمل(غيرمفعل) ‪.‬‬
‫‪ : PWRTE‬التأجيل مفعل‪.‬‬ ‫‪=0‬‬
‫‪ : XT‬كوارتز ‪ XT‬او ‪4MHz‬‬

‫(‪16 = (3FFA)h)3FFA( = 2)11111111111010‬‬


‫‪' CONFIG H' 3FFA‬‬

‫لغة التجميع‪:‬‬ ‫‪-1‬‬

‫يوجد حوالي ‪ 35‬تعليمة وهي تعتبر اوامر بالنسبة للسجالت ولكن سنقتصر على بعض منها ‪:‬‬
‫تذكير‬ ‫‪-1‬‬
‫‪Notion En Benaire‬‬ ‫‪Notion En Hexadécimal‬‬

‫‘‪b‘1001111‬‬ ‫‪0x4F‬‬

‫يتم البرمجة بـ‪ HEX‬لتقليص حجم الذاكرة‬

‫‪ -2‬تعليمات األكثر استعمال‪:‬‬

‫‪ 1‬ـ التعليمة ‪ : MOVLW‬تسمح بشحن محتوى أي قيمة (‪ )HEX‬في سجل ما ‪Les instructions orientées( .‬‬
‫‪)registre‬‬

‫كيفية الكتابة‪:‬‬

‫‪MOVLW‬‬ ‫‪0x5C‬‬ ‫شحن القيمة ‪x5C‬في سجل العمل ‪; W 0‬‬


‫‪ :L‬تعني قيمة ‪littérale‬‬

‫تعليمة‬ ‫سجل‬ ‫قيمة الشحن ب‪HEX‬‬ ‫‪ : MOVLW‬تسمح بشحن محتوى أي قيمة في سجل العمل ‪.W‬‬

‫مالحظة‪ :‬قيمة الشحن‪ 0x5C‬سوف يحددها كل من سجل التوجيه ‪ TRISA‬و ‪ TRIB‬فيما بعد وذلك حسب مداخل ومخارج ‪PIC‬‬

‫‪ 2‬ـ التعليمة ‪ : MOVWF‬تسمح بنقل محتوى سجل العمل ‪ W‬في أي سجل‪.‬‬

‫كيفية الكتابة‪:‬‬

‫‪MOVWF‬‬ ‫‪TRISB‬‬ ‫‪ W‬في سجل ‪; TRISB‬‬ ‫نقل محتوى سجل العمل‬

‫تعليمة‬
‫‪MOVW‬‬ ‫سجل ‪W‬‬ ‫سجل‬ ‫السجل المعني‬
‫‪ : F‬تسمح بنقل محتوى سجل العمل ‪W‬في أي سجل اخر ‪.‬‬

‫كيفية الكتابة‪:‬‬

‫‪MOVLW 0x5C‬‬ ‫شحن القيمة ‪x5C‬في سجل العمل ‪; W 0‬‬


‫‪MOVWF TRISB‬‬ ‫‪ W‬في سجل ‪; TRISB‬‬ ‫نقل محتوى سجل العمل‬

‫مالحظة‪ :‬هي في الحقيقة هذه القيمة (‪ )0x5C‬تشحن في السجل ‪ TRISB‬غير أن هذا غير ممكن بالطريقة المباشرة ‪ .‬حيث يتم‬
‫بالطريقة غير المباشرة عن طريق السجل الوسيط ‪.W‬‬

‫‪1‬ـ نريد برمجة ‪ RA2‬كمدخل‪:‬‬

‫اذن البد من توجيه ‪ RA2‬كمدخل‪.‬‬ ‫‪-‬‬


‫يتم ذلك بواسطة سجل التوجيه ‪.TRISA‬‬ ‫‪-‬‬

‫تذكير‪:‬‬

‫األخرى ‪.‬غير معنية في هذه‬


‫‪TRISA‬‬ ‫لسجلأنالتوجيه‬
‫األقطاب‬ ‫يعني‪ :‬وضع ‪ RA2=1‬بما‬
‫الحالة فيمكن برمجتها إما كمدخل أو مخرج‬

‫السجل التوجيه ‪TRISA‬‬

‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪RA4‬‬ ‫‪RA3‬‬ ‫‪RA2‬‬ ‫‪RA1‬‬ ‫‪RA0‬‬

‫الباقية مبرمجة كمداخل‬ ‫الباقية مبرمجة كمخارج‬


‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪(11111)2 = (1F)h‬‬ ‫‪(00100)2 = (4)h‬‬

‫أي يجب شحن سجل التوجيه ‪ TRISA‬بالقيمة (‪.h)1F‬‬ ‫أي يجب شحن سجل التوجيه ‪ TRISA‬بالقيمة (‪.h)4‬‬

‫البرنامج‪:‬‬

‫‪MOVLW‬‬ ‫‪0x4‬‬ ‫شحن القيمة ‪x4‬في سجل العمل ‪; W 0‬‬


‫‪MOVWF TRISA‬‬ ‫شحن محتوى سجل العمل ‪ (0x4)W‬في السجل التوجيه ‪; TRISA‬‬

‫او‬
‫‪MOVLW‬‬ ‫‪0x1F‬‬ ‫شحن القيمة ‪x1F‬في سجل العمل ‪; W 0‬‬
‫‪MOVWF TRISA‬‬ ‫شحن محتوى سجل العمل ‪ (0x1F)W‬في السجل التوجيه ‪; TRISA‬‬
‫‪2‬ـ نريد برمجة ‪ RB4‬كمخرج‪:‬‬
‫اذن البد من توجيه ‪ RB4‬كمدخل‪.‬‬ ‫‪-‬‬
‫يتم ذلك بواسطة سجل التوجيه ‪.TRISB‬‬ ‫‪-‬‬

‫‪.‬‬ ‫يعني‪ :‬وضع ‪ RB4=0‬لسجل التوجيه ‪TRISB‬‬

‫السجل التوجيه ‪TRISB‬‬

‫‪RB7‬‬ ‫‪RB6‬‬ ‫‪RB5‬‬ ‫‪RB4‬‬ ‫‪RB3‬‬ ‫‪RB2‬‬ ‫‪RB1‬‬ ‫‪BA0‬‬

‫الباقية مبرمجة كمداخل‬ ‫الباقية مبرمجة كمخارج‬


‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫‪(11101111)2 = (EF)h‬‬ ‫‪(000000000)2 = (00)h‬‬

‫أي يجب شحن سجل التوجيه ‪ TRISB‬بالقيمة (‪.h)EF‬‬ ‫أي يجب شحن سجل التوجيه ‪ TRISB‬بالقيمة (‪.h)00‬‬

‫البرنامج‪:‬‬

‫‪MOVLW‬‬ ‫‪0x00‬‬ ‫شحن القيمة ‪x00‬في سجل العمل ‪; W 0‬‬


‫‪MOVWF TRISB‬‬ ‫شحن محتوى سجل العمل ‪ (0x00)W‬في السجل التوجيه ‪; TRISB‬‬
‫او‬
‫‪MOVLW‬‬ ‫‪0xEF‬‬ ‫شحن القيمة ‪xEF‬في سجل العمل ‪; W 0‬‬
‫‪MOVWF TRISB‬‬ ‫شحن محتوى سجل العمل ‪ (0xEF)W‬في السجل التوجيه ‪; TRISB‬‬

‫برنامج رئيسي للتحكم في مصباح بواسطة زر ضاغط‪:‬‬


‫‪1‬ــ برمجة ‪ RA2‬كمدخل و نريد برمجة ‪ RB4‬كمخرج‪:‬‬
‫البرنامج‪:‬‬

‫‪MOVLW‬‬ ‫‪0x4‬‬ ‫شحن القيمة ‪x4‬في سجل العمل ‪; W 0‬‬


‫‪MOVWF TRISA‬‬ ‫شحن محتوى سجل العمل ‪ (0x4)W‬في السجل التوجيه ‪; TRISA‬‬
‫‪MOVLW‬‬ ‫‪0x00‬‬ ‫شحن القيمة ‪x00‬في سجل العمل ‪; W 0‬‬
‫‪MOVWF TRISB‬‬ ‫شحن محتوى سجل العمل ‪ (0x00)W‬في السجل التوجيه ‪; TRISB‬‬
‫او‬
‫‪MOVLW‬‬ ‫‪0x1F‬‬ ‫شحن القيمة ‪x1F‬في سجل العمل ‪; W 0‬‬
‫‪MOVWF TRISA‬‬ ‫شحن محتوى سجل العمل ‪ (0x1F)W‬في السجل التوجيه ‪; TRISA‬‬
‫‪MOVLW‬‬ ‫‪0xEF‬‬ ‫شحن القيمة ‪xEF‬في سجل العمل ‪; W 0‬‬
‫‪MOVWF TRISB‬‬ ‫شحن محتوى سجل العمل ‪ (0xEF)W‬في السجل التوجيه ‪; TRISB‬‬

‫‪3‬ـ نريد استخدام سجالت التوجيه ‪ TRISA‬و ‪TRISB‬‬


‫ـ سجالت التوجيه ‪ TRISA‬و ‪ TRISB‬موجودة في الصفحة ‪ )BANK1( 1‬و في الصفحة ‪ )0BANK( 0‬للذاكرة ‪ RAM‬ومن‬
‫اجل استخدام هذه السجالت يجب الذهاب إلى الصفحة ‪ )BANK1( 1‬و الصفحة ‪ )BANK0( 0‬للذاكرة ‪ RAM‬فكيف يتم ذلك‬

‫يتم ذلك بواسطة السجل ‪. STATUS‬‬


‫بنك ‪RP0=1 1‬‬ ‫بنك ‪RP0=0 0‬‬

‫‪IRP‬‬ ‫‪RP1‬‬ ‫‪RP0‬‬ ‫‪T0‬‬ ‫‪PD‬‬ ‫‪Z‬‬ ‫‪DC‬‬ ‫‪C‬‬


‫‪Bit7‬‬ ‫‪Bit6‬‬ ‫‪Bit5‬‬ ‫‪Bit4‬‬ ‫‪Bit3‬‬ ‫‪Bit2‬‬ ‫‪Bit1‬‬ ‫‪Bit0‬‬

‫اإلرغام كما هو الحال في‬


‫العدادات ( ‪)Set , Clear‬‬

‫أي اننا سنرغم البيت ‪ RP0‬للسجل ‪ STATUS‬ان يأخذ القيمة "‪ "1‬او القيمة "‪"0‬‬

‫‪BSF‬‬ ‫وهذا يتم بواسطة التعليمتين ‪ BCF :‬و ‪Les instructions orientées bit‬‬

‫على الشكل التالي ‪:‬‬

‫من اجل الذهاب إلى الصفحة ‪ )BANK1( 1‬للذاكرة ‪: RAM‬‬


‫سجل‪ bit‬المعني‬ ‫تعليمة‬
‫نضع )‪ RP0=1(bit5‬لسجل ‪ ، STATUS‬حيث نكتب‪:‬‬
‫‪BSF STATUS , RP0‬‬ ‫;‬ ‫( الذهاب إلى الصفحة ‪ ) BANK11‬للذاكرة ‪RAM‬‬
‫او‬
‫( ‪ RP0‬هو البيت ‪ 5‬في السجل ‪)STATUS‬‬
‫‪BSF STATUS , 5‬‬ ‫;‬ ‫( الذهاب إلى الصفحة ‪ ) BANK11‬للذاكرة ‪RAM‬‬

‫من اجل الرجوع إلى الصفحة ‪ )BANK0( 0‬للذاكرة ‪: RAM‬‬

‫نضع )‪ RP0=0(bit5‬لسجل ‪ ، STATUS‬حيث نكتب‪:‬‬


‫‪BCF STATUS , RP0‬‬ ‫;‬ ‫( الذهاب إلى الصفحة ‪ ) BANK00‬للذاكرة ‪RAM‬‬
‫او‬
‫‪BCF STATUS , 5‬‬ ‫;‬ ‫( الذهاب إلى الصفحة ‪ ) BANK00‬للذاكرة ‪RAM‬‬

‫ـ برمجة ‪ RA2‬كمدخل و برمجة ‪ RB4‬كمخرج‪:‬‬

‫‪5‬ـ نريد إشعال ‪ LED‬على مستوى ‪ RB4‬بصفة دائمة‪.‬‬


‫هذا يعني أن ‪:‬‬
‫‪1‬ـ‪ RB4‬يبرمج كمخرج ( هذا تم بواسطة سجل التوجيه ‪.( TRISB‬‬

‫(‪h)00( = 2)00000000‬‬ ‫أو‪:‬‬ ‫(‪h)EF( = 2)11101111‬‬


‫‪ 2‬ـ ‪ RB4‬يجب ان يزودنا بـ ‪ 5V‬إلشعال )» ‪.LED (mise à « 1‬‬
‫يتم ذلك بواسطة السجل ‪. PORTB‬‬

‫سجل‪ bit‬المعني‬ ‫تعليمة‬


‫أي أننا سنرغم البيت ‪ RB4‬للسجل ‪ PORTB‬أن يأخذ القيمة ”‪“1‬‬

‫‪BSF PORTB , RB4‬‬ ‫‪:‬على الشكل التالي‬ ‫‪BSF‬‬ ‫يجب استعمال التعليمة‬

‫البرنامج ‪:‬‬
‫‪MOVLW‬‬ ‫برمجة ‪ RB4‬كمخرج ; ‪0x EF‬‬
‫; ‪TRISB‬‬ ‫شحن محتوى سجل العمل )‪ W (0xEF‬في السجل التوجيه ‪MOVWF TRISB‬‬
‫توفير ‪ 5V+‬على مستوى ‪ RB4‬كي تشتعل ‪LED ; BSF PORTB , RB4‬‬
‫مالحظة هامة جدا‪ :‬هناك فرق بين السجالت التوجيه (‪ TRISA‬و ‪ – )TRISB‬داخل المكرومراقب‪ -‬والمرافئ (‪ PORTA‬و‬
‫‪-)PORTB‬االتصال بالخارج‪ -‬فشحن ‪ TRISA‬أو ‪ TRISB‬بالقيمة ”‪ “1‬أو“‪( “0‬فقط توجيهه كمدخل أو مخرج دون توفير الطاقة‬
‫الكهربائية (‪ )5V‬على مستوى ذلك القطب ) وإرغام ‪ PORTA‬أو ‪ PORTB‬اخذ القيمة ”‪ “1‬أو ”‪ “0‬يعني توفير الطاقة الكهربائية (‬
‫‪)5V‬على مستوى ذلك القطب من اجل مثال إشعال مصباح(‪ )LED‬وإطفائه‪.‬‬

‫‪6‬ـ نريد المحافظة على إشعال ‪ LED‬على مستوى ‪ RB4‬للمرفأ ‪.PORTB‬‬

‫يتم ذلك بواسطة حلقة ‪.Boucle‬‬


‫‪ : BSF PORTB , RB4‬هذا يعني أن ‪ LED‬ستبقى مشتعلة لفترة ‪ ( 1μs‬تنفيذ التعليمة يستغرق ‪. )1μs‬‬
‫‪GOTO‬‬ ‫ـ من اجل استعمال حلقة ‪ Boucle‬يجب استعمال التعليمة ‪Opérations contrôles et sauts‬‬

‫‪Boule‬‬ ‫‪BSF PORT B , RB4‬‬


‫‪GOTO Boucle‬‬ ‫اذن سوف ‪ LED‬مشتعلة دوما ( الن حلقة ستكرر) ;‬ ‫تبقى‬

‫‪ :‬البرنامج‬

‫مالحظة هامة جدا‪ :‬كل تعليمة يستغرق تنفيذها ‪ 1μs‬إذا كانت إشارة الساعة عبارة عن كوارتز ذو ‪4MHz‬‬
‫‪T quartz= 4MHz/4 = 1MHz = 1/T Þ T= 1uS‬‬
‫مالحظة‪ :‬تنفيذ التعليمة يمر بـ ‪ 4‬مراحل لذلك يقسم التردد على ‪. 4‬‬

‫‪7‬ـ نريد إنهاء البرنامج‪.‬‬


‫من اجل إنهاء البرنامج البد من استعمال التعليمة ‪. END‬‬

‫‪ :‬البرنامج‬

‫‪MOVLW 0x EF‬‬
‫‪MOVWF TRISB‬‬
‫‪Boucle‬‬ ‫‪BSF PORT B , RB4‬‬
‫‪GOTO Boucle‬‬
‫‪END‬‬
‫‪ :‬البرنامج كامل‬
‫‪ 8‬ـ نريد قاطعة تتحكم في إشعال وإطفاء مصباح‪.‬‬
‫البرنامج سوف يقوم بالخطوات التالية‪:‬‬
‫‪ - 1‬المراقبة و االختبار حتى يفتح )‪. S (RA2‬‬
‫‪ - 2‬اذا كان )‪ S (RA2‬مفتوح عندئذ يتم اطفاء )‪.LED (RB4‬‬
‫‪ - 3‬المراقبة و االختبار حتى يغلق )‪. S (RA2‬‬
‫‪ - 4‬إذا كان )‪ S (RA2‬مغلق عندئذ يتم إضاءة )‪.LED (RB4‬‬
‫‪ - 5‬تكرار العمل ‪.‬‬

‫‪ - 1‬المراقبة و االختبار حتى يفتح ‪.RA2=0‬‬


‫‪RB4=0‬‬ ‫فان‬ ‫‪ - 2‬اذا كان ‪RA2=0‬‬
‫‪ - 3‬المراقبة و االختبار حتى يغلق ‪.RA2=1‬‬
‫‪RB4=1‬‬ ‫فان‬ ‫‪ - 4‬اذا كان ‪RA2=1‬‬
‫‪ - 5‬تكرار العمل‬

‫مالحظة‪ :‬هذه الخطوات تأتي بعد توجيه ‪ TRISA‬كمدخل و ‪ TRISB‬كمخرج‪.‬‬

‫من اجل المراقبة و االختبار لـ ‪ RA2=0‬يتم ذلك باستعمال التعليمة ‪BTFSC‬‬

‫من اجل المراقبة و االختبار لـ ‪ RA2=1‬يتم ذلك باستعمال التعليمة ‪BTFSS‬‬

‫‪BTFSC‬‬ ‫‪BTFSS‬‬

‫البرنامج‪:‬‬
‫‪BTFSC PORTA , RA2‬‬ ‫من اجل المراقبة و االختبار لـ ‪RA2=0‬‬
‫الشرح ‪:‬‬
‫التعليمة ‪ : BTFSC PORTA , RA2‬تعنى اختبر(‪ )Test‬البيت )‪ RA2 (Bit‬للسجل ‪ PORTA‬وتخطى (‪ )Skey‬التعليمة‬
‫الموالية لها إذا كان )‪.RA2 =0 (Clear‬‬
‫البرنامج‪:‬‬
‫‪BTFSS PORTA , RA2‬‬ ‫من اجل المراقبة و االختبار لـ ‪RA2=1‬‬
‫الشرح ‪:‬‬
‫التعليمة ‪ : BTFSS PORTA , RA2‬تعنى اختبر(‪ )Test‬البيت )‪ RA2 (Bit‬للسجل ‪ PORTA‬وتخطى (‪ )Skey‬التعليمة‬
‫الموالية لها إذا كان )‪.RA2 =1 (Set‬‬

‫حتى يبقى االختبار مستمر للبيت ‪ RA2‬نستعمل الحلقة ‪ Boucle‬و التعليمة ‪.GOTO‬‬

‫في حالة ‪RA2=0‬‬ ‫‪-1‬‬


‫‪Boucle1 BTFSC PORTA , RA2‬‬ ‫راقب واختبر المدخل ‪ RA2‬وتخطى التعليمة الموالية إذا كان )القاطعة( ‪; RA2=0‬‬
‫‪GOTO Boucle1‬‬
‫في حالة ‪RA2=1‬‬ ‫‪-2‬‬
‫راقب واختبر المدخل ‪ RA2‬وتخطى التعليمة الموالية إذا كان )القاطعة( ‪Boucle2 BTFSS PORTA , RA2 ; RA2=1‬‬
‫‪GOTO Boucle2‬‬

‫في حالة أصبح البيت ‪ RA2=0‬نرغم ‪ LED‬بان ينطفئ ( ‪ )RB4=0‬لذلك نستعمل التعليمة ‪.BCF‬‬
‫في حالة ‪RA2=0‬‬ ‫‪-1‬‬
‫‪Boucle1 BTFSC PORTA , RA2‬‬ ‫راقب واختبر المدخل ‪ RA2‬وتخطى التعليمة الموالية إذا كان )القاطعة( ‪; RA2=0‬‬
‫‪GOTO Boucle1‬‬
‫‪BCF PORTB , RB4‬‬ ‫اطفيء ‪; LED‬‬

‫في حالة أصبح البيت ‪ RA2=1‬نرغم ‪ LED‬بان يشتعل ( ‪ )RB4=1‬لذلك نستعمل التعليمة ‪.BSF‬‬
‫في حالة ‪RA2=1‬‬ ‫‪-2‬‬
‫راقب واختبر المدخل ‪ RA2‬وتخطى التعليمة الموالية إذا كان )القاطعة( ‪Boucle2 BTFSS PORTA , RA2 ; RA2=1‬‬
‫‪GOTO Boucle2‬‬
‫اشعل ‪BSF PORTB , RB4 ; LED‬‬

‫البرنامج‪:‬‬
‫توجيه المداخل والمخارج‬
‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪RA4‬‬ ‫‪RA3‬‬ ‫‪RA2‬‬ ‫‪RA1‬‬ ‫‪RA0‬‬
‫‪(11111)2 = (1F)h‬‬
‫‪X‬‬ ‫‪X‬‬ ‫‪X‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫مالحطة هامة جدا‪ :‬هنا ‪ RA2=1‬ثابتة ال تتغير الننا هنا بصدد توجيه السجالت وليس االختبار والمراقبة الذي يخص المرفئ ‪.PORTA‬‬

‫‪RB7‬‬ ‫‪RB6‬‬ ‫‪RB5‬‬ ‫‪RB4‬‬ ‫‪RB3‬‬ ‫‪RB2‬‬ ‫‪RB1‬‬ ‫‪BA0‬‬


‫‪(00000000)2 = (00)h‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫مالحطة هامة جدا‪ :‬هنا ‪ RAB=0‬ثابتة ال تتغير الننا هنا بصدد توجيه السجالت وليس االختبار والمراقبة الذي يخص المرفئ ‪.PORTB‬‬
‫‪ 1‬ـ التوجيهة " ‪" LIST‬‬
‫وهي تسمح بتحديد بعض الوسائط المستعملة كنوع الميكرومراقب المستعمل(‪)P‬واألساس المستعمل (‪.) ,HEX B,DEC‬‬
‫‪LIST‬‬ ‫‪P = 16F84‬‬ ‫‪, RADIX = HEX‬‬
‫‪ 2‬ـ التوجيهة " ‪" INCLUDE‬‬
‫تسمح بإدراج منبع ملف (‪ ) FICHIER SOURCE‬والذي يحتوي على عناوين السجالت المستعملة (مثال‪ :‬السجل ‪ TRISA‬يقع‬
‫في العنوان ‪ 85h‬في الذاكرة ‪ ( ) RAM‬لتفادي كثافة البرنامج المكتوب)‪.‬‬
‫‪# INCLUDE‬‬ ‫" ‪" PIC16F84.INC‬‬

‫‪ 3‬ـ التوجيهة "‪" CONFIG‬‬


‫تسمح بتحديد ‪ 4‬بيت للسجل " ‪ " CONFIGURATION‬في الذاكرة ‪ EEPROM‬أثناء وضع البرنامج في الميكرومراقب‬
‫'‪CONFIG H' 3FF1‬‬
‫مالحظة ‪ :‬إذا أدرج منبع الملف " ‪ " PIC1684.INC‬يمكن كتابته بواسطة البيت ‪:‬‬
‫‪__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC‬‬

‫‪ 4‬ـ التوجيهة " ‪" EQU‬‬


‫تسمح بتحديد قيمة ثابت أو متغير أو عنوان سجل عام في الذاكرة ‪RAM‬‬
‫‪XX EQU 0X0C‬‬

‫حيث كلما وجدت القيمة ‪ XX‬تستبدل بالقيمة ‪0C‬‬

‫‪ 5‬ـ التوجيهة " ‪" DEFINE #‬‬


‫وتسمح بتبديل نص معين ‪.‬‬
‫‪# DEFINE‬‬ ‫‪Y-X‬‬ ‫‪Y-2X‬‬
‫حيث كلما وجدت في النص ‪ Y-X‬تستبدل بالقيمة ‪Y-2X‬‬

‫‪ 6‬ـ التوجيهة " ‪" ORG‬‬


‫متبوع بعنوان‪ ،‬يحدد عنوان بداية تنفيذ البرنامج و التي يجب أن تكون ‪ 00x0‬أو غيرها‬

‫‪ 7‬ـ التوجيهة " ‪" END‬‬


‫تدل على نهاية البرنامج ‪.‬‬
‫‪ 4‬ـ تحويل لغة التجميع ‪ ))assempleur) )ASM‬إلى لغة الميكرومراقب ‪.))HEX‬‬
‫‪ 5‬ـ نقل البرنامج المكتوب بلغة ‪ ))HEX‬إلى الميكرومراقب ‪.‬‬

‫ـ من دفتر الشروط إلى التركيب‪.‬‬


‫‪ 1‬ـ هيكل كتابة البرنامج ‪:‬‬
‫كل برنامج يكتب بلغة التجميع له الهيكل التالي ‪:‬‬

You might also like