Sie sind auf Seite 1von 125

- PIC16f84A 8-bit enhanced with EEPROM

Email: CET.ENG2012@yahoo.com
‫‪‬‬ ‫وَاللّهُ أَخْرَجَكُم مِّه بُطُىنِ أُمَّهَبتِكُمْ الَ تَعْلَمُىنَ شَيْئًب وَجَعَلَ لَكُمُ الْسَّمْعَ وَاألَبْصَبرَ وَاألَفْئِدَةَ لَعَلَّكُمْ تَشْكُرُونَ‬ ‫‪‬‬

‫الحمـــــــــ ُد هلل رب العالمٌن ‪ ،‬وأشهـــــــــــد أن ال إله إال هللا وحـده ال َشرٌك له ‪ ،‬وأشهد أن محـــــــــــمداً َعبــــده ورسوله َ‬
‫وصفٌه َ‬
‫وخلٌله ‪،‬‬
‫صلوات ربً وســـالمه علٌه وعلى آله وأصـــــــــــــحابه أجمـعٌن ‪ ،‬والتــــــــــــــابعٌن ومن تبعهم بإحـسان إلى ٌـوم الدٌن ‪. .‬‬

‫أما بـــــــعد ‪:‬‬

‫ُ‬
‫حٌث ٌشهد َعصرنا َهذا تطـوراً سرٌعا ً السِ ٌما فٌما ٌخصُ َمجال تقنٌات معـَـــــــالجة البٌانات‬ ‫نعٌشُ الٌوم فً َعصر َتكنلوجٌا ال َمعلومات ‪،‬‬
‫وكثرة األجهزة التً تم اختراعُها فً هذا ال َمــــجال مثل ‪ ، Microprocessor , PLC , Microcontroller‬فالقرن العشرٌن هو بال‬
‫شك قرن اإللكترون والصناعات الحاسوبٌة وبخاصة فً العقود األربعة األخٌرة ‪ ,‬فاختراع الترانزٌستور ش ّكل قفز ٍة نوعٌ ٍة فً الصناعة‬
‫االلكترونٌة ‪ ,‬وغدا هذا العنصر فٌما بعد عنصراً أساس ٌّا ً فً صناعة الدوائر االلكترونٌة‪ .‬نقطة التحول الثانٌة فً الصناعة االلكترونٌة بعد‬
‫الترانزٌستور تمثلت بنجاح العلماء فً صناعة دوائر متكاملة )‪ (IC‬متناهٌة الصغر ‪ ،‬وخصوصا ً االختراع المتحكم الصُغري‬
‫‪ Microcontroller‬والتً هً عبارة عن دائرة متكاملة وما ٌمٌز هذه الدائرة المتكاملة هً الوثوقٌة فً األداء إضافة إلى تطور تقنٌة‬
‫تصنٌعها و سعرها المنخفض الذي جعلها فً متناول الجمٌع والمتحكم الصُغري ٌختلف عن بقٌة الدارات المتكاملة فً أنه دارة متكاملة قابلة‬
‫للبرمجة ‪ ,‬أي أن عمله ٌتحدد وفق البرنامج المكتوب داخله ‪ ,‬وهو ذو وثوقٌة عالٌة ودقة متناهٌة فً معالجة البٌانات مما جعله العقل المدبّر‬
‫فً دارات التحكم االلكترونٌة‪.‬‬

‫حٌث ٌتكون هذا الكتاب من سبعة وحدات ‪ ،‬فً‬ ‫ُ‬ ‫هذا الكتاب سٌكون مدخلك نحو الفهم العمٌق لمبدء عمل المتحكم الصُغري وطرٌقة برمجة ‪،‬‬
‫الوحدة االولى تناولنا موضوع األنظمة ال َعددٌة وكٌفٌها تمثٌلها ‪ ،‬اما الوحدة الثانٌة فكانت مقدمة عن بنٌة االنظمة القابلة لل َبرمجة ‪ ،‬وفً الوحدة‬
‫الثالثة تناولنا البنٌة الصلبة ‪ Hardware‬للمتحكم الصُغري ‪ ، Microcontroller‬اما الوحدة الرابعة تناولت موضوع مسجل البٌــانات‬
‫‪ ، File Register‬وفً الوحدة الخامسة تم شرح طقم التعلٌمات ‪ instruction set‬الخاصة بالمتحكم الصُغري‪، Microcontroller‬‬
‫وفً الوحدة السادسة سوف تتعلم مبادى البرمجة وطرق برمجة المتحكم الصُغري ‪ ، Microcontroller‬اما الوحدة االخٌرة فخصصتها‬
‫عن االدوات ‪ Toolkit‬والبرامج ‪ Softwares‬المستخدمة فً عملٌة البرمجة ‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 2‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الفهرس‬

‫االنظمت العذديت ‪Numbrics Systems‬‬ ‫الوحذة االولى‬

‫ص‪9‬‬ ‫‪Decimal system‬‬ ‫النظام العشري‬ ‫‪-‬‬


‫ص ‪01‬‬ ‫‪Binary system‬‬ ‫النظام الثنائً‬ ‫‪-‬‬
‫ص ‪00‬‬ ‫التحوٌل من النظام الثنائً الى النظام العشري ‪Binary to decimal Conv.‬‬ ‫‪-‬‬
‫ص ‪00‬‬ ‫التحوٌل من النظام العشري الى النظام الثنائً ‪Decimal to binary Conv.‬‬ ‫‪-‬‬
‫ص‪03‬‬ ‫‪Measurment Units‬‬ ‫وحدات القٌاس‬ ‫‪-‬‬
‫ص‪05‬‬ ‫‪Possitive & Negative systems‬‬ ‫االعداد الموجبة والسالبة‬ ‫‪-‬‬
‫ص‪05‬‬ ‫‪Unsigned number‬‬ ‫االعداد بدون اشارة‬ ‫‪-‬‬
‫ص‪05‬‬ ‫‪Signed number‬‬ ‫االعداد بأشارة‬ ‫‪-‬‬
‫ص‪06‬‬ ‫‪Sign & Magnitude‬‬ ‫االشارة والمقدار‬ ‫‪-‬‬
‫ص‪01‬‬ ‫‪1's Compliments‬‬ ‫المتمم االول‬ ‫‪-‬‬
‫ص‪01‬‬ ‫‪2's Compliments‬‬ ‫المتمم الثانً‬ ‫‪-‬‬
‫ص‪01‬‬ ‫‪Arithmatic operations‬‬ ‫العملٌات الحسابٌة على النظام الثنائً‬ ‫‪-‬‬
‫ص‪01‬‬ ‫‪Adding‬‬ ‫الجمع‬ ‫‪-‬‬
‫ص‪00‬‬ ‫‪Subtracting using 2's Comp.‬‬ ‫الطرح بأستخدام المتمم الثانً‬ ‫‪-‬‬
‫ص‪04‬‬ ‫‪Carry‬‬ ‫حالة المحمل‬ ‫‪-‬‬
‫ص‪05‬‬ ‫‪Number Inside Computers‬‬ ‫االرقام داخل ذاكرة الحاسوب‬ ‫‪-‬‬
‫ص‪06‬‬ ‫‪Overflow Condition‬‬ ‫حالة الطفحان‬ ‫‪-‬‬
‫ص‪06‬‬ ‫‪Overflow exambles‬‬ ‫امثلة على الطفحان‬ ‫‪-‬‬
‫ص‪01‬‬ ‫‪Hex. Decimal‬‬ ‫النظام السادس عشر‬ ‫‪-‬‬
‫ص‪01‬‬ ‫التحوٌل من النظام السادس عشر الى النظام الثنائً وبالعكس‬ ‫‪-‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 3‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الوحذة الثانيت بنيت االنظمت القابلت للبرمجت ‪Digital System Archetecture‬‬

‫ص‪31‬‬ ‫‪Hard wire connection‬‬ ‫أنظمة الربط الصلب‬ ‫‪-‬‬


‫ص‪31‬‬ ‫‪Programmable Devices‬‬ ‫االنظمة القابلة للبرمجة‬ ‫‪-‬‬
‫ص‪30‬‬ ‫‪CPU functions‬‬ ‫وضٌفة وحدة المعالجة المركزٌة‬ ‫‪-‬‬
‫ص‪30‬‬ ‫‪Fetch Cycle‬‬ ‫دورة الجلب‬ ‫‪-‬‬
‫ص‪30‬‬ ‫‪Execution Cycle‬‬ ‫دورة التنفٌذ‬ ‫‪-‬‬
‫ص‪30‬‬ ‫‪ALU Unit‬‬ ‫وحدة الحساب والمنطق‬ ‫‪-‬‬
‫ص‪33‬‬ ‫‪Control unit‬‬ ‫وحدة السٌطرة‬ ‫‪-‬‬
‫ص‪36‬‬ ‫‪Memory Unit‬‬ ‫وحدة الذاكرة‬ ‫‪-‬‬
‫ص‪36‬‬ ‫‪Structure of memory‬‬ ‫البنٌة الداخلٌة للذاكرة‬ ‫‪-‬‬
‫ص‪31‬‬ ‫‪Von-newman vs Harvard Arch.‬‬ ‫بنٌة فون نٌومان وبنٌة هارفارد‬ ‫‪-‬‬
‫ص‪31‬‬ ‫‪Input Units‬‬ ‫وحدات االدخال‬ ‫‪-‬‬
‫ص‪31‬‬ ‫‪Output Unit‬‬ ‫وحدات االخراج‬ ‫‪-‬‬

‫بنيت المتحكم الصغري ‪MCU Archetecture‬‬ ‫الوحذة الثالثت‬

‫ص‪40‬‬ ‫‪PIC16f84A‬‬ ‫بنٌة المسٌطر الدقٌق‬ ‫‪-‬‬


‫ص‪43‬‬ ‫‪CPU‬‬ ‫وحدة المعالجة المركزٌة‬ ‫‪-‬‬
‫ص‪43‬‬ ‫‪Direct Addressing‬‬ ‫العنونة المباشرة‬ ‫‪-‬‬
‫ص‪44‬‬ ‫‪Undirect Addressing‬‬ ‫العنونة الغٌر مباشرة‬ ‫‪-‬‬
‫ص‪45‬‬ ‫‪ALU Unit‬‬ ‫وحدة الحساب والمنطق‬ ‫‪-‬‬
‫ص‪46‬‬ ‫‪Status register‬‬ ‫مسجل الحالة‬ ‫‪-‬‬
‫ص‪41‬‬ ‫‪Control Unit‬‬ ‫وحدة السٌطرة‬ ‫‪-‬‬
‫ص‪41‬‬ ‫‪Memory Organization‬‬ ‫تنظٌم الذاكرة‬ ‫‪-‬‬
‫ص‪41‬‬ ‫‪Data Memory‬‬ ‫ذاكرة البٌانات‬ ‫‪-‬‬
‫ص‪49‬‬ ‫‪GPR‬‬ ‫مسجالت االغراض العامة‬ ‫‪-‬‬
‫ص‪49‬‬ ‫‪SPR‬‬ ‫مسجالت االغراض الخاصة‬ ‫‪-‬‬
‫ص‪49‬‬ ‫‪Program Memory‬‬ ‫ذاكرة البرنامج‬ ‫‪-‬‬
‫ص‪51‬‬ ‫‪PWRT‬‬ ‫مؤقت بداٌة اقالع الطاقة‬ ‫‪-‬‬
‫ص‪51‬‬ ‫‪OST‬‬ ‫مؤقت بداٌة اقالع المذبذب‬ ‫‪-‬‬
‫ص‪50‬‬ ‫‪POR‬‬ ‫اعادة االقالع عند بداٌة تشغٌل الطاقة‬ ‫‪-‬‬
‫ص‪50‬‬ ‫‪Watchdog Timer‬‬ ‫مؤقت الحارسة‬ ‫‪-‬‬
‫ص‪50‬‬ ‫‪Eeprom‬‬ ‫الذاكرة‬ ‫‪-‬‬
‫ص‪50‬‬ ‫‪Timer‬‬ ‫المؤقت‬ ‫‪-‬‬
‫ص‪50‬‬ ‫‪In/Out ports‬‬ ‫أطراف االدخال واالخراج‬ ‫‪-‬‬
‫ص‪50‬‬ ‫الوصف الدقٌق الطراف المسٌطر الصغري‬ ‫‪-‬‬
‫ص‪53‬‬ ‫‪Reset pin‬‬ ‫طرف تصفٌر الشرٌحة‬ ‫‪-‬‬
‫ص‪54‬‬ ‫‪Crystal Oscilattor‬‬ ‫المذبذب البلوري‬ ‫‪-‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 4‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


File Register ‫الوحذة الرابعت‬

56‫ص‬ Special Purpose Register(SPRs) ‫مسجالت األغراض الخاصة‬ -


51‫ص‬ TRISA(Tri-State Buffer) ‫السجل‬ -
51‫ص‬ TRISB(Tri-State Buffer) ‫السجل‬ -
51‫ص‬ PORTA ‫السجل‬ -
51‫ص‬ PORTB ‫السجل‬ -
51‫ص‬ Status Register ‫مسجل الحالة‬ -
59‫ص‬ Option Register ‫المسجل‬ -
60‫ص‬ FSR Register (File Select Register) FSR ‫مسجل‬ -
60‫ص‬ INDF Register INDF ‫مسجل‬ -
63‫ص‬ TMR0 Register TMR0 ‫مسجل‬ -
63‫ص‬ PCL & PCLATH ‫المسجل‬ -
64‫ص‬ INTCON ‫المسجل‬ -
65‫ص‬ EEADR ‫المسجل‬ -
65‫ص‬ EEDATA ‫المسجل‬ -
65‫ص‬ EECON1 ‫المسجل‬ -
66‫ص‬ EECON 2 ‫المسجل‬ -

Instructions set ‫طقم التعليماث‬ ‫الوحذة الخامست‬

61‫ص‬ Bit Orientation Operations ‫التعلٌمات على مستوى البت‬ -


61‫ص‬ Bit Clear Flag BCF ‫التعلٌمة‬ -
69‫ص‬ Bit Set Flag BSF ‫التعلٌمة‬ -
69‫ص‬ Bit Test Flag Skip If Set BTFSS ‫التعلٌمة‬ -
11‫ص‬ Bit Test Flag Skip If Clear BTFSC ‫التعلٌمة‬ -
10‫ص‬ Lateral and Control Instruction ‫تعلٌمات السٌطرة والثوابت‬ -
10‫ص‬ MOV Lateral to W Reg. MOVLW ‫التعلٌمة‬ -
10‫ص‬ ADD Lateral to W Reg. ADDLW ‫التعلٌمة‬ -
10‫ص‬ AND Lateral and W Reg. ANDLW ‫التعلٌمة‬ -
10‫ص‬ CALL Statement CALL ‫التعلٌمة‬ -
10‫ص‬ Clear watchdog timer CLRWDT ‫التعلٌمة‬ -
13‫ص‬ Goto Statement Goto ‫التعلٌمة‬ -
13‫ص‬ Exclusive OR Lateral With W Reg. XORLW ‫التعلٌمة‬ -
13‫ص‬ Inclusive OR Lateral With W Reg IORLW ‫التعلٌمة‬ -
14‫ص‬ Subtract Lateral from W Reg. SUBLW ‫التعلٌمة‬ -
14‫ص‬ SLEEP Instruction SLEEP ‫التعلٌمة‬ -
14‫ص‬ Return flag interrupt enable instruction RETFIE ‫التعلٌمة‬ -
15‫ص‬ Return Instruction Return ‫التعلٌمة‬ -
15‫ص‬ Return with lateral to W Reg. RETLW ‫التعلٌمة‬ -

‫ ) ـــــــــــــــــــ‬5 ( ‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬ Microcontroller ‫المسٌطر الدقٌق‬


15‫ص‬ Byte Orientation Operations ‫التعلٌمات على مستوى الباٌت‬ -
16‫ص‬ ADD W Reg. to flag ADDWF ‫التعلٌمة‬ -
11‫ص‬ Subtract W Reg. from flag SUBWF ‫التعلٌمة‬ -
11‫ص‬ Swap W Reg. With Flag SWAPF ‫التعلٌمة‬ -
11‫ص‬ AND W Reg. with flag ANDWF ‫التعلٌمة‬ -
19‫ص‬ EX-OR W with flag XORWF ‫التعلٌمة‬ -
19‫ص‬ Inclusive OR W with flag IORWF ‫التعلٌمة‬ -
11‫ص‬ Clear Flag CLRF ‫التعلٌمة‬ -
11‫ص‬ No Operation Instruction NOP ‫التعلٌمة‬ -
11‫ص‬ Clear Working Register CLRW ‫التعلٌمة‬ -
10‫ص‬ Compliment Flag Instruction COMF ‫التعلٌمة‬ -
10‫ص‬ Decrement Flag DECF ‫التعلٌمة‬ -
10‫ص‬ Increment Flag INCF ‫تعلٌمة‬ -
10‫ص‬ Rotate Right Through Carry RRF ‫تعلٌمة‬ -
13‫ص‬ Rotate Left Through Carry RLF ‫تعلٌمة‬ -
13‫ص‬ Move Flag MOVF ‫تعلٌمة‬ -
14‫ص‬ Move W Reg. to Flag MOVWF ‫تعلٌمة‬ -
15‫ص‬ Increment Flag Skip if Zero INCFSZ ‫تعلٌمة‬ -
16‫ص‬ Decrement Flag Skip if Zero DECFSZ ‫تعلٌمة‬ -

Programming Concept ‫مبادء البرمجت‬ ‫الوحذة السادست‬

19‫ص‬ Assembly Language ‫لغة التجمٌع‬ -


91‫ص‬ Program Structure ‫هٌكل البرنامج‬ -
90‫ص‬ Writing Operation ‫عملٌة الكتابة‬ -
90‫ص‬ Reading Operation ‫عملٌة القراءة‬ -
90‫ص‬ Variable ‫المتغٌرات‬ -
90‫ص‬ Constant ‫الثوابت‬ -
93‫ص‬ Comment ‫التعلٌقات‬ -
94‫ص‬ #define ‫التعلٌمة‬ -
95‫ص‬ ORG ‫التعلٌمة‬ -
95‫ص‬ Cblock ‫التعلٌمة‬ -
96‫ص‬ Macro Instruction ‫الماكرو‬ -
96‫ص‬ Subroutines ‫االجراءات‬ -
91‫ص‬ If Statement ‫تعلٌمة أذا الشرطٌه‬ -
99‫ص‬ While loop ‫تعلٌمة التكرار‬ -
010‫ص‬ Direct Addressing ‫مثال عن العنونة المباشرة‬ -
010‫ص‬ Undirect Addressing ‫مثال عن العنونة الغٌر المباشرة‬ -
014‫ص‬ Introdution to Interrupt ‫مقدمة فً المقاطعات‬ -
014‫ص‬ interrupt philosophy ‫فلسفة المقاطعه‬ -

‫ ) ـــــــــــــــــــ‬6 ( ‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬ Microcontroller ‫المسٌطر الدقٌق‬


‫ص‪015‬‬ ‫‪Mechanism of interrupt‬‬ ‫الٌه عمل المقاطعات‬ ‫‪-‬‬
‫ص‪016‬‬ ‫‪interrupt Flag‬‬ ‫علم المقاطعه‬ ‫‪-‬‬
‫ص‪011‬‬ ‫‪Timer‬‬ ‫برمجة المؤقت‬ ‫‪-‬‬
‫ص‪019‬‬ ‫‪Timer Modules‬‬ ‫وحدة المؤقت‬ ‫‪-‬‬
‫ص‪019‬‬ ‫‪Timer enable‬‬ ‫تفعٌل خدمة المؤقت‬ ‫‪-‬‬
‫ص‪000‬‬ ‫‪Timer Interrupt‬‬ ‫مقاطعة المؤقت‬ ‫‪-‬‬
‫ص‪000‬‬ ‫‪WatchDog Timer‬‬ ‫مؤقت الحراسه‬ ‫‪-‬‬
‫ص‪03‬‬ ‫خطوات تهٌئة مؤقت الحراسه‬ ‫‪-‬‬
‫ص‪004‬‬ ‫الٌه عمل مؤقت الحراسه‬ ‫‪-‬‬

‫‪Toolkit & Simulation‬‬ ‫العذد والمحاكاة‬ ‫الوحذة السابعت‬

‫ص‪006‬‬ ‫المبرمجة‬ ‫‪-‬‬


‫ص‪006‬‬ ‫عملٌة توصٌل المبرمجة ‪ easypic7‬بجهاز الحاسوب‬ ‫‪-‬‬
‫ص‪001‬‬ ‫‪Hex. File‬‬ ‫كتابة الشفرة ‪ Code‬واولٌد ملف‬ ‫‪-‬‬
‫ص‪001‬‬ ‫‪Hex.File‬‬ ‫خطوات تولٌد ملف‬ ‫‪-‬‬
‫ص‪003‬‬ ‫‪Proteus‬‬ ‫المحاكاة بأستخدام برنامج‬ ‫‪-‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 7‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Dedication‬‬

‫حمًد (عهيت انصالة وانسالو)‬ ‫اىل كم يسهى يزيد عشة األسالو وَبيُا‬

‫انعزاق احلبية‬ ‫اىل كم شخص يزيد رفع رأص انوطٍ وكزاتت‬

‫انواند وانواندة‬ ‫اىل أعش شخصني انذيٍ اوصالَي اىل يا اَا عيت‬

‫سوجتي انعشيشة‬ ‫اىل انشخص انذي كاٌ انسبة يف أكًال هذا انكتاب‬

‫اىل أخوتي واصدثائي ‪....‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 8‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit one‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة األولـ ـى‬

‫‪Numerical System‬‬ ‫األنظمة العددٌة‬

‫مقدمــة‪:‬‬

‫الثنائً ‪ ،Binary‬السادس َعشر ‪َ ،Hex. Decimal‬كٌفٌة َتمثٌلها وكٌفٌة ال َتحوٌل‬ ‫هذه الوحدة هً ُمقدمة للنظام ال ُعشري ‪ُ ، Decimal‬‬
‫الحقٌقة أن الغاٌة األساسٌه لتقدٌم هذه الوحدة هً ال َتعرف على ب َعض ال َمفاهٌم األساسٌة مثل كٌفٌة تمثٌل األعداد‬
‫بٌن هذه اال َنظمة‪ ،‬فً َ‬
‫ُ‬
‫الموجبة والسالبة فً ال ِنظام الثنائً‪ ،‬والتعرف على حالة الطفحان ‪ ، Overflow‬حالة ال ُم َحمل ‪ ، Carry‬وغٌرها من المفاهٌم الواجب‬ ‫َ‬
‫التعرف علٌها قبل الدخول فً عالم المُسٌطر الدقٌق ‪..Microcontroller‬‬

‫‪Decimal System‬‬ ‫النظام العشري‬

‫إن النِظام أالكثر استخداما ً فً َحٌاتنا ال ٌَومٌة فً َعملٌات ال َعد و الحِساب هو النِظام العشري ‪ ، Decimal system‬هذا ال ِنظام أساسه‬
‫‪ Radix‬هو ‪ ، 10‬األساس َعشرة ٌعنً أن هذا النظام مكون من َعشر أعداد ‪ Digit‬ل َتمثٌل ال ِقٌم ‪ Values‬هً ‪0,1,2,3,4,5,6,7,8,9‬‬
‫تسمى هذه األرقام ُمعا ِمالت ‪ Coefficient‬ال ِنظام العشري‪ ،‬فمثالً ال َعدد ‪ٌ 123‬مكن َتفسٌرة ِبشكل‪،‬‬

‫‪1 X 102 + 2 X 101 + 3 X 100 = 100 + 20 + 3 = 123‬‬

‫نجد إن هذا ال َعدد مكون من ثالث مراتب ‪ Digit‬هً مرتبة األحاد الذي هو الرقم "‪ ، "3‬مرتبة ال َعشرات الذي هو "‪ ،"20‬مرتبة المئات‬
‫الذي هو "‪ "100‬ومجموع هذه المراتب ٌتكون العدد الذي هو "‪ ، "123‬بصورة عامة ٌمكن تمثٌل أي عدد بألنظام العشري بهذة الصٌغة‪،‬‬

‫‪AK X 10n-1 + AK-1 X 10n-2 + AK-2 X 10n-3 . . .‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 9‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫أن ‪،‬‬ ‫ُ‬
‫حٌث َ‬

‫‪ : AK ‬تمثل الرقم ‪ Digit‬وموقعة من العدد ‪،Number‬‬


‫‪ُ : 10 ‬تمثل أساس ‪ Radix‬النظام العشري‪،‬‬
‫‪ : N ‬هو األس الذي ٌُمثل مرتبة ال َعدد‬

‫‪Binary system‬‬ ‫ألنظام الثنائً‬

‫الرقمٌة ‪ Digital Devices‬ل َتمثٌل األعداد ‪ Numbers‬و تمثٌل األِشارات ‪َ ، Signals‬هذا‬ ‫وهو ال ِنظام الذي ٌُستخدم فً األجهزة َ‬
‫ال ِنظام أساسة ‪ Radix‬هو "‪ ، "2‬األساس أثنان ٌعنً أن هذا ال ِنظام مكون من َرقمٌن ‪ Two Digit‬لتمثٌل األعداد هما "‪ٌُ "0" , "1‬سمى‬
‫الرقمان ُمعامالت ‪ Coefficient‬ال ِنظام الثنائً‪ ،‬فمثالً العدد ‪ "100"b‬تمثل العدد "‪ "4‬بألنظام ال ُعشري ‪ ،‬والعدد ‪ "1101"b‬تمثل‬
‫هذان َ‬
‫العدد "‪ "13‬بالنظام العشري و َهكذا ‪ ،‬أي أن هذا النِظام مكون من سلسلسة من األصفار والوحدات فقط ‪..‬‬ ‫َ‬

‫مالحظة‪:‬‬

‫‪ ‬أصغر خانة فً ال ِنظام الثنائً ُتسمى )‪، bit (binary digit‬‬


‫‪ ‬أقصى خانة َتقع على جهة الٌسار ُتسمى الخانة األكثر أهمٌة )‪، MSB(Most significant bit‬‬
‫‪ ‬أقصى خانة َتقع على جهة الٌمٌن تسمى الخانة األقل أهمٌة )‪، LSB(Least significant bit‬‬

‫ثمان َمراتب ‪، 8-bit‬‬


‫ِ‬ ‫الشكل ‪ٌَ Figure 1.1‬وضح َعدد بأل ِنظام ُ‬
‫الثنائً ُمكون من‬

‫‪Bit 7‬‬ ‫‪Bit 0‬‬


‫‪MSB‬‬ ‫‪Bit 6‬‬ ‫‪Bit 5‬‬ ‫‪Bit 4‬‬ ‫‪Bit 3‬‬ ‫‪Bit 2‬‬ ‫‪Bit 1‬‬ ‫‪LSB‬‬

‫‪Figure 1.1‬‬

‫‪System Conversion‬‬ ‫التحوٌل بٌن األنظمة‬

‫أذا ُكنت تود برمجة م َُسٌطر دَقٌق ‪ٌَ ، Microcontroller‬جب أن َتعرف كٌفٌة التعامل مع ال ِنظام الثنائً ‪Binary‬‬
‫وال ِنظام العشري ‪ Decimal‬وكٌفٌة ال َتحوٌل بٌن هذه األنظمة ‪ ،‬ألنك ستحتاج عملٌة التحوٌل بكثرة اثناء عملٌة البرمجة‬
‫‪. programming‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 01‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Binary to Decimal Conversio‬‬ ‫‪ ‬التحوٌل من النظام الثنائً إلى النظام العشري‬

‫الثنائً الى ال ِنظام العشري َنضرب كل ‪ bit‬فً أساس النِظام ‪ Radix‬الذي هو '‪َ '2‬مرفوعة لل ُس َرقم‬
‫لل َتحوٌل من النِظام ُ‬
‫الَمرتبة أي ‪،‬‬

‫‪Binary number := (B2 B1 B0)2‬‬ ‫‪Where bn := Bn X 2 position‬‬

‫ثم َنجمع كل ‪ bn‬ألستخراج الناتج أي ‪ b2+b1+b0‬وهكذا ‪ ،‬مع ُمالحظة أن َمرتبة األحاد ‪ LSB‬تبدء بالقٌمة صفر أي أن‬
‫‪position := 0‬‬
‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.1‬‬
‫حول العدد ‪ (1001)2‬بالنظام الثنائً الى ما ٌكافئة بالنظام العشري ؟‬
‫الحل‪:‬‬

‫‪1X23 + 0X22 + 0X21 + 1X20 = 8+0+0+1 = (9)10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.2‬‬
‫حول العدد ‪ (0110)2‬بالنظام الثنائً الى ما ٌكافئة بالنظام العشري ؟‬
‫الحل‪:‬‬

‫‪0X23 + 1X22 + 1X21 + 0X20 = 0+4+2+0 = (6)10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪Decimal to Binary Conversion‬‬ ‫‪ ‬التحوٌل من النظام العشري إلى النظام الثنائً‬

‫عند ال َتحوٌل من ال ِنظام ال ُعشري الى ال ِنظام ُ‬


‫الثنائً َنتبع الصٌغة التالٌة ‪ ،‬نقسم ال َعدد الذي نرٌد َتحوٌلة الى النظام الثنائً على أثنان" ‪، "2‬مثالً‬
‫العدد "‪، "10‬‬

‫= ‪10 ÷ 2‬‬ ‫‪quotient is 5‬‬ ‫= ‪reminder‬‬ ‫‪0‬‬ ‫‪LSB‬‬

‫ناتج قسمة ‪ quotient‬العدد ‪ 10÷2‬هو "‪ ، "5‬والمتبقً هو "‪ ، "0‬الذي ٌعتبر هو الخانة األقل أهمٌة ‪ ، LSB‬ثم نقسم العدد ‪5÷2‬‬
‫ونستخرج باقً القسمة وهكذا ‪ ...‬وتستمر العملٌة الى أن ٌصبح العدد المقسوم أصغر من المقسوم علٌة لنتوقف ‪،‬‬

‫=‪5÷2‬‬ ‫‪quotient is 2‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪bit.1‬‬

‫=‪2÷2‬‬ ‫‪quotient is 1‬‬ ‫= ‪reminder‬‬ ‫‪0‬‬ ‫‪bit.2‬‬

‫=‪1÷2‬‬ ‫‪invalid operation‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪MSB‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 00‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫أذن مكافئ العدد ‪ (10)10‬بالنظام الثنائً هو ‪(1010)2‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.3‬‬
‫حول العدد ‪ (14)2‬بالنظام العشري الى ما ٌكافئة بالنظام ُ‬
‫الثنائً ؟‬
‫الحل‪:‬‬

‫= ‪14 ÷ 2‬‬ ‫‪quotient is 7‬‬ ‫= ‪reminder‬‬ ‫‪0‬‬ ‫‪LSB‬‬

‫=‪7÷2‬‬ ‫‪quotient is 3‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪bit.1‬‬

‫=‪3÷2‬‬ ‫‪quotient is 1‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪bit.2‬‬

‫=‪1÷2‬‬ ‫‪invalid operation‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪MSB‬‬

‫أذن مكافئ العدد ‪ (14)10‬بالنظام الثنائً هو ‪(1110)2‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.4‬‬
‫ُ‬
‫حول العدد ‪ (15)2‬بالنظام العشري الى ما ٌكافئة بالنظام الثنائً ؟‬
‫الحل‪:‬‬

‫= ‪15 ÷ 2‬‬ ‫‪quotient is 7‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪LSB‬‬

‫=‪7÷2‬‬ ‫‪quotient is 3‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪bit.1‬‬

‫=‪3÷2‬‬ ‫‪quotient is 1‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪bit.2‬‬

‫=‪1÷2‬‬ ‫‪invalid operation‬‬ ‫= ‪reminder‬‬ ‫‪1‬‬ ‫‪MSB‬‬

‫أذن مكافئ العدد ‪ (15)10‬بالنظام الثنائً هو ‪(1111)2‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 02‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫القٌم ال ُعشرٌة ‪ Decimal‬وما ٌقابلها بالنظام الثنائً ‪Binary System‬‬
‫الجدول ‪ٌَ table 1.1‬وضح ِ‬

‫ال َعذد العشزي‬ ‫ال َعذد الثنائي‬


‫‪0‬‬ ‫‪0000‬‬
‫‪1‬‬ ‫‪0001‬‬
‫‪2‬‬ ‫‪0010‬‬
‫‪3‬‬ ‫‪0011‬‬
‫‪4‬‬ ‫‪0100‬‬
‫‪5‬‬ ‫‪0101‬‬
‫‪6‬‬ ‫‪0110‬‬
‫‪7‬‬ ‫‪0111‬‬
‫‪8‬‬ ‫‪1000‬‬
‫‪9‬‬ ‫‪1001‬‬
‫‪10‬‬ ‫‪1010‬‬
‫‪11‬‬ ‫‪1011‬‬
‫‪12‬‬ ‫‪1100‬‬
‫‪13‬‬ ‫‪1101‬‬
‫‪14‬‬ ‫‪1110‬‬
‫‪15‬‬ ‫‪1111‬‬

‫‪Table 1.1‬‬

‫‪Units of Measurement‬‬ ‫وحدات القٌاس‬

‫صلب‬‫لدي قرص َ‬ ‫كثٌر ما نسمع مصطلحات ‪ Giga byte , Mega byte ,Kilo byte‬التً ُنشٌر بها الى سِ عات َخزنٌة ‪ ،‬مثالً نقول أن َ‬
‫أن أصغر وحدة قٌاس فً ال ِنظام‬ ‫ُ‬
‫حٌث َ‬ ‫‪ Hard disk‬ذو سعة ‪َ ، 120 Giga byte‬نحن ِبذلك َنذكر وحدة القٌاس الخاصة باألنظمة َ‬
‫الرقمٌة ‪،‬‬
‫الثنائً تسمى ‪ bit‬والتً َتحمل قٌمتان أما صفر أو واحد ‪ ،‬مجموع َثمان خانات ‪ 8-bit‬تسمى ‪ ، byte‬أي أن ‪:‬‬

‫‪1 byte = 8-bit‬‬

‫‪2 byte = 2 x 8-bit = 16-bit‬‬

‫الشكل ‪ٌ Figure 1.2‬مثل الـ ‪، byte‬‬

‫‪Bit 7‬‬ ‫‪Bit 0‬‬


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

‫‪Figure 1.2‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 03‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫أقصى عدد ٌُمكن أن ٌَستوعبة الباٌت الواحد ‪ 1 byte‬هو ‪ )1111 1111)2‬أي ما ٌكافئها بالِنظام ال ُعشري ‪ ، )255)10‬هناك عِ القة تستطع‬
‫من ِخاللها َمعرفة أٌقصى عدد ٌمكن أن َتستوعبة تشكٌلة من البتات ‪ ، Bits‬اذا ُعلم عدد الخانات الثنائٌة )‪، Bit(binary digit‬‬

‫‪Maximum Value = 2N-1‬‬ ‫‪where N: is the number of bit‬‬

‫‪Maximum Value = 28-1 = 256-1 = 255‬‬

‫كما أن هناك قانون َتستطٌع من ِخاللة م َعرفة عدد البتات ‪ bit numbers‬اذا ُعلم أعظم َرقم ‪ Maximum Value‬وذلك بأستخدام‬
‫ُ‬
‫حٌث‪،‬‬ ‫اللوغارتمات‬

‫‪Number of bit(N) = Log2X‬‬ ‫‪where X is the maximum value‬‬

‫)‪Number of bit (N‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.5‬‬
‫أذا كان لدٌك مستوعب ‪( Register‬المستوعب او المسجل عبارة عن دائرة خزن رقمٌة)مكون من ‪ 16-bit‬فما هو اقصى عدد ٌمكن أن‬
‫ٌتحملة المستوعب‬
‫الحل‪:‬‬

‫‪Maximum Value = 216-1‬‬ ‫‪= 65535‬‬

‫أذن أقصى َعدد ٌُمكن َتحمله هو ‪65535‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.6‬‬
‫أذا كان لَدٌك مستوعب ‪ Register‬أعظم رقم ٌ َستوعبة هو ال َعدد )‪ (32‬فما هو عدد البتات ‪ Bit Number‬الذي ٌتكون منة المستوعب ؟‬
‫‪10‬‬

‫الحل‪:‬‬

‫‪Number of bit‬‬ ‫‪= 5-bit‬‬

‫أذن عدد البتات هً ‪.5-bit‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 04‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الجدول ‪ٌُ Table 1.2‬بٌن وحدات القٌاس ‪،‬‬
‫َ‬

‫الوحذج‬ ‫عَذد الخاناخ الثُنائيح‬


‫‪1-byte‬‬ ‫‪8-bit‬‬
‫‪1-word‬‬ ‫‪16-bit‬‬
‫‪1-double word‬‬ ‫‪32-bit‬‬
‫‪1-kilobyte‬‬ ‫‪1024 byte‬‬
‫‪1-Megabyte‬‬ ‫‪1024 kilobyte‬‬
‫‪1-Gigabyte‬‬ ‫‪1024 Megabyte‬‬
‫‪1-Tera byte‬‬ ‫‪1024 Gigabyte‬‬

‫‪Table 1.2‬‬

‫‪Singed and Unsigned Value‬‬ ‫األعداد الموجبة والسالبة‬

‫قلنا أن النظام الثنائً مكون من سِ لسلة من األصفار والواحدات ‪ ، Ones and Zeros‬و أن هذه السلسلة من األصفار والواحدات عِ بارة عن‬
‫أشارات كهربائٌة ‪ ، Electrical Signals‬السؤال الذي ٌتبادر الى الذهن كٌف ٌتم تمثل االعداد السالبة فً النظام الثنائً ؟!!‬

‫ٌجب أن تعرف انة هناك نوعان من البٌانات حسب طبٌعة تمثٌلها فً الحاسبات االلكترونٌة‪،‬‬

‫‪Unsigned value‬‬ ‫‪ ‬األعداد بدون األشارة‬


‫‪Signed value‬‬ ‫‪ ‬االعداد بأشارة‬

‫‪Unsigned Value‬‬ ‫‪ ‬االعداد بدون األشارة‬

‫وهً األعداد التً ال تحتوي على أشارة أي انها كلها أعداد موجبة ‪ ،‬لنتخٌل لو كان لدٌنا مستوعب خزنً ‪ Register‬مكون من ‪ ، 8-bit‬فأن‬
‫مدى األعداد التً ٌمكن تمثٌلها هً‬

‫‪Unsigned Range of 8-bit‬‬ ‫‪2 8 = 256‬‬

‫أي ان هناك ‪ 256‬عدد موجب فقط ‪.‬‬

‫‪Signed value‬‬ ‫‪ ‬األعداد بأشارة‬

‫الرقمٌة تتعامل مع األشارات الكهربائٌة المكونة من‬


‫وهً األعداد التً تحتوي على أشارة سالبة مثل العدد ‪ ، -10 ، -22‬بما أن األجهزة َ‬
‫سِ لسلة من األصفار والواحدات ‪ ،‬كٌف سٌتم تمثٌل الرمز السالب ( ‪ ) -‬؟!!‬
‫هناك ثالث طرق لتمثٌل األعداد السالبه والموجبة ‪،‬‬

‫‪Sign and Magnitude method‬‬ ‫‪ -0‬طرٌقة األشارة وال ُمقدار‬


‫‪1's Compliment method‬‬ ‫‪ً -2‬طرٌقة ال ُمتمم االول‬
‫‪2's Compliment method‬‬ ‫‪ً -3‬طرٌقة ال ُمتمم الثانً‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 05‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Signe and Magnitude‬‬ ‫األشارة والمقدار‬
‫تفترض هذه الطرٌقة َحجز خانة ‪ bit‬لتمثٌل أشارة العدد السالب أو الموجب ‪ ،‬عادة تكون الخانة المحجوزة للشارة العدد ‪ Sign‬هً الخانة‬
‫العدد سالب ‪،‬‬
‫‪ ، MSB‬إذا كانت هذه الخانة صفر ‪ Zero‬فذلك ٌدل على أن العدد موجب أما اذا كانت الخانة واحد ‪ One‬فٌدل ذلك على أن َ‬
‫مثالً لمعرفة ما ٌقابل العدد ‪ (0000 0011)2‬بالنظام العشري ‪ ،‬ننظرالى أخر خانة على جهة الٌسار التً تحمل القٌمة صفر فهذا ٌدل على‬
‫ان العدد موجب ‪،‬هذا الجزء من العدد ٌسمى جزء االشارة ‪ ، Sign‬ثم ننظر الى بقٌة العدد الذي ٌمثل جزء المقدار ‪ ، Magnitude‬الذي ٌمثل‬
‫العدد '‪ ، '3‬اذن العدد هو '‪ ، '+ 3‬لنأخذ مثال أخر‪ ،‬لمعرفة ما ٌقابل العدد ‪ (1000 0110)2‬بالنظام العشري ‪ ،‬بما أن أخر خانة على جهة‬
‫الٌسار قٌمتها واحد فهذا ٌدل على ان العدد سالب ‪ ،‬ثم ننظر الى بقٌة العدد الذي ٌمثل العدد '‪ ، '6‬اذن العدد هو ' ‪، ' – 6‬‬

‫نستنتج من ذلك أن أي قٌمة ‪ Values‬مكونة من جزئٌن جزء االشارة ‪ Sign‬وجزء المقدار ‪Magnitude‬‬

‫)‪Sign (+,-‬‬ ‫)‪Magnitude (value‬‬

‫مالحظة‪:‬‬

‫عٌوب ‪ Disadvantage‬أستخدام األعداد السالبة ‪ Signed value‬هو َخسارة المدى ‪ ، Range‬وذلك بتخصٌصنا خانة للشارة حٌث‪،‬‬

‫‪Range of 8-bit‬‬ ‫‪28-1 = 27 = 128‬‬

‫الجدول ‪ٌ Table 1.3‬وضـــــــح َعـــدد مكون من ‪ 3-bit‬ممــــثل بصٌغة عدد غـٌر بـدون إشارة ‪ Unsigned‬وصــٌـغة عدد بأشارة‬
‫َ‬
‫‪Signe-Magnitude‬‬

‫عذد ثنائي‬ ‫عذد تذوى إشارج‬ ‫صيغح إشارج ‪ -‬والوقذار‬


‫‪000‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪001‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪010‬‬ ‫‪2‬‬ ‫‪2‬‬
‫‪011‬‬ ‫‪3‬‬ ‫‪3‬‬
‫‪100‬‬ ‫‪4‬‬ ‫‪-0‬‬ ‫قيوح خطأ‬
‫‪101‬‬ ‫‪5‬‬ ‫‪-1‬‬
‫‪110‬‬ ‫‪6‬‬ ‫‪-2‬‬
‫‪111‬‬ ‫‪7‬‬ ‫‪-3‬‬

‫‪Table 1.3‬‬

‫الحظ انة فً حالة استخدام عدد بأشارة ‪ Signed value‬لعدد مكون من ‪ 3-bit‬سنجد انة المدى ‪ Range‬اصبح ‪ 4‬ولٌس ‪ ، 8‬والسبب فً ذلك‬
‫هو تخصٌصنا الخانة ‪ MSB‬للشارة ‪ ،‬أي أصبح المدى ‪ range‬هو ‪ ، 22 = 4‬فأصبح لدٌنا اعداد موجبة من ‪ 0‬الى ‪ 3‬التً هً ‪0 , 1 ,2 ,‬‬
‫‪ 3‬وأعداد سالبة من ‪ 4‬الى ‪ 7‬التً هً ‪ -0 , -1 , -2 ,-3‬مع مالحظة ان ال ٌوجد صفر أشارتة سالبة فالصفر اشارتة موجــــبة لذلك تجد‬
‫فً الجدول مقابل القٌمة )‪ (- 0‬قٌمة خاطئة‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 06‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.7‬‬
‫ما هو مدى ‪ Range‬لعدد بأشارة ‪ Signed Number‬مكون من ‪ 8-bit‬؟‬

‫الحل‪:‬‬
‫‪8‬‬
‫‪2 = 256‬‬ ‫المدى ‪ Range‬لعدد مكون من ‪ 8-bit‬بدون إشارة هو‬
‫‪28-1 = 27 = 128‬‬ ‫بعد تخصٌص خانة لالشارة ٌصبح المدى‬
‫‪0 to 127‬‬ ‫أي أن مدى االعداد الموجبة التً ٌكون فٌها ‪ MSB‬هو ‪ 0‬هو‬
‫‪128 to 256‬‬ ‫ومدى االعداد السالبة التً ٌكون فٌها ‪ MSB‬هو ‪ 1‬هو‬

‫مالحظة ‪:‬‬

‫الرقمٌة ‪ Digital Device‬ال َتس َتخدم أسلوب األشارة وال ُمقدار ‪ Sign-Magnitude‬ل َتمثٌل‬
‫الحقٌقة الحاسبات األلكترونٌة واألجهزة َ‬
‫فً َ‬
‫األعداد السالبة وذلك بسبب؟‬

‫‪ ‬صعوبة معالجة ‪ Processing‬األعداد السالبة بأستخدام طرٌقة االشارة وال ُمقدار‪.‬‬


‫‪َ ‬تكرر حالة الصفر ‪ ،‬أو وجود عدد صفري سالب )‪.(-0‬‬

‫‪1's Compliment‬‬ ‫المتمم أالول‬

‫تستخدم هذه الطرٌقة فً بعض االجهزة الرقمٌة لتمثٌل االعداد السالبة ‪ ،‬الٌجاد سالب العدد ‪ (6)10‬باستخدام المتمم االول نقوم باتباع الخطوات‬
‫التالٌة‪،‬‬

‫‪ ‬نحول الرقم ‪ (6)10‬الى النظام الثنائً ‪(110)2‬‬


‫‪ ‬نعكس كل خانة ‪ bit‬من العدد ‪ (110)2‬لٌصبع العدد ‪(001)2‬‬

‫أذن سالب العدد ‪ (6)10‬هو ‪ ، (1)10‬الجدول ‪ٌ Table 1.4‬بٌن االختالف بٌن طرٌقة المتمم االول وطرٌقة األشارة والمقدار وعدد بدون إشارة‬
‫‪ Unsigned‬لعدد مكون من ‪،3-bit‬‬

‫ال َعذد الثُنائي‬ ‫عَذد تذوى إشارج‬ ‫األشارج‪ -‬والوقذار‬ ‫ال ُوتون األول‬
‫‪000‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪111‬‬ ‫=‬ ‫قيمة خطأ ‪7 = -0‬‬
‫‪001‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪110‬‬ ‫=‬ ‫‪6 = -1‬‬
‫‪010‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪101‬‬ ‫=‬ ‫‪5 = -2‬‬
‫‪011‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪100‬‬ ‫=‬ ‫‪4 = -3‬‬
‫‪100‬‬ ‫‪4‬‬ ‫‪-0‬‬ ‫قٌمة خطأ‬ ‫‪011‬‬ ‫=‬ ‫‪3 = -4‬‬
‫‪101‬‬ ‫‪5‬‬ ‫‪-1‬‬ ‫‪010‬‬ ‫=‬ ‫‪2 = -5‬‬
‫‪110‬‬ ‫‪6‬‬ ‫‪-2‬‬ ‫‪001‬‬ ‫=‬ ‫‪1 = -6‬‬
‫‪111‬‬ ‫‪7‬‬ ‫‪-3‬‬ ‫‪000‬‬ ‫=‬ ‫‪0 = -7‬‬

‫‪Table 1.4‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 07‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مالحظة‪:‬‬

‫عٌوب ‪ Disadvantage‬أستخدام طرٌقة المتمم االول ‪.1's Compliment‬‬


‫‪ ‬وجود حالة السالب الصفري )‪.(-0‬‬
‫أٌجابٌات ‪ Advantage‬أستخدام طرٌقة المتمم االول ‪.1's Compliment‬‬
‫‪ ‬سهولة معالجة االرقام السالبة ‪.‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.8‬‬
‫‪10‬‬ ‫‪2‬‬
‫)‪ (0010 0011‬أي ما ٌكافئة بالنظام العشري )‪ (35‬؟‬ ‫جد سالب العدد‬
‫الحل‪:‬‬
‫‪َ ‬نقلب كل خانة من العدد )‪ (0010 0011‬لٌكون لَدٌنا (‪)1101 1100‬‬
‫‪2‬‬ ‫‪2‬‬

‫‪ ‬نحول ال َعدد )‪َ (1101 1100‬‬


‫الى ال ِنظام ال َعشري ‪ )220(10‬أي أن سالب العدد ‪ )35(10‬هو ‪. )220(10‬‬ ‫‪10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪ ‬مثال ‪1.9‬‬
‫‪10‬‬ ‫‪2‬‬
‫)‪ (0010‬أي ما ٌكافئة بالنظام العشري )‪ (2‬؟‬ ‫جد سالب العدد‬

‫الحل‪:‬‬
‫‪ ‬نقلب كل خانة من العدد لٌكون )‪ (0010‬لدٌنا (‪)1101‬‬
‫‪2‬‬ ‫‪2‬‬

‫‪ ‬نحول العدد ‪ (1101)10‬الى النظام العشري ‪ )13(10‬أي أن سالب العدد (‪ )2‬هو (‪)220‬‬
‫‪10‬‬ ‫‪10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪2's Compliment‬‬ ‫المتمم ألثانً‬


‫َ‬
‫الطرٌقة االكثر استخداما ً فً ُمعالجة و َتمثٌل األعداد السالبة فً الحاسبات واالجهزة الرقمٌة ‪،‬وذلك كونها تتغلب على حالة الصفر‬ ‫وهً‬
‫ال ُمكرر وكذلك عدم وجود عدد صفري سالب‪ ،‬مثالً ألٌجاد سالب العدد )‪ (3‬بطرٌقة المتمم الثانً نتبع َ‬
‫الخطوات التالٌة‪،‬‬ ‫‪10‬‬

‫‪ ‬نحول العدد ‪ (3)10‬الى النظام الثنائً ‪)0000 0011(2‬‬


‫‪ ‬نقلب كل خانة ‪ bit‬لٌكون لدٌنا ‪)1111 1100(2‬‬
‫‪ ‬نظٌف واحد الى الناتج لٌكون ‪)1111 1101(2‬‬

‫أذن سالب ال َعدد ‪ (3)10‬بالنظام الثنائً هو ‪ )1111 1101(2‬أي ما ٌكافئة بالنظام العشري ‪.(253)10‬‬

‫الجدول ‪ٌ Table 1.5‬بٌن األختالف بٌن طرٌقة ال ُمتمم األول وطرٌقة ال ُمتمم الثانً وطرٌقة األشارة والمقدار وعدد بدون إشارة ‪Unsigned‬‬
‫لعدد ثنائً مكون من ‪،3-bit‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 08‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫عَذد ثنائي‬ ‫عَذد تذوى إشارج‬ ‫إشارج‪ -‬وهقذار‬ ‫ال ُوتون االول‬ ‫ال ُوتون الثاني‬
‫‪000‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪111‬‬ ‫=‬ ‫‪7‬‬ ‫=‬ ‫قٌمة خطأ ‪-0‬‬ ‫‪000 = 0‬‬
‫‪001‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪110‬‬ ‫=‬ ‫‪6‬‬ ‫=‬ ‫‪-1‬‬ ‫‪111 = 7 = -1‬‬
‫‪010‬‬ ‫‪2‬‬ ‫‪2‬‬ ‫‪101‬‬ ‫=‬ ‫‪5‬‬ ‫=‬ ‫‪-2‬‬ ‫‪110 = 6 = -2‬‬
‫‪011‬‬ ‫‪3‬‬ ‫‪3‬‬ ‫‪100‬‬ ‫=‬ ‫‪4‬‬ ‫=‬ ‫‪-3‬‬ ‫‪101 = 5 = -3‬‬
‫‪100‬‬ ‫‪4‬‬ ‫قٌمة خطأ ‪-0‬‬ ‫‪011‬‬ ‫=‬ ‫‪3‬‬ ‫=‬ ‫‪-4‬‬ ‫‪100 = 4 = -4‬‬
‫‪101‬‬ ‫‪5‬‬ ‫‪-1‬‬ ‫‪010‬‬ ‫=‬ ‫‪2‬‬ ‫=‬ ‫‪-5‬‬ ‫‪011 = 3 = -5‬‬
‫‪110‬‬ ‫‪6‬‬ ‫‪-2‬‬ ‫‪001‬‬ ‫=‬ ‫‪1‬‬ ‫=‬ ‫‪-6‬‬ ‫‪010 = 2 = -6‬‬
‫‪111‬‬ ‫‪7‬‬ ‫‪-3‬‬ ‫‪000‬‬ ‫=‬ ‫‪0‬‬ ‫=‬ ‫‪-7‬‬ ‫‪001 = 1 = -7‬‬

‫‪Table 1.5‬‬

‫مالحظة‪:‬‬

‫أٌجابٌات ‪ Advantage‬أستخدام طرٌقة المتمم الثانً ‪.2's Compliment‬‬

‫‪ ‬سهولة معالجة ‪ Processing‬األرقام السالبة ‪،‬‬


‫‪‬ال وجود لحالة الصفر السالب )‪(-0‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.7‬‬
‫‪10‬‬
‫جد سالب العدد )‪ (11‬بأستخدام المتمم الثانً ؟‬

‫الحل‪:‬‬
‫‪ ‬نحول العدد )‪ (11‬الى النظام الثنائً (‪)1011‬‬
‫‪2‬‬ ‫‪10‬‬

‫‪ ‬نقلب كل خانة ‪ bit‬لٌكون لدٌنا ‪)0100(2‬‬


‫‪ ‬نظٌف واحد الى الناتج لٌكون ‪)0101(2‬‬

‫العدد ‪ (11)10‬بالنظام الثنائً هو ‪ )0101(2‬أي ما ٌكافئة بالنظام العشري ‪(5)10‬‬


‫أذن سالب َ‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.8‬‬
‫‪10‬‬ ‫‪2‬‬
‫)‪ (1001‬أي ما ٌكافئة بالنظام العشري )‪ (9‬؟‬ ‫جد سالب العدد‬
‫الحل‪:‬‬
‫‪2‬‬
‫نقلب كل خانة ‪ bit‬لٌكون لدٌنا (‪)0110‬‬ ‫‪‬‬
‫‪2‬‬
‫نظٌف واحد الى الناتج لٌكون (‪)0111‬‬ ‫‪‬‬

‫أذن سالب العَدد ‪ (9)10‬بالنظام الثنائً هو ‪ )0111(2‬أي ما ٌكافئة بالنظام العشري ‪(7)10‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 09‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Arithmetic Operations‬‬ ‫العملٌات الحسابٌة على النظام الثنائً‬
‫الجمع ‪َ ، Adding‬‬
‫الطرح ‪Subtracting‬‬ ‫َتجري على النِظام الثنائً ال َعملٌات الحِسابٌة نفسها التً َتجري على النِظام العُشري ‪ ،‬مثل َعملٌة َ‬
‫ألضافة الى َعملٌات أخرى ُتدعى العملٌات المنطقٌة ‪ ، Logical Operation‬مثل عملٌة ‪AND,OR,NOT‬‬ ‫‪ ،‬وغٌرها من ال َعملٌات با ِ‬
‫وغٌرها‪....‬‬

‫‪Addition Arithmetic Operation‬‬ ‫عملٌة الجمع‬

‫أذا كان لدٌنا َعددان كل َعدد مكون من ‪ ، 4-bit‬لنرمز للعدد األول ‪ A‬أي ان هناك ‪ ، A3 A2 A1 A0‬ونرمز للعدد الثانً ‪ B‬أي أن هناك ‪B3‬‬
‫‪َ ،B2 B1 B0‬ستجري عملٌة الجمع بٌن العددٌن ‪ B + A‬كما َتجري َعملٌة َ‬
‫الجمع فً النِظام العُشري كما هو موضح فً الشكل ‪Figure 1.2‬‬

‫‪B3‬‬ ‫‪A3 Cin‬‬ ‫‪B2‬‬ ‫‪A2‬‬ ‫‪Cin‬‬ ‫‪B1‬‬ ‫‪A1 Cin‬‬ ‫‪B0‬‬ ‫‪A0‬‬

‫عملٌة جَ مع‬ ‫عملٌة جَ مع‬ ‫عملٌة جَ مع‬ ‫عملٌة جَ مع‬

‫‪cout‬‬ ‫‪cout‬‬ ‫‪cout‬‬

‫‪ S3 MSB‬محمل‬ ‫‪S2‬‬ ‫‪S1‬‬ ‫‪S0 LSB‬‬

‫‪Figure 1.2‬‬

‫عند أجراء عملٌة الجمع ‪ ،‬سنجمع الخانة ‪ B0‬مع الخانة ‪ ، A0‬ناتج الجمع الذي هو ‪ S0‬سوف نضعة فً خانة ‪ LSB‬واذا وجد محمل‬
‫)‪ Carry(cout‬سٌنتقل الى المرحلة التً تلٌها كما هو الحال فً النظام العشري ‪،‬ثم نجمع الخانة ‪ A1‬مع الخانة ‪ B1‬مع قٌمة المُحمل ‪ Cin‬الذي‬
‫هو نفسة المحمل القادم من المرحلة السابقة ‪ Cout‬أي ‪ Cin = Cout‬وهكذا ‪ ،‬عملٌة الجمع تتم بالطرٌقة التالٌة ‪،‬‬

‫‪cin‬‬ ‫‪cin‬‬ ‫‪cin‬‬ ‫‪cin‬‬


‫‪A3 A2 A1 A0‬‬
‫‪+‬‬
‫‪B3 B2 B1 B0‬‬
‫‪Carry‬‬ ‫‪S3‬‬ ‫‪S2 S1 S0‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 21‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الجـــــدول ‪ Table 1.6‬الذي ٌبٌُن حـــــاالت األدخال ‪ An ,Bn , Cin‬وحاالت األخــــــــراج‪ ،‬التً هً ناتج عملٌة الَجمع ‪Sum‬‬
‫الحظ َ‬
‫والمُحمل الخارج ‪، Cout‬‬

‫‪An‬‬ ‫‪Bn‬‬ ‫‪Cin‬‬ ‫‪Sum‬‬ ‫‪Cout‬‬


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

‫‪Table 1.6‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪1.6‬‬ ‫‪‬‬
‫أجمع العدد ‪ (0110)2‬مع العدد ‪ (0111)2‬؟‬
‫الحل‪:‬‬

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


‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬
‫‪+‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪Carry = 0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫أذن ناتج جمع العدد ‪ (6)10‬مع العدد ‪ (7)10‬هو العدد ‪ (13)10‬الذي ٌكافئة بالنظام الثنائً ‪(01101)2‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.7‬‬
‫أجمع العدد ‪ (1100)2‬مع العدد )‪ (0011‬؟‬
‫‪2‬‬

‫الحل‪:‬‬

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


‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪+‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪Carry = 0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫العدد ‪ (15)10‬الذي ٌكافئة بالنظام الثنائً ‪(01111)2‬‬ ‫‪10‬‬


‫العدد )‪ (3‬هو َ‬
‫‪10‬‬
‫العدد )‪ (12‬مع َ‬
‫أذن ناتج جمع َ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 20‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪Subtracting Using 2's Compliment‬‬ ‫الطرح بأستخدام المتمم الثانً‬

‫اذا أشترٌت حاسبة علمٌة ‪ Scientific Calculator‬أو أستخدمت الحاسبة العلمٌة المرفقة مع نظام التشغٌل ‪ ، Windows‬لتقوم بعملٌة‬
‫طرح َعددٌن ‪ ،‬وذلك كً توفر الوقت والعناء بجعل االله ‪ Machine‬تقوم بعملٌة الطرح عوضا ً عنك‪ ،‬الٌة الطرح فً هذه األجهزة تتم‬
‫باستخدام ال ُمتمم الثانً كما سنالحظة فً السطور التالٌة ‪ ،‬مثالً أذا أردت طرح العدد ‪ (13)10‬من العدد ‪ ، (5)10‬باستخدام الحاسبة العلمٌة ‪،‬‬
‫كما قلنا سابقا ً ان النظام الذي تتعامل معة اللالت الرقمٌة ‪ Digital Devices‬مثل الحاسبات العلمٌة والحاسبات االلكترونٌة ‪personal‬‬
‫‪ computer‬والمسٌطرات الدقٌقة ‪ ، Microcontroller‬هو النظام الثنائً ‪ ، binary System‬وذلك بوجود دوائر خاصة تقوم بعملٌة‬
‫الطــرح ‪ ،‬لنرى كٌف تتم عملٌة الطرح نقوم أوالً بتحول العدد ‪ (5)10‬الى النـــظام الثنائً سنــــجد أن مكافــــئ العــدد ‪ (5)10‬هو‬
‫‪ ،(0101)2‬ومكافــئ الــــعدد ‪ (13)10‬هو ‪ ، (1101)2‬أي أن العمــــلٌة التً نرٌد أن نجــــــرٌها هً )‪ ،(13 - 5‬أو )‪،(1101-0101‬‬
‫الطرٌقة المستخدمة فً عملٌات الطرح هو بأٌجاد المتمم الثانً ‪ 2's compliment‬للعدد المطروح ‪ ،‬بما أننا سنجد المتمم الثانً للعدد‬
‫‪ (5)10‬أو‪ (0101)2‬والذي نقصد فٌة اننا نجد سالب العدد ‪ (-5)10‬أو ‪ (1011)2‬لتصبح العملٌة ))‪ ، (13 + (-5‬أو )‪ ،(1101+1011‬أنظر‬
‫كٌف أن عملٌة الطرح أآلن أصبحت عملٌة جمع ‪ ،‬أي أن الدائرة التً تقوم بعملٌة الطرح هً نفسها التً تقوم بعملٌة جمع وهذة هً الغاٌة‬
‫من أستخدام المتمم الثانً ‪ ،‬الشكل ‪ٌ Figure 1.3‬وضح مخطط صندوقً ‪ Block Diagram‬لدائرة جمع و طرح باستخدام المتمم الثان‬

‫‪B3‬‬ ‫‪B2‬‬ ‫‪B1‬‬ ‫‪B0‬‬


‫طرح‪/‬جمع‬

‫عكس‬ ‫عكس‬ ‫عكس‬ ‫عكس‬

‫‪A2‬‬ ‫‪Cin‬‬ ‫‪A2‬‬ ‫‪Cin‬‬ ‫‪A1 Cin‬‬ ‫‪A0‬‬


‫إضافه واحد الى ‪LSB‬‬

‫دائرة جمع‪/‬طرح‬ ‫دائرة جمع‪/‬طرح‬ ‫دائرة جمع‪/‬طرح‬ ‫دائرة جمع‪/‬طرح‬

‫‪cout‬‬ ‫‪cout‬‬ ‫‪cout‬‬

‫‪Carry S3‬‬ ‫‪S2‬‬ ‫‪S1‬‬ ‫‪S0‬‬

‫‪Figure 1.3‬‬

‫تتم عملٌة طرح ‪ (13-5)10‬أو ‪ (1101 - 0101)2‬كما هو معتاد كأالتً ‪،‬‬

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


‫‪-‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪Carry‬‬ ‫‪xn‬‬ ‫‪xn x n xn‬‬

‫خطوات اٌجاد المتمم الثانً للعدد المطروح للتهٌئة ألجراء عملٌة الطرح ‪:‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 22‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫نجد اوالً المتمم الثانً للعدد ‪ (5)10‬أو ‪ (0101)2‬ألذي هو ‪(1011)2‬‬

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


‫‪+‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪Carry‬‬ ‫‪xn‬‬ ‫‪xn x n xn‬‬

‫بعد ذلك نجري عملٌة الجمع التً هً فً األصل عملٌة طرح؟!!‬

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


‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪Carry Omitted‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬

‫مالحظة ‪:‬‬

‫عند ظهور محمل ‪ carry‬فً المتمم الثنائً ‪ٌ 2's Compliment‬همل‪،‬‬

‫الناتج النهائً هو ‪ (1000)2‬أي ما ٌقابلة بالنظام العشري ‪ ، (8)10‬وهو فعالً ناتج عملٌة الطرح ‪، ) 13 – 5 )10‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.9‬‬
‫‪2‬‬ ‫‪2‬‬
‫أطرح العدد )‪ (0100‬من العدد )‪ (0101‬؟‬
‫الحل‪:‬‬
‫‪2‬‬ ‫‪2‬‬
‫العملٌة التً نرٌد ان نجرٌها هً )‪ )5-4‬أي ما ٌقابلها بالنظام الثنائً )‪(0101) - (0100‬‬

‫نجد المتمم الثانً للعدد ‪ (4)10‬لٌكون لدٌنا ‪)1100(2‬‬ ‫‪‬‬


‫‪10‬‬
‫)‪ (4‬مع العدد (‪)5‬‬ ‫‪10‬‬
‫نجمع متمم العدد‬ ‫‪‬‬

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


‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪Carry Omitted‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 23‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.10‬‬
‫أطرح العدد ‪ (0110)2‬من العدد ‪ (0011)2‬؟‬
‫الحل‪:‬‬
‫‪2‬‬ ‫‪2‬‬
‫العملٌة التً نرٌد ان نجرٌها هً )‪ )3-6‬أي ما ٌقابلها بالنظام الثنائً )‪(0011) - (0110‬‬
‫نجد المتمم الثانً للعدد ‪ (6)10‬لٌكون لدٌنا ‪)1010(2‬‬ ‫‪‬‬
‫‪10‬‬
‫)‪ (6‬مع العدد (‪)3‬‬ ‫‪10‬‬
‫نجمع متمم العدد‬ ‫‪‬‬

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


‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪No carry‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬

‫‪Carry State‬‬ ‫حالة المحمل‬


‫ال ُمحمل هو الخانة الثنائٌة ‪ Bit‬التً َتخرج من الخانة األكثر أهمٌة ‪ ، MSB‬هذا ال ُمحمل له فوائد كثٌرة منها على َسبٌل ال ِمثال ‪ ،‬عند ُمقارنة‬
‫َعددٌن و ُنرٌد معرفة أي ال َعدد هو االكبر ‪ ،‬لنأخذ مثالً العدد ‪ (4)10‬والعددة ‪ (5)10‬عند أجراء عملٌة الطرح التالٌة ‪،‬‬

‫‪Y=5-4‬‬

‫نقوم أوالً بأٌجاد المكافئ الثنائً لكن من العدد ‪ (4)10‬الذي هو ‪ (0100)2‬والعدد ‪ (5)10‬الذي هو ‪ ، (0101)10‬كما تعلمنا سابقا ً أن عملٌة‬
‫الطرح تتم بأستخدام المتمم الثانً ‪ ،‬أي اننا سنجد المتمم الثانً للعدد ‪ (4)10‬الذي هو ‪ (1100)2‬لتصبع العملٌة كاالتً‬

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


‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪Carry Omitted‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬

‫الحظ أن ناتج العملٌة هو ‪ (1)10‬وهو فعالً ناتج عملٌة طرح ‪ ، (5 - 4)10‬المُهم لدٌنا هو ظهور محمل وهذا ٌدل على أن العدد االول أكبر من‬
‫العدد الثانً ‪ ،‬لنجري عملٌة الطرح التالٌة‬

‫‪Y=4-5‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 24‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫نقوم أوالً بأٌجاد المكافئ الثنائً لكن من العدد ‪ (5)10‬الذي هو ‪ (0101)2‬والعدد ‪ (4)10‬الذي هو ‪، (0100)10‬ثم نجد ال ُمتمم الثانً للعدد‬
‫‪ (5)10‬الذي هو ‪ (1011)2‬لتصبع العملٌة كاألت‬

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


‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬
‫‪+‬‬
‫‪No carry‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬

‫الحظ أن ناتج العملٌة هو ‪ ، (1111)10‬هذا الناتج هو عدد سالب ‪ ،‬سنناقشة الحقا ٌ ‪ ،‬المهم لدٌنا هو عدم ظهور محمل وهذا ٌدل على أن العدد‬
‫االول أصغر من العدد الثانً ‪،‬‬

‫أستنتاج‪:‬‬

‫‪ ‬عند أجراء عملٌة طرح بٌن عددٌن ‪ ،‬فان المحمل ‪ٌ Carry‬ظهر عندما ٌكون العدد االول أكبر من العدد الثانً‪،‬‬
‫‪ ‬عند أجراء عملٌة طرح بٌن عددٌن ‪ ،‬فان المحمل ‪ Carry‬ال ٌظهر عندما ٌكون العدد االول أكبر من العدد الثانً‪،‬‬

‫‪Number in Computer's Memories‬‬ ‫األرقام داخل ذاكرة الحاسوب‬

‫لقد َتعلمنا مما َسبق أن أٌجاد ال ُمتمم الثانً ‪ ،‬معناة أٌجاد سالب ال َعدد ‪ ،‬مثالً ال َعدد ‪ (0110)2‬ال ُمتمم الثانً لة أو سالب ال َعدد هو ‪، (1010)2‬‬
‫كٌف ٌُمٌز الحاسوب بٌن ال َعدد ‪ (1010)2‬الذي هو ‪ (-6)10‬والعدد ‪ (1010)2‬الذي هو العدد ‪ (10)10‬؟؟؟‬ ‫َ‬ ‫السؤال الذي ٌتبادر الى ال ِذهن‬

‫ٌستطٌع الحاسوب ال َتمٌٌز بٌن ال َعددٌن ‪ٌَ ،‬ستخدم أسلوب األشارة وال ُمقدار بحٌث ٌُخصص الخانة ‪ MSB‬للشارة ‪ ،‬أي اذا كان ‪MSB‬‬
‫لكً َ‬
‫واحد فهذا ٌدل على ان العدد سالب ‪ ,‬أما اذا كان ‪ MSB‬صفر فهذا ٌدل على أن العدد موجب وحسب الجدول ‪،Table 1.7‬‬

‫عذد ثنائي‬ ‫الحالح‬ ‫الوكافئ تالوتون الثاني فقط للعذد السالة‬


‫‪000‬‬ ‫عدد موجب‬ ‫‪0‬‬
‫‪001‬‬ ‫عدد موجب‬ ‫‪1‬‬
‫‪010‬‬ ‫عدد موجب‬ ‫‪2‬‬
‫‪011‬‬ ‫عدد موجب‬ ‫‪3‬‬
‫‪100‬‬ ‫عددموجب‬ ‫‪-4‬‬
‫‪101‬‬ ‫عدد سالب‬ ‫‪-3‬‬
‫‪110‬‬ ‫عدد سالب‬ ‫‪-2‬‬
‫‪111‬‬ ‫عدد سالب‬ ‫‪-1‬‬

‫‪Table 1.7‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 25‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫العدد ‪ (0110)2‬هو َعدد موجب وال َسبب فً ذلك هو إن أخر بت ‪ bit‬على ِجهة الٌسار أي البت االكثر أهمٌة ‪ٌ MSB‬حمل القٌمة‬ ‫الحظ َ‬
‫صفر ‪ ،‬عندما َنجد ال ُمتمم الثانً للعدد )‪ (0110‬والذي هو )‪ ، (1010‬أنظر إلى الخانة ‪ Bit‬األكثر أهمٌة ‪ MSB‬أصبحت َتحمل القٌمة واحد‬
‫‪2‬‬ ‫‪2‬‬

‫مشٌرة بذلك الى إن العدد هو سالب ‪.. Negative‬‬

‫‪Overflow Condition‬‬ ‫حالة الطفحان‬

‫أن الوحدات المسؤولة عن عملٌة تخزٌن األرقام داخل األجهزة الرقمٌة تسمى المسجالت ‪ ، Registers‬تخٌل أن لدٌنا حاسبة علمٌة وحدات‬
‫الخزن الداخلـٌة لها عبارة عن مســـــــجل ‪ Register‬ذات ســـــــعة باٌت واحد ‪ ، 1-byte‬أي أن المســــــــجل ٌتقبل اعلى قٌمة له التً هً‬
‫‪ (1111 1111)2‬أي ما ٌقبلها بالنظام العشري ‪ ، (255)10‬نستنتج من ذلك أن إمكانٌة التخزٌن داخل االجهزة الرقمٌة محدودة ‪ ،‬تخٌل لو‬
‫أردنا جمع العدد ‪ 255‬مع العدد ‪ 1‬ماذا ٌحدث ؟؟؟‬

‫عملٌة الجمع ستكون ناتجها ‪ 256‬أي ما ٌقابلها بالنظام الثنائً ‪ ، (1 0000 0000)2‬لقد تجاوز الناتج العدد ال َمسموح ‪ ،‬الذي هو ‪، 255‬‬
‫فتظهر حالة الطفحان التً تسبب لنا تصفٌر المسجل ‪. Reset Register‬‬

‫أن حالة الطفحان اٌضا ً تظهر فً الحالة التالٌة ‪،‬عند تغٌر اشارة ناتج عملٌة حسابٌة مثالً عند جمع عددٌن موجبٌن وأصبح الناتج عدد سالب‬
‫تظهر حالة الطفحان ‪ ،‬أو عند جمع عددٌن سالبٌن واصبح الناتج عدد موجب فتظهر حالة الطفحان ‪ ،‬هذا النوع من الطفحان ٌسمى الطفحان‬
‫باألشارة ‪،‬‬

‫‪Examples‬‬ ‫أمثلة على الطفحان‬


‫ٌختلف الطفحان عند التحدث عن األرقام الموجـــبة فقط ( األرقام بدون إشارة ) ‪ Unsigned Numbers‬عنـــــــه فً األرقام بإشـــــارة‬
‫‪.Signed Numbers‬‬

‫لنأخذ مثال لنوضح فٌة عملٌة الفٌضان لنجمع العددٌن التالٌٌن ‪،‬‬

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


‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪Carry‬‬ ‫‪0 0‬‬ ‫‪0‬‬ ‫‪1‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬
‫عملٌة الجمع التالٌة تحتمل َتفسٌرٌن‪،‬‬

‫التفسٌر االول ‪:‬‬ ‫‪o‬‬

‫لنفرض أن ال َعددان )‪ُ (0001) ، (1111‬هما من َنوع األعداد بدون األشارة ‪ ، Unsigned Numbers‬أي أننا نرٌد َجمع َ‬
‫العدد ‪(15)10‬‬ ‫‪2‬‬ ‫‪2‬‬

‫موجب الذي هو ‪ (16)10‬وهو فعالً ما حدث حٌث ان الناتج هو ‪ ، (1 0000)2‬فً هذه الحالة ٌظهر‬ ‫َ‬ ‫العدد ‪ (1)10‬لٌكون الناتج عدد‬
‫مع َ‬
‫فٌضان ‪ Overflow‬من النوع االول الذي فٌة ٌتصفر الناتج ‪ ، Reset‬أما فٌضان ‪ Overflow‬باألشارة لٌم ٌظهر فً هذه الحالة‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 26‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫التفسٌر الثانً ‪:‬‬ ‫‪o‬‬

‫لنفرض أن العددان ‪ (0001)2 ، (1111)2‬هما من نوع األعداد بأشارة ‪ ، Signed Numbers‬أي أننا نرٌد جمع العدد ‪ (1111)10‬وهو‬
‫عدد سالب ‪ ،‬اذا وجدنا المتمم الثانً لة نجد انة ‪ ، (-1)10‬مع العدد ‪ (1)10‬لٌكون الناتج عدد موجب الذي هو ‪ (0)10‬وهو فعالً ما حدث‬
‫حٌث ان الناتج هو ‪ ، (0000)2‬والمحمل ٌهمل كما تعلمنا عند إجراء عملٌة الطرح باستخدام المتمم الثانً‪ ،‬فً هذه الحالة لم ٌظهر فٌضان‬
‫ال من النوع األول وال من النوع الثانً‪،‬‬

‫لنأخذ مثال أخر نوضح فٌة عملٌة الطفحان ‪،‬‬

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


‫‪0‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪+‬‬
‫‪No Carry‬‬ ‫‪0 1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬

‫عملٌة الجمع التالٌة تحتمل تفسٌر واحد الن كال العددان موجبان ‪ ، (0111)2، (0111)2‬الحظ أن الناتج هو عَدد سالب والسبب فً ذلك هو إن الخانة‬
‫االكثر أهمٌة ‪ MSB‬تحمل القٌمة واحد ‪ ،‬نتٌجة لذلك ٌظهر لدٌنا طفحان بأشارة ‪، Overflow‬‬

‫‪Hex. Decimal‬‬ ‫النظام السادس عشر‬

‫لقد كان ال ُمبرمجٌن َقدٌما ٌتناقلون برامجهم المكونة من سِ لسلسة من األصفار والواحدات عن طرٌق أوراق ‪ Sheets‬وذلك لبرمجة اجهزتهم ‪Devices‬‬
‫‪ ،‬أن الشكل ‪ٌ Figure 1.4‬وضح َمجموعة من األصفار والواحدات التً ٌتمثل َبرنامج مكتوب باللغة الثنائٌة او لغة الماكنة ‪،Machine Codes‬‬

‫شفرة ُثنائٌة‬
‫‪0000:11010001‬‬ ‫‪0101:11010001‬‬

‫‪0001:11010001‬‬ ‫‪0110:11010001‬‬

‫‪0010:01101101‬‬ ‫‪0111:01101101‬‬

‫‪0011:11001100‬‬ ‫‪1000:11001100‬‬

‫‪0100:11001101‬‬ ‫‪1001:11001101‬‬

‫‪Figure 1.4‬‬

‫هذا األسلوب أدى الى ظهور شوائب كثٌرة ‪ Bugs‬نتٌجة إخطاء فً عملٌة نقل البرنامج ‪ ،‬مما دفعهم الى إختراع نِظام جَ دٌد ٌَسهل َعملٌة ال َتحوٌل من‬
‫النِظام ُ‬
‫الثنائً الى النِظام الجدٌد ‪ ،‬وذلك لِصعوبة ال َتحوٌل من النِظام الثنائً الى النِطام ال ُعشري وبالعكس ‪ ،‬فظهر النظام السادس عشر ‪Hex.Decimal‬‬
‫‪ ،‬هذا النظام أساسة ‪ Radix‬هو ‪ ، 16‬األساس ستة عشر ٌعنً أن هذا الِنظام مكون من ستة عشر عدداً ‪ Digit‬ل َتمثٌل األعداد هً‬
‫‪ 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F‬حٌث إن ‪ A=10,B=11,C=12,D=13,E=14,F=15‬تسمى هذه األعداد ‪ Digits‬معامالت ‪ Coefficient‬النِظام‬
‫السادس عشر‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 27‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Hex.Decimal to Binary Conversion‬‬ ‫التَحويل من النِظام السادس َعشر إلى النِظام الثُنائي وبالعكس‬

‫بما أن ‪ 24=16‬أي ٌمكن تقسٌم العدد الثنائً الى مجامٌع ‪ Group‬كل مجموعة مكونة من ‪ 4-bit‬حسب الجدول ‪،Table 1.8‬‬

‫عذد ثُنائي‬ ‫الوكافئ تالنظام السادس عشز‬


‫‪0000‬‬ ‫‪0‬‬
‫‪0001‬‬ ‫‪1‬‬
‫‪0010‬‬ ‫‪2‬‬
‫‪0011‬‬ ‫‪3‬‬
‫‪0100‬‬ ‫‪4‬‬
‫‪0101‬‬ ‫‪5‬‬
‫‪0110‬‬ ‫‪6‬‬
‫‪0111‬‬ ‫‪7‬‬
‫‪1000‬‬ ‫‪8‬‬
‫‪1001‬‬ ‫‪9‬‬
‫‪1010‬‬ ‫‪A‬‬
‫‪1011‬‬ ‫‪B‬‬
‫‪1100‬‬ ‫‪C‬‬
‫‪1101‬‬ ‫‪D‬‬
‫‪1110‬‬ ‫‪E‬‬
‫‪1111‬‬ ‫‪F‬‬

‫‪Table 1.8‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.11‬‬
‫حول العدد ‪ (0001 0110)2‬الى النظام السادس عشر (؟)؟‬ ‫‪16‬‬

‫الحل‪:‬‬
‫‪2‬‬
‫نجزء العدد )‪ (0001 0110‬الى جزئٌن كل جزء مكون من ‪ ، 4-bit‬أي ‪ 0110‬و ‪ 0001‬ثم نجد مكافئ العدد ‪ 0110‬بالنظام السادس‬
‫عشر الذي هو ‪ ، 6‬ونجد مكافئ العدد ‪ 0001‬بالنظام السادس عشر الذي هو ‪ ، 1‬اذن مكافئ العدد ‪ (0001 0110)2‬هو ‪.)16(16‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.12‬‬
‫حول العدد ‪ (1110 1111)2‬الى النظام السادس عشر (؟)؟‬ ‫‪16‬‬

‫الحل‪:‬‬
‫‪2‬‬
‫نجزء العدد )‪ (1110 1111‬الى جزئٌن كل جزء مكون من ‪ ، 4-bit‬أي ‪ 1111‬و ‪ 1110‬ثم نجد مكافئ العدد ‪ 1111‬بالنظام السادس‬
‫عشر الذي هو ‪ ، F‬ونجد مكافئ العدد ‪ 1110‬بالنظام السادس عشر الذي هو ‪ ، E‬اذن مكافئ العدد ‪ (1110 1111)2‬هو ‪.)EF(16‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.13‬‬
‫حول العدد ‪ (2E)16‬الى النظام الثنائً (؟)؟‬ ‫‪2‬‬

‫الحل‪:‬‬
‫‪2‬‬ ‫‪16‬‬
‫نجزء العدد )‪ (2 E‬الى جزئٌن‪ ،‬أي ‪ E‬و ‪ 2‬ثم نجد مكافئ العدد ‪ E‬بالنظام الثنائً الذي هو )‪ ،(1110‬ونجد مكافئ العدد ‪ 2‬بالنظام‬
‫الثنائً الذي هو ‪ ،(0010)2‬اذن مكافئ العدد ‪ ( 2E)16‬هو ‪.)00101110(2‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 28‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ ‬مثال ‪1.13‬‬
‫حول العدد ‪ (AB)16‬الى النظام الثنائً (؟)؟‬ ‫‪2‬‬

‫الحل‪:‬‬
‫‪2‬‬ ‫‪16‬‬
‫نجزء العدد )‪ (AB‬الى جزئٌن‪ ،‬أي ‪ B‬و‪ A‬ثم نجد مكافئ العدد ‪ B‬بالنظام الثنائً الذي هو )‪ ،(1011‬ونجد مكافئ العدد ‪ A‬بالنظام‬
‫الثنائً الذي هو ‪ ،(1010)2‬اذن مكافئ العدد ‪ ( AB)16‬هو ‪.)10101011(2‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫بهذا أصبح للبرمجٌن نظام جدٌد ٌُسهل علٌهم التحوٌل من النظام الثنائً الى النظام السادس عشر ‪ ،‬مباشراً ‪ ،‬وسهل النقل ‪ ،‬أنظر للشفرة فً‬
‫الشكل ‪Figure 1.5‬‬

‫شفرة بألنِظام السادس َعشر‬


‫‪0: D 1‬‬ ‫‪5: D 1‬‬

‫‪1: D 1‬‬ ‫‪6: D 1‬‬

‫‪2: 6 D‬‬ ‫‪7: 6 D‬‬

‫‪3: C C‬‬ ‫‪8: C C‬‬

‫‪4: C D‬‬ ‫‪9: C D‬‬

‫‪Figure 1.5‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 29‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit two‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة الثانية‬

‫‪Programmable Devices Archetecture‬‬ ‫بنٌة األنظمة القابلة للبرمجة‬


‫األنظمة القابلة للبرمجة هً تلك االنظمة التً لها صٌغة محددة ومنظمة ‪ ،‬والتً ٌعتمد عملها اعتماداً كبٌراً على مجموعة تعلٌمات تصاغ‬
‫بطرٌقة معٌنة‪ٌ ،‬تم نخزٌنها داخل تلك االنظمة الد اء مهام معٌنة ‪،‬ولكً نفهم مبدء عمل هذه االنظمة دعنا نلقً نظرة على انواع االنظمة‬
‫الرقمٌة االلكترونٌة ‪،‬‬

‫‪Hard wire connection‬‬ ‫‪ o‬أنظمة الربط الصلب‬

‫وهً األنظمة المعتمدة على ربط َمجموعة من الرقائق الرقمٌة ‪ Chips‬لتأدٌة مهمة معٌنة‪....‬‬

‫‪Programmable System‬‬ ‫‪ o‬االنظمة القابلة للبرمجة‬

‫وهو ِنظام ر َقمً ذو صٌغة ُمحددة وم َنظمة‪ٌ،‬تكون من ‪،‬‬

‫)‪Central processing unit (CPU‬‬ ‫‪ o‬وحدة معالجة َمركزٌة‬


‫‪ o‬ذاكرة ‪Memory‬‬
‫‪ o‬وحدات إدخال‪،‬وحدات أخراج ‪Input and Output Unit‬‬

‫الشكل ‪ٌ Figure 2.1‬وضح المخطط الصندوقً ‪ block diagram‬للنظام القابل للبرمجة ‪Programmable Device‬‬

‫‪Input Unit‬‬ ‫‪CPU‬‬ ‫‪Output Unit‬‬

‫‪Memory‬‬
‫‪Unit‬‬

‫‪Figure 2.1‬‬
‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 31‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬
‫‪CPU Function‬‬ ‫وضٌفة وحدة المعالجة المركزٌة‬
‫تقوم و ُحدة المعالحة المركزٌة ‪ CPU‬بجلب وتنفٌذ البرنامج المخزن فً الذاكرة ‪ Memory‬او بصٌغة اخرى وضع ال َتعلٌمة المخزنة فً‬
‫الذاكرة ‪ Memory‬قٌد التنفٌذ ‪ ،‬وذلك لتأدٌة المهمة المطلوبة من قبل شرٌحة المسٌطر الدقٌق ‪ ، Microcontroller‬لكً ٌنفذ المعالج ‪CPU‬‬
‫التعلٌمة المخزنة فً الذاكرة ‪ Memory‬فأنة ٌمر بمرحلتٌن او دورتٌن‬

‫‪ -0‬مرحلة الجلب ‪Fetching cycle‬‬


‫‪ -2‬دورة التنفٌذ ‪Execution cycle‬‬

‫‪Fetching cycle‬‬ ‫دورة الجلب‬


‫ٌقوم المعالج ‪ CPU‬خالل هذه الفترة بجلب التعلٌمة المخزنة فً الذاكرة ‪ ، Memory‬وذلك عن طرٌق عنونة الموقع المطلوب من الذاكرة‬
‫باستخدام عداد خاص ٌدعى عداد الرنامج )‪ ، PC(program counter‬عند بداٌة التشغٌل ٌحمل العداد ‪ PC‬القٌمة صفر ‪ ،‬أي انة ٌؤشر على‬
‫الموقع االول من الذاكرة ‪ ،‬ثم تنقل محتوٌات هذا الموقع الى مستوعب(سجل) خاص ‪ٌ special register‬دعى سجل التعلٌمة التعلٌمة‬
‫)‪ ، instruction Register(IR‬وذلك لتهئٌة التعلٌمة ‪ instruction‬لكً ٌتم تمٌٌزها وتنفٌذها ‪ ،‬وبعد أن تنفذ التعلٌمة ٌزداد عداد البرنامج ‪PC‬‬
‫بمقدار واحد وذلك لكً ٌؤشر الى الموقع التالً ثم تنقل محتوٌات الموقع الى سجل ‪ IR‬ثم ُتمٌز التعلٌمة وتتكرر هذه العملٌة الى ان ٌنتهً‬
‫البرنامج‪ ،‬اذن دورة الجلب تتم كاالتً‬

‫‪ o‬نقل محتوٌات عداد البرامج ‪ PC‬الى الذاكرة ‪ memory‬لكً ٌؤشر الموقع المطلوب ‪desiresd location‬‬
‫‪ o‬نقل محتوٌات الذاكرة ‪ Memory‬الى سجل التعلٌمة ‪IR‬‬

‫الشكل ‪ٌ Figure 2.2‬وضع الترابط بٌن سجل التعلٌمة ‪ ، IR‬وعداد البرنامج ‪ ، PC‬والذاكرة ‪Memory‬‬

‫‪PC: program counter‬‬

‫‪PC‬‬ ‫‪Memory‬‬

‫"‪"Program‬‬

‫‪IR: instruction register‬‬ ‫‪IR‬‬

‫‪Figure 2.2‬‬

‫‪Execution cycle‬‬ ‫دورة التفٌذ‬


‫تبدء هذه الدورة بعد ان تنتهً دورة الجلب ‪ ، fetch cycle‬تقوم هذه الدورة بأخذ التعلٌمة من سجل التعلٌمة ‪ ، IR‬وتنقل هذه التعلٌمة الى‬
‫دوائر خاصة لكً ٌتم الكشف عن التعلٌمة والتعرف علٌها وتنفٌذها ‪ ،‬أي بأختـــصار تقوم دورة التنفٌذ بتفـــــــٌذ التعلٌمة ‪ ،‬الشكــــــــــل‬
‫‪ٌ Figure 2.3‬وضح وحدة التنفٌذ ‪ execution unit‬مع وحدة الجلب ‪fetching unit‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 30‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪PC: program counter‬‬

‫‪PC‬‬ ‫‪Memory‬‬

‫"‪"Program‬‬

‫‪IR: instruction register‬‬ ‫‪Execution‬‬


‫‪IR‬‬
‫‪Unit‬‬

‫‪Figure 2.3‬‬

‫تتنوع التعلٌمات ‪ instruction‬حسب طبٌعة الوضٌفة التً تؤدٌها ‪ ،‬أي ٌمكن تقسٌم التعلٌمات الى مجامٌع‬

‫‪arethmatic instruction‬‬ ‫‪ o‬مجموعة التعلٌمات(االٌعازات) الحسابٌة‬


‫‪moving instruction‬‬ ‫‪ o‬مجموعة اٌعازات النقل‬
‫‪jump instruction‬‬ ‫‪ o‬مجموعة اٌعازات القفز‬

‫تسمى مجموعة االٌعازات هذه بطقم التعلٌمات ‪ ، instruction set‬سٌتم شرح هذه االٌعازات بشكل مفصل فً فصول الحقة ‪ ,‬غالب‬
‫ال َتعلٌمات التً تنفذ من قبل وحدة ال ُمعالجة ال َمركزٌة هً تعلٌمات حسابٌة ‪ ،‬تحتاج هذه التعلٌمات الحسابٌة الى دوائر جمع وطرح ودائر منطقٌة‬
‫‪ logic circuit‬الداء الوضائف المنطقٌة مثل ‪ And,Or,Not‬الوحدة المسؤولة عن اجراء هذه العملٌات هً وحدة ال ِحساب وال َمنطق‬
‫)‪ALU(arithmetic and logic unit‬‬

‫‪Arithmatic and logic unit‬‬ ‫وحدة الحساب والمنطق‬

‫وهً الوحدة المسؤولة عن إجراء العملٌات الحسابٌة والمنطقٌة ‪ ،‬تحتوي هذه الوحدة كما قلنا على مجموعة دوائر جمع ‪ ،‬طرح ‪ ،‬دوائر منطقٌة‬
‫الجراء العملٌات المنطقٌة ‪ ،‬فً الحقٌقة ترتبط مع هذه الوحدة مجموعة مساحات خزنٌة صغٌرة تدعى ‪ ، Register File‬لنوضح فكرة‬
‫‪ ، Register file‬لنفرض انً أردت منك أن تجري العملٌة ‪ ، 5+6‬أنت عرفت أن العملٌة جمع وذلك لوجود اشارة )‪ (+‬هذا الجزء ٌسمى‬
‫االٌعاز ‪ ، instruction‬سٌقوم عقلك بالتهٌئة الجراء عملٌة الجمع ‪ ،‬لنفرض أن فً عقلك وحدة الحساب والمنطق ‪ ALU‬هً التً ستقوم‬
‫بالعملٌة‪ ،‬االٌعاز وحدة ال ٌكفً الجراء عملٌة الجمع ‪ ،‬فأنت تحتاج الى معامالت ‪ Operand‬هذه المعامالت هما العددان )‪ (5),(6‬اللذان‬
‫سٌجمعان فً وحدة الحساب والمنطق ‪ ،‬بعد ان تتم عملٌة الجمع تقوم وحدة ‪ ALU‬بخزن الناتج فً ‪ ،Register file‬أذن ‪ Register file‬تخزن‬
‫معامالت الرٌاضٌة التً سٌتم معالجتها وكذلك النواتج من وحدة ‪ ،ALU‬كذلك ‪ Register file‬تستخدم فً وظائف أخرى ‪ ،‬مثالً تخصص مواقع‬
‫معٌنة لخزن البٌانات ‪ Data‬القادمة من أطراف االدخال ‪ ،‬او تخصٌص مواقع ترتبط مباشره مع وحدات االخراج ‪ ،‬بحٌث انً أي قٌمة تحملها‬
‫هذه المواقع ستظهر على وحدات االخراج ‪ ،‬الشكل ‪ٌ Figure 2.4‬وضح وحدة الحساب والمنطق ‪ ALU‬مع ‪، Register file‬‬

‫‪Input/output‬‬

‫‪Register‬‬ ‫‪ALU‬‬
‫‪File‬‬

‫‪Figure 2.4‬‬
‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 32‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬
‫‪Control unit‬‬ ‫وحدة السٌطرة‬

‫السؤال الذي ٌتبادر الى الذهن ما هً الدائرة المسؤلة عن ؟‬

‫نقل محتوٌات العداد ‪ PC‬الى السجل الخاص بتحدٌد عنوان الذاكرى ‪ memory‬والذي هو‬ ‫‪o‬‬
‫السجل )‪MAR(memory address register‬‬
‫نقل محتوٌات الذاكرة ‪ Memory‬الى سجل التعلٌمة ‪IR‬‬ ‫‪o‬‬
‫زٌادة محتوى العداد ‪ PC‬وذلك لكً ٌؤشر الى الموقع التالً من الذاكرة ‪next location of memory‬‬ ‫‪o‬‬
‫فك شفرة التعلمٌة وتنفٌذها ‪ execution and decoding‬فً وحدة الحساب والمنطق او أي وحدة اخرى ‪،‬‬ ‫‪o‬‬

‫فً الحقٌقة الوحدة المسؤلة عن هذه العملٌات هً وحدة السٌطرة ‪ ، Control Unit‬واحٌانا ً تسمى وحدة تولٌد دورة الماكنة ‪Machine‬‬
‫‪ ، cycle generation‬وحدة السٌطرة ترسل اشارات سٌطرة ‪ Control Siginal‬الى باقً وحدات وحدة المعالجة المركزٌة ‪ ، CPU‬وذلك‬
‫لكً تضمن التزامن ‪ Synchronization‬فً عمل هذه الوحدات الشكل ‪ٌ Figure 2.5‬بٌن مخطط لوحدة تولٌد دورة الماكنة‪،‬‬

‫‪t4‬‬ ‫‪t3‬‬ ‫‪t2‬‬ ‫‪t1‬‬

‫‪Frequncy‬‬
‫‪Machine cycle generation‬‬
‫‪OSCILLATOR‬‬

‫‪Figure 2.5‬‬

‫وحدة السٌطرة(وحدة تولٌد دورة الماكنة) تحتً على اربع اشارات ‪ Siginal‬أو أكثر حسب نوع المعالج ‪ ، Processor‬هذه االشارات تسمى‬
‫‪، t1,t2,t3,t4‬عند اول نبظة للمذبذب ‪ ،Oscillator‬فأن وحدة السٌطرة ترسل اشارة فقط عبر ‪ t1‬اما بقٌة االشارات تكون غٌر مفعلة ‪،‬‬
‫تستخدم هذه االشارة لنقل محتوٌات عداد البرنامج ‪ PC‬الى وحدة الذاكرة ‪ ، Memory‬عندما تأتً النبظة الثانٌة من المذبذب فأن وحدة‬
‫السٌطرة ترسل اشارة فقط عبر ‪ t2‬كذلك بقٌة االشارات تكون غٌر مفعلة ‪،‬تستخدم هذه االشارة لنقل محتوٌات وحدة الذاكرة ‪ memory‬الى‬
‫سجل التعلٌمة ‪ ،‬عندما تأتً النبظة الثالثة من المذبذب فأن وحدة السٌطرة ترسل اشارة فقط عبر ‪ t3‬وتكون بقٌة االشارات غٌر مفعلة ‪،‬تستخدم‬
‫هذه االشارة لزٌادة محتوٌات عداد البرنامج ‪ pc‬بواحد ولذلك لكً ٌؤشر الى الموقع التالً من الذاكرة ‪ ،‬وسبب زٌادة عداد البرنامج خالل‬
‫الفترة ‪ t3‬هو عندما تأتً ‪ t1‬خالل الدورة التالٌة الجدٌدة ‪ ،‬فانة العداد ‪ PC‬سٌكون مؤشر الى الموقع التالً و حٌث أن ‪ t1‬تقوم بنقل محتوٌات‬
‫العداد ‪ PC‬الى موقع الذاكرة ‪ memory‬لكً ٌتم تحدٌد موقع الذاكرة الذي عنوانة هو محتوٌات العداد ‪ ،PC‬عندما تأتً النبظة الرابعة من‬
‫المذبذب فأن وحدة السٌطرة ترسل اشارة فقط عبر ‪ t4‬وتكون بقٌة االشارات غٌر مفعلة ‪،‬تستخدم هذه الفترة لفك شفرة التعلٌمة وتنفٌذها وحدة‬
‫السٌطرة هذه مبسطة فً الحقٌقة تحتاج فك شفرة التعلٌمة وتنفٌذها اكثر من فترة زمنٌة ‪ ، t‬عندما تأتً النبظة الخامسة من المذبذب فأن وحدة‬
‫السٌطرة ترسل اشارة فقط عبر ‪ t1‬وبقٌة االشارات غٌر مفعلة ‪ ،‬أي تعاد الدورة من جدٌد ‪ ،‬أذن نستنتج من ذلك ان كل اربع نبظات من‬
‫المذبذب تنفذ تعلٌمة كاملة ‪ ،‬وكلما زادت سرعة المذبذب زادت سرعة تعاقب الفترات الزمنٌة ‪ ، t‬الجدول ‪ٌ Table 2.1‬وضح فترات ‪time‬‬
‫وحدة السٌطرة‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 33‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪ T1‬الوذتذب‬ ‫‪T2‬‬ ‫‪T3‬‬ ‫‪T4‬‬ ‫العوليح خالل الفتزج الزهنيح الوفزدج ‪T‬‬ ‫الحالح‬
‫النبضة ‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫دورة ماكنة االولى ‪ ,‬نتيجتها تنفيذ تعليمة كاملة نقل محتوٌات عداد البرنامج الى وحدة الذاكرة ‪0‬‬
‫النبضة ‪2‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫نقل نقل محتوٌات الذاكرة الى سجل التعلٌمه‬
‫النبضة ‪3‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫زٌادة محتوٌات عداد البرنامج بواحد‬
‫النبضة ‪4‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫فك شفرة التعلٌمة وتنفٌذها‬
‫النبضة ‪5‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫دورة ماكنة الثانية ‪ ,‬نتيجتها تنفيذ تعليمة كاملة نقل محتوٌات عداد البرنامج الى وحدة الذاكرة ‪0‬‬
‫النبضة ‪6‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫نقل نقل محتوٌات الذاكرة الى سجل التعلٌمه‬
‫النبضة ‪7‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫زٌادة محتوٌات عداد البرنامج بواحد‬
‫النبضة ‪8‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫فك شفرة التعلٌمة وتنفٌذها‬
‫ما ال نهاٌة‬

‫‪Table 2.1‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪2.1‬‬ ‫‪‬‬

‫مذبذب ‪ oscillator‬ذو تردد ‪ 1 KHZ‬ربط الى معالج دورة الماكنة تستغرق اربع فترات زمنٌة لكً ٌتم تنفٌذ تعلٌمة واحدة فما هو الوقت‬
‫الذي تستغرقة التعلٌمة الواحدة لكً تنفذ وما هو عدد التعلٌمات التً ٌمكن تنفٌذها فً الثانٌة الواحدة ؟‬

‫الحل‪:‬‬

‫بما أن التردد مقلوب الزمن أي‬

‫‪Time‬‬

‫أي أن الزمن‬

‫‪Time‬‬

‫أي أن النبظة ‪ t‬تسترق فترة زمنٌة مقدارها ‪ 0.001‬من الثانٌة ‪ ،‬اذن اربع نبظات تستغرق ‪ 4×0.001 = 0.004‬من الثانٌة ‪ ،‬أي ان فترة‬
‫تنفٌذ تعلٌمة واحد هً ‪ 0.004‬من الثانٌة ‪ ،‬اما عدد التعلٌمات التً ٌمكن تنفٌذه فً الثانٌة الواحده هً ‪،‬‬

‫‪Num. of instruction per second‬‬

‫عدد التعلٌمات التً تنفذ فً الثانٌة الواحدة هً ‪ 250‬تعلٌمة فً الثانٌة‪،‬‬

‫‪Num. of instruction per second‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 34‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ ٌوضع المخطط الصندوقً مفصل‬Figure 2.7 ‫ أما الشكل‬، CPU ‫ ٌوضع المخطط الصندوقً نموذجً مبسط للمعالج‬Figure 2.6 ‫الشكل‬
‫ وكذلك‬، ‫ ساتطرق لها فً مواضٌع الحقة انشاء هللا لم اضٌفها هنا وذلك لتسهٌل عملٌة الفهم‬Stack ‫ هناك وحدة المكدس‬CPU ‫للمعالج‬
، ‫لتسلسل االفكار‬

CPU
Program Memory Program
Address Instruction Address Bus Counter
0x0 0000 0010

0x1 0010 0011 Instruction Register


Data Bus
0x2 0011 XXXX
Decoder Logic
Etc Etc

Execution Logic

Control Signals

Figure 2.6

PC: program counter Input/output

Memory
PC
"Program" Register ALU
File

IR: instruction register


Execution
IR
Unit

t1 t2 t3 t4
Control unit
Oscillator

Figure 2.7

‫ ) ـــــــــــــــــــ‬35 ( ‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬ Microcontroller ‫المسٌطر الدقٌق‬


‫الحظ ان وحدة التنفٌذ ‪ execution unit‬ترسل اشاراة الى وحدة ‪ ، ALU‬وذلك لكً تخبر ‪ ALU‬بنوع العملٌة التً سٌتم تنفٌذها داخل وحدة‬
‫‪ ، ALU‬وكذلك وحدة التنفٌذ ترسل اشارة الى ‪ Register file‬وذلك لتحدٌد عنواٌن السجالت المراد اجراء العملٌه علٌها وارسالها الى وحدة‬
‫‪ ، ALU‬كما ترسل وحدة التنفٌذ ‪ execution unit‬اشارات الى أطراف االدخال واالخراج وذلك لتهٌئتها لعملٌة ادخال البٌانات ‪ Data‬او‬
‫اخراجها ‪ ،‬من الشكل اعالة تالحظ كذلك هناك ثالث انواع من النواقل البٌانات ‪ Buses‬هً‬

‫‪ o‬ناقل العناوٌن ‪ : Address Bus‬وهو الناقل الذي ٌنقل عناوٌن ‪ ، Address‬مثل الناقل الذي ٌربط عداد البرنامج ‪ PC‬بوحدة الذاكرة ‪،‬‬
‫‪ o‬ناقل البٌانات ‪ : Data Bus‬هو الناقل الذي ٌنقل البٌانات ‪ ، Data‬مثل الناقل الذي ٌربط وحدة الذاكرة مع سجل التعلٌمة ‪ ، IR‬وكذلك‬
‫الناقل الذي ٌربط وحدة ‪ ALU‬مع ‪، Register file‬‬
‫‪ o‬نواقل السٌطرة ‪ : Control Buss‬وهو الناقل الذي ٌرسل اشارات السٌطرة لٌضمن عمل وتزامن الوحدات االخرى ‪ ،‬مثل هذه‬
‫االشارات هً إشارات وحدة السٌطرة ‪ ، t1,t2,t3,t4‬إشارات السٌطرة موضحة فً الشكل اعالة بشكل اسهم ‪Arrow‬‬

‫لكً ٌؤدي ‪ CPU‬عملة ‪ٌ ،‬حتاج الى توجٌة ‪ ،‬عملٌة التوجٌة تتم عن طرٌق سلسلة من أالوامر ‪ُ instruction‬تسمى برنامج ‪ ..‬هذا البرنامج‬
‫َ‬
‫ٌخزن داخل ذاكرة ‪..... memory‬‬

‫‪Memory‬‬ ‫وحدة الذاكرة‬


‫وهً الوحدة التً ٌخزن فٌها البرنامج الذي سٌنفذ من قبل وحــــدة المعالجة المــــركزٌة ‪ ،CPU‬وهناك نوعان رئٌسٌان من الذواكرة‬

‫)‪RAM(Random Access memory‬‬ ‫‪ -0‬ذاكرة الولوج العشوائً‬


‫وهً ذاكرة تفقد معلوماتها بعد انقطاع التٌار الكهربائً عنها ‪ ،‬عادة تستخدم لخزن البٌانات او المعطٌات التً تعالج من قبل وحدة المعالجة‬
‫المركزٌة ‪.CPU‬‬

‫)‪ROM(Read only memory‬‬ ‫‪ -2‬ذاكرة القراءة فقط‬


‫وهً ذاكرة ال تفقد معلوماتها حتى بعد انقطاع التٌار الكهربائً عنها وهً على أنواع أهما ذاكرة ‪ ، EPROM‬وهً ذاكرة قابلة لل َمسح‬
‫وتحتفظ ببٌاناتها حتى بعد انقطاع مصدر التغذٌة عنها ‪ ،‬لذلك تستخدم هذه الذاكرة لخزن البرنامج ‪..Program‬‬

‫‪Internal Structure of Memory‬‬ ‫البنية الداخلية للذاكرة‬


‫تتكون الذاكرة بصورة عامة من مجموعة مواقع ‪ locations‬لكل موقع من هذه المواقع عنوان محدد ‪ ،Address‬عن طرٌق هذا العنوان‬
‫ٌمكن الوصول الى الموقع المطلوب واخذ البٌانات من الموقع المحدد‪ٌُ ،‬رسل العنوان عن طرٌق ناقل العناوٌن ‪ ، adrdress bus‬تخرج‬
‫البٌانات المطلوبة ‪ Data‬من الذاكرة عن طرٌق ناقل ٌسمى ناقل البٌانات ‪ data Bus‬كما اشرنا الٌة سابقا ً ‪،‬كما أن هناك اشارات تستخدم‬
‫لتحدٌد العملٌة التً تجري على الذاكرة مثل اشارة ‪ Write‬التً تعنً بها اننا نرٌد خزن المعلومات داخل الذاكرة ‪ ،‬واشارة ‪ Read‬التً نعنً‬
‫بها أننا نرٌد قراءة محتوٌات الذاكرة ‪ ،‬الشكل ‪ٌ Figure 2.8‬وضح المخطط الصندوقً النموذجً للذاكرة‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 36‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Location 0‬‬
‫‪10-bit‬‬
‫‪Location 1‬‬
‫‪Address Bus‬‬
‫‪Location 2‬‬

‫‪Write‬‬

‫‪Read‬‬
‫‪Location 1024‬‬

‫‪8-bit‬‬

‫)‪Data Bus(Data Out‬‬

‫‪Figure 2.8‬‬

‫كما أن هناك عالقة بٌن عدد البتات لناقل العناوٌٌن وعدد مواقع الذاكرة التً هً ‪،‬‬

‫‪Number of Locations= 2Number of bits of Address Bus‬‬

‫مثالً اذا عدد بتات ناقل العناوٌن ‪ 14-bit‬فأن عدد المواقع هو ‪ 1024‬موقع ‪،‬‬

‫= ‪Number of Locations= 210-bit‬‬

‫‪Von-Neumann vs Harvard structure‬‬ ‫بنية فون نيومان وبنية هارفارد‬


‫تقسم الذاكرة حسب نوع البٌانات المخزنة الى قسمٌن‪،‬‬

‫‪program memory‬‬ ‫‪ o‬ذاكرة البرنامج‬


‫‪data memory‬‬ ‫‪ o‬ذاكرة المعطٌات‬

‫قد اقترح العام ‪ Von-Neumann‬على أن البرنامج ‪ Program‬والمعطٌات ‪، Data‬تقع فً نفس رقاقة الذاكرة ‪ ،‬هذا النظام متبع فً‬
‫الحواسٌب الشخصٌة ‪ ، Personal computer‬أما العالم ‪ Harvard‬أقترح على أن البرنامج ‪ Program‬والمعطٌات ‪ Data‬مفصولة عن‬
‫بعضهما البعض ‪ ،‬أي أن كل قسم ٌقع على رقاقة ‪ ،‬هذا النظام متبع فً المسٌطرات الدقٌقة ‪ ، Microcontroller‬الشكل ‪Figure 2.9‬‬
‫ٌوضح ذلك ‪....‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 37‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Data‬‬
‫‪Program‬‬ ‫‪Data‬‬ ‫‪Memory‬‬
‫‪Memory‬‬ ‫‪CPU‬‬ ‫‪Memory‬‬ ‫‪and‬‬
‫‪CPU‬‬
‫‪8-bit‬‬ ‫‪14-bit‬‬ ‫‪Program‬‬
‫‪8-bit‬‬ ‫‪memory‬‬

‫‪Harvard‬‬
‫‪Von-Neumann‬‬
‫‪Figure 2.9‬‬

‫مالحظة ‪:‬‬

‫ذاكرة البرنامج ‪ program memory‬هً الذاكرة التً ٌخزن فٌها التعلٌمات ‪ ، sinstruction‬وذاكرة البٌانات ‪ ، Data memory‬هً‬
‫الذاكرة التً تخزن فٌها المعطٌات ‪ Operand‬او المعامالت المراد معالجتها ‪ ،‬وغٌرها من البٌانات الضرورٌة ‪ ،‬مثالً تخزٌن القٌم ثابتة مثل‬
‫النسبة الثابتة ‪ π‬التً قٌمته ‪ 3.14‬وذلك لالستفادة منها اثناء معالجة البرنامج ‪،‬‬

‫‪Input Unit‬‬ ‫وحدة األدخال‬


‫وهً الوحدة التً من خاللها ‪ ،‬تدخل االشارات الرقمٌة ‪ Digital Siginal‬او البٌانات ‪ Data‬الى النظام وذلك لالستفادة من هذه البٌانات‬
‫ومعالجتها‪ ،‬أشارات االدخال ممكن أن تأتً من متحسسات ‪ Sensors‬أو مفاتٌح ‪ ، Switch‬او من وحدات التحوٌل التماثلً الى الرقمً‬
‫)‪ Analog to Digital Converter (ADC‬الشكل ‪ٌ Figure 2.10‬وضح تركٌب مبسط لوحدة االدخال ‪ ،‬الحظ أن البٌانات الداخلة تخزن‬
‫فً ‪، File Register‬‬

‫‪CPU‬‬
‫‪Control‬‬ ‫‪ALU‬‬
‫‪Unit‬‬

‫‪ADC‬‬
‫‪Data In‬‬ ‫‪Data In‬‬ ‫‪File Register‬‬

‫‪Figure 2.10‬‬

‫‪Output Unit‬‬ ‫وحدة االخراج‬


‫وهً الوحدة التً من خاللها ‪ ،‬تخرج االشارات الرقمٌة ‪ Digital Siginal‬او البٌانات ‪ Data‬من النظام الى وحدات االخراج مثل الثنائٌات‬
‫الباعثة للضوء ‪ LED‬او العارضات ذات السبع قطع ‪ ،7 Segmint‬او االشارات الرقمٌة ممكن أن تربط الى محوالت الرقمٌة الى تماثلٌة‬
‫)‪ Digital to Analog Converter(DAC‬وذلك لتغذٌة وحدات اخراج تعمل على االشارات التماثلٌة ‪ ،‬الحظ فً الشكل ‪Figure 2.11‬‬
‫البٌانات الخارجة تخزن فً ‪، File Register‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 38‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪CPU‬‬
‫‪Control‬‬ ‫‪ALU‬‬
‫‪Unit‬‬
‫‪7 Seg.‬‬
‫‪Decoder‬‬
‫‪File Register‬‬ ‫‪Data Out‬‬
‫‪Driver‬‬

‫‪Figure 2.11‬‬

‫فً المسٌطرات الدقٌقة ‪ Microcontroller‬تجد منفذ واحد ٌستخدم فً عملٌات االدخال وفً عملٌات االخراج ‪ ،‬عند التعامل مع هذه المنافذ‬
‫‪ٌ ،‬جب اوالً تهٌئة المنفذ ‪ ، Configuring the ports‬أي اخبار المنفذ هل هو منفذ ادخال أو منفذ أخراج أوجزء منه أدخال والجزء االخر‬
‫اخراج حسب متطلبات الحاجة ‪ ،‬عادة ٌوجد موقع خاص ضمن ‪ File Register‬هذه الموقع تستطٌع من خالله تحدٌد نوع المنفذ ‪ ،‬الحظ‬
‫الشكل ‪Figure 2.12‬‬

‫‪CPU‬‬
‫‪Control‬‬ ‫‪ALU‬‬
‫‪Unit‬‬
‫‪Data In/Out‬‬

‫‪File Register‬‬
‫‪Direction‬‬

‫‪Figure 2.12‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 39‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit three‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة الثالثة‬

‫‪PIC16f84A‬‬ ‫بنٌة المسٌطر الصغري‬


‫ُمقدمة‪:‬‬

‫نتعرف على بُنٌة المُسٌطر الصغري ‪ Architecture of Microcontroller‬وعلى َتنظٌم ذاكرة المُسٌطر الصغري‬ ‫سوف َ‬
‫َ‬ ‫فً هذه الوحدة‬
‫‪ ، Memory Organization‬كما سنتعرف من خالل هذة الوحدة على كٌفٌة تهٌئة المسٌطر الصغري للعمل ‪ ،‬أرجوا من القارء ال َكرٌم‬
‫قراءة هذه الوحدة ب َتركٌز ‪ ،‬ألن هذه الوحدة ُتعتبر أساس الفهم ال َ‬
‫صحٌح ل َبرمجة المُسٌطر ال َدقٌق و عملة ‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 41‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫المسيطر الصغري ‪ Microcontroller‬؟‬
‫ما هو ُ‬
‫المسٌطر الدقٌق ‪ Microcontroller‬عبارة عن شرٌحة الكترونٌة ‪ ، Chip‬مضمنة ‪ Embedded‬داخل منظومة ‪ system‬أو دائرة لتأدٌة‬
‫وظائف معٌنة ‪ٌُ ،‬ستخدم المسٌطر الدقٌق فً حٌاتنا الٌومٌة بشكل واسع مثل ؟‬

‫‪Video Games‬‬ ‫أجهزة االلعاب الالكترونٌة‬ ‫‪o‬‬


‫‪Split, Air-conditions‬‬ ‫أجهزة الكهربائٌة مثل‬ ‫‪o‬‬
‫‪Digital Clocks‬‬ ‫األجهزة المكتبٌة مثل‬ ‫‪o‬‬
‫‪PID,PLC‬‬ ‫أجهزة السٌطرة الرقمٌة‬ ‫‪o‬‬

‫ٌتوفر المُسٌطر ال َدقٌق فً السوق ب َشكل دائرة متكاملة )‪ ، integrated circuit (IC‬بأبعاد عدة سنتٌمترات ‪ ، Centimeter‬الشــــــكل‬
‫‪ٌ Figure 3.1‬وضح شرٌحة مُســـــٌطر َدقٌق ‪ٌ ،‬وجـــد داخـل هـــــــذه الدائـرة المــتكــاملة ‪ ، IC‬معالج ‪، Processor‬‬
‫وذاكــرة لخزن البرنامج ‪ ،‬وتحـــتوي على أطراف ألدخـــــال وأخراج البٌانات ‪ Data‬او‬
‫االشـــــــارات ‪ ، Signals‬فً أنواع معٌنة تـوجد مـــحوالت أشــارات تمــاثلٌة الى رقمٌة‬
‫)‪ ،Analog to Digital Converter (ADC‬ومحـوالت أشـــارات رقـــمٌة الى تمــــاثلٌة‬
‫)‪ ،Digital to Analog Converter (DAC‬كــــــما ٌحتــوي المسٌـطر الدقٌــــق عــــلى‬
‫وظائف إضـافٌة مــثل المـــؤقتات ‪ Timer‬والعــدادات ‪ ، Counter‬ومعـــــدالت االشـاره‬
‫)‪ Pulse Width Modulation (PWM‬الستـــخدامها فً عمـلٌات تضمٌن االشـارات‬
‫وذلك بغٌة ارسالها ‪.‬‬

‫‪Figure 3.1‬‬

‫سوف نتحدث فً هذه الوحدة عن بُنٌة أحد انواع األجهزة القابلة لل َبرمجة وهو المُسٌطر الدَقٌق ‪ Microcontroller‬من َشركة ‪Microchip‬‬
‫‪ ،‬تـــــــــــــتنتج شــــــــــــركة ‪ Microchip‬سِ لــــــــــــسِ لة من المُسٌـــــــــــــــطرات ال َدقٌــــــقة ‪ Microcontroller‬تحــــــــــتَ أســـــــــم‬
‫)‪ ، PIC(Programmable interface Controller‬من هذه السلسلة هو المتحكم ‪ٌ ، PIC16F84A‬تصف هذا المسٌطر بالمواصفات‬
‫التالٌة‪،‬‬

‫ٌحتوي هذا المسٌطر على ‪ 35‬تعلٌمة فقط ‪.‬‬ ‫‪o‬‬


‫جمٌع التعلٌمات تأخذ دورة ماكنة واحدة ‪ One machine cycle‬ما عدا َتعلٌمات التفرع ‪ jump instruction‬فأنها تأخذ دورتان‬ ‫‪o‬‬
‫ماكنة‪.‬‬
‫ٌعمل على تردد ‪ ، 4 Mega Hertz‬دورة الماكنة لهذا المسٌطرة مكونة من ‪ 4‬نبظات التمام تفٌذ تعلٌمة كاملة ‪ ،‬أي أن فترة الزمنٌة‬ ‫‪o‬‬
‫التً تستغرقها التعلٌمة الواحدة هو ‪. 4 micro-second‬‬
‫ٌحتوي على ذاكرة برنامج ‪ program memory‬قدرها ‪1 kilo-byte‬‬ ‫‪o‬‬
‫ٌحتوي على مؤقت ‪ٌ Timer‬ستخدم فً عملٌات التوقٌت ‪ Timer‬والعد ‪Counting‬‬ ‫‪o‬‬
‫‪ٌ o‬حتوي على ذاكرة ‪ EEPROM‬لخزن البٌانات ‪ Data‬واسترجاعها‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 40‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Architecture of PIC16F84A‬‬ ‫المسيطر الصغري ‪PIC16f84A‬‬
‫بُنية ُ‬
‫بنٌة المُسٌطر ال َدقٌق ال تختلف َكثٌراً عن بُنٌة باقً األجهزة القابلة لل َبرمجة ‪ ،‬مثل ‪ Microprocessor‬وغٌرها ‪ ،‬مُعظم األجهزة القابلة للبرمجة‬
‫تتكون من شقٌن‬

‫‪Hardware‬‬ ‫‪ o‬البنٌة الصلبة‬


‫‪Software‬‬ ‫‪ o‬بنٌة البرمجٌات‬

‫‪Hardware‬‬ ‫البُنية الصلبة‬

‫وهً المكونات المادٌة الملموسة ‪ Physical Component‬من االجهزة القابلة للبرمجة ‪ ،‬مثل جهاز الحاسوب ٌتكون من لوحة المفاتٌح‬
‫‪،‬المعالج‪ ،‬الذاكرة ‪ ،‬هذه المواد كلها تعتبر مكونات صلبة ‪ ، Hardware‬اما نظام التشغٌل والبرمجٌات فتعتبر مكونات البرمجٌات‬
‫صلبة‬
‫‪ Software‬التً تدٌر وتشرف على عمل المكونات الصلبة ‪، Hardware‬فً هذه الوحدة سنتطرق لبُنٌة المُسٌطر الدَ قٌق ال َ‬
‫فسنتركها لوحدات الحقة ‪ ،‬الشكل ‪ٌ Figure 3.2‬وضح بنٌة المسٌطر الدقٌق ‪، PIC16f84A‬‬
‫‪ Hardware‬اما ال َبرمجٌات َ‬

‫‪Figure 3.2‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 42‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪Central Processing Unit (CPU‬‬ ‫وحدة المعالجة المركزية ‪CPU‬‬

‫وحدة المُعالجة ال َمركزٌة ‪ CPU‬كما مر علٌنا فً الوحدة السابقة هً قلبُ المُسٌطر ال َدقٌق ‪ ، Microcontroller‬وهً المسؤولة عن‬
‫َجلب وفك شفرة وتنفٌذ التعلٌمة ‪ ، Instruction‬كما َعرفنا سابقا ً أن دورة الماكنة تبدء بعملٌة ‪ Fetch‬أي َجلب ال َتعلٌمة من ذاكرة‬
‫البرنامج ‪ program memory‬لتخزن فً مسجل التعلٌمة )‪ IR(instruction Register‬وفق َ‬
‫الخطوات التالٌة ‪:‬‬

‫‪ٌ -0‬قوم عداد الرنامج )‪ PC(Program Counter‬بعنونة الذاكره كما هو موضع فً الشكل ‪ ،Figure 3.2‬وذلك اللتقاط ال َتعلٌمة من‬
‫الذاكرة ‪ ،‬الحظ أن المسٌطر ‪ PIC16f84A‬طول عداد البرنامج ‪ PC‬له هو ‪. 13-bit‬‬

‫‪ -2‬التقاط التعلٌمة من ذاكرة البرنامج ‪ Program Memory‬التً عنوانها هو محتوٌات َعداد البرنامج ‪ ، PC‬لٌنتهً بها ال َمطاف فً‬
‫مُسجل ال َتعلٌمة ‪ ، Instruction Register‬الحظ أن طول الكلمة ‪ Word‬التً تخرج من ذاكرة البرنامج هو ‪ ، 14-bit‬الحظ‬
‫الشكل ‪ ،Figure 3.2‬أن الغاٌة األساسٌة الغلب التعلٌمات فً المسٌطر الدقٌق ‪ Microcontroller‬هو استهداف أو الوصول‬
‫‪ ،File Register‬هناك طرٌقتان لعنونة او الوصل الى ‪ File Register‬هما ؟‬

‫العنونة المباشرة ‪Direct Addressing‬‬‫‪َ -0‬‬


‫‪ -2‬ال َعنونة الغٌر مباشرة ‪Indirect Addressing‬‬

‫‪Direct Addressing‬‬ ‫العنونة المباشرة‬

‫أن ‪ ، File Register‬عبارة عن وحدة َخزنٌة ‪ ،‬تستخدم لخزن البٌانات المهمة والمراد معالجتها ‪ ،‬وكذلك تحتوي على مواقع لها عالقة‬
‫باعدادات ‪ Configuration‬وحدات األدخال واألخراج وغٌرها ‪ ،‬موضوع ‪ File Register‬سٌتم مناقشة باسهاب الحقا ً ‪ ،‬لنأخذ أول اٌعاز لنا‬
‫فً المسٌطر الدقٌق ‪ Microcontroller‬الذي هو ‪،‬‬

‫‪BSF Reg. , b‬‬

‫تقوم هذه التعلٌمة او األٌعاز برفع احد بتات مسجل ‪ Register‬الى القٌمة واحد ‪ ،‬تتكون هذه التعلٌمة من جزئٌن ‪،‬‬

‫‪ -0‬الجزء األول وهً شفرة ال َعملٌة )‪ Opcode (operation code‬التً هً ‪ BSF‬وهً اختصار لكلمة ‪ ، Bit set flag‬التً تخبر‬
‫المعالج او المسٌطر الدقٌق بالوضٌفة النً نرٌد اجراءها التً هً جعل أحدى بتات ‪ bit‬مُسجل ‪ Register‬قٌمتة واحد‪.‬‬
‫‪ -2‬الجزء الثانً هو المُعامالت ‪ Operand‬الذي هو ‪ Reg.‬الذي ٌقصد به المسجل الهدف الذي نرٌد رفع احد بتاتة الى القٌمة واحد ‪،‬‬
‫والجزء ‪ b‬والذي هو رقم البت المراد جعل او رفع قٌمته الى الواحد من المسجل المستهدف ‪،‬‬

‫مالحظة‪:‬‬
‫أن سعة المسجالت ‪ Registers‬ال َموجدوه فً ‪ File Register‬هو ‪ ، 8-bit‬لذلك ٌطلق على المسٌطر الدقٌق ‪ PIC16f84A‬أنة نظـــــــام ذو‬
‫‪، 8-bit‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 43‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مثال ‪3.1‬‬

‫أحد المسجالت الموجدة فً ‪ file Register‬هو المسجل الذي عنوانة ‪ 0x0C‬بالنظام السادس عشر‪ ،‬المطلوب جعل قٌمة البت ‪ bit‬الثالث‬
‫تساوي واحد من هذا المسجل ؟‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫الحل‪:‬‬

‫‪BSF 0x0C , 2‬‬ ‫‪; 0000 0100‬‬

‫مالحظة‪:‬‬

‫الرقم وذلك للدالله على أن الرقم بالنظام السادس عشر ‪ Hex‬مثالً ‪0x02,0x08,0x0D‬‬
‫توضع السابقة ‪ 0x‬قبل َ‬

‫الحظ أن المسجل ‪ 0x0C‬قد تم الوصول الٌة مباشرتا َ من التعلٌمة ‪ BSF 0x0C,3‬وهذا ما ٌسمى بالعنونة المباشرة ‪ ،‬لنعود الى الشكل ‪Figure‬‬
‫‪ ،3.2‬ان طول الكلمة الخارجة من الذاكرة ‪ 14-bit‬وهً التً ستحمل التعلٌمة ‪ BSF 0x0C,3‬الى مسجل التعلٌمة ‪ ، IR‬وعند وصولها تنشطر‬
‫الى جزئٌن كما هو موضح فً الشكل ‪ ، Figure 3.2‬جزء شفرة العملٌة ‪ Opcode‬لٌذهب الى وحدة فك الشفرة التنفٌذ ‪Instruction‬‬
‫‪ ، Decoder And Execution‬وجزء المعامالت ‪ Operand‬حامالً المـــعامالت التً تمـــــثل عنوان المســــــجل المراد اجراء‬
‫العمــــــــلٌة علٌة عبر ناقل العنونة المباشرة ‪ Direct Addressing‬الى ‪ file Register‬الحظ فً الشكل ‪ Figure 3.2‬هناك شًء اسمة‬
‫‪ Addr. MUX‬وهو اختصار ‪ Address multiplexing‬أي مازج العنوان وهو مثل المفتاح الذي ٌحول بٌن العنونة المبـــــــاشرة والعنوانة‬
‫الغٌر مباشرة ‪ ،‬فً عملٌة العنونة المبـــــــاشرة سٌرتبط ‪ File Register‬مع ناقل العنـــــــــونة المباشر ‪ Direct Addressing‬عن طرٌق‬
‫المازج ‪،Addr. MUX‬‬

‫‪Direct Addressing‬‬ ‫العنونة الغير المباشرة‬

‫ٌقصد بالعنونة الغٌر مُباشرة هو أن عنونه أو الوصول الى أحد مسجالت ‪ File Register‬ال ٌتم عن طرٌق التعلٌمة ‪ ، instruction‬بل ٌتم‬
‫عن طرٌق مسجل أخر خاص وهو المسجل )‪ FSR(file select Register‬الحظ الشكل ‪ ، Figure 3.3‬اذا حمل هذا المسجل على سبٌل‬
‫المثال بالقٌمة ‪ FSR = 0X0C‬فان هذه المسجل ‪ٌ FSR‬شٌر بذلك الى المسجل الذي عنوانة ‪ 0X0C‬من ‪ ، File Register‬وتضهر محتوٌات‬
‫المسجل ‪ 0X0C‬الذي عنون عن طرٌق المسجل ‪ FSR‬على مسجل ٌسمى )‪ INDF(indirect register flag‬الذي هو موجــــــــود ضمن‬
‫‪ File Register‬لٌتم معالجتها ‪ ،‬هذا الموضوع سٌتم مناقشتة بشكل اوسع فً وحدات الحقة ‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 44‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 3.3‬‬

‫الشكل ‪Figure 3.3‬هو جزء من بنٌة معالج المسٌطر ‪َ ، PIC16f84A‬عمدت الى تقسم بنٌة المعالج وذلك لكً ٌسهل عملٌة فهما واستٌعابها ‪،‬‬
‫لنفهم ما هو مسجل العمل ‪ Working Register‬او ‪ W Reg.‬الموجود فً الشكل ‪ٌ Figure 3.2‬جب علٌنا فهم ألٌة عمل وحدة الحساب‬
‫والمنطق ‪ ALU‬فً المسٌطر ‪،PIC16f84A‬‬

‫)‪ALU (Arithmetic and logic unit‬‬ ‫وحدة الحساب والمنطق‬

‫العمل )‪W(work register‬‬ ‫وهً الوحدة المسؤولة عن إجراء ال َعملٌات الحِسابٌة وال َمنطقٌة ‪ ،‬وأهم ما فً وحدة الحساب والمنطق هو مُسجل َ‬
‫‪ ،‬وهو مسجل ٌستخدم بكثرة فً المُسٌطر ال َدقٌق ‪ ، PIC16f84A‬لكً نفهم ألٌة عمل وحدة الحساب والمنطق ‪ٌ ، ALU‬جب ان ننتبة الى ‪،‬‬

‫الحظ فً الشكل ‪ ، Figure 3.4‬أن أحد مُعامالت أو مدخالت وحدة الحساب والمنطق ‪ ALU‬هو مُسجل العمل ‪ ، W Reg.‬أي عند‬ ‫‪‬‬
‫الجمع او أي عملٌة داخل وحدة الحساب والمنطق ‪ٌ ALU‬جب أن ٌكون مُسجل ال َعمل ‪ W Reg.‬مُحمل بقٌمة أحد معامالت‬ ‫اجراء َعملٌة َ‬
‫العملٌة الحسابٌة ‪،‬‬
‫الحظ فً الشكل ‪ ،Figure 3.4‬ان الطرف الثانً او المعامل الثانً لوحدة ‪ٌ ، ALU‬حمل من اتجاهٌن ‪ ،‬المعامل الثانً أما ان ٌكون رقم‬ ‫‪‬‬
‫‪ Literal‬قادم من التعلٌمة مباشرتا ً ‪ ،‬او ان المعامل الثانً قادم من أحد مسجالت ‪. File Register‬‬
‫الحظ ان ناتج وحدة ‪ ALU‬أما أن ٌخزن فً مسجل العمل ‪ ،‬وذلك عند ما تكون االشارة ‪ D=0‬او ٌخزن فً احد مسجالت ‪File‬‬ ‫‪‬‬
‫‪ Register‬عندما تكون ‪ٌ ، D=1‬تم تعٌٌن قٌمة ‪ D‬من التعلٌمة مباشرتا ً ‪.‬‬

‫كما ان لمسجل العمل فوائد كثٌرة ‪ ،‬حٌث انه الوسٌط فً اكثر تعلمٌات ‪ instruction‬المُسٌطر ال َدقٌق ‪ ،‬وهذا ما سوف تكتشفة فً وحدة‬
‫البرمجة أنشاء هللا‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 45‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 3.4‬‬

‫‪Status Register‬‬ ‫مسجل الحالة‬

‫هناك مسجل ضمن بنٌة المُسطر ال َدقٌق ‪ٌ PIC16f84A‬سمى مُسجل الحالة ‪ Status Register‬أو مُسجل األعالم ‪ Flag register‬وسمً‬
‫بمُسجل الحالة النة ٌُسجل حالة أو ناتج العملٌة التً أؤدٌت داخل وحدة الحِساب وال َمنطق ‪ ، ALU‬وهو مُسجل مكون من ‪ 3-bit‬كل بت ٌشٌر‬
‫الى حالة من الحاالت التالٌة ‪،‬‬

‫‪ -0‬علم التصفٌر ‪ : Zero flag‬عندما ٌصبح ناتج َعملٌة حِسابٌة داخل وحدة ‪ٌ ALU‬ساوي صفر فان هذا العلم ٌرفع الى الواحد وإال فانة‬
‫ٌصبح صفر ‪.‬‬
‫‪ -2‬علم المحمل ‪ٌ : Carry flag‬رفع هذا العلم الى الحالة واحد عند ظهور محمل ‪ ، Carry‬من الخانة االكثر أهمٌة ‪ MSB‬وإال اصبح قٌمة‬
‫العلم صفر ‪.‬‬
‫هذا َ‬
‫‪ -3‬علم المحمل الثانوي ‪ٌ : Decimal carry flag‬رفع هذا العلم الى الحالة واحد عند ظهور محمل من البت الثالث الى البت الرابع وإال‬
‫تصبح قٌمة هذا العلم صفر ‪.‬‬

‫مالحظة‪:‬‬

‫حاالت األعالم الثالثة هذه تجده مضمنة داخل مسجل فً ‪ٌ File Register‬سمى مسجل الحالة ‪ ، Status‬الشكل ‪ٌ Figure 3.5‬بٌن أشارات خارجة من‬
‫وحدة ‪ ALU‬ذاهبة الى مسجل الحالة ‪، Status Register‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 46‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 3.5‬‬

‫‪Control Unit‬‬ ‫وحدة السيطرة‬

‫صل ال َتعلٌمة الى مسُجل ال َتعلٌمة ‪ IR‬لتنشطر الى جزئٌن جزء المعامالت ‪ Operand‬الذي ٌذهب عن‬
‫الجلب ‪ Fetch cycle‬ت َ‬
‫بعد أن تتم َعملٌة َ‬
‫طرٌق ناقل العنونة المباشرة ‪ Direct Addressing‬لٌصل الى ‪ Register File‬عن طرٌق مازج العنوان ‪ ، Address Multiplexer‬والجزء‬
‫األخر هو األٌعاز او شفرة العملٌة ‪ Opcode‬الذي ٌذهب الى وحدة فك الشفرة لكً تمٌز الشفرة وتنفذ ‪ ، Decoding and execution‬ان‬
‫الوحدة المسئولة عن كل هذه ال َعملٌات هً وحدة السٌطرة او وحدة تولٌد دورة الماكنة ‪، Machine Cycle Generation‬أن وحدة السٌطرة‬
‫فً المُسٌطر ال َدقٌق ‪ PIC16f84A‬تتكون من أربع نبظات تسمى ‪ Q0,Q1,Q2,Q3‬الشكل ‪ٌ Figure 3.6‬بٌن مخطط صندوقً بسٌط لوحدة تولٌد‬
‫دورة الماكنة ‪،‬‬

‫‪Q3‬‬ ‫‪Q2‬‬ ‫‪Q1‬‬ ‫‪Q0‬‬

‫‪Frequency‬‬
‫‪Machine Cycle Generation‬‬
‫‪Oscilltor‬‬

‫‪Figure 3.6‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 47‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Memory Organization‬‬ ‫تنظيم الذاكرة‬

‫هناك ذاكرتان فً وحدة المسٌطر الدقٌق ‪ PIC16f84A‬هما ذاكرة البرنامج ‪ Program memory‬وذاكر البٌانات ‪ ، data memory‬لكل‬
‫من هاتان الذاكرتان نواقلهما ‪ Buses‬الخاصة ‪ ،‬لذلك ٌمكن قراءة الذاكرتان فً نفس الدورة ‪. Cycle‬‬

‫‪Data memory‬‬ ‫ذاكرة البيانات‬

‫فً المسٌطر الدقٌق ‪ُ PIC16f84A‬تسمى ذاكرة البٌانات بـ ‪ file Register‬وهً ذاكرة مكونة من ‪ 256‬موقع او ‪ FFh‬بالنظام السادس عشر‬
‫‪ ، Hex.‬كل موقع متكون من ‪ ، 8-bit‬هذه الذاكرة مقسمة الى جــــزئٌن ‪ Two bank‬هما ‪ Bank 0‬الــذي ٌبدء من العنوان ‪ 00h‬الى‬
‫العنوان ‪ 7Fh‬و ‪ Bank 1‬الذي ٌبدء من العنوان ‪ 80h‬الى العنوان ‪ ، FFh‬أي ان كل ‪ٌ bank‬تكون من ‪ 128‬موقع ‪ ،‬كما هو موضح فً‬
‫الشكل ‪Figure 3.7‬‬

‫‪Figure 3.7‬‬

‫تقسم ذاكرة البٌانات ‪ File register‬الى قسمٌن ‪،‬‬

‫مجموعة مُسجالت األغراض الخاصة )‪Special Purpose Registers(SPRs‬‬ ‫‪o‬‬


‫مجموعة مُسجالت األغراض العامة )‪General Purpose Registers(GPRs‬‬ ‫‪o‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 48‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪General Purpose Register(GPRs‬‬ ‫مسجالت األغراض العامة‬

‫تستخدم هذة هذه المسجالت للغراض العامة ‪ ،‬مثل خزن المعامالت ‪ ، Operands‬خزن نواتج العملٌات ‪ ، Result‬وغٌرها من ال َعملٌات‬
‫تبدء هذه المسجالت عند ‪ bank 0‬من الموقع ‪ 0Ch‬وتنتهً عند الموقع ‪ ، 4Fh‬اما عند ‪ bank 1‬فانها تبدء من الموقع ‪ 8Ch‬وتنتهً عند الموقع‬
‫‪. CFh‬‬

‫)‪Special Purpose Register(SPRs‬‬ ‫مسجالت األغراض الخاصة‬

‫تستخدم هذة هذه المسجالت للغراض الخاصة ‪ ،‬مثل تهٌئة أطراف ‪ Peripheral‬المسٌطر الدقٌق ‪ ، PIC16f84A‬تهئٌة المؤقتات والعدادات‬
‫وغٌرها من ال َعملٌات ‪ ،‬لكل موقع من هذه المواقع له وضٌفة معٌنة ستتعرف علٌها خالل مواصلتك لقراءة الكتاب ‪ ،‬تبدء هذه المسجالت عند‬
‫‪ bank 0‬من الموقع ‪ 00h‬وتنتهً عند الموقع ‪ ، 0Bh‬اما عند ‪ bank 1‬فانها تبدء من الموقع ‪ 80h‬وتنتهً عند الموقع ‪. 8Bh‬‬

‫مالحظة ‪:‬‬

‫ألحظ أنه عند ‪ bank0‬فان المواقع من ‪ 50h‬الى ‪ 7Fh‬فهً غٌر منفذة ‪ ، unimplemented‬أي متروكة وكذلك بالنسبة لـ ‪ bank1‬فأن‬
‫المواقع من ‪ D0h‬الى ‪، FFh‬‬

‫‪Program Memory‬‬ ‫ذاكرة البرنامج‬

‫ٌحتوي المُسٌطر ال َدقٌق ‪َ PIC16f84A‬عداد َبرنامج ‪ Program Counter‬ذو سعة ‪ ، 13-bit‬أي انة ٌستطٌع عنونة ذاكرة سعتها‬
‫‪ 213=8191‬أي ‪ 8K byte‬ما ٌقابلها بالنظـــــــام الســـادس عشر هو ‪ ، 1FFF‬فً الحقٌـــقة العناوٌن المنفذة ‪ implemented‬من الذاكرة‬
‫كما هــــو موضح فً الشكل ‪ Figure 3.8‬هً مـن )‪ (000-3FF‬فقط اما العناوٌن )‪ (4FF-1FFF‬فهً غٌر منفذة ‪unimplemented‬‬
‫أي انة الٌمكن تخزٌن برنامج ضمن هذه المواقع‪ ، ،‬كما ٌرتبط مع عداد البرنامج ‪ PC‬بصورة وثٌقة ذاكرة المكدس ‪ Stack‬التً تستخدم‬
‫لخزن قٌمة عداد البرنامج ‪ PC‬فً تعلٌمات القفز ‪ ،jump instruction‬انتبة الى العنوان ‪ 0000h‬من ذاكرة البرنامج ‪Program‬‬
‫‪ٌ memory‬سمى هذا العنوان شعاع التصفٌر ‪ Reset Vector‬أي عند تشغٌل المُسٌطر ً‬
‫الدقٌق او أعادة اقالعة ‪ Restart‬فانه ٌبدء التنفٌذ‬
‫من هذا العنوان ‪ ،‬وانتبة اٌضا ً الى العنوان ‪ 0004h‬فانه ٌسمى شعاع مقاطعة األطراف ‪ Peripheral Interrupt Vector‬أي عند حدوث‬
‫مقاطعة للمسٌطر الدقٌق فانة ٌبدء التنفٌذ من هذا العنوان ‪ ،‬سٌتم شرح المقاطعات فً فصول الحقة أن شاء هللا ‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 49‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 3.8‬‬

‫)‪Power Up Timer (PWRT‬‬ ‫مؤقت بداية اقالع الطاقه‬

‫هناك دائرة مؤقت ‪ Timer circuit‬داخل وحدة المُسٌطر ال َدقٌق ‪ ، Microcontroller‬تقوم هذه الدائرة بتوفٌر فترة تأخٌر مقدارها ‪ 72‬ملً‬
‫ثانٌة قبل ان ٌنهض (ٌعمل) المسٌطر الدقٌق‪ microcontroller‬وذلك لكً تظمن استقرار الطاقة الن عدم استقرار مصدر الطاقة ٌؤثر على‬
‫عمل المسٌطر الدقٌق ‪.‬‬

‫)‪Oscillator Start Up Timer(OST‬‬ ‫مؤقت بداية اقالع المذبذب‬

‫تعمل دائرة المؤقت هذه عمل ‪ ، power up timer‬حٌث توفر هذه الدائرة فترة تأخٌر زمنٌة قبل ان تعمل وحدة السٌطرة ‪Control Unit‬‬
‫التً ٌغذٌها المذبذب وذلك لكً نظمن استقرار الذبذبة الن عدم استقرار الذبذبة ٌؤثر على عمل وحدة السٌطرة وبذلك عمل المُسٌطر ال َدقٌق‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 51‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪Power On Reset (POR‬‬ ‫أعادة أالقالع عند بداية تشغيل الطاقة‬

‫عند تجهٌز المسٌطر الدقٌق ‪ Microcontroller‬بالطاقه لغرض َتشغٌلة ‪ٌ ، Running‬جب التأكد من أن مستوى الطاقة المطلوب مزود بشكل‬
‫الحظ ٌحتوي المُسٌطر الدَ قٌق ‪ Microcontroller‬على دائرة تتأكد من ان تجهٌز‬
‫صحٌح ‪،‬لحسن َ‬ ‫صحٌح لكً ٌعمل المُسٌطر ال َدقٌق بشكل َ‬
‫الطاقه وصل للحد المطلوب واال أعاد الجهاز االقالع من جدٌد ‪ Reset‬تمسى هذه الدائرة )‪.Power On Reset(POR‬‬

‫‪Watchdog timer‬‬ ‫مؤقت الحراسه‬


‫ماذا ٌحدث لو َعلق ‪ Stuck‬المُسٌطر ال َدقٌق‪ ،‬هل هناك زر ‪ restart‬العادة تشغل المسٌطر الدقٌق ‪ ،‬طبعا ُ ال ‪،‬فماذا نفعل لو كان المسٌطر‬
‫الدقٌق فً موقع عمل ‪ field‬ودخل فً حالة العلق ‪ ، Stuck‬توجد دائرة داخل المسٌطر الدقٌق ‪ Microcontroller‬تقوم بعملٌة مراقبة‬
‫المُسٌطر ال َدقٌق ‪ ،‬اذا علق ‪ Stuck‬المسٌطر الدقٌق تقوم هذه الدائرة باعادة أقالع المسٌطر الدقٌق ‪ Microcontroller‬تسمى هذه الدائرة‬
‫بمؤقت الحراسة ‪ ، Watchdog timer‬سٌتم شرح هذا الموضوع بشكل مفصل فً فصول الحقة ‪.‬‬

‫‪Stack Memory‬‬ ‫المكدس‬

‫ٌَحتوي المُسٌطر ال َدقٌق ‪ PIC16f84A‬على مكدس ‪ Stack‬ذو سعة ‪ 8‬مواقع ‪ٌ ،‬ستخدم فً عملٌات القفز ‪،‬‬

‫‪EEPROM Memory‬‬ ‫الذاكرة ‪EEPROM‬‬

‫ٌحتوي المسٌطر الدقٌق ‪ PIC16f84A‬على ذاكرة ‪ EEPROM‬قابلة للقراءة والكتابة ذات سعة ‪ 64‬موقع ‪ ،‬وكل موقع ذو طول كلمة ‪، 8-bit‬‬
‫تستخدم لخزن المعلومات ‪ ،‬حٌث ان هذه المعلومات ستضل مخزونة حتى بعد فصل مصدر التغذٌة عن الشرٌحة ‪ ،‬ترتبط مع هذه الذاكرة‬
‫مسجلٌن ‪ ،‬مسجل العنوان ‪ EEADR‬عند تحمٌل هذا المسجل بقٌمة معٌنة فاننا بذلك نشٌر الى موقع من مواقع ذاكرة ‪ EEPROM‬الـ ‪ ، 64‬عند‬
‫خزن بٌانات عند موقع الذاكرة المعنون عن طرٌق مسجل ‪ EEADR‬فاننا نحمل البٌانات ‪ Data‬المراد خزنها الى المسجل ‪ ، EEDATA‬وكذلك‬
‫عند قراءة معلومات من الذاكرة ‪ EEPROM‬المعنون عن طرٌق مسجل ‪ EEADR‬فاننا نجد البٌانات ‪ Data‬قد حملت الى المسجل ‪، EEDATA‬‬
‫عملٌات القراءة والكتابة تتم عن طرٌق تعلٌمات واعدادات خاصة سنتناولها فً فصول الحقة ان شاء هللا ‪.‬‬

‫‪Timer‬‬ ‫المؤقت‬
‫ٌحتوي المسٌطر الدقٌق على مؤقت ٌستخدم فً عملٌات التوقٌق ‪ Timing‬كما ٌستخدم فً عملٌات العد ‪ ، Counting‬سٌتم شرح الموضوع فً‬
‫فصول الحقة ‪.‬‬

‫‪Input/Output Unit‬‬ ‫أطراف االدخال واالخراج‬

‫ٌحتوي المُسٌطر ال َدقٌق على منفذٌن ‪ Ports‬ألدخال أو أخراج البٌانات الى او من المُسٌطر الدَ قٌق ‪ ،‬المنفذ االول ٌسمى ‪ Port A‬وهو منفذ‬
‫مكون من ‪ 5-bit‬ممكن أن ٌستخدم هذا المنفذ كمنفذ أدخال أو أخراج‪ ،‬وعناوٌن هذا المنفذ هً ‪ ، RA0,RA1,RA2,RA3,RA4‬والمنفذ االخر‬
‫ٌسمى ‪ Port B‬وهو منـــــفذ مكون من ‪، 8-bit‬وكذلك ٌمكن ان ٌستخدم هذا المنفذ كمنفذ أدخال او أخراج‪،‬وعناوٌن هذا المنفذ هً‬
‫‪ ، RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7‬كما أن هناك أطراف لها اكثر من وضٌفة مثل الطرف ‪ٌ RA4‬ستخدم كطرف قدح للمؤقت‬
‫‪ Timer‬أو للعداد وٌسمى ‪ ، T0CKl‬كما ٌستخدم الطرف ‪ RB0‬كوضٌفة المقاطعة ‪، Interrupt‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 50‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪PIC16F84A‬‬ ‫الوصف الدقيق ألطراف المسيطر‬

‫ٌتم تغلٌف ‪ Packaging‬المُسٌطر ال َدقٌق ‪ ،‬بشكل دائرة متــــــــكاملة )‪ IC(Integrated circuit‬مكونة من ‪ 08‬طــــــــــــرف‪ ،‬الشكل‬
‫‪ٌFigure 3.9‬وضح اطراف المسٌطر ‪. PIC16f84A‬‬

‫‪Figure 3.9‬‬

‫من الشكل ‪ Figure 3.9‬نالحظ أن أطراف المُسٌطر الد َقٌق ‪ PIC16f84A‬هً ‪،‬‬

‫‪RA0-RA4‬‬ ‫‪o‬‬
‫المرفئ ‪ Port A‬وهو مرفئ مكون من ‪ 5-bit‬التً هً ‪ ، RA0,RA1,RA2,RA3,RA4‬ممكن أن ٌستخدم هذا المرفئ فً عملٌات أالدخال‬
‫أو عملٌات أالخراج ‪،‬‬

‫‪RB0-RB7 o‬‬
‫المرفئ ‪ Port B‬وهو مرفئ مكون من ‪ 8-bit‬التً هً ‪ ،RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7‬ممكن أن ٌستخدم هذا المرفئ فً‬
‫عملٌات أالدخال أو عملٌات أالخراج ‪،‬‬

‫‪VSS & VDD o‬‬


‫أطراف التغذٌة للشرٌحة ‪VDD=+5 VDC , VSS=Ground‬‬

‫‪OSC2/CLKOUT & OSC1/CLKIN o‬‬


‫أطراف المذبذب ‪ Oscillator‬للمسٌطر ‪ ،PIC16f84A‬التردد ضروري لعمل وحدة السٌطرة او عمل المُسٌطر الدَقٌق اذا لم تربط مذبذب‬
‫ال ٌُنفذ المُسٌطر الدَ قٌق البرنامج المخزن فً ذاكرتة ‪ٌ ،‬عمل المسٌطر الدقٌق ‪ PIC16f84A‬على تردد ‪، 4 MHZ‬‬

‫‪MCLR(memory clear) o‬‬


‫عند تسلٌط جهد منخفظ على هذا الطرف ٌتم مسح البرنامج من الشرٌحة‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 52‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مالحظة ‪:‬‬
‫األطراف التالٌة لها وظائف أخرى تحدد اثناء عملٌة ‪Configuration‬‬

‫‪RB0 o‬‬
‫له وظٌفة المقاطعة ‪ interrupt‬لبرنامج المسٌطر الدقٌق‬

‫‪RA4 o‬‬
‫ممكن ان ٌعمل هذا الطرف كطرف قدح لعداد ‪ Counter‬أو مؤقت ‪. Timer‬‬

‫‪Memory Clear‬‬ ‫طرف تصفير الشريحة‬

‫عند َتسلٌط جهد منخفظ على َهذا ال َطرف ٌتم مسح برنامج ال َشرٌحة ‪ ،‬لذلك نربط هذا الطرف الى ال ُجـــهد الموجب ‪ ،+5 Vdc‬كما هو‬
‫موضــــــــــــــح فً الشكل ‪Figure 3.10‬‬

‫‪Figure 3.10‬‬

‫‪Oscillator‬‬ ‫المذبذب‬
‫المذبذب عنصر مهم لعمل المسٌطر الدقٌق ‪ ،‬وأن أختٌار نوع وقٌمة المذبذب تؤثر أٌجابا ً او سلبٌا ً على عمل المسٌطر الدقٌق ‪ٌ ، ،‬تم الحصول‬
‫على ذبذبات أو نبضات الضرورٌة لعمل المسٌطر الدقٌق بطرٌقتٌن‬

‫‪ o‬بأستخدام مذبذب بلوري ‪XT Oscillator‬‬


‫‪ o‬بأستخدام مقاومة ومتسعة لتشكٌل دائرة رنٌن ‪RC Oscillator‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 53‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪XT Oscillator‬‬ ‫المذبذب بلوري‬

‫المذبذب البلوري ‪ Quartz Oscillator‬عبارة عن قطعة معدنٌة بطرفٌن ‪ ،‬تقوم هذه القطعة المعدنٌة بتولٌد الذبذبة الضرورٌة لعمل المسٌطر‬
‫‪ٌ ، PIC16f84A‬كتب على الغالف الخارجً للقطعة المعدنٌة قٌمة التردد الذي ٌولدة المذبذب البلوري ‪ ،‬تذكر أن ‪ٌ PIC16f84A‬عمل على‬
‫تردد ‪ ، 4 MHz‬عادة تربط متسعات سٌرامٌكٌة ‪ C1 , C2‬الى أطراف المذبذب البلوري ذات قٌمة ‪ 15‬بٌكو فاراد ‪ ،‬الشكل ‪Figure 3.11‬‬
‫ٌبٌن كٌفٌة ربط مذبذب بلوري الى طرفً ‪ 16,15‬للمُسٌطر ال َدقٌق ‪ ،‬سنكتفً بذكر طرٌقة المذبذب البلوري النه اكثر استقرارٌة من المذبذب‬
‫‪. RC‬‬

‫‪4 MHz‬‬

‫‪Figure 3.11‬‬

‫الشكل ‪ٌ Figure 3.12‬وضع كٌفٌة توصٌل المذبذب البلوري ذو قٌمة ‪ 4 MHz‬الى طرفٌن ‪ 16,15‬من ‪ ، PIC16f84A‬وكذلك توصٌل‬
‫الطرف الموجب لمصدر التـغذٌة الذي قٌمته ‪ 5 VDC‬الى طرف ‪ VDD‬الذي هو الطرف ‪ ، 14‬بٌنما ٌربط الطرف السالب لمصدر التغذٌة الى‬
‫الطرف ‪ VSS‬الذي هو الطرف ‪ ، 5‬مع توصٌل المتسعات ‪ ، Capacitors‬متسعتان بقٌمة ‪ 15 pico-farad‬على طرفً المذبذب ‪ ،‬ومتسعة‬
‫بقٌمة ‪ 100 micro-farad‬ألغرتض الحماٌة من الضجٌج ‪ ، Noise‬تذكر ربط الطرف ‪ 4‬الذي هو طرف ‪ MCLR‬الى الطرف الموجب‬
‫للبطارٌة‪.‬‬

‫‪4 MHz‬‬

‫‪Figure 3.12‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 54‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit four‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة الرابعة‬

‫‪File Register‬‬ ‫السجل‬


‫مقدم ـ ـ ــة‪:‬‬

‫ٌعتبر ‪ File Register‬هو قلب المسٌطر الدقٌق ‪ PIC16f84A‬ومعظم العملٌات تجري على ‪ ، File Register‬وهً ذاكرة مكونة من ‪256‬‬
‫موقع او ‪ FFh‬بالنظام السادس عشر ‪ ، Hex.‬كل موقع متكون من ‪ ، 8-bit‬هذه الذاكرة مقسمة الى جزئٌن ‪ Two bank‬هما ‪ Bank 0‬الذي‬
‫ٌبدء من العنوان ‪ 00h‬الى العنوان ‪ 7Fh‬و ‪ Bank 1‬الذي ٌبدء من العنوان ‪ 80h‬الى العنوان ‪ ، FFh‬أي ان كل ‪ٌ bank‬تكون من ‪ 128‬موقع‬
‫‪ ،‬كما هو موضح فً الشكل ‪Figure 4.1‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 55‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 4.1‬‬

‫تقسم ذاكرة البٌانات ‪ File register‬الى قسمٌن ‪،‬‬

‫مجموعة مُسجالت األغراض الخاصة )‪Special Purpose Registers(SPRs‬‬ ‫‪o‬‬


‫مجموعة مُسجالت األغراض العامة )‪General Purpose Registers(GPRs‬‬ ‫‪o‬‬

‫)‪General Purpose Register(GPRs‬‬ ‫ُمسجالت األغراض العامة‬

‫العملٌات تبدء‬
‫تستخدم هذة المسجالت للغراض العامة ‪ ،‬مثل خزن المعامالت ‪ ، Operands‬خزن نواتج العملٌات ‪ ، Result‬وغٌرها من َ‬
‫هذه المسجالت عند ‪ bank 0‬من الموقع ‪ 0Ch‬وتنتهً عند الموقع ‪ ، 4Fh‬اما عند ‪ bank 1‬فانها تبدء من الموقع ‪ 8Ch‬وتنتهً عند الموقع‬
‫‪. CFh‬‬

‫)‪Special Purpose Register(SPRs‬‬ ‫ُمسجالت األغراض الخاصة‬

‫تستخدم هذة هذه المسجالت للغراض الخاصة ‪ ،‬مثل تهٌئة أطراف ‪ Peripheral‬المسٌطر الدقٌق ‪ ، PIC16f84A‬تهئٌة المؤقتات والعدادات‬
‫وغٌرها من ال َعملٌات ‪ ،‬لكل موقع من هذه المواقع له وضٌفة معٌنة ستتعرف علٌها خالل مواصلتك لقراءة الكتاب ‪ ،‬تبدء هذه المسجالت عند‬
‫‪ bank 0‬من الموقع ‪ 00h‬وتنتهً عند الموقع ‪ ، 0Bh‬اما عند ‪ bank 1‬فانها تبدء من الموقع ‪ 80h‬وتنتهً عند الموقع ‪ٌ ، 8Bh‬تكون ‪File‬‬
‫‪ Register‬من مجموعة مسجالت للغراض خاصة‪،‬عددها ‪ 22‬سجل‪،‬وهً كاألتً‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 56‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪TRISA(Tri-State Buffer‬‬ ‫ال ُمسجل‬

‫وهو سجل مكون من ‪) 8-bit‬المستخدم منها فقط ‪ ( 5-bit‬النة ٌتعامل مع ‪ port A‬المكون من ‪ ، 5-bit‬وضٌفتة تحدٌد أتجاة نقل البٌانات‬
‫‪ ، Data‬أي تحدٌد طرف األدخال ‪ Input‬أو األخراج ‪ٌ ،Output‬وجد هذا المسجل فً الموقع ‪ 0x85‬من ‪ ، bank1‬القٌمة صفر تعنً‬
‫الطرف المحدد من ‪ port a‬هو طرف أدخال ‪ ، input‬أما القٌمة واحد فتعنً ان الطرف هو طرف أخراج ‪ ، Output‬لكً نجعل ‪porta‬‬
‫كلة منفذ أخراج ما علٌنا سوى تحمٌل المسجل ‪ trisa‬بالقٌمة ‪0x00‬‬

‫‪Trisa = 0x00 // the binary is 0000 0000‬‬

‫ولكً نجعل ‪ porta‬كلة منفذ أدخال ما علٌنا سوى تحمٌل المسجل ‪ trisa‬بالقٌمة ‪0xFF‬‬

‫‪Trisa = 0xff // the binary is 1111 1111‬‬

‫ولكً نجعل اول طرف ‪ RA0‬من ‪ porta‬طرف ادخال ‪ Input‬وباقً االطراف هً اطراف خروج ‪ Output‬ما علٌنا سوى تحمٌل المسجل‬
‫‪ trisa‬بالقٌمة ‪0xFE‬‬

‫‪Trisa = 0xFE‬‬ ‫‪//the binary is 1111 1110‬‬

‫مالحظة‪:‬‬
‫راجع الوحدة االولى النظام السادس عشر ‪Hex. Decimal system‬‬

‫)‪TRISB(Tri-State Buffer‬‬ ‫ال ُمسجل‬

‫ٌعمل هذا السجل نفس عمل المسجل ‪ trisa‬ولكنة مسؤول عن المنفذ ‪ ، portb‬وهو سجل مكون من ‪ 8-bit‬وضٌفتة تحدٌد أي بت من‬
‫‪ portb‬هو االدخال او االخراج ‪ٌ ،‬وجد هذا المسجل فً الموقع ‪ 0x86‬من ‪bank1‬‬

‫‪PORTA‬‬ ‫ال ُمسجل‬

‫وهو سجل مكون من ‪ 8-bit‬وضٌفتة استقبال البٌانات فً حالة الكون المنفذ ‪ A‬أدخال ‪ ،‬أو أخراج البٌانات الى العالم الخارجً فً حالة كون‬
‫المنفذ ‪ A‬أخراج ‪ ،‬وٌوجد هذا المسجل فً الموقع ‪ 0x05‬من ‪bank0‬‬

‫‪PORTB‬‬ ‫ال ُمسجل‬

‫وهو سجل مكون من ‪ 8-bit‬وضٌفتة استقبال البٌانات فً حالة الكون المنفذ ‪ B‬أدخال ‪ ،‬أو أخراج البٌانات الى العالم الخارجً فً حالة كون‬
‫المنفذ ‪ B‬أخراج ‪ ،‬وٌوجد هذا المسجل فً الموقع ‪ 0x06‬من ‪bank0‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 57‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Status Register‬‬ ‫ُمسجل الحالة‬
‫وهو مسجل مكون من ‪ 8-bit‬كل بت لة وضٌفة معٌنة الشكل ‪ٌ Fig 4.2‬بٌن مسجل الحالة ‪ ،‬وٌوجد هذا المسجل فً الموقع ‪ 0x03‬من ‪bank0‬‬
‫وكذلك ٌوجد عن الموقع ‪ 0x83‬من ‪bank 1‬‬

‫‪Bit 7‬‬ ‫‪Bit 0‬‬


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

‫‪Figure 4.2‬‬

‫)‪C(carry flag bit‬‬ ‫‪ o‬علم المحمل‬


‫علم المحمل ٌصبح هذ البت "‪ "0‬عندما تكون النتٌجة الحسابٌة الحالٌة لوحدة ‪ ALU‬موجبة ‪ ،‬اما اذا كانت سالبة سٌتحول هذا البت‬
‫الى صفر‬

‫)‪DC(Decimal Carry-Auxiliary carry‬‬ ‫‪ o‬علم المحمل الثانوي‬


‫ٌضه ر عند حوث محمل من البت الثالث الى البت الرابع فً النتٌجة الحسابٌة الحالٌة لوحدة ‪ALU‬‬

‫)‪Z(zero flag‬‬ ‫‪ o‬علم التصفٌر‬


‫ٌضهر عندما ٌكون الناتج صفر فً النتٌجة الحسابٌة الحالٌة لوحدة ‪.ALU‬‬

‫)‪bank select(RP0‬‬ ‫‪ o‬طرف تحدٌد ‪bank‬‬


‫من المعروف أن المسٌطر الدقٌق ٌتكون من ‪ ، two bank‬ولكً نتحوٌل بٌن هذٌن ‪ ، banks‬نستخدم الطرف ‪، Rp0‬حٌث ٌستخدم‬
‫الطرف ‪ Rp0‬لتحدٌد أي ‪ bank‬من ‪ File Register‬سٌتم التعامل معه َحسب‬

‫"‪Bit 0 = select "bank 0‬‬


‫"‪Bit 1 = select "bank 1‬‬

‫)‪Power Down(PD‬‬ ‫أنخفاظ الطاقة‬ ‫‪‬‬

‫ٌرفع هذا الطرف الى القٌمة واحد عند بداٌة تشغٌل المسٌطر الدقٌق ‪ ،‬وٌصفر ‪ reset‬عندما ٌدخل المسٌطر الدقٌق فً نمط حفظ‬
‫استهالك الطاقة مثل تنفٌذ تعلٌمة ‪ ، Sleep‬كما ٌحصل فً الحاسب الشخصً عند تركة لفترة بدون ان تقوم بأي عمل ‪ ،‬او عند تنفٌذ‬
‫التعلٌمة ‪ CLRWDT‬وذلك لتصفٌر مؤقت الحراسة‪.‬‬

‫‪Bit 0 = execute "Sleep" or "CLRWDT" instruction‬‬


‫‪Bit 1 = Power On‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 58‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪Timer Out (TO‬‬ ‫أنقضاء الوقت‬ ‫‪‬‬
‫ترفع هذا الطرف الى القٌمة واحد عند بداٌة تشغٌل المسٌطر الدقٌق او عند تنفٌذ تعلٌمة ‪ CLRWDT‬او تعلٌمة ‪ ، Sleep‬وٌصفر هذا‬
‫الخانة عندما ٌنتهً مؤقت الحراسة من العد ‪ WatchDog Timer‬مشٌراً مشٌراً لحدث غٌر طبٌعً اصاب المسٌطر الدقٌق أي أن‬
‫التعلٌمة الحالٌة لم تنفذ ‪،‬‬

‫‪Bit 0 = WatchDog Timer End‬‬


‫‪Bit 1 = Power On, execute "Sleep" or "CLRWDT" instruction‬‬

‫مالحظة‪:‬‬

‫الطرفٌن ‪ RP1,IRP‬مهملة فً المسٌطر الدقٌق ‪Pic16f84a‬‬

‫‪Option Register‬‬ ‫ال ُمسجل‬


‫وهو مسجل مكون من ‪ 8-bit‬كل بت لة وضٌفة معٌنة الشكل ‪ٌ Fig 4.3‬بٌن مسجل ‪ ، option‬وٌوجد هذا المسجل فً الموقع ‪ 0x81‬من‬
‫‪bank1‬‬

‫‪Bit 7‬‬ ‫‪Bit 0‬‬


‫‪RBPU‬‬ ‫‪INTEDG‬‬ ‫‪TOCS‬‬ ‫‪TOSE‬‬ ‫‪PSA‬‬ ‫‪Ps2‬‬ ‫‪Ps1‬‬ ‫‪Ps0‬‬

‫‪Figure 4.3‬‬

‫‪Ps0,Ps1,Ps2‬‬ ‫أطراف تحدٌد مقسم التردد ‪Prescaler‬‬ ‫‪‬‬

‫أذا كنت من متخصصً علم االلكترونٌات الرقمٌة ‪ ،‬وقد استخدمت عداد تصاعدي بأستخدام مجموعة نطاطات ‪ ، Flip-flop‬فاكٌد أنت تعرف‬
‫أن العدادات تستخدم كمقــــــــسمة للتردد وذلك بأخذ طرف من أطراف مخــــــارج العداد ‪ ،‬ال حظ الشــــكل ‪ Figure 4.4‬تجد عداد‬
‫ٌســــمى ‪ 8-bit prescaler‬خرج هذا العداد ربط الى مازج ‪ multiplexer‬من نوع ‪ 8-1 Mux‬الحظ ان اشارت تحدٌد دخل المازج هً‬
‫‪ ps0,ps1,ps2‬اي أن خرج العدد سٌقسم بشكل موزون اي عند الخرج االول للعداد ستجد أن قٌمة التردد هً نفسها تردد دخل العداد وعند‬
‫الخرج الثانً ستجد أن خرج العداد هو التردد مقسوم على ‪ 2‬وعند الطرف الثالث سٌكون التردد مقسوم على ‪ 4‬وهكذا ‪ٌ ،‬ستخدم المازج‬
‫كمفتاح ‪. Selector‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 59‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪fin/4‬‬

‫‪Figure 4.4‬‬

‫مالحظة ‪:‬‬
‫لمزٌد من المعلومات فً كٌف استخدام العدادات كمقسمة للتردد اقرء أحد كتب االلكترونٌات الرقمٌة ‪.‬‬

‫الجدول التالً ٌبٌن نسبة تقسٌم التردد لكل من المؤقت ‪ timer‬ومؤقت الحراسة ‪Watchdog timer‬‬

‫‪Ps2,ps1,ps0‬‬ ‫نسثح التقسين ‪timer‬‬ ‫نسثح التقسين ‪watchdog‬‬


‫‪000‬‬ ‫‪1/2‬‬ ‫‪1=frequncy in‬‬
‫‪001‬‬ ‫‪1/4‬‬ ‫‪1/2‬‬
‫‪010‬‬ ‫‪1/8‬‬ ‫‪1/4‬‬
‫‪011‬‬ ‫‪1/16‬‬ ‫‪1/8‬‬
‫‪100‬‬ ‫‪1/32‬‬ ‫‪1/16‬‬
‫‪101‬‬ ‫‪1/64‬‬ ‫‪1/32‬‬
‫‪110‬‬ ‫‪1/128‬‬ ‫‪1/64‬‬
‫‪111‬‬ ‫‪1/256‬‬ ‫‪1/128‬‬

‫‪Table 4.0‬‬

‫)‪PSA(prescaler assignment‬‬ ‫‪ o‬الطرف ‪PSA‬‬

‫فً المسٌطر الدقٌق ‪ٌ pic16f84a‬وجد نوعان من المؤقتات وهما مؤقت الحراسة ‪ watchdog timer‬والمؤقت ‪ timer‬وكال الموقتان‬
‫عدادان اعتٌادٌان ٌحتاجان الى تردد ‪ frequency‬لكً ٌعمالن ‪ ،‬واٌضا ً ٌمكن تقسٌم هذا التردد باالعتماد على قٌم ‪ ps0,ps1,ps2‬الحظ‬
‫الجدول ‪ ،table 4.0‬اذن الخٌار ‪ٌ PSA‬قوم باسناد المقسم الى مؤقت الحراسة عندما ٌكون ‪ PSA=1‬وٌسند المقسم الى المؤقت ‪ timer‬عندما‬
‫تكون ‪ PSA=0‬ونسبة التقسٌم كما علمنا تعتمد على ‪ ، ps0,pos1,ps2‬أعلم ان تردد موقت الحراسة ‪ WDTMR‬هو نفسة تردد المذبب‬
‫‪ Oscilator‬وتردد المؤقت هو ‪ Oscilator/4‬اي تردد المصدر مقسم على اربعة‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 61‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الشكل التالً ‪ٌ Figure 4.5‬مثل الدائرة الداخلٌة لمؤقت الحراسة ‪ Watchdog timer‬والموقت ‪Timer‬‬

‫‪J‬‬

‫‪CL‬‬

‫‪K‬‬
‫‪،‬‬

‫‪Figure 4.5‬‬

‫مالحظة ‪:‬‬
‫الغاٌة األساسٌة الستخدام مقسم التردد ‪ prescaler‬هو لتحدٌد سرعة العدد ‪Counting‬‬

‫)‪TOCS(TIMER OUT,COUNTER‬‬ ‫‪ o‬الطرف ‪TOCS‬‬

‫ٌحتوي المسٌطر الدقٌق على وضٌفة ‪ ،‬المؤقت ‪ ، timer‬العداد ‪ ، counter‬باستخدام هذه الخانة ٌمكن التنقل بٌن النمطٌن ‪ ،‬اذا كانت قٌمة‬
‫الخانة صفر فنمط المؤقت ‪ timer‬هو المفعل فً المسٌطر الدقٌق‪ ،‬اما اذا كانت قٌمة الخانة واحد فنمط العداد ‪ counter‬هو المفعل‪،‬‬

‫)‪TOSE(timer out,counter trigger edge‬‬ ‫‪ o‬الخانة ‪TOSE‬‬

‫بالنسبة للعداد‪،‬لكً ٌزداد ٌحتاج الى عملٌة قدح من احدى اطراف المسٌطر‪ٌ ،‬تم ذلك عند طرٌق الطرف ‪ ، RA4/TOCK 1‬من خالل هذه‬
‫الخانة ٌمكنا تحدٌد نوع جبهة القدح من الحافة الصاعدة او الحافة النازلة حسب‪..‬‬

‫‪Tose=logic 0 ,rising edge‬‬

‫‪Tose=logic 1 ,falling edge‬‬

‫اما بالنسبة لنمط المؤقت‪ ،‬فٌمكن بدء المؤقت ‪ Start timing‬عن طرٌق الطرف ‪RA4‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 60‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪INTEDG(interrupt edge‬‬ ‫‪ o‬الخانة ‪INTEDG‬‬

‫تستخدم لتحدٌد حافة القدح لعملٌة المقاطعة ‪ ، interrupt‬سٌتم شرح المقاطعات فً فصول الحقة ‪ ،‬وتكون الحافة‬

‫‪INTEDG = logic 0 ,falling edge‬‬

‫‪INTEDG = logic 1 ,rising edge‬‬

‫)‪RBPU(Register 'B' pull up Resistor enable‬‬ ‫‪ o‬الخانة ‪RBPU‬‬

‫عند كل طرف من اطراف المرفأ ‪ٌ ، portb‬وجد مقاومة سحب ‪ ، pull up resistor‬هذه المقامات ممكن تفعٌلها عندما تكون قٌمة هذه‬
‫الخانة صفر‪ ،‬او ابطالها عندما تكون قٌمة هذه الخانة واحد‪،‬‬

‫مالحظة ‪:‬‬

‫لمعلومات اكثر عن مقاومات ‪ pull up,pull down‬راجع اي كتاب عن االلكترونٌات الرقمٌة ‪.‬‬

‫)‪FSR Register (File Select Register‬‬ ‫ُمسجل ‪FSR‬‬

‫وهو مسجل مكون من ‪ٌ 8-bit‬قع عند العنوان ‪ 0x04‬من ‪ bank 0‬والعنوان ‪ 0x84‬من ‪ ، bank 1‬عند تحمٌل هذا المسجل بقٌمة معٌنة ‪،‬‬
‫فانة ٌعتبر هذة القٌمة عنوان ‪ Address‬لمسجل ‪ ،‬اي أن قٌمة مسجل ‪ FSR‬تشٌر الى عنوان مسجل اخر ‪ ،‬مثالَ لو حملنا المسجل ‪FSR‬‬
‫بالقٌمة ‪ 0x05‬اي اننا حملنا المسجل بعنوان ‪ ، Prota‬فٌشٌر المسجل ‪ FSR‬الى المسجل ‪ ، Porta‬وتضهر محتوٌات المسجل ‪ porta‬عند‬
‫المسجل ‪ INDF‬الذي سنشرحة فً الفقرة التالٌة ‪.‬‬

‫)‪INDF Register (Indirect Addressing Register‬‬ ‫ُمسجل ‪INDF‬‬

‫ٌقوم هذا المسجل بخزن محتوٌات مسجل تم االشارة الٌة عن طرٌق المسجل ‪ٌ ، FSR‬قع عند العنوان ‪ 0x00‬من ‪ bank 0‬والعنوان ‪ 0x80‬من‬
‫‪ ، bank 1‬تسمى طرٌقة العنونة هذ بالعنونة الغٌر مباشرة ‪،‬الحظ الشفرة التالٌة التً تبٌن العالقة بٌن المسجل ‪ FSR‬والمسجل ‪، INDR‬‬

‫هذه الشفرات للتوضٌح فقط وال تتبع قواعد برمجٌة معٌنة‬


‫‪porta = 0x22‬‬
‫‪FSR = 0x05 // address of porta‬‬
‫‪INDF = 0x22 //data of porta‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 62‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪TMR0 Register (Timer Register‬‬ ‫ُمسجل ‪TMR0‬‬

‫وهو مسجل مكون من ‪ٌ ، 8-bit‬خزن قٌمة العد الحالٌة اوقٌمة الوقت المنقضً للموقت عند تفعٌل المؤقت او العداد ‪ ،‬وٌق هذا المسجل عن‬
‫العنوان ‪ 0x01‬من ‪. bank 0‬‬

‫‪Program Counter Latch low & Latch High‬‬ ‫ُمسجل ‪PCL & PCLATH‬‬

‫ذاكرة البرنامج ‪ program memory‬فً المسٌطر ‪ PIC16f84a‬المنفذ منها فقط ‪ 1 Kilo‬والباقً مهمل ‪ ،‬هذة المساحة ‪ 1 Kilo‬تسمى‬
‫صفحة ‪ page‬كل صفحة عادة تتكون من ‪ 1 Kilo‬فً مسٌطرات اخرى مثل المسٌطر ‪ٌ PIC16f877a‬تكون من أكثر من صفحة وٌستخدم‬
‫المسجل ‪ PCl‬والمسجل ‪ PClath‬للتنقل بٌن هذة الصفحات ‪ Page‬وكذلك التغلب على مشكلة االلتفاف ‪ warpping‬حول الصفحة ‪ ،‬التهتم‬
‫كثٌرة عن هذة المشكلة وكذلك التنقل بٌن الصفحات فالمسٌطر ‪ PIC16f84a‬ببساطة ٌتكون من صفحة واحدة ‪ ،‬اي ٌمكنك التنقل خالل‬
‫الصفحة الواحدة فقط عن طرٌق هذٌن المسجلٌن ‪ ،‬لنعود الى عداد البرنامج )‪ Program Counter(PC‬الذي هو مسجل مكون من ‪، 13-bit‬‬
‫الـ ‪ byte‬السفلً )>‪ٌ (PC<7:0‬أتً من المسجل ‪ PCL‬وهو مسجل قابل للقراءة والكتابة ٌقع عند العنوان ‪ 0x02‬من ‪ bank 0‬والعنوان ‪0x82‬‬
‫من ‪ bank1‬أما باقً العنوان )>‪ (PC<12:8‬فٌمكن الكتابة الٌة فقط بصورة غٌر مباشرة عن طرٌق المسجل ‪ PCLATH‬وهو مسجل مكون من‬
‫‪ 5-bit‬فقط الذي ٌــقع عند العنوان ‪ 0x0A‬من ‪ bank 0‬والعنوان ‪ 0x8A‬من ‪ ، bank1‬بشكل طبٌعً ٌتم زٌادة عداد البرنامج بشكل ذاتً‬
‫وذلك لتنفٌذ البرنامج المخزن فً ذاكرة البرنامج ‪، Program memory‬وٌتم تغٌٌر محتوٌات عداد البرنامج عن تنفٌذ تعلٌمات القفز‬
‫واستدعاء الدوال والمقاطعات ‪ ،‬وٌمكن اٌضا ً القفز الى اي موقع عن طرٌق تحمٌل هذٌن المسجلٌن ‪ ،‬ولكن كن حذراً عند التعامل معهما لكً‬
‫ال ٌختل سٌر البرنامج ‪ ،‬الشكل ‪ٌ Figure 4.6‬بٌن العالقة بٌن عداد البرنامج ‪ Program counter‬والمسجلٌن ‪PCL & PCLATH‬‬

‫‪Figure 4.6‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 63‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪INTCON(Interrupt Controller Register‬‬ ‫ُمسجل ‪INTCON‬‬

‫ٌتكون هذا المسجل من ‪ ، 8-bit‬كل خانة لها وضٌفة معٌنة ‪ ،‬هذا المسجل مسئول عن تنفٌذ او تفعٌل خدمة المقاطعات فً المتحكم الصغري‬
‫‪ٌ ،microcontroller‬قع هذا المسجل عند العنوان ‪ 0x0B‬من ‪ bank0‬والعنوان ‪ 0x8B‬من ‪ ، bank1‬الشكل ‪ٌ Fig 6.7‬بٌن مسجل‬
‫‪INTCON‬‬

‫‪Bit 7‬‬ ‫‪Bit 0‬‬


‫‪GIE‬‬ ‫‪PEIE‬‬ ‫‪TMR0IE‬‬ ‫‪INTE‬‬ ‫‪RBIE‬‬ ‫‪TMR0IF‬‬ ‫‪INTF‬‬ ‫‪RBIF‬‬

‫‪Figure 4.7‬‬

‫الوظائف التً ٌقوم بها المسجل ‪INTCON‬‬

‫)‪GIE(Global Interrupt Enable‬‬ ‫‪ o‬الخانة ‪GIE‬‬

‫عندما ترفع هذة الخانة الى الواحد فانة ٌمكن خدمة المقاطعات بجمٌع انواعها ‪ ،‬اما عندما تصفر هذة الخانة فانة المسٌطر الدقٌق ٌبطل‬
‫خدمة المقاطعات ‪.‬‬

‫)‪PEIE(Programmable Earsable ROM Interrupt Enable‬‬ ‫‪ o‬الخانة ‪PEIE‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة الذاكرة ‪ EEPROM‬والتً تشٌر الى انتهاء عملٌة الكتابة‬
‫‪ ، Writting‬أما عندما تصفر هذة الخانة فانة ٌتم ابطال خدمة المقاطعة الكتمال عملٌة الكتابة للذاكرة ‪. EEPROM‬‬

‫)‪TMR0IE(Timer Interrupt Enable‬‬ ‫‪ o‬الخانة ‪TMR0IE‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة المؤقت ‪ Timer‬والتً تحدث انتهاء الوقت ‪ ،times‬أما‬
‫عندما تصفر هذة الخانة فانة ٌتم ابطال خدمة مقاطعة المؤقت ‪. Timer‬‬

‫)‪INTE(Interrupt Enable‬‬ ‫‪ o‬الخانة ‪INTE‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة بواسطة الطرف ‪ ، INT‬أما عندما تصفر هذة الخانة فانة ٌتم‬
‫ابطال خدمة مقاطعة ‪. INT‬‬

‫)‪RBIE( Portb RB(7:4) Interrupt Enable‬‬ ‫‪ o‬الخانة ‪RBIE‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة بواسطة االطراف ‪ ، RB7,RB6,RB5,RB4‬أما عندما‬
‫تصفر هذة الخانة فانة ٌتم ابطال خدمة مقاطعة عن طرٌق هذة االطراف ‪.‬‬

‫)‪INTF(Interrupt Flag‬‬ ‫‪ o‬الخانة ‪INTF‬‬

‫ٌرفع هذا العلم بشكل ذاتً عند حدوث مقاطعة عند الطرف ‪. INT‬‬
‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 64‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬
‫)‪RBIF (Register portb Interrupt Flag‬‬ ‫‪ o‬الخانة ‪RBIF‬‬

‫ٌرفع هذا العلم الى القٌمة واحد بشكل ذاتً عند حدوث مقاطعة من الطرف ‪.RB4-RB7‬‬

‫)‪TMR0IF (Timer Out Interrupt Flag‬‬ ‫‪ o‬الخانة ‪TMR0IF‬‬

‫ٌرفع هذا العلم الى الحالة واحد عند طفحان المؤقت ‪ ، Timer0‬مشٌر الى انتهاء الزمن المحدد للمؤقت‪.‬‬

‫)‪EEADR(EEPROM Address Register‬‬ ‫ُمسجل ‪EEADR‬‬

‫ٌستخدم هذا المسجل المكون من ‪ 8-bit‬لتحدٌد عنوان ‪ Address‬الذاكرة ‪ Eeprom‬لكً ٌتم القراءة او الكتابة الى هذا الذاكرة ‪ٌ ،‬قع هذا‬
‫المسجل عند الموقع ‪ 0x09‬من ‪. bank0‬‬

‫)‪EEDATA(EEPROM Data Register‬‬ ‫ُمسجل ‪EEDATA‬‬

‫ٌستخدم هذا المسجل المكون من ‪ 8-bit‬الرسال البٌانات ‪ Data‬الى الذاكرة ‪ eeprom‬لٌتم خزن البٌانات باالعتماد على العنوان الذي ٌتم‬
‫تحدٌدة بواسطة المسجل ‪ ، EEADR‬كذلك ٌقوم هذا المسجل باستقبال البٌانات التً ٌتم قراءتها من ذاكرة ‪ٌ ، eeprom‬قع هذا المسجل عند‬
‫الموقع ‪ 0x08‬من ‪. bank0‬‬

‫)‪EECON(EEPROM Controller Register‬‬ ‫ُمسجل ‪EECON1‬‬

‫ٌتكون هذا المسجل من ‪ 8-bit‬المستغل منها فقط ‪ٌ ، 5-bit‬قوم هذا المسجل بالتحكم بعملٌات القراءة والكتابة الى الذاكرة ‪ٌ ، eeprom‬قع هذا‬
‫المسجل عند العنوان ‪ 0x88‬من ‪ٌ ، bank 1‬بٌن الشكل ‪ Fig 4.8‬المسجل ‪eecon1‬‬

‫‪-‬‬
‫‪Bit 7‬‬ ‫‪Bit 0‬‬
‫‪EEPGD‬‬ ‫‪-‬‬ ‫‪-‬‬ ‫‪-‬‬ ‫‪WRERR‬‬ ‫‪WREN‬‬ ‫‪WR‬‬ ‫‪RD‬‬

‫‪Figure 4.8‬‬

‫الوضائف التً ٌقوم بها المسجل ‪EECON1‬‬

‫)‪RD (Read Operation‬‬ ‫‪ o‬الخانة ‪RD‬‬

‫عند رفع هذة الخانة الى القٌمة واحد تمكن عملٌة القراءة من الذاكرة ‪ ، eeprom‬وال ٌمكن تصفٌرها النها تصفر بعد أن تتم عملٌة‬
‫القراءة‪.‬‬

‫)‪WR (Write Operation‬‬ ‫‪ o‬الخانة ‪WR‬‬

‫عند رفع هذة الخانة الى القٌمة واحد تبدء عملٌة الكتابة الى الذاكرة ‪ ، eeprom‬وال ٌمكن تصفٌرها النها تصفر بعد أن تتم عملٌة‬
‫الكتابة‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 65‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫)‪WREN (Write Enable Operation‬‬ ‫‪ o‬الخانة ‪WREN‬‬

‫عند رفع هذة الخانة الى القٌمة واحد تمكن عملٌة الكتابة الى الذاكرة ‪ ، eeprom‬وعند تصفٌرها النها تصفر تبطل عملٌة الكتابة‪.‬‬

‫)‪WRERR (Write Error‬‬ ‫‪ o‬الخانة ‪WRERR‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فانة تشٌر بذلك الى حدوث خطأ فً عملٌة الكتابة ‪ ،‬أما عندما تصفر فذلك ٌدل على أن عملٌة‬
‫الكتابة تمت ‪.‬‬

‫)‪EEPGD (Eeprom Program Memory Or Data Memory‬‬ ‫‪ o‬الخانة ‪EEPGD‬‬

‫عندما ترفع هذة الخانة الى القٌمة واحد فانة تشٌر بذلك الى ذاكرة البرنامج ‪ ،eeprom program memoey‬أما عند تصفٌر هذة‬
‫الخانة فأنة ٌتم التاشٌر الى ذاكرة البٌانات ‪eeprom data memory‬‬

‫)‪EECON(EEPROM Controller Register‬‬ ‫ُمسجل ‪EECON 2‬‬

‫هذا الموقع غٌر منفذ ‪. Unimplemented‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 66‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit five‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة الخامسة‬

‫‪Instruction Set‬‬ ‫طقم التعلٌمات‬


‫ُمقدم ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ــة‪:‬‬
‫سوف ن َتعرف على َمجموعة ال َتعلٌمات ‪ Instruction Set‬المتوفرة فً المتحكم الصغري ‪ُ ، PIC16f84A‬تعتبرهذة‬ ‫َ‬ ‫فً هذه الوحدة‬
‫سوف تسأل نفسك ما الفائدة أو‬
‫َ‬ ‫الوحدة كمرجع لك َتعود الٌة عند الحاجة الى ال َتعرف الى َوضٌفة َتعلٌمة مُعٌنة ‪ ،‬عند قراءتك لهذة الوحدة‬
‫الغاٌة من تعلٌمة ما ‪،‬ال تقلق ‪ ،‬فالتعلٌمة بحد ذاتها بدون فائدة ما لم تتكامل مع َمجموعة َتعلٌمات لتؤدي َوضٌفة مُعٌنة مكونة ما ٌُسمى‬
‫بالبرنامج ‪ ، Program‬مع تقدمك فً فصول الكتاب وكتابة برامج سوف ت َتضح الفكرة اكثر‪ ،‬من الجٌد معرفه أن عدد ال َتعلٌمات المتوفرة‬
‫فً الماٌكروكونترولر ‪ PIC16f84A‬هو ‪ 32‬تعلٌمة ‪ ،‬منها ما ٌستغرق فترة زمنٌة مقدارها ‪ 1‬ماٌكروثانٌة ‪ ،‬ومنها ما ٌستغرق فترة‬
‫مقدارها ‪ 2‬ماٌكروثانٌة‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 67‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Program‬‬ ‫البَرنامج‬

‫عبارة عن سِ لسلة من ال َتعلٌمات أو األٌعازات ‪ instruction‬المُتتابعة ‪ ،‬التً توجه َعمل الماٌكروكونترولر ‪ PIC16f84A‬لغرض تأدٌة‬
‫َوضٌفة معٌنة ‪.‬‬

‫‪Instruction Set‬‬ ‫طَقم التَعليمات‬


‫لقد ُقلنا أن البرنامج عبارة عن َمجموعة من ال َتعلٌمات ‪ Instructions‬الممتابعة ‪ ،‬أذن العنصر األساسً لتكوٌن البرنامج هو ال َتعلٌمة ‪،‬‬
‫تقسم التعلٌمات فً الماٌكروكونترولر ‪ PIC16f84A‬إلى ‪،‬‬

‫‪Bit Orientation Operations‬‬ ‫التعلٌمات على مســـتوى البت‬ ‫‪‬‬


‫‪Byte Orientation Operation‬‬ ‫التعلٌمات على مسـتوى الباٌت‬ ‫‪‬‬
‫‪Lateral and Control Operations‬‬ ‫تعلٌمات الســــٌطرة والثوابت‬ ‫‪‬‬

‫‪Bit Orientation Operations‬‬ ‫التعليمات على ُمستوى البت‬


‫َ‬
‫وهً ال َتعلٌمات التً َتجري على بت معٌن ضِ من مُسجل مُعٌن ‪ ،‬مثل تغٌٌر قٌمة بت من ‪ 1‬الى ‪ 0‬أو من ‪ 0‬الى ‪ ، 1‬عادةٌ ٌشار الى البت‬
‫المراد إجراء ال َعملٌة علٌة بالرمز "‪ "b‬بٌنما ٌُرمرز للمُسجل المُراد َتغٌٌر أحد بتاتة بالرمز "‪ ، "f‬الجدول ‪ٌَ Table 5.1‬وضح َمجموعة‬
‫ال َتعلٌمات على مستوى البت المتوفرة فً الماٌكروكونترولر ‪، PIC16f84A‬‬

‫‪Table 5.1‬‬

‫‪Bit Clear Flag‬‬ ‫التعلٌمة ‪BCF‬‬

‫َتقوم َهذه ال َتعلٌمة ب َتصفٌر أحد بتات مُسجل ‪ ، Register‬وتأخذ ال َتعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪BCF f , b‬‬

‫حٌث ‪:‬‬

‫‪ٌ :f‬مُثل المُسجل المُراد َتصفٌر أحد بتاتة‪،‬‬

‫‪ٌ :b‬مثل ر َقم البت المراد َتصفٌرة من المُسجل ‪، f‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 68‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مُالحظة‪:‬‬

‫َتستهلك هذه ال َتعلٌمة دَورة ماكنة واحدة ‪ ،‬أي أن هذه ال َتعلٌمة َتستغرق َفترة َزمنٌة مقداره ‪ 1‬ماٌكروثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Bit Set Flag‬‬ ‫التعلٌمة ‪BSF‬‬

‫َتقوم هذه ال َتعلٌمة برفع أحد بتات مسجل ‪ Register‬الى ال َقٌمة واحد ‪ ،‬وتأخذ ال َتعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪BSF f , b‬‬

‫حٌث ‪:‬‬
‫‪ٌُ :f‬مثل المُسجل المُراد َرفع أحد بتاتة ‪ Bit‬إلى القٌمة واحد‪،‬‬

‫‪ٌُ :b‬مثل َرقم البت ‪ Bit‬المُراد َرفع قٌمته إلى الواحد من المُسجل ‪، f‬‬

‫مُالحظة‪:‬‬

‫َتستهلك هذه ال َتعلٌمة دَورة ماكنة واحدة ‪ ،‬أي أن هذه ال َتعلٌمة َتستغرق َفترة َزمنٌة مقداره ‪ 1‬ماٌكروثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Bit Test Flag Skip If Set‬‬ ‫التعلٌمة ‪BTFSS‬‬

‫لكً َنفهم وضٌفة َهذه ال َتعلٌمة ‪َ ،‬دعنا نأخذ الشفرة ‪ Code‬التالٌة‪،‬‬

‫‪1 BTFSS 0x0C, 2‬‬


‫‪2 BSF‬‬ ‫‪0x0C , 2‬‬
‫‪3 BCF‬‬ ‫‪0x0C , 3‬‬

‫تقوم التعلٌمة األولى والتً هً ‪ BTFSS 0x0C,2‬بفحص البت ‪ Bit‬الثانً من المسجل ‪ 0x0C‬فأذا كان واحد ‪ٌُ ،‬حمل عداد البرنامج ‪PC‬‬
‫بعنوان ال َتعلٌمة الثالثة التً هً ‪ BCF 0x0C,3‬لٌنفذها ‪ ،‬بصٌغة أخرى عندما ُتنفذ ال َتعلٌمة ‪ BTFSS‬وكان البت المراد فحصة ٌساوي واحد‬
‫ٌتم َقفز ال َتعلٌمة التً َتلً َتعلٌمة ‪ BTFSS‬لٌتم تنفٌذها أي سٌتم قفز التعلٌمة الثانٌة الى التعلٌمة الثالثة والتً هً ‪ BCF 0x0C,3‬لقوم المعالج‬
‫بتنفٌذها ‪ ،‬أما أذا كان البت ‪ Bit‬المُراد فحصة ٌَحمل القٌمة صفر فٌتم تنفٌذ التعلٌمة التً تلً التعلٌمة ‪ BTFSS‬مباشرتا ً أي سٌتم تنفٌذ التعلٌمة‬
‫الثانٌة ‪ BSF 0x0C,3‬وٌستمر تنفٌذ البرنامج ’ أي سٌتم تنفٌذ التعلٌمة الثالثة اٌضا ً والرابعة وهكذا ‪ ،‬اذن التعلٌمة ‪ BTFSS‬تعتبر من تعلٌمات‬
‫القفز ‪ Jump‬وتأخذ الت َعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪BTFSS f , b‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 69‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫حٌث‪:‬‬

‫‪ٌُ :f‬مثل المُسجل المُراد فحص أحد بتاتة ‪،‬‬

‫‪ٌُ :b‬مثل َرقم البت المُراد َفحصة من المُسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستغرق‬ ‫َتستهلك هذه ال َتعلٌمة دورة ماكنة واحدة إذا لم ٌتحقق ال َشرط أي إذا كان البت المُراد َفحصة صفر ‪ ،‬أن هذه ال َتعلٌمة فً هذه الحالة َ‬
‫فترة َزمنٌة مقدارها ‪ 1‬ماٌكرو ثانٌة ‪ ،‬أما إذا َتحقق ال َشرط أي عندما ٌكون البت المراد فحصة ًٌحمل القٌمة واحد ‪ ،‬فستأخذ هذه ال َتعلٌمة‬
‫الزمنٌة التً َتستغرقها ال َتعلٌمة ستكون ‪ 2‬ماٌكروثانٌة‪.‬‬
‫دورتان ماكنة أي ان الفترة َ‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Bit Test Flag Skip If Clear‬‬ ‫التعلٌمة ‪BTFSC‬‬

‫حٌث أن تعلٌمة ‪ BTFSC‬تقفز ‪ Jumping‬أذا كان البت ‪ Bit‬المُراد َفحصة ٌَحمل القٌمة صفر‬ ‫ُ‬ ‫َتعمل هذه ال َتعلٌمة َعكس َعمل َتعلٌمة ‪BTFSS‬‬
‫‪،‬أما اذا كان البت المراد فحصة ٌحمل القٌمة واحد فسٌتم تنفٌذ التعلٌمة التً تلً َتعلٌمة ‪ BTFSC‬مباشرتا َ ‪ ،‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪BTFSC f , b‬‬

‫حٌث‪:‬‬

‫فحص أحد بتاتة ‪،‬‬


‫‪ٌُ :f‬مثل المُسجل المُراد َ‬

‫‪ٌُ :b‬مثل َرقم البت المُراد َفحصة من المُسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫َتستهلك هذه ال َتعلٌمة دورة ماكنة واحدة إذا لم ٌتحقق ال َشرط أي إذا كان البت المُراد َفحصة واحد ‪ ،‬أن هذه ال َتعلٌمة فً هذه الحالة ت َستغرق‬
‫فترة َزمنٌة مقدارها ‪ 1‬ماٌكرو ثانٌة ‪ ،‬أما إذا تحقق الشرط أي عندما ٌكون البت المراد فحصة ًٌحمل القٌمة صفر ‪ ،‬فستأخذ هذه ال َتعلٌمة‬
‫الزمنٌة التً َتستغرقها ال َتعلٌمة ستكون ‪ 2‬ماٌكروثانٌة‪.‬‬
‫دورتان ماكنة أي ان الفترة َ‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 71‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Lateral and Control Instruction‬‬ ‫تعليمات السيطرة والثوابت‬

‫وهً التعلٌمات التً تسٌطر على سٌر عمل البرنامج مثل تعلٌمات القفز ‪ ، Jump‬وكذلك تتضمن التعلٌمات الخاصة بتحمٌل قٌم ثابتة ‪K‬‬
‫الى مسجل معٌن ‪ ،‬الجدول ‪ٌ Table 5.2‬وضح مجموعة تعلٌمات السٌطرة والثوابت ‪،‬‬

‫‪Table 5.2‬‬

‫‪MOV Lateral to W Reg.‬‬ ‫التعلٌمة ‪MOVLW‬‬

‫تقوم هذه التعلٌمة بنقل قٌمة ثابتة ‪ Lateral‬الى مسجل العمل ‪ ،W Reg.‬وتأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪MOVLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد أجراء نقلة مسجل العمل ‪. W Reg.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ADD Lateral to W Reg.‬‬ ‫التعلٌمة ‪ADDLW‬‬

‫تقوم هذه التعلٌمة بجمع قٌمة ثابتة ‪ Lateral‬مع قٌمة مسجل العمل ‪ ، W Reg.‬وتخزن النتٌجة فً مسجل العمل ‪ ، W Reg.‬تأخذ التعلٌمة‬
‫الصٌغة التالٌة ‪،‬‬

‫‪ADDLW K‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 70‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد جمعة مع مسجل العمل ‪. W Reg.‬‬

‫‪AND Lateral and W Reg.‬‬ ‫التعلٌمة ‪ANDLW‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ AND‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وقٌمة ثابتة ‪ ،‬وتأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪ANDLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد أجراء عملٌة ‪ AND‬المنطقٌة علٌة ‪.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪CALL Statement‬‬ ‫التعلٌمة ‪CALL‬‬

‫تقوم هذه التعلٌمة باستدعاء برنامج ثانوي ‪ Subroutine‬مخزون فً موقع اخر من الذاكرة ‪ ،‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪CALL K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل أسم البرنامج الثانوي ‪ Subroutine‬المراد استدعاءة ‪.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورتان ماكنة‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 2‬ماٌكرو ثانٌة‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪Clear Watchdog Timer‬‬ ‫التعلٌمة ‪CLRWDT‬‬

‫تقوم هذه التعلٌمة بتعطٌل وضٌفة مؤقت الحراسة ‪ ، ،‬تأخذ التعلٌمة الصٌغة التالٌة‪.‬‬

‫‪CALL K‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 72‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Goto Statement‬‬ ‫التعلٌمة ‪Goto‬‬

‫تقوم هذه التعلٌمة بالقفز الى موقع أخر من الذاكرة ‪ ،‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪Goto K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل عنوان موقع الذاكرة المراد القفز الٌة ‪.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورتان ماكنة‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 2‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Exclusive OR Lateral With W Reg.‬‬ ‫التعلٌمة ‪XORLW‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ Ex-OR‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وقٌمة ثابتة ‪ ،‬وتأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪XORLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد أجراء عملٌة ‪ Ex-OR‬المنطقٌة علٌة ‪.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫‪Inclusive OR Lateral With W Reg.‬‬ ‫التعلٌمة ‪IORLW‬‬


‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ OR‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وقٌمة ثابتة ‪ ،‬وتأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪IORLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد أجراء عملٌة ‪ OR‬المنطقٌة علٌة ‪.‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 73‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Subtract Lateral from W Reg.‬‬ ‫التعلٌمة ‪SUBLW‬‬

‫تقوم هذه التعلٌمة بطرح قٌمة ثابتة ‪ Lateral‬من قٌمة مسجل العمل ‪ ، W Reg.‬وتخزن النتٌجة فً مسجل العمل ‪ ، W Reg.‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪SUBLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد طرحة من مسجل العمل ‪. W Reg.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪SLEEP Instruction‬‬ ‫التعلٌمة ‪SLEEP‬‬

‫تقوم هذه التعلٌمة بأدخال المسٌطر الدقٌق فً وضع توفٌر الطاقة ‪ standby Mode‬حٌث ٌتوقف المعالج عن العمل ‪ ،‬وعند ورود أي اشارة‬
‫مقاطعة الى المسطر ٌعود المسٌطر للنهوض من جدٌد ‪ ،‬وتاخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪SLEEP‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Return flag interrupt enable instruction‬‬ ‫التعلٌمة ‪RETFIE‬‬

‫لكً نفهم عمل هذه التعلٌمة ‪ٌ ،‬جب ان نفهم ما هً المقاطعة ‪ ،‬مبدء المقاطعة هو مقاطعة او توقف المعالج عن تنفٌذ البرنامج الحالً او‬
‫الرئٌس ‪ Main Program‬لتنفٌذ برنامج أخر ٌسمى برنامج خدمة المقطاعات )‪ ، interrupt service routine(ISR‬وبعد االنتهاء من‬
‫برنامج خدمة المقاطعات ‪ٌ ،‬جب ان ٌعود التنفٌذ الى البرنامج الرئٌسً ‪ ، Main Program‬أذن تعلٌمة ‪ RETFIE‬تقوم بنقل التنفٌذ من برنامج‬
‫خدمة المقاطعات الى البرنامج الرئٌسً ‪ ،‬او بصٌغة اخرى هً تعلٌمة العودة الى البرنامج الرئٌسً ‪ ،‬سٌتم مناقشة هذا الموضوع بشكل‬
‫مفصل الحقاً‪ ،‬وتاخذ التعلٌمة الصٌغة التالٌة ‪.‬‬

‫‪RETFIE‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورتان ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 2‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 74‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Return Instruction‬‬ ‫التعلٌمة ‪RETURN‬‬

‫تستخدم هذه التعلٌمة للعودة من برنامج الفرعً ‪ ، Subroutine‬الى البرنامج الرئٌس‪ ،‬التعلٌمة تأخذ الصٌغة التالٌة ‪.‬‬

‫‪RETURN‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورتان ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 2‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Return with lateral to W Reg.‬‬ ‫التعلٌمة ‪RETLW‬‬

‫تستخدم هذه التعلٌمة للعودة من برنامج فرعً ‪ ، Subroutine‬الى البرنامج الرئٌس ‪ ،‬ولكن عند العودة تحمل قٌمة مسجل العمل ‪W Reg.‬‬
‫بقٌمة ثابتة ‪ ، Lateral value‬التعلٌمة تأخذ الصٌغة التالٌة ‪.‬‬

‫‪RETLW K‬‬

‫حٌث‪:‬‬

‫‪ٌ :K‬مثل الرقم الثابت المراد نقلة الى مسجل العمل ‪ W Reg.‬عند العودة من البرنامج الفرعً ‪. subroutine‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورتان ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 2‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Byte Orientation Operations‬‬ ‫التعليمات على مستوى البايت‬

‫وهً التعلٌمات التً تجري على على مستوى ‪ ، Byte‬معظم هذه التعلٌمات تتعامل مع وحدة الحساب والمنطق ‪ ، ALU‬مثل أجراء العملٌات‬
‫الحسابٌة والمنطقٌة وغٌرها ‪ ،‬عاده ٌشار الى الباٌت أو المسجل المراد اجراء العملٌة علٌة بالرمز "‪ "f‬بٌنما ٌرمز للمكان الذي ستخزن فٌة‬
‫النتٌجة بالرمز "‪ "d‬حٌث أذا كان "‪ "d=0‬سٌتم تخزٌن النتٌجة فً مسجل العمل ‪ W Reg.‬اما اذا كانت "‪ "d=1‬فسٌتم تخزٌن النتٌجة فً‬
‫المسجل ‪، f‬الحظ الشكل ‪Figure 5.1‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 75‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 5.1‬‬

‫‪ ،‬الجدول ‪ٌ Table 5.3‬وضح مجموعة التعلٌمات على مستوى البت المتوفرة فً المسٌطر ‪، PIC16f84A‬‬

‫‪Table 5.3‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪ADD W Reg. to flag‬‬ ‫التعلٌمة ‪ADDWF‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة الجمٌع بٌن مسجل العمل ‪ W Reg.‬وأي مسجل أخر ‪ ، f‬تاخذ هذه التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪ADDWF f, d‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 76‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد جمعة مع مسجل العمل ‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا ‪ d=0‬سٌتم تخزٌن ناتج الجمع فً مسجل العمل ‪ ، W=W+f‬اما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً‬
‫المسجل ‪ f‬أي ‪، f=f+W‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪5.1‬‬

‫قم بأضافة العدد ‪ 4‬الى محتوٌات المسجل ‪ 0Ch‬؟‬

‫الحل‪:‬‬

‫‪MOVLW 0x04‬‬
‫‪ADDWF 0x0C , 1‬‬

‫نقوم أوالً بتحمٌل مسجل العمل بالقٌمة ‪ 0x04‬عن طرٌق التعلٌمة ‪ ، MOVLW 0x04‬ثم نقوم بأجراء عملٌة الجمع بٌن قٌمة مسجل العمل ‪W‬‬
‫‪ Reg.‬وقٌمة المسجل ‪ 0x0C‬عن طرٌق التعلٌمة ‪ ADDWF 0x0C,1‬والقٌمة واحد لٌتم خزن ناتج الجمع فً المسجل ‪،0x0C‬‬

‫‪Subtract W Reg. from flag‬‬ ‫التعلٌمة ‪SUBWF‬‬

‫تقوم هذه التعلٌمة بطرح قٌمة مسجل العمل ‪ W Reg.‬من مسجل أخر ‪ ، f‬تاخذ هذه التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪SUBWF f, d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد طرح قٌمة مسجل العمل ‪ W Reg.‬منه‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا كانت ‪ d=0‬سٌتم تخزٌن ناتج الطرح فً مسجل العمل ‪ ، W=f-W‬اما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن‬
‫الناتج فً المسجل ‪ f‬أي ‪، f=f-W‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 77‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Swap W Reg. With Flag‬‬ ‫التعلٌمة ‪SWAPF‬‬

‫تقوم هذه التعلٌمة بعملٌة تبدٌل ‪ Swapping‬االربع بتات السفلٌة ‪ low nipple‬للمسجل ‪ ، f‬مع اربع بتات العلوٌة ‪ ، High nipple‬وتاخذ‬
‫التعلٌمة الصٌغة التالٌة‬

‫‪SUBWF f, d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد طرح قٌمة مسجل العمل ‪ W Reg.‬منه‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا كانت ‪ d=0‬سٌتم تخزٌن ناتج الطرح فً مسجل العمل ‪ ، W=f-W‬اما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن‬
‫الناتج فً المسجل ‪ f‬أي ‪، f=f-W‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪AND W Reg. with flag‬‬ ‫التعلٌمة ‪ANDWF‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ AND‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وأي مسجل أخر ‪ ، f‬تاخذ هذه التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪ANDWF f, d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد اجراء عملٌة ‪ AND‬المنطقٌة علٌة مع مسجل العمل ‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا ‪ d=0‬سٌتم تخزٌن ناتج عملٌة ‪ AND‬المنطقٌة فً مسجل العمل‪ ،‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً‬
‫المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 78‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪EX-OR W with flag‬‬ ‫التعلٌمة ‪XORWF‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ AND‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وأي مسجل أخر ‪ ، f‬تاخذ هذه التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪XORWF f, d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد اجراء عملٌة ‪ AND‬المنطقٌة علٌة مع مسجل العمل ‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا ‪ d=0‬سٌتم تخزٌن ناتج عملٌة ‪ EX-OR‬المنطقٌة فً مسجل العمل‪ ،‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن‬
‫الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Inclusive OR W with flag‬‬ ‫التعلٌمة ‪IORWF‬‬

‫تقوم هذه التعلٌمة بأجراء عملٌة ‪ OR‬المنطقٌة بٌن مسجل العمل ‪ W Reg.‬وأي مسجل أخر ‪ ، f‬تاخذ هذه التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪IORWF f, d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد اجراء عملٌة ‪ OR‬المنطقٌة علٌة مع مسجل العمل ‪،‬‬

‫‪ :d‬تاخذ قٌمتان اما ‪ 0‬او ‪ ، 1‬اذا ‪ d=0‬سٌتم تخزٌن ناتج عملٌة ‪ OR‬المنطقٌة فً مسجل العمل‪ ،‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً‬
‫المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 79‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Clear Flag‬‬ ‫التعلٌمة ‪CLRF‬‬

‫تقوم هذه التعلٌمة بتصفٌر قٌمة مسجل معٌن ‪ ،‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪CLRF f‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد تصفٌرة ‪.‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪No Operation Instruction‬‬ ‫التعلٌمة ‪NOP‬‬

‫ال تقوم هذه التعلٌمة بأي وضٌفة ‪ ،‬تستخدم عادة فً عملٌات التاخٌر ‪ ، Delay‬حٌث أن هذه التعلٌمة تأخذ دورة ماكنة واحدة لذلك تستغرق هذه‬
‫التعلٌمة فتره زمنٌة مقدارها ‪ 1‬ماٌكروثانٌة‪،‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪NOP‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪5.1‬‬

‫قم بتولٌد تأخٌر مقداره ‪ 3‬ماٌكرو ثانٌة ؟‬

‫الحل‪:‬‬

‫‪NOP‬‬
‫‪NOP‬‬
‫‪NOP‬‬

‫لقد قمنا بكتابة ثالث تعلٌمات ‪ NOP‬كل تعلٌمة تستغرق فترة زمنٌة مقدارها ‪ 1‬ماٌكروثانٌة بدون تأدٌة أي وضٌفة ‪ ،‬اذا المحصلة الكلٌة لهذة‬
‫التعلٌمات الثالثة ‪ 3‬ماٌكروثانٌة‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Clear Working Register‬‬ ‫التعلٌمة ‪CLRW‬‬

‫تقوم هذه التعلٌمة بتصفٌر قٌمة مسجل العمل ‪ ، W Reg.‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪CLRW‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 81‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Compliment Flag Instruction‬‬ ‫التعلٌمة ‪COMF‬‬

‫تقوم هذه التعلٌمة بأٌجاد متمم ‪ Compliment‬مسجل ‪ ، f‬تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪COMF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد أٌجاد متممه‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن ناتج متمم المسجل ‪ f‬فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن ناتج المتمم فً‬
‫المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Decrement Flag‬‬ ‫التعلٌمة ‪DECF‬‬

‫تقوم هذه التعلٌمة بأنقاص قٌمة مسجل ‪ f‬بالقٌمة واحد ‪ ،‬وتأخذ التعلٌمة الصٌغة التالبة‬

‫‪DECF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد أنقاص قٌمتة بواحد‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 80‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Increment Flag‬‬ ‫تعلٌمة ‪INCF‬‬

‫تقوم هذه التعلٌمة بزٌادة قٌمة مسجل ‪ f‬بالقٌمة واحد ‪ ،‬وتأخذ التعلٌمة الصٌغة التالً‬

‫‪INCF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد زٌادة قٌمتة بواحد‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Rotate Right Through Carry‬‬ ‫تعلٌمة ‪RRF‬‬

‫تقوم هذه التعلٌمة بأزاحة ‪ Shift‬ودوران ‪ Rotate‬محتوٌات مسجل ‪ f‬باتجاة الٌمٌن ‪ ،‬وعند خروج البت األقل أهمٌة ‪ LSB‬من المسجل ‪، f‬‬
‫ٌخزن فً خانة المحمل ‪ carry‬من مسجل الحالة ‪ ، Status register‬وعند خروج قٌمة المحمل ‪ٌ Carry‬خزن فً خانة االكثر اهمٌة ‪MSB‬‬
‫من المسجل ‪ f‬أي أن المحمل ‪ٌ Carry‬دخل فً عملٌة الدوران ‪ ، Rotation‬الحظ الشكل ‪Figure 5.2‬‬

‫‪Register‬‬

‫‪MSB‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪LSB‬‬ ‫‪Carry‬‬

‫‪figure 5.2‬‬

‫تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪RRF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد دوران ‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 82‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Rotate Left Through Carry‬‬ ‫تعلٌمة ‪RLF‬‬

‫تقوم هذه التعلٌمة بأزاحة ‪ Shift‬ودوران ‪ Rotate‬محتوٌات مسجل ‪ f‬باتجاة الٌسار ‪ ،‬وعند خروج البت االكثر أهمٌة ‪ MSB‬من المسجل ‪، f‬‬
‫ٌخزن فً خانة المحمل ‪ carry‬من مسجل الحالة ‪ ، Status register‬وعند خروج قٌمة المحمل ‪ٌ Carry‬خزن فً خانة األقل أهمٌة ‪LSB‬‬
‫من المسجل ‪ ،f‬الحظ الشكل ‪Fig 5.3‬‬

‫‪Register‬‬

‫‪Carry‬‬ ‫‪MSB‬‬ ‫‪1‬‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪5‬‬ ‫‪6‬‬ ‫‪7‬‬ ‫‪LSB‬‬

‫‪figure 5.3‬‬

‫تأخذ التعلٌمة الصٌغة التالٌة ‪،‬‬

‫‪RLF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد دوران محتوٌاتة باتجاة الٌسار ‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Move Flag‬‬ ‫تعلٌمة ‪MOVF‬‬

‫تقوم هذه التعلٌمة بنقل محتوٌات المسجل ‪ f‬الى مسجل العمل ‪ ، W Reg.‬أو نقل محتوٌات المسجل ‪ f‬الى نفسة ؟؟ ستسأل ما الغاٌة من نقل‬
‫مسجل الى نفسة ‪ ،‬نستفاد من هذه الحالة اننا نرٌد ان نعرف مثالً هل قٌمة هذا المسجل صفر أما ال ‪ ،‬نحن نعلم ان مسجل الحالة ‪status‬‬
‫‪ٌ Register‬تحدث ‪ update‬بعد كل عملٌة تجالي فً وحدة الحساب والمنطق ‪ ، ALU‬اذن عند نقل مسجل الى نفسة عن طرٌق التعلٌمة‬
‫‪ MOVF‬سٌتحدث علم الصفر ‪ Zero Falg‬الموجود فً مسجل الحالة ‪، Status Register‬تأخذ التعلٌمة الصٌغة التالٌة‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 83‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪MOVF f,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد أجراء العملٌة علٌة‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪5.2‬‬

‫َحدث ‪ Update‬مسجل الحالة ‪ Status Register‬بحٌث ٌتضمن حالة المسجل ‪ 0Eh‬؟‬

‫الحل‪:‬‬

‫‪MOVF 0x0E,1‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫‪Move W Reg. to Flag‬‬ ‫تعلٌمة ‪MOVWF‬‬

‫تقوم هذه التعلٌمة بنقل محتوٌات مسجل العمل ‪ W Reg.‬الى مسجل ‪، f‬تأخذ التعلٌمة الصٌغة التالٌة‬

‫‪MOVWF f‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد نقل محتوٌات مسجل العمل ‪ W Reg.‬الٌة‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 84‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Increment Flag Skip if Zero‬‬ ‫تعلٌمة ‪INCFSZ‬‬

‫تقوم هذه التعلٌمة بزٌادة محتوٌات مسجل ‪ f‬بالقٌمة واحدة ‪ ،‬ثم تفحص النتٌجة اذا كانت اكبر من الصفر ٌتم تنفٌذ التعلٌمة التً تلً تعلٌمة‬
‫‪ INCFSZ‬اما اذا كانت النتٌجة صفر فسٌتم قفز التعلٌمة التً تلً تعلٌمة ‪ ، INCFSZ‬هذه التعلٌمة مشابهة تقرٌبا ً لعمل تعلٌمة ‪ BTFSZ‬فً‬
‫عملٌة القفز‪،‬تأخذ التعلٌمة الصٌغة التالٌة‬

‫‪INCFSZ f ,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل أجراء العملٌة علٌة‪،‬‬

‫‪ :d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أذا كانت قٌمة المسجل بعد الزٌادة اكبر من صفر أي ال تتم عملٌة القفز ‪ ، Jump‬تستغرق التعلٌمة‬
‫فً هذه الحالة فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪ ،‬اما اذا كانت قٌمة المسجل بعد الزٌادة تساوي صفر فتستغرق وحدة السٌطرة دورتان ماكنة‬
‫أي ستستغرق التعلٌمة فترة زمنٌة مقدارها ‪ 2‬ماٌكروثانٌة‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪5.3‬‬

‫تتبع ‪ trace‬التعلٌمات التالٌة ؟‬

‫‪1‬‬ ‫‪MOVLW‬‬ ‫‪0xFF‬‬


‫‪2‬‬ ‫‪MOVWF‬‬ ‫‪0x0C‬‬
‫‪3‬‬ ‫‪INCFSZ‬‬ ‫‪0x0C,1‬‬
‫‪4‬‬ ‫‪DECF‬‬ ‫‪0x0C,1‬‬
‫‪5‬‬ ‫‪INCF‬‬ ‫‪0x0C,1‬‬

‫الحل‪:‬‬

‫تقوم أول تعلٌمتان بنقل القٌمة ‪ ffh‬الى مسجل العمل ‪ W‬عن طرٌق تعلٌمة ‪ MOVLW 0xFF‬وذلك بغٌة نقلة الى مسجل االغراض العامة‬
‫‪ 0Ch‬عن طرٌق تعلٌمة ‪ ،MOVWF 0x0C‬ثم تأتً التعلٌمة الثالثة التعلٌمةل ‪ INCFSZ‬لتقوم بزٌادة محتوٌات المسجل ‪ 0Ch‬بواحد بما أن‬
‫المسجل ‪ٌ 0Ch‬حتوي أالن على القٌمة ‪ FFh‬وعند زٌادتة بواحد سٌتم تصفٌر المسجل وذلك الن سعة المسجل ‪ 0Ch‬القصوى هً ‪ 8-bit‬أي‬
‫القٌمة القصوى هً ‪ ، FFh‬راجع الوحدة االولى عملٌة الفٌضان ‪ ، Overflow‬بما أن المسجل ‪ٌ 0Ch‬حمل القٌمة صفر أالن ‪ ،‬ستقوم‬
‫التعلٌمة ‪ INCFSZ‬بالقفز الى التعلٌمة الخامسة ‪ INCF 0x0C,1‬لتقوم بزٌادة محتوٌات المسجل ‪ 0Ch‬بواحد لتصبح محتوٌات المسجل ‪0Ch‬‬
‫هً القٌمة ‪. 1‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 85‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Decrement Flag Skip if Zero‬‬ ‫تعلٌمة ‪DECFSZ‬‬

‫تقوم هذه التعلٌمة بانقاص محتوٌات مسجل ‪ f‬بالقٌمة واحدة ‪ ،‬ثم تفحص النتٌجة اذا كانت اكبر من الصفر ٌتم تنفٌذ التعلٌمة التً تلً تعلٌمة‬
‫‪ DECFSZ‬اما اذا كانت النتٌجة صفر فسٌتم قفز التعلٌمة التً تلً تعلٌمة ‪، ،DECFSZ‬تأخذ التعلٌمة الصٌغة التالٌة‬

‫‪DECFSZ f ,d‬‬

‫حٌث‪:‬‬

‫‪ٌ :f‬مثل المسجل المراد أجراء العملٌة علٌة‪،‬‬

‫‪ : d‬إذا كانت ‪ d=0‬سٌتم تخزٌن الناتج فً مسجل العمل ‪ ،W Reg.‬أما اذا كانت قٌمة ‪ d=1‬فسٌتم تخزٌن الناتج فً المسجل ‪، f‬‬

‫مالحظة‪:‬‬

‫تستهلك هذه التعلٌمة دورة ماكنة واحدة ‪ ،‬أذا كانت قٌمة المسجل بعد النقصان اكبر من صفر أي ال تتم عملٌة القفز ‪ ، Jump‬تستغرق التعلٌمة‬
‫فً هذه الحالة فترة زمنٌة مقداره ‪ 1‬ماٌكرو ثانٌة ‪ ،‬اما اذا كانت قٌمة المسجل بعد النقصان تساوي صفر فتستغرق وحدة السٌطرة دورتان‬
‫ماكنة أي ستستغرق التعلٌمة فترة زمنٌة مقدارها ‪ 2‬ماٌكروثانٌة‪،‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪4.1‬‬

‫تتبع ‪ trace‬التعلٌمات التالٌة ؟‬

‫‪1‬‬ ‫‪MOVLW‬‬ ‫‪0x01‬‬


‫‪2‬‬ ‫‪MOVWF‬‬ ‫‪0x0C‬‬
‫‪3‬‬ ‫‪DECFSZ‬‬ ‫‪0x0C,1‬‬
‫‪4‬‬ ‫‪DECF‬‬ ‫‪0x0C,1‬‬
‫‪5‬‬ ‫‪INCF‬‬ ‫‪0x0C,1‬‬

‫الحل‪:‬‬

‫تقوم أول تعلٌمتان بنقل القٌمة ‪ 01h‬الى مسجل العمل ‪ W‬عن طرٌق تعلٌمة ‪ MOVLW 0x01‬وذلك بغٌة نقلة الى مسجل االغراض العامة‬
‫‪ 0Ch‬عن طرٌق تعلٌمة ‪ ،MOVWF 0x0C‬ثم تأتً التعلٌمة الثالثة التعلٌمةل ‪ DECFSZ‬لتقوم بانقاص محتوٌات المسجل ‪ 0Ch‬بواحد بما أن‬
‫المسجل ‪ٌ 0Ch‬حتوي أالن على القٌمة ‪ 01h‬وعند انقاصه بواحد سٌتم تصفٌر المسجل‪ ،‬بما أن المسجل ‪ٌ 0Ch‬حمل القٌمة صفر أالن ‪ ،‬ستقوم‬
‫التعلٌمة ‪ DECFSZ‬بالقفز الى التعلٌمة الخامسة ‪ INCF 0x0C,1‬لتقوم بزٌادة محتوٌات المسجل ‪ 0Ch‬بواحد لتصبح محتوٌات المسجل ‪0Ch‬‬
‫هً القٌمة ‪. 1‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 86‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit Six‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة السادسة‬

‫‪Programming Concept‬‬ ‫مبادء البرمجة‬


‫مقدم ـة‪:‬‬
‫لكً ٌعمل المسٌطر الدقٌق ٌجب أن نرشدة ولكً ٌتم أرشاد المسٌطر الدقٌق ‪ٌ Microcontroller‬جب خزن مجموعة من التعلٌمات المتناسقة‬
‫والتً تعمل معا ً الداء مهمة معٌنة ‪ ،‬فً هذه الوحدة سوف نتعرف على كٌفٌة كتابة البرامج وعلى هٌكلٌة البرامج ‪ ،‬والتعرف على مبادء‬
‫البرمجة ‪. Programming Concept‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 87‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Programming‬‬ ‫البرمجة‬

‫لقد تعرفنا على البرنامج وقلنا انة مجموعة من التعلٌمات المتتابعة لتأدٌة مهمة معٌنة ‪ٌ ،‬تم خزن البرنامج داخل ذاكرة المسٌطر الصغري‬
‫بهٌئة ثنائٌة او سلسلة من األصفار والواحدات ‪ ،‬لكتابة البرنامج نحتاج لغة برمجة والتً هً عبارة عن بروتوكول او صٌغة متفق علٌها‬
‫لكتاب ة البرنامج ‪ ،‬كما هو الحال فً لغات البشر فهناك اللغة االنكلٌزٌة والفرنسٌة والعربٌة ولكل من هذه اللغات قواعد معٌنة لتشكل جمل‬
‫سلٌمة ‪ ،‬وهكذا هو الحال مع االنظمة الرقمٌة ‪ ،‬تتم عملٌة كتابة البرامج بطرٌقتٌن ‪،‬‬

‫‪textual language‬‬ ‫اللغات النصٌة‬

‫هذه اللغات توفر لنا كتابة التعلٌمات باستخدام مجموعة من الرموز واالرقام والكلمات القرٌبة الى اللغة االنكلٌزٌة ‪ٌ ،‬تم ترجمة هذا السالسل‬
‫من الكلمات الى سلسلة من االصفار والواحدات تفهما الماكنة تسمى ‪ Machine language‬باستخدام مجمع خاص ٌسمى ‪ Assembler‬فً‬
‫لغات واطئة المستوى ‪ Low level language‬مثل لغة التجمٌع ‪ Assembly‬او ٌسمى مترجم ‪ Compiler‬فً لغات عالٌة المسـتوى‬
‫‪ High level language‬مثل لغات ‪ C,Basic,Pascal‬وغٌرها من لغات الحاسوب‪.‬‬

‫;‪Read x‬‬
‫‪If x>4‬‬
‫;‪Out=x*4‬‬
‫‪Else‬‬
‫‪Out=x‬‬

‫‪Visual language‬‬ ‫اللغات المرئٌة‬

‫وهً اللغات التً ٌكتب البرامج فٌها بشكل مخططات انسٌابٌة ‪ flow codes‬كما هو موضح فً الشكل ‪Fig 6.1‬‬

‫‪Figure 6.1‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 88‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Assembly language‬‬ ‫لغة التجمٌع‬

‫هً الصٌغة السهلة القراءة للبشر المقابلة للغة اآللة‪ .‬فلغة اآللة عبارة عن تتابع من البتات )‪ (bits‬تمثل عملٌة حاسوبٌة أو أمر للحاسوب‪،‬‬
‫تصبح أسهل للقراءة عندما تستبدل برموز تعبر عنها‪.‬‬

‫ولكل معالج لغة تجمٌع خاصة به ‪ ،‬وتحتاج لغة التجمٌع ما ٌسمى المجمـِّع ‪ Assembler‬وهو الذي ٌقوم بتحوٌل لغة التجمٌع التً ٌستطٌع‬
‫البشر قراءتها والتعدٌل فٌها إلى لغة اآللة التً ٌستطٌع المعالج تنفٌذها‪ .‬وتستخدم هذه اللغة اآلن من قبل البشر وذلك لبرمجة أجزاء من‬
‫نظم التشغٌل أو برمجة انظمة الزمن الحقٌقً ‪. Real time system‬‬

‫و تتكون اسطر برامج لغة التجمٌع من ثالثة أجزاء‪:‬‬

‫العالمة )‪ (Label‬وهو ما ٌتم به اإلشارة لسطر ما لٌتم استدعاءه فً عملٌات القفز واالستدعاء ‪.‬‬ ‫‪‬‬
‫األمر )‪ (Instruction‬وهو ٌكون مناظر فً الغالب ألمر فً المعالج وهو ما سٌقوم المعالج بتنفٌذه عند الوصول لهذا‬ ‫‪‬‬
‫السطر أثناء تنفٌذ البرنامج‪.‬‬
‫المعامل )‪ (Operand‬وهو المتغٌر الذي سٌتم تطبٌق األمر علٌه‪.‬‬ ‫‪‬‬

‫أمثلة على األوامر‪:‬‬

‫‪START: BSF 0x05,5‬‬ ‫‪;initialize‬‬

‫من ممٌزاتها‬

‫‪ ‬تستهلك اقل مساحة‬


‫‪ ‬السٌطرة على البرنامج هً للمبرمج ولسٌت للمجمع‬
‫‪ ‬اللغة التً تخاطب المكونات المادٌة مباشرتأ ‪ ،‬فتسهل عملٌة ادارة األجهزة‪.‬‬

‫قبل كتابة التعلٌمات هناك توجٌهات ‪ٌ directive‬جب كتابتها مع البرنامج هذة التوجات توجة المعالج ‪ CPU‬اٌن هً بداٌة البرنامج واٌن هً‬
‫نهاٌة البرنامج ‪ ،‬كما توجة المعالج ‪ CPU‬الى ترجمة البرنامج الى تعلٌمات ٌفهمها المسٌطر المقصود خزن البرنامج فٌة ‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 89‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Program Structure‬‬ ‫هٌكل البرنامج‬

‫ٌتكون هٌكل البرنامج من دالة رئٌسٌة ‪ main function‬تكتب ضمنها التعلٌمات بلغة التجمٌع ‪، Assembly Language‬كما تحتوي على‬
‫تعلٌمة القفز ‪ goto‬وذلك لكً ٌدخل المسٌطر الدقٌق فً حلقة تكرار ال منتهٌة ‪ ،‬لٌنفذ البرنامج بشكر مستمر‪ ،‬الحظ الشفرات التالٌة‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪main‬‬
‫‪;instructions‬‬
‫‪;instructions‬‬
‫‪goto main‬‬
‫‪end‬‬

‫التعلٌمتان االولى والثانٌة تسمى توجٌهات ‪ Directive‬تستخدم لتوجٌة المترجم ‪ Assembler‬لٌترجم البرنامج بما ٌتناسب مع المسٌطر‬
‫الدقٌق ‪ pic16f84a‬ما التعلٌمة الثالثة ‪ main‬فهً عبارة عن عنوان ‪ label‬الذي ترجع الٌة التعلٌمة ‪ Goto main‬لتشكل حلقة ال متناهٌة‬
‫ومن خالل هذة الحلقة نكتب التعلٌمات التً ستتكرر بشكل مستمر ‪ ،‬اما التعلٌمة االخٌرة ‪ End‬فهً تدل على نهاٌة البرنامج ‪.‬‬

‫‪PORTA &PORTB Configuration‬‬ ‫تهٌئة المنافذ‬


‫ٌتكون المسٌطر الدقٌق ‪ pic16f84a‬من ‪ 13‬منفذ ولكً نستخدم هذة المنافذ ٌجب تهٌئتها ‪ ،‬اي تحدٌد اي طرف من اطراف المنافذ هً‬
‫طرف دخول او طرف خروج ‪ ،‬عادة عملٌة التهٌئة تتم مرة واحدة عند بداٌة تشغٌل المسٌطر الدقٌق ‪ ،‬النها تنفذ مرة واحدة فقط لذلك نكتبها خارج‬
‫الدالة الرئٌسٌة ‪ main‬كاألتً‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪BSF 0x03,5‬‬ ‫‪; Go to Bank 1 "Bit Set Flag" Register, Bit‬‬
‫‪MOVLW 0xff‬‬ ‫‪; mov xxx1 1111 to W Register‬‬
‫‪MOVWF 0x85 ; Move W to Trisa‬‬
‫‪MOVLW 0x00 ; mov 0000 0000 to W Register‬‬
‫‪MOVWF 0x86 ; Mov W to Trisb‬‬
‫‪BCF 0x83,5‬‬ ‫‪; Go to Bank 0 "Bit Clear Flag" Register, Bit‬‬

‫‪main‬‬
‫‪;instructions‬‬
‫‪;instructions‬‬
‫‪goto main‬‬
‫‪end‬‬

‫ٌتم تهٌئة المنافذ عن طرٌق المسجل ‪ trisa,trisb‬وكما هو معلوم من الوحدة الخامسة أن هذٌن المســـــــــجلٌن ٌقعان فً ‪ bank 1‬مـــــن‬
‫‪ file register‬لذلك ٌجب ان نتحول الى ‪ bank 1‬لٌتم تحمٌلهما بالبٌانات المطلوبة وٌتم ذلك عن طرٌق المسجل ‪ status‬وبالتحدٌد البت‬
‫الخامس ‪ Rp0‬برفعة الى القٌمة واحد عن طرٌق التعلٌمة ‪ Bsf 0x03,5‬وبعد ان تحولنا الى ‪ bank1‬نتسطٌع تحمٌل المسجل ‪ trisa‬بالقٌمة‬
‫‪ 0xff‬اي ما ٌقابلها بالنظام الثنائً ‪ (1111 1111)2‬والتً تعنً ان المنفذ ‪ porta‬هو منفذ ادخال بٌانات ‪ input‬وٌتم ذلك عن طرٌق‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 91‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫التعلٌــــــــــمة ‪ movlw 0xff‬والتعلٌمة ‪ movwf 0x05‬ثم نهًء المنفذ ‪ port b‬بنفس الطرٌقة ثم بعد ذلك نعود الى ‪ bank 0‬وذلك‬
‫بتصفٌر البت الخامس ‪ Rp0‬من المسجل ‪ Status‬عن طرٌق التعلٌمة ‪ ، bcf 0x83,5‬لمزٌد من المعلومات عن استخدام التعلٌمات راجع‬
‫الوحدة الخامسة‪.‬‬

‫‪Writing Operations‬‬ ‫عملٌة الكتابة‬

‫عملٌة الكتابة ‪ Writing‬الى المنفذ او األخراج ‪ output‬عملٌة مهمة وذلك ألخراج البٌانات الى العالم الخارجً ‪ ،‬وذلك لالستفاده منها فً تشغٌل المصابٌح‬
‫‪ LED‬او سوق المرحالت ‪ ، Relays‬البرنامج التالً ٌبٌن عملٌة الكتابة ‪ writing‬الى المنفذ ‪ port a‬عن طرٌق البت الثالث‪.‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪BSF 0x03,5‬‬ ‫‪; Go to Bank 1 "Bit Set Flag" Register, Bit‬‬
‫‪MOVLW 0xfb‬‬ ‫‪; mov xx11 1011 to W Register‬‬
‫‪MOVWF 0x85 ; Move W to Trisa‬‬
‫‪BCF 0x83,5‬‬ ‫‪; Go to Bank 0 "Bit Clear Flag" Register, Bit‬‬
‫‪Main‬‬
‫‪BSF 0x05,2‬‬
‫‪goto main‬‬
‫‪end‬‬

‫قمنا اوال بعملٌة تهٌئة المنفذ ‪ porta‬لٌكون البت الثالث هو طرف اخرج ‪ output‬عن طرٌق تحمٌل السجل ‪ trisa‬بالقٌمة ‪ ، 0xFB‬ثم قمنا‬
‫بكتابة تعلٌماتنا داخل الدالة الرئٌسة ‪ main function‬وذلك برفع البت الثالث من ‪ porta‬بالقٌمة واحد وذلك عن طرٌق التعلٌــــــــــــمة‬
‫‪ ، bsf 0x05,2‬تذكر ان عنوان ‪ porta‬هو ‪ 0x05‬فً ‪ ، file register‬اذا وصلت داٌود باعث للضوء ‪ LED‬ستجدة قد اشتغل‪.‬‬

‫‪Reading Operations‬‬ ‫عملٌة القراءة‬

‫عملٌة القراءة ‪ Reading‬من المنافذ مهمة لقراءة البٌانات من المحٌط الخارجً مثالً لمعرفة حالة المفاتٌح ‪ Switches‬او المتحسسات‬
‫‪ ، Sensors‬البرنامج التالً ٌبٌن عملٌة القراءة ‪ Reading‬من المنفذ ‪ port b‬عن طرٌق البت السادس ‪ ،‬اذا كان البت السادس فً حالة‬
‫توصٌل نشغل البت الرابع من ‪. portb‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪BSF 0x03,5‬‬ ‫‪; Go to Bank 1‬‬
‫‪MOVLW 0x40‬‬ ‫‪; move 0100 0000 to W Register‬‬
‫‪MOVWF 0x86 ; Mov W to Trisb‬‬
‫‪BCF 0x83,5‬‬ ‫‪; Go to Bank 0‬‬
‫‪Main‬‬
‫‪BTFSS 0x06,6 ; "Bit Test Flag Skip if Set " Register,bit‬‬
‫‪GOTO bit_is_reset‬‬
‫‪GOTO Main‬‬
‫‪bit_is_reset BSF 0x06,4‬‬
‫‪GOTO Main‬‬
‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 90‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫قمنا اوال بعملٌة تهٌئة المنفذ ‪ portb‬لٌكون البت السادس هو طرف دخول ‪ input‬عن طرٌق تحمٌل السجل ‪ trisb‬بالقٌمة ‪ ، 0x40‬ثم قمنا‬
‫بكتابة تعلٌماتنا داخل الدالة الرئٌسة ‪ main function‬وذلك عن طرٌق فحص البت السادس من ‪ portb‬وذلك عن طرٌق التعلٌمة ‪btfss‬‬
‫وبعد تحقق الشرط قمنا برفع البت الرابع من ‪، portb‬راجع الوحدة الخامسة لمزٌد من المعلومات حول التعلٌمات ‪. instructions‬‬

‫‪Programming Concept‬‬ ‫مبادء البرمجة‬


‫توفر لغة البرمجة مجموعة من اللبنات األساسٌة لالستناد علٌها خالل عملٌة تكوٌن البرنامج ومجموعة من القواعد التً تمكن من التعامل‬
‫مع الشفرات وتنظٌمها بشكل متناسق لغرض أداء العمل المطلوب‪.‬‬

‫‪Variable‬‬ ‫المتغيرات‬
‫فً عملٌة برمجة المسٌطرات الدقٌقة ‪ ،‬المتغٌرات هً مواقع خزنٌة داخل ذاكرة المسٌطر الصغري ‪ Pic16f84a‬لهذة المواقع الخزنٌة أسم‬
‫محدد ‪ ،‬وٌمكن تعرٌف المتغٌرات فً المسٌطر الصغري على غرار باقً لغات البرمجة ‪ ،‬وتكون الصٌغة كأالتً‬

‫‪Name_Of_ variable Set Value‬‬

‫أمثلة على المتغٌرات‬

‫‪Level set 50‬‬


‫‪Set_point set 20‬‬

‫وٌمكن كتابتة المتغٌرات بالصٌغة التالٌة‪،‬‬

‫‪Variable Name_Of_Constant = Value‬‬

‫أمثلة على المتغٌرات‬

‫‪Variable level= 50‬‬


‫‪Variable Set_point = 20‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 92‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Constant‬‬ ‫الثوابت‬

‫هً قٌم مسندة لها اسماء معرفة لتسهٌل التعامل مع القٌم ‪ٌ ,Values‬مكن استخدام تعلٌمة ‪ EQU‬السناد أسماء للقٌم ‪ ، Values‬وتكون‬
‫الصٌغة كأالتً‬

‫‪NameOf_ Constant EQU Value‬‬

‫أمثلة على الثوابت‬

‫‪Trisa EQU 0x85‬‬


‫‪Porta EQU 0x05‬‬

‫وٌمكن كتابتها بالصٌغة التالٌة‬

‫‪Constatnt Name_Of_Constant = Value‬‬

‫أمثلة على الثوابت‬

‫‪Constatnt trisa= 0x85‬‬


‫‪Constatnt trisb= 0x05‬‬

‫‪Comment‬‬ ‫التعليقات‬
‫وهً عبارة عن نصوص غٌر قابلة للترجمه وال ٌفسرها المعالج تستخدم لالرشاد والتذكٌر وما ٌمٌز التعلٌقات انها مسبوقة بالرمز ";" وتأخذ‬
‫الصٌغة التالٌة‬

‫‪; # this is comment #‬‬


‫‪BCF 0x0f,1 ;this is comment to clear bit 1 of register 0x0f‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 93‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪#DEFINE‬‬ ‫التعليمة‬

‫تقوم هذة التعلٌمة بأسناد نص ‪ text‬الى قٌمة ‪، Value‬وتأخذ الصٌغة التالٌة‬

‫‪#DEFINE TEXT VALUE‬‬

‫‪Examble:‬‬
‫‪#DEFINE Input 1‬‬
‫‪#DEFINE Output 0‬‬

‫البرنامجات التالٌان متكافئان ‪ ،‬كتب البرنامج االول بصٌغة منظمة باستخدام المعرفات ‪ ،‬اما البرنامج الثانً فقد كتب بصٌغة مباشرة‬
‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪6.0‬‬
‫سنتعلم فً هذا المثال كٌفٌة أجراء عملٌة الضرب فً المسٌطر الصغري ‪ ،‬لنفرض لدٌنا متغٌران وهما ‪ X,Y‬والمتغٌر ‪ Z‬ونرٌد أجراء العملٌة‬
‫االتٌة‬

‫‪Z := X * Y‬‬

‫عملٌة الضرب ببساطة هً عملٌة جمع ‪ ،‬أي أن عملٌة الضرب ‪ X*Y‬لنفرض نرٌد أجراء العملٌة ‪ X*5‬فالعملٌة هً‬

‫‪Z := X + X + X + X + X‬‬ ‫‪;adding X five times‬‬

‫لقد قمنا بعملٌة جمع المتغٌر ‪ X‬خمس مرات وذلك الن قٌمة المتغٌر ‪ Y‬هً ‪،5‬عملٌة الضرب فً هذة الحالة تصلح فقط عندما تكون االعداد‬
‫صحٌحٌة والناتج اقل من ‪ 255‬أي أن عملٌة الضرب ٌكون ناتجها ‪ ،8-bit‬هناك خوازمٌات أعقد ٌمكنك االستعانة بها ‪ ،‬لكً ٌكون الشرح‬
‫واضح لم اتطرق لها ‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 94‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الحظ الشفرة التالٌة ‪ ،‬التً قمنا بتعرٌف ثالث متغٌرات ‪ int1,int2,product‬وحملنا المتغٌرات ‪ int1=8,int2=7‬ثم قمنا بعملٌة تصفٌر كل‬
‫من المتغٌران ‪ ، product,Wreg‬بعد ذلك قمنا بعمل حلقة تكرار تكرر بقدر قٌمة ‪ ، int2‬وذلك عن طرٌق التعلٌمة ‪ Decfsz int2‬والتً‬
‫تطرح القٌمة واحد من المتغٌر ‪ int2‬اذا لم تساوي صفر ٌقفز الى العنوان ‪ MULT_LOOP‬لٌقوم بعملٌة جمع المتغٌر ‪ int1‬مع قٌمة المسجل‬
‫‪ WREG‬الذي ناتج عملٌة الجمع السابقة وهكذا‬

‫‪#DEFINE int1‬‬ ‫‪0x0D‬‬


‫‪#DEFINE int2‬‬ ‫‪0x0E‬‬
‫‪#DEFINE product 0x0F‬‬

‫‪movlw‬‬ ‫‪0x08‬‬ ‫;‬ ‫‪Multiply 8‬‬


‫‪movwf‬‬ ‫‪int1‬‬
‫‪movlw‬‬ ‫‪0x07‬‬ ‫;‬ ‫‪by 7‬‬
‫‪movwf‬‬ ‫‪int2‬‬
‫‪; MULTIPLY_SETUP‬‬
‫‪clrw‬‬
‫‪clrf‬‬ ‫‪product‬‬
‫‪MULT_LOOP‬‬
‫‪movfw‬‬ ‫‪int1‬‬
‫‪addwf‬‬ ‫‪product‬‬ ‫;‬ ‫‪Move int1 to W, then add‬‬
‫;‬ ‫‪to product‬‬
‫‪decfsz‬‬ ‫‪int2‬‬
‫‪goto‬‬ ‫‪MULT_LOOP‬‬ ‫;‬ ‫‪Every time we go through the loop‬‬
‫;‬ ‫‪we decrement int2, until it's Zero‬‬

‫‪ORG‬‬ ‫التعليمة‬
‫تقوم هذه التعلٌمة بتحدٌد بداٌة موقع تخزٌن البرنامج فً الذاكرة ‪ ،‬وبشكل افتراضً ٌتم تخزٌن البرنامج عند الموقع ‪ 0x00‬ان لم تكتب‬
‫التعلٌمة ‪ORG 0x00‬‬

‫‪Start org 0×00‬‬


‫‪movlw 0xFF‬‬
‫‪movwf PORTB‬‬

‫‪CBLOCK‬‬ ‫التعليمة‬
‫تقوم هذه التعلٌمة بتعٌٌن اسماء لقٌم ولكن بشكل متسلسل ‪ ،‬حٌث تقوم بأعطاء قٌمة االولٌة الول ثابت ‪ ، Constant‬وبقٌة الثوابت ٌتم تحدٌد‬
‫قٌمها ذاتٌا باالعتماد على القٌمة االولٌة ‪ ،‬الحظ المثال التالً‬

‫‪Cblock 0x02‬‬
‫‪First, second, third‬‬ ‫‪;first=0x02, second=0x03, third=0x04‬‬
‫‪endc‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 95‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫الحظ انك اسندت القٌمة ‪ 0x02‬الى الثابت ‪ first‬اما الثابت ‪ second‬سٌكون قٌمتة ‪ first+1‬والثابت ‪ third‬سٌكون ‪ ، second+1‬وٌمكن‬
‫زٌادة القٌمة باكثر من واحد ‪ ،‬الحظ المثال التالً‪.‬‬

‫‪Cblock 0x02‬‬
‫‪First:4, second:2, third‬‬ ‫‪;first=0x06, second=0x08, third=0x09‬‬
‫‪endc‬‬

‫قمنا باسندت القٌمة ‪ 0x02‬الى الثابت ‪ first‬وبما ان قٌمة الزٌادة هً ‪ 4‬نتٌجة وجود الالحقة ‪ :4‬ستكون قٌمة ‪ 0x02+0x04=0x06‬اي أن‬
‫قٌمة ‪ ، first=0x06‬اما الثابت ‪ second‬سٌكون قٌمتة ‪ first+2‬والثابت ‪ third‬سٌكون ‪.second+1‬‬

‫‪Macro Instruction‬‬ ‫الماكرو‬


‫عبارة عن مجموعة من التعلٌمات تكتب بشكل اجراء لها اسم محدد تسهل عمل المبرمج اثناء البرمجة ‪ ،‬لكن اثناء ترجمة البرنامج الى‬
‫لغة االلة سٌتم تبدٌل كل استدعاءات الماكرو بالشفرة الفعلٌة للماكرو‪ ،‬وتأخذ الصٌغة التالٌة ‪،‬‬

‫‪My_micro_name‬‬ ‫‪macro‬‬
‫‪; instructions‬‬
‫‪endm‬‬

‫‪Suproutine‬‬ ‫االجراءات‬

‫االجرائات ‪ Subroutine‬او البرامج الفرعٌة عبارة عن برامج‪-‬او اجزاء برامج‪-‬ثانوٌة ٌتم استخدامها الداء غرض معٌن ومن فوائدها‪:‬‬

‫تقلٌل وتالفً التكرار فً بناء البرامج مرة اخرى‪.‬‬ ‫‪-‬‬


‫تقلٌل الوقت المطلوب لبناء البرامج والمشارع‪.‬‬ ‫‪-‬‬
‫التقلٌل من الذاكرة المطلوبة لشفرات وبٌانات المشروع‪.‬‬ ‫‪-‬‬

‫وتكون بالصٌغة التالٌة‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪MAIN‬‬

‫‪CALL subroutine‬‬
‫‪GOTO MAIN‬‬

‫‪Subroutine‬‬
‫‪;Instruction‬‬
‫‪Return‬‬

‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 96‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ٌجب أن تكون برامجك منظمة ومنسق ة ومدعمة بالتعلٌقات لٌسهل على االخرٌن قراءتها وفهما ‪ ،‬كما تسهل علٌك تذكرها عند الرجوع الٌها‬
‫مستقبالً ‪ ،‬أنظر الى البرنامج التالً كتب بصٌغة منظمة بأستخدام االجراءات والماكرو والمعرفات ‪،‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬

‫************************* ‪;*********** my first program‬‬


‫‪;code of subroutine‬‬
‫‪Goto‬‬ ‫‪Initialized‬‬
‫‪bank0 macro‬‬
‫‪bsf 0x03,5‬‬
‫‪endm‬‬
‫‪bank0 macro‬‬
‫‪bcf 0x83,5‬‬
‫‪endm‬‬
‫‪Initialized‬‬
‫‪;give identifiers and configures ports‬‬
‫‪Portb EQU 0x06‬‬
‫‪Porta EQU 0x05‬‬
‫‪Trisa EQU 0x85‬‬
‫‪Trisb EQU 0x86‬‬
‫‪;set port b input‬‬
‫‪Bank1‬‬
‫‪Movlw 0xff‬‬
‫‪Movwf Trisb‬‬
‫‪;set port a output‬‬
‫‪Clrf Trisa‬‬
‫‪Bank0‬‬
‫‪Main‬‬
‫‪; instruction goes here‬‬
‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 97‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪branching Instruction‬‬ ‫تعليمات التفرع‬
‫تستخدم تعلٌمات التفرع للقفز ‪ jumping‬خالل سٌر البرنامج لتحقٌق اغراض معٌنة او قفز تعلٌمات معٌنة او تكرار تعلمٌات وهكذا‪،‬‬

‫‪if statement‬‬ ‫تعلمية اذا الشرطية‬


‫تعتبر تعلٌمة اذا الشرطٌة ‪ if statement‬من التعلٌمات المهمة فً لغات البرمجة ‪ ،‬وتأخذ الصٌغة العامة التالٌة‬

‫) ‪If ( Condition‬‬
‫;‪// do something if condition is true‬‬
‫‪Else‬‬
‫;‪// do something if condition is false‬‬

‫ولنوضح تعلٌمة اذا الشرطٌة فلنأخذ المثال التالً ‪.‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫مثال ‪:6.2‬‬
‫قم بعملٌة فحص البت الخامس من مسجل الغرض العام ‪ 0x0E‬اذا كان صفر ٌتم تحمٌل المتغٌر ‪ Val‬بالقٌمة ‪، 3‬ام اذا كان البت الخامس‬
‫واحد نحمل المتغٌر ‪ Val‬بالقمٌة ‪5‬‬

‫الحل ‪:‬‬
‫تعتمد عملٌة المقارنة فً هذا المثال على التعلٌمة ‪ Btfss‬والتً البت الخامس من المسجل ‪ 0x0E‬اذا كان واحد ٌقفز الى التعلٌمة التً تسند‬
‫القمٌة ‪ 5‬الى المتغٌر ‪ ، val‬ثم ٌواجة التعلٌمة ‪ Goto end_if‬لٌقفز الى نهاٌة تركٌبة اذا الشرطٌة ‪ ،‬لتعاد عملٌة المقارنو من جدٌد ‪ ،‬أما اذا‬
‫كانت قٌمة البت الخامس من المسجل ‪ 0x0E‬هً صفر تنفذ التعلٌمة القفز ‪ Goto bin_is_reset‬لٌقفز الى التعلٌمة ‪ Val set 3‬لٌتم تحمٌل‬
‫المتغٌر ‪ Val‬بالقٌمة ‪ 3‬وهكذا ‪.‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬

‫‪Variable Val = 0‬‬


‫‪main‬‬
‫‪BTFSS 0x0E,5‬‬
‫‪GOTO bin_is_reset‬‬
‫‪Val Set 5‬‬
‫‪GOTO end_if‬‬

‫‪bin_is_reset Val Set 3‬‬


‫‪end_if‬‬

‫‪goto main‬‬
‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 98‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪While Loop‬‬ ‫تعليمة التكرار‬
‫تستخدم التعلٌمة ‪ While‬لتكرار مجموعة من التعلٌمات ‪ ،‬وٌمكن استخدم تعلٌمة التكرار فً لغة التجمٌع باالسلوب األتً‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪main‬‬
‫‪MOVLW 0x0A‬‬
‫‪MOVWF 0x0E‬‬
‫‪LOOP DECFSZ 0x0E‬‬
‫‪GOTO still_in_loop‬‬
‫‪GOTO end_loop‬‬
‫‪still_in_loop inst.‬‬
‫‪Inst.‬‬ ‫‪;instruction to be executed inside loop‬‬
‫‪Inst.‬‬
‫‪GOTO LOOP‬‬

‫‪end_loop‬‬

‫‪goto main‬‬
‫‪end‬‬

‫قمنا فً البرنامج السابق بعملٌة تكرار ‪ loop‬تقوم بتكرار مجموعة تعلٌمات ‪ 01‬مرات ‪ ،‬اوال قمنا بتحمٌل العدد ‪ 01‬او ما ٌقابلها بالنظام‬
‫السادس عشر ‪ 0x0A‬الى مسجل االغراض العامة ‪ 0x0E‬ثم قمنا بعملٌة طرح هذا المسجل وفحصة الى ان ٌتم تصفٌر المسجل ‪ 0x0E‬وذلك‬
‫عن طرٌق التعلٌمة ‪. Decfsz‬‬
‫وٌمكن اٌضا ً استخدام الصٌغة التالٌة لتنفٌذ حلقة التكرار‬

‫‪Variable x=0‬‬
‫‪While x<10‬‬
‫‪;Instructions‬‬
‫‪endw‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 99‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪:6.3‬‬
‫اكتب برنامج لجعل ‪ٌ LED‬ومض ‪ Flashing‬بٌن فترة واخرى بأستخدام االجراءات ‪Subroutine‬‬
‫الحل‪:‬‬
‫المطلوب هو جعل داٌود باعث للضوء ‪ٌ LED‬ومض بٌن فترة واخرى كما هو مبٌن فً الشكل ‪ ، Fig 6.2‬وذلك عن طرٌق الطرف ‪RB7‬‬

‫‪Figure 6.2‬‬

‫قمنا بكتابة أجراء ‪ Subroutine‬اسمة ‪ٌ Delay‬حتوي هذا االجراء على حلقة تكرار ‪ ،‬قمنا فً بداٌة االجراء بتحمٌل القٌمة ‪ 0xff‬الى مسجل‬
‫االغراض العامة ‪ 0x0E‬وقمنا بطرح هذة المسجل ومقارنة مع القٌمة صفر عن طرٌق التعلٌمة ‪ Decfsz‬فاذا كانت قٌمة المسجل ‪0x0E‬‬
‫تساوي صفر ٌخرج المسٌطر من االجراء ‪ delay‬واال تتكر العملٌة الى أن تصبح قٌمة المسجل ‪ 0x0E‬تساوي صفر ‪،‬أما الدالة الرئٌسٌة‬
‫‪ main function‬فهً تحتوي على تعرٌف المنفذ ‪ protb‬والذي اصبح منفذ أخراج ‪ ،‬وقمنا بعملٌة أخراج أشارة الى البت السابع من‬
‫‪ portb‬عن طرٌق التعلٌمة ‪ bsf portb,7‬ثم تاللها تأخٌر ‪ delay‬ثم تاللها أطفاء ‪ bcf portb,7‬وهكذا‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪STATUS_BANK0 EQU 03h‬‬
‫‪STATUS_BANK1 EQU 83h‬‬
‫‪trisb EQU 86‬‬
‫‪portb EQU 06‬‬
‫‪BSF STATUS_BANK0 ,5‬‬
‫‪MOVLW 0x00‬‬ ‫"‪; b"0000 0000‬‬
‫‪MOVWF trisb‬‬
‫‪BCF STATUS_BANK1 ,5‬‬
‫‪START‬‬
‫‪BSF portb,7‬‬
‫‪CALL Delay‬‬
‫‪BCF portb,7‬‬
‫‪CALL Delay‬‬
‫‪GOTO START‬‬
‫‪Delay‬‬
‫‪MOVLW 0xff‬‬
‫‪MOVWF 0x0E‬‬
‫‪Repeat‬‬ ‫‪Decfz 0E,1‬‬
‫‪GOTO Repeat‬‬
‫‪RETURN‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 011‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬

‫مثال ‪: 6.4‬‬
‫أكتب برنامج ٌقوم بفحص قٌمة الموقع ‪ 0x0E‬هل هً اكبر من العدد ‪ 4‬او اصغر من العدد ‪ 4‬او تساوي العدد ‪.4‬‬
‫الحل‪:‬‬
‫الفكرة هً بطرح العد المطلوب فحصة او مقارنتة من العدد ‪ 4‬وذلك ٌتم عن طرٌق اجراء عملٌة الطرح ثم فحص مسجل الحالة ‪ Status‬اذا‬
‫كان العدد االول ٌساوي العدد الثانً فان قٌمة ‪ zero flag =1‬اما اذا كان العدد االول اكبر من العدد الثانً فأن ‪ carry flag=1‬اما اذا كان‬
‫العدد االول اصغر من العدد الثانً فأن ‪ ، carry flag=0‬راجع الوحدة االولى الطرح بأستخدام المتمم الثانً ‪،‬وٌتم برمجة العملٌة كأالتً ‪.‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪;identifiers‬‬
‫‪my_location EQU 0x0E‬‬
‫‪Status EQU 0x03‬‬
‫‪main‬‬
‫‪Movlw 0x04‬‬ ‫‪;move literal to Work register value‬‬
‫‪SUBWF my_location ;subtract w reg. from specified register‬‬
‫‪BTFSC Status,2‬‬
‫_‪Goto equ‬‬ ‫‪;goto equal procedure‬‬
‫‪Btfsc Status ,0‬‬
‫_ ‪GOTO less_than‬‬ ‫‪;goto less than procedure‬‬
‫_ ‪GOTO greater_than‬‬ ‫‪;goto to greater then procedure‬‬
‫_‪Equ‬‬
‫‪instruction.‬‬
‫‪Instruction.‬‬
‫‪GOTO main‬‬
‫_‪less_than‬‬
‫‪instruction.‬‬
‫‪Instruction.‬‬
‫‪GOTO main‬‬
‫_‪greater_than‬‬
‫‪instruction.‬‬
‫‪Instruction.‬‬
‫‪GOTO main‬‬

‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 010‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Direct Addressing‬‬ ‫العنونة المباشرة‬
‫ٌقصد بالعنونة المباشرة هً الوصول ‪ Accessing‬الى المسجل مباشرتا ً ‪ ،‬كما هو مبٌن فً المثال األتً‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪main‬‬
‫‪DECF 0x0E,1‬‬
‫‪RLF 0x0E,1‬‬

‫‪goto main‬‬
‫‪end‬‬

‫قمنا فً المثال السابق بطرح محتوٌات المسجل ‪ 0x0E‬مباشرتا ً فقط بذكر عنوان المسجل ‪ ،‬ثم قمنا بتزحٌف المزجل بت واحد الى الٌمٌن ‪ ،‬هذة‬
‫الطرٌقة تسمى العنونة المباشرة ‪.‬‬

‫‪UnDirect Addressing‬‬ ‫العنونة الغير المباشرة‬


‫ٌقصد بالعنونة الغٌر المباشرة هً الوصول ‪ Accessing‬الى المسجل ما ٌتم بطرٌقة غٌر مباشرة ‪ ،‬وذلك بأستخدام المسجل ‪، FSR‬كما هو‬
‫مبٌن فً المثال االتً ‪،‬راجع الوحدة الخامسة لمزٌد من المعلومات عن المسجل ‪ ، FSR‬والمسجل ‪. INDF‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪main‬‬
‫‪MOVLW 0x0E‬‬
‫‪MOVWF 0x04‬‬ ‫‪;FSR‬‬
‫‪DECF 0x00‬‬ ‫‪;INDF‬‬
‫‪RRF 0X00‬‬
‫‪goto main‬‬
‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 012‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪:6.5‬‬
‫البرنامج التالً ٌستخدم للسٌطرة على مستوى خزان ‪ ،‬وذلك عن الطرٌق الفحص المستمر للمتحسس السفلً ‪ ،‬عندما تصبح قٌمة المتحسس‬
‫السفلً صفر فهذا ٌدل على ان الخزان فارغ ‪ ،‬نقوم بتشغل بفتح الصمام ‪ ،‬وننتظر الى ان تصبح قٌمة المتحسس العلوي تساوي واحد والتً‬
‫تدل على ان الخزان قد ملئ وتعاد العملٌة ‪ ،‬الشكل ‪ٌ Fig 6.3‬بٌن رسم توضٌحً للعملٌة ‪.‬‬

‫‪valve‬‬
‫‪Flow in‬‬

‫‪Valve‬‬ ‫‪Compressor‬‬

‫‪Flow out‬‬

‫‪Figure 6.3‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬
‫‪;######### Control tanl level ###########‬‬
‫‪STATUS_BANK0 EQU 03h‬‬
‫‪STATUS_BANK1 EQU 83h‬‬
‫‪trisa EQU 0x85‬‬
‫‪trisb EQU 0x86‬‬
‫‪porta EQU 0x05‬‬
‫‪portb EQU 0x06‬‬
‫‪BSF‬‬ ‫‪STATUS_BANK0 ,5‬‬
‫‪MOVLW‬‬ ‫‪0x0Ch ; xxxx 11xx bit3 =LL bit2=HL‬‬
‫‪MOVWF‬‬ ‫‪trisa‬‬
‫‪MOVLW‬‬ ‫‪0x00h ; 0xxx xxxx‬‬
‫‪MOVWF‬‬ ‫‪trisb‬‬
‫‪BCF‬‬ ‫‪STATUS_BANK1 ,5‬‬

‫‪MAIN‬‬ ‫‪BTFSC‬‬ ‫‪porta ,3 ; test the tank if empty‬‬


‫‪GOTO‬‬ ‫‪MAIN‬‬
‫‪BSF portb ,7 ;1xxx xxxx turn on bump‬‬
‫‪REPEAT BTFSS‬‬ ‫‪porta ,2 ; test the tank if full‬‬
‫‪GOTO‬‬ ‫‪REPEAT‬‬
‫‪BCF portb ,7 ;1xxx xxxx turn on bump‬‬
‫‪GOTO MAIN‬‬

‫‪end‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 013‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Introduction to interrupt‬‬ ‫المقاطعات‬
‫ُم َقدمة في ُ‬
‫سوف َتقوم بفِحص ‪ُ ، Scan‬كل َطرف من أطراف المُسٌطر الدَ قٌق‬
‫َ‬ ‫إذا أردت ان تبرمج لَوحة مفاتٌح ُتربط الى المُسٌطر الصغري ‪َ ،‬‬
‫بالطبع‬
‫الذي وصل الى لَوحة المفاتٌح ‪ ،‬لل َتعرف على الزر ال َمضغوط ‪ ،‬المِثال التالً ٌَوضح ذلك‪،‬‬

‫‪Portb equ 0x06‬‬


‫‪Loop BTFSC portb,0‬‬
‫‪; action for key_0‬‬
‫‪BTFSC portb,1‬‬
‫‪; action for key_1‬‬
‫‪BTFSC portb,2‬‬
‫‪; action for key_2‬‬
‫‪Goto Loop‬‬
‫‪;rest of program‬‬

‫َهذا ال َنوع من ال َفحص ‪ٌُ ،Scan‬سمى األنتخاب ‪، polling‬السؤال الذي ٌَتبادر الى الذِهن ؟!!‬

‫الوقت الذي َنجري فٌة َعملٌة األنتخاب ‪ ، Polling‬طبعا مُحال‬


‫كٌف َسٌتم َتنفٌذ َبرنامج أخر َمخزون داخل َشرٌحة المُسٌطر الصغري ‪ ،‬فً َ‬
‫َ‬
‫ألننا داخل حلقة مغلقة ‪ close loop‬ل َفحص أطراف المُسٌطر ال َمربوطة الى لَوحة ألمفاتٌح وعند تحسس أي طرف نقوم بتأدٌة المُهمة‬
‫ال َمطلوبة ‪ ،‬أّذن نستنتج من ذلك‪،‬‬

‫لتفحص األطراف ‪ Scanning‬ب َشكل‬ ‫‪ o‬المُسٌطر ال ٌَستطٌع تنفٌذ اكثر من مهمة ‪ ،‬واذا حاولت وتمكنت‪ ،‬فستحاول تنفٌذ المهمة ثم ترجع َ‬
‫ترك ‪release‬‬‫َ‬ ‫متكرر‪ ،‬تخٌل لو أن المسٌطر ٌنفذ المهمة األخرى ‪ ،‬وفً نفس الوقت ضغط شخص على لوحة ألمفاتٌح ِبسُرعة ثم‬
‫ألمفتاح ‪ ،‬عندها المُسٌطر عندما ٌعود ل َفحص األطراف ال ٌَجد أي طرف ٌشٌر الى وجود زر مضغوط ؟!!‬

‫‪ o‬ممكن إن المُسٌطر ال َ‬
‫ٌتحسس أو ٌفقد األشارة فً عملٌة األنتخاب ‪..Polling‬‬

‫‪interrupt philosophy‬‬ ‫فلسلفة المقاطعة‬

‫معنى المقاطعة فً اللُغة وهو مقاطعة شًء أو َعمل ما ألداء عمل اكثر أهمٌة ث َم ال َعودة الى ال َعمل السابق ‪ ..‬وهو فعالً ما ٌحدث فً المُسٌطر‬
‫الصغري حٌث أن المقاطعة ‪ ، interrupt‬تقاطع عمل المسٌطر الحالً لتأدٌة مهمة أخرى ‪،‬بعد إتمام المهمة ٌعود المسٌطر لوضعة الطبٌعً‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 014‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Mechanism of interrupt‬‬ ‫الية عمل المقاطعات‬

‫المقاطعة تقرٌبا ً مشابهة ل َعمل األجراءات ‪ ، Subroutine‬حٌث ٌوجد برنامج فرعً ٌستدعى عند حدوث المقاطعة‪ ،‬هذا ال َبرنامج ال َفرعً‬
‫ٌُسمى برنامج خدمة المقاطعات )‪ٌ ، ISR(interrupt service routine‬تم استدعاءة بطرٌقتٌن‬

‫من داخل ال َبرنامج الرئٌسً ‪ Main program‬باستخدام َتعلٌمات خاصة وهو ما ٌسمى بـ ‪software interrup.‬‬ ‫‪‬‬
‫عن َطرٌق أطراف المسٌطر الدقٌق وهو ماٌسمى بـ ‪Hardware interrupt‬‬ ‫‪‬‬

‫الشكل ‪ٌ Figure 6.5‬بٌن برنامج خدمة المقاطة مع البرنامج الرئٌس ‪main function‬‬

‫‪ISR‬‬

‫‪Address 0x04‬‬

‫‪CALL‬‬
‫‪Main program‬‬

‫‪Figure 6.5‬‬

‫حسنا ً ‪ ...‬دعنى نلقً الضوء على موضوع استدعاء خدمة ‪ ISR‬عن طرٌق أطراف المسٌطر الصغري ‪ ،‬عند ال َنظر الى المسٌطر الصغري‬
‫عند الطرف ‪ RB0‬س َتجد ان لة َوضٌفة إضافٌة ألتً هً ‪، INT‬أي انة ممكن ان ٌُستخدم َهذا الطرف لخدمة المقاطعة الخارجٌة ‪ ،‬وكذلك‬
‫‪ RB4-RB7‬ممكن تفعٌل خدمة المقاطعة علٌها ‪ ،‬قبل استخدام المقاطعات ٌجب علٌنا ‪،‬‬

‫‪ o‬اخبار المسٌطر الصغري ‪ microcontroller‬باننا سنستخدم خدمة المقاطعة‪.‬‬


‫‪ٌ o‬جب َتحدٌد أي طرف سٌستخدم لخدمة المقاطعة واي طرف سٌستخدم كخدمة ‪.I/O‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 015‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫لتفعٌل خدمة المقاطعة عند الطرف ‪ ، RB0‬نتبع الخطوات التالٌة‬

‫‪ -0‬نمكن خدمة المقاطعات العامة ‪ GIE‬من المسجل ‪ INTCON‬كاألتً‬

‫‪BSF 0x0b,7‬‬

‫‪ -2‬نمكن خدمة المقاطعة عند الطرف ‪ RB0‬بتمكٌن الخانة ‪ INTE‬من المسجل ‪ INTCON‬كاالتً‬

‫‪BSF 0x0b,4‬‬

‫عند هذه اللحظة ‪ ،‬المسٌطر الدقٌق سٌكون لة العلم متى سٌذهب لبرنامج خدمة المقاطعة ‪ ، ISR‬وذلك عند تحسس اشارة عند الطرف‬
‫‪ ،RB0‬فقط بقً شئ واحد مهم هل المقاطعة ستتم عندما ؟!!‬

‫‪falling edge‬‬ ‫الطرف ‪ٌ RB0‬تحول من المنطق الواحد الى المنطق الصفر‬ ‫‪o‬‬

‫‪rising edge‬‬ ‫الطرف ‪ٌ RB0‬تحول من المنطق الصفر الى المنطق الواحد‬ ‫‪o‬‬

‫هذا ٌتم تحدٌدة من خالل مسجل خاص داخل المسٌطر الدقٌق ٌدعى ‪ ، Option‬الخانة التً تهمنا حالٌا َ هً الخانة السادسة حٌث‬

‫‪Intedg = bit 1‬‬ ‫)‪(rising edge 0-5V‬‬ ‫‪default value‬‬


‫‪Intedg = bit 0‬‬ ‫)‪(falling edge 5V-0‬‬

‫‪Interrupt flag‬‬ ‫علم المقاطعة‬


‫ٌوجد هذا العلم فً السجل ‪ INTCON‬فً الخانة )‪ ، bit(1‬وضٌفة هذا البت هو عند حدوث مقاطعة وٌدخل المسٌطر الصغري الى برنامج‬
‫خدمة المقاطعة ‪ٌ ISR‬رفع هذا العلم الى القٌمة واحد وذلك لمنع أي مقاطعة تقاطع عمل المسٌطر الصغري داخل ‪ ، ISR‬لسوء الحظ ان‬
‫المسٌطر الصغري عند خروجة من خدمة ‪ ISR‬فأن هذا العلم ال ٌرجع الى حالة الصفر أي أن المسٌطر ال ٌقبل أي مقاطعة طالما أن هذا‬
‫البت واحد ‪ ،‬لذلك ٌجب تصفٌر ‪ reset‬هذه الخانة برمجٌا ً عند الخروج من خدمة المقاطعة ‪.‬‬

‫مالحظة‪:‬‬

‫عند بداٌة تشغٌل المسٌطر الصغري بشكل طبٌعً ٌؤشر عداد البرنامج ‪ PC‬على الموقع ‪ 0x00‬من الذاكرة ‪ ،‬عند حدوث مقاطعة فان عداد‬
‫البرنامج ٌحمل بالقٌمة ‪ 0x04‬مؤدٌا ً الى جعل المسٌطر الصغري ٌؤشر الى موقع الذاكرة ‪ 0x04‬لذلك ٌجب اخبار ‪ PIC‬باننا سوف نحجز‬
‫الموقع ‪ 0x04‬لبرنامج خدمة المقاطعة ‪ ISR‬ونفصلة عن البرنامج الرئٌسً كاألتً ‪،‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 016‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪ORG 0000h‬‬ ‫المسٌطر سٌذهب الى هذا العنوان عند بداٌة التشغٌل ;‬
‫‪GOTO Main‬‬ ‫القفز الى دالة البرنامج الرئٌسً ;‬
‫‪ORG 0004h‬‬ ‫هذا العنوان هو بداٌة برنامج خدمة المقاطة;‬

‫التعلٌمات المراد تنفٌذها عن حدوث مقاطعة ;‬

‫‪RETFIE‬‬ ‫العودة من برنامج خدمة المقاطعات;‬


‫‪Main‬‬
‫التعلٌمات التً ترٌد تنفٌذها داخل الدالة الرئٌسٌة ;‬

‫‪Goto Main‬‬
‫‪End‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪: 6.6‬‬

‫فً هذا المثال سوف نقوم بتفعٌل خدمة المقاطعة عند الطرف ‪ ، Rb0‬حٌث أذا كان هناك أشارة عند الطرف ‪ٌ ، Rb0‬تم استدعاء برنامجة‬
‫خدمة المقاطعات ‪ ISR‬بشكل ذاتً وذلك لكً ٌرفع البت االول من المسجل ‪ porta‬الى القٌم واحد ‪.‬‬

‫‪list p=16f84a‬‬
‫>‪include <p16f84a.inc‬‬

‫‪ORG 0000h‬‬ ‫ٌبدء المسٌطر التفٌذ من هذا العنوان ;‬


‫‪goto init‬‬
‫‪ORG 0004h‬‬ ‫بداٌة برنامج خدمة المقاطعات ;‬
‫‪bsf 0x05,0‬‬ ‫‪;0x05 is porta‬‬
‫‪BCF 0x0b,1‬‬ ‫‪;INTF=0 of INTCON‬‬
‫‪RETFIE‬‬
‫‪Init‬‬ ‫عملٌات تهٌئة المسٌطر الصغري ;‬
‫‪bsf 0x03,5‬‬
‫‪clrf 0x86‬‬
‫‪bsf 0x86,0‬‬
‫‪bcf 0x85,0‬‬
‫‪bcf 0x83,5‬‬
‫‪Main‬‬ ‫بداٌة البرنامج الرئٌسً ;‬
‫‪bsf 0x0b,7‬‬ ‫‪;GIE=1 of INTCON‬‬
‫‪bsf 0x0b,4‬‬ ‫‪;INTE=1 of INTCON‬‬
‫‪Goto Main‬‬
‫‪End‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 017‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Timers‬‬ ‫المؤقت‬

‫قبل ان ندخل فً موضوع المؤقت ‪ ،‬دعنا نتحدث عن وحدة سٌطرة قلٌالً ‪ ،‬وحدة السٌطرة او الوحدة التً تولد دورة الماكنة ‪machine‬‬
‫‪ cycle generation‬هً فً الحقٌقٌة عبارة عن عداد حلقً مكون من ‪ 4-bit‬كل دورة كاملة لهذا العداد تشٌر الى نهاٌة تعلٌمة ‪ ،‬سرعة هذا‬
‫العداد الحلقً او سرعة دورة الماكنة تعتمد على سرعة المذبذب ‪ , oscillator‬الشكل ‪ٌ Fig 6.5‬بٌن وحدة السٌطرة‬

‫‪T4‬‬ ‫‪T3‬‬ ‫‪T2‬‬ ‫‪T1‬‬

‫‪4MHZ‬‬
‫‪Ring Counter‬‬
‫‪OSCILLATOR‬‬
‫‪Machine cycle generation‬‬

‫‪Figure 6.5‬‬

‫ٌتم خالل االربع دورات‪،‬‬

‫لجلب التعلٌمة الى مسجل ‪ ، IR‬ونفس الوقت ٌزداد عداد البرنامج بواحد‬
‫‪ : T1 -0‬خالل هذه الدورة ٌتم نقل محتوٌات ‪ PC‬الى الذاكرة َ‬
‫لٌشٌر الى التعلٌمة التالٌة ‪.‬‬

‫‪ : T4,T3 ,T2 -2‬دورة تنفٌذ التعلٌمة وهً متغٌرة تعتمد على نوع التعلٌمة ‪.‬‬

‫مجمل األربع نبظات هذه التً ٌتم فٌها جلب وتنفٌذ التعلٌمة ‪ ،‬تسمى دورة التعلٌمة ‪ machine cycle‬مع مالحظة انة بعض التعلٌمات‬
‫تحتاج الى اكثر من دورة ماكنة ‪. one machine cycle‬‬

‫كلنا نعلم ان التردد مقلوب الزمن أي‬

‫‪t=1/4MHZ=0.25 micro second‬‬

‫وبما ان التعلٌمة تحتاج اربع نبظات من دورة الماكنة لكً تنفذ بشكل كامل‬

‫‪Instruction cycle=0.25 mico second * 4 pulse = 1 micro second‬‬

‫أي ان التعلٌمة تحتاج ‪ 1 micro second‬لكً تنفذ‪.‬‬

‫مالحظة‪:‬‬

‫كل التعلٌمات فً المسٌطر الصغري تاخذ دورة ماكنة واحدة أي ‪ 1 micro‬باستثناء التعلٌمات التً فٌها عملٌة القفز ‪. jump‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 018‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫اذن نستنتج من ذلك بامكان ان نحسب الوقت الذي ٌستغرقة المسٌطر الدقٌق التمام تنفٌذ برنامجنا مثال البرنامج التالً‬

‫‪MOVLW 0x02‬‬ ‫‪1 micro‬‬


‫‪MOVWF 0x0E‬‬ ‫‪1 micro‬‬
‫‪INCF 0xE‬‬ ‫‪1 micro‬‬

‫اذن الوقت المستغرق لتنفٌذ البرنامج السابق هو ‪ ، 3 micro‬الحظ البرنامج التالً ‪،‬‬

‫‪MOVLW 0x0A‬‬ ‫‪1 micro‬‬


‫‪MOVWF 0x0E‬‬ ‫‪1 micro‬‬
‫‪Loop‬‬ ‫‪DECFSZ 0x0E,1‬‬ ‫‪1 micro or 2 micro = 1*9 + 2 =11 micro second‬‬
‫‪GOTO loop‬‬ ‫‪2 micro 2*9 microsecond =18 microsecond‬‬
‫‪End‬‬ ‫‪1 micro‬‬

‫الوقت المستغرق هو ‪18+11+3=32 microsecond‬‬


‫نستنتج من ذلك انة بامكانك ان تكتب دالة او اجراء تاخٌر حسب المدة التً ترغب بها باالعتماد على زمن كل تعلٌمة‪،‬‬
‫‪Timer modules‬‬ ‫وحدة المؤقت‬
‫المؤقت فً المسٌطر الصغري ‪ PIC16f84A‬هو مؤقت ذو سعة ‪ٌ 8-bit‬سمى ‪ TMR0‬والذي ٌمكن أستخدامة كمؤقت أو عداد ‪ ،‬عند أستخدام‬
‫هذا المؤقت كعداد ‪ٌ ، Counter‬قوم هذا المؤقت بالزٌادة عند كل نبضبة تأتً الى الطرف ‪ ، TOCK1‬أما عند أستخدامة كمؤقت ‪Timer‬‬
‫ٌزداد هذا المسجل بشكل ذاتً بنسبة تعتمد على مصدر التردد ومقسم التردد ‪ prescaler assignment‬الموجود فً المسجل ‪، option‬‬
‫لتفعٌل المؤقت ‪ٌ Timer‬جب‬

‫‪Timer Enable‬‬ ‫تفعيل خدمة المؤقت‬


‫عرفنا ان المؤقت من الوحدات السابقة عبارة عن مسجل ذو ‪ 8-bit‬وهذا المسجل تعتمد سرعة الزٌادة فٌة بنسبة تعتمد على تردد الدخل‬
‫باالضافة الى مقسمم التردد ‪ ،‬ماذا ٌحدث فعالً ‪ ،‬عندما ٌصل مسجل المؤقت الى ‪ 256‬وهً اقصى قٌمة لة النة مسجل ذو ‪ 8-bit‬وعند زٌادة‬
‫هذة القٌمة بواحد ٌصبح المسجل ٌحمل القٌمة ‪ 0‬مشٌرا ُ بذلك الى حدوث حالة طفحان ‪ ،‬هذة الحالة تستدعى خدمة المقاطعة عند تفعٌل مقاطعة‬
‫المؤقت ‪ ،‬لتنفذ برنامج خدمة المقاطعات ‪ ، ISR‬ما ٌهما االن هً العالقة التً من خاللها سنعرف زمن استدعاء خدمة المقاطعة وهً‬

‫‪timer frequency =(f/4)× Prescaler‬‬

‫)‪Overflow time = 1/timer frequency × (256-tmr0‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 019‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ُ‬
‫حٌث أن قٌمة ‪ tmr0‬تمثل قٌمة مسجل المؤقت ‪ ،‬ومقسم التردد ‪ prescaler‬تمثل نسبة التقسٌم والتً هً موضحه فً الجدول التالً‬

‫‪Ps2,ps1,ps0‬‬ ‫نسثح التقسين ‪timer‬‬


‫‪000‬‬ ‫‪1/2‬‬
‫‪001‬‬ ‫‪1/4‬‬
‫‪010‬‬ ‫‪1/8‬‬
‫‪011‬‬ ‫‪1/16‬‬
‫‪100‬‬ ‫‪1/32‬‬
‫‪101‬‬ ‫‪1/64‬‬
‫‪110‬‬ ‫‪1/128‬‬
‫‪111‬‬ ‫‪1/256‬‬

‫‪Table 6.1‬‬

‫ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ‬
‫مثال ‪: 6.7‬‬
‫لنفرض أنك حملت المسجل ‪ tmr0‬بالقٌمة ‪ 0x64‬وقٌمة مقسم التردد هً ‪ ps2,ps1,ps0‬هً ‪ 010‬فما هو زمن حدوث حالة الطفحان اذا‬
‫كان التردد ‪4 Mhz‬‬

‫الحل‪:‬‬
‫نحول القٌمة ‪ 0x64‬التً هً بالنظام السادس عشر الى ما ٌقابلها بالنظام العشري والتً هً ‪ ، 100‬وبما أن مقسم التردد حمل بالقٌمة ‪010‬‬
‫اذن نسبة التقسٌم هً ‪ 1/8‬من الجدول ‪ ،Table 6.1‬وكان تردد المصدر هو ‪. 4 Mhz‬‬

‫‪timer frequency =(4 Mhz/4)× 1/8 =0.125 Mhz‬‬

‫‪Overflow time = 1/0.125 Mhz × (256-100)=1024µs‬‬

‫لنقوم أالن بتعدٌل بسٌط على المعادالت أعالة ‪ ،‬لنعوض المعادلة رقم )‪ (1‬فً المعادلة رقم )‪ (2‬فنحصل‬

‫ُ‬
‫حٌث أن الزمن ‪ T‬هو مقلوب تردد المصدر‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 001‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫األن نرٌد معرفة القٌمة التً سنحمل بها المسجل ‪ tmr0‬عند زمن طفحان معٌن ‪ ،‬سنقوم بتعدٌل المعادلة رقم )‪ (3‬لتصبح بالشكل التالً‬

‫الجدول ‪ٌ Table 6.2‬بٌن قٌم مختلفة للمسجل ‪ Tmr0‬عند قٌم مختلفة من ‪ ، overflow‬القٌم الفارغة داللة أن القٌة الناتجة هً قٌمة سالبة‬
‫وال ٌجوز تحمٌل المسجدل ‪ Tmr0‬بالقٌم السالبة ‪.‬‬

‫‪Table 6.2‬‬

‫‪Timers interrupt‬‬ ‫مقاطعة المؤقت‬


‫لٌتم مقاطعة ال ‪ Timer‬والذهاب الى خدمة المقاطعة ‪ٌ ISR‬جب أن ٌدخل مسجل المؤقت ‪ timer0‬فً حالة طفحان ‪ overflow‬أي أن‬
‫قٌمة المسجل ‪ Timer0‬تنتقل من القٌمة ‪ 0xff‬الى القٌمة ‪ ، 0x00‬وٌتم ذلك‬

‫‪ -0‬اخبار المسٌطر الدقٌق باننا نرٌد تفعل خدمة المؤقت وذلك عن طرٌق السجل ‪ option‬عند القٌمة ‪ TOCS‬حٌث أن‬

‫‪TOCS=0 timer mode‬‬

‫‪TOCS =1 counter mode‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 000‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪ -2‬تحدٌد فترة المؤقت وهً بشكل افتراضً ‪ 16 micro second‬اذا كانت ‪، ps0=0,ps1=0,ps2=0‬الكن أعلم ان ‪prescaler‬‬
‫ٌتشارك مع شٌئٌن ‪ whatchdog‬و ‪ Timer‬وٌتم تحدٌد أي العملٌة المطلوبة عن طرٌق الطرف )‪ PSA(Pin assignment‬حٌث‬

‫‪PSA =0 Timer prescaler‬‬

‫‪PSA =1 Watchdog prescaler‬‬

‫)‪WATCHDOG TIMERS (WDT‬‬ ‫مؤقت الحراسة‬

‫سؤال ٌطرح نفسة؟!!‬


‫ماذا ٌحدث لو َعلق ‪ Stuck‬المُسٌطر ال َدقٌق‪ ،‬هل هناك زر ‪ restart‬العادة تشغل المسٌطر الدقٌق ‪ ،‬طبعا ُ ال ‪،‬فماذا نفعل لو كان المسٌطر‬
‫الدقٌق فً موقع عمل ‪ field‬ودخل فً حالة العلق ‪ ، Stuck‬السطور التالٌة سنتعرف بها على كٌفٌة التغلب على هذه الحالة ‪،،‬‬
‫كٌف ٌعلم المسٌطر الدقٌق انة علق ‪ Stuck‬؟!!‬
‫الجلب ‪ Fetch‬التً ٌتم فٌها َجلب ال َتعلٌمة من الَذاكرة الى سِ جل التعلٌمة ‪، Instruction register‬‬
‫نحن نعلم أن دور الماكنة تبدء بعملٌة َ‬
‫حالة العلق ‪ Stuck‬هو ان وحدة المعالجة المركزٌة ‪ CPU‬لم تستلم َتعلٌمة من الذاكرة مما ٌسبب خلل فً سٌر البرنامج ‪ ،‬وهو فعالً ما ٌحدث‬
‫فً حاسباتنا الشخصٌة ‪ ،‬فنظطر الى إعادة تشغٌل الحاسوب ‪،‬‬
‫لقد قلنا أن المسٌطر الدقٌق ال ٌحتوي على زر اعادة التشغٌل ‪ ، Restart‬الفكرة التً ابتكروها مهندسً الحاسبات هو وضع مؤقت ‪ٌ ،‬بدء هذا‬
‫المؤقت عند دورة الجلب بالعد ‪ ،Fetch cycle‬أي عندما ٌقوم المعالج بارسال طلب التعلٌمة الى الذاكرة ‪ ،‬اذا أنتهت قٌمة المؤقت ولم ٌَستلم‬
‫المعالج اي تعلٌمة من الذاكرة الى مسجل التعلٌمة ‪ٌ ، IR‬قوم المسٌطر الدقٌق باعادة تشغٌل نفسة ذاتٌا ً ‪ ،‬هذا المؤقت ٌسمى ‪Watch Dog‬‬
‫‪ Timer‬وٌختصر ‪، WDT‬‬
‫‪ ،‬فً الحقٌقة مؤقت الحراسة هو عبارة عن َعداد ذو ثمان خانات ‪ٌ 8-bit‬عد من القٌمة ‪ 0x00‬الى القٌمة ‪، 0xff‬بشكل ذاتً ‪ ،‬وعند نهاٌة كل‬
‫عملٌة عد أي عند القٌمة ‪ٌ ، 0xff‬زداد مؤقت الحراسة لٌصبح ‪ ، 0x00‬مؤدٌا ً ذلك لطفحان مؤقت الحراسة‪ ،‬لٌبدء العد من جدٌد‪ ،‬متى ٌبدء‬
‫مؤقت الحراسة بالعد ؟!!‬
‫ٌبدء مؤقت الحراسة بالعد خالل مرحلة الجلب ‪ fetch cycle‬من دورة الماكنة ‪ ،machine cycle‬إذا لم ٌستلم ‪ CPU‬أي تعلٌمة خالل فترة‬
‫الجلب وقد وصل مؤقت الحراسة بالعد الى القٌمة ‪، 0xff‬وقد طفح المؤقت أي تحول من القٌمة ‪ 0xff‬الى القٌمة ‪، 0x00‬عندها سٌتم عمل‬
‫‪ reset‬لشرٌحة المسٌطر الدقٌق ‪..‬‬
‫السؤال الذي ٌتبادر الى الذهن ؟!!‬

‫‪ ‬اذا طلبت العد من الصفر الى العشرة من شخصٌن طبعا ً سرعة العد ستختلف فمثال الشخص االول ٌعد كل ثانٌة ‪ ،‬اما الشخص‬
‫الثانً فمثالً ٌعد كل ثانٌتٌن ‪ ،‬أذن ما هً الفترة التً ٌزداد فٌها مؤقت الحراسة ؟!! بشكل افتراض المؤقت ٌعد كل ‪ 08‬ماٌكرو ثانٌة‪،‬‬
‫وهذة القٌمة قابلة للتغٌر باستخدام سجل ‪.. option‬‬
‫‪ ‬اخبار المسٌطر الدقٌق بتفعٌل ‪ enable‬او ابطال ‪ disable‬خدمة مؤقت الحراسة ‪WDT‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 002‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪watchdog timer preparation‬‬ ‫َخطَوات تَهيئة مؤقت ِ‬
‫الحراسة‬
‫ٌَجب َتحدٌد ال َفترة َ‬
‫الزمنٌة ألتً ٌ ُعد فٌها مؤقت ال ِحراسة ‪ ،‬وذلك عن طرٌق المسجل ‪ ، option‬عن طرٌق الخانات ‪ ps0,ps1,ps2‬حسب‬
‫الجدول ‪Table 6.3‬‬

‫‪Ps0‬‬ ‫‪Ps1‬‬ ‫‪Ps2‬‬ ‫‪Rate‬‬ ‫‪WDT Time‬‬


‫‪0‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1:1‬‬ ‫‪18 ms‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1:2‬‬ ‫‪38 ms‬‬
‫‪0‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1:3‬‬ ‫‪72 ms‬‬
‫‪0‬‬ ‫‪0‬‬ ‫‪1‬‬ ‫‪1:4‬‬ ‫‪144 ms‬‬
‫‪1‬‬ ‫‪0‬‬ ‫‪0‬‬ ‫‪1:5‬‬ ‫‪288 ms‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1:6‬‬ ‫‪576 ms‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪0‬‬ ‫‪1:7‬‬ ‫‪1.1 second‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1:8‬‬ ‫‪2.2 second‬‬
‫‪Table 6.3‬‬

‫تذكر !!! أن الخانات ‪ PS0,PS1,PS2‬مشتركة بٌن المؤقت ‪ Timer0‬ومؤقت الحراسة ‪ ، WDT‬لذلك ٌجب تحدٌد الوضٌفة التابعة لهذة الخانات‬
‫‪ ،‬وذلك عن طرٌق الخانة ‪ PSA‬من مسجل ‪ ، Option‬حٌث اذا رفعة هذه الخانة ‪ PSA‬الى القٌمة واحد فهذا ٌعنً أن قٌمة التقسٌم‬
‫‪ PS0,PS1,PS2‬هً لمؤقت الحراسة ‪ ، WDT‬بمجرد ما ترفع قٌمة الخانة ‪ PSA‬الى الواحد ٌتم تفعٌل مؤقت الحراسة‪ ،‬حسب الشفرة التالٌة‬

‫‪Bsf 0x03,5‬‬

‫‪Bsf 0x81,3‬‬

‫‪BCF 0x83,5‬‬

‫ٌمكنك أن تصفر مؤقت الحراسة وكذلك قٌم ‪ PS0,PS1,PS2‬عن طرٌق التعلٌمة‪،‬‬

‫‪CLRWDT ;Clear WatchDog Timer‬‬

‫أ ذا اردت أن تغٌر قٌم ‪ ، prescaler‬الشفرة التالٌة توضح ذلك‬

‫‪movlw‬‬ ‫‪0x0D ;This is b'0000 1101' in Hex‬‬


‫‪movwf‬‬ ‫‪81h ;This is the Option Register‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 003‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪watchdog timer operation‬‬ ‫الية عمل مؤقت الحراسة‬
‫عند النظر للشكل ‪ Figure 6.1‬تجد ان هناك مصدرٌن للتردد ‪Clock generator‬‬
‫‪ ‬المصدر الذي ٌجهز المؤقت ‪ CLKOUT‬والذي ٌساوي تردد المذبذب البلوري مقسوم على اربعة‪.‬‬
‫‪ ‬المصدر الذي ٌجهز مؤقت الحراسة ‪ WDT‬وهو مذبذب مستقل‪.‬‬

‫‪Figure 6.1‬‬

‫منتقً بٌانات ‪، multiplexer‬‬


‫َ‬ ‫عندما ترفع قٌمة ‪ PSA‬الى الواحد ‪ ،‬هذا ٌؤدي الى أن كل من ‪ selector 2 , selector 4‬التان هما عبارة عن‬
‫سٌشٌران الى البٌانات القادمة من الطرف "‪ "1‬من ‪ ،multiplexer‬وهذا ٌؤدي الى ان المذبذب ‪ WDT‬سٌعبر عن طرٌق ‪ selector 2‬ذاهبً‬
‫الى المقسم ‪ ،Prescaler‬الذي ٌقسم التردد باألعتماد على قٌمة كل من ‪ ، PS0,PS1,PS2‬لٌخرج التردد المقسم الى ‪ ، selector 4‬الذي ٌفتح‬
‫الطرٌق الى مؤقت الحراسة )‪ WDT(Time-Out‬لٌقوم بعملٌة العد‪.‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 004‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Unit Seven‬‬ ‫ألوحـ ـ ـ ـ ـ ـدة السابعة‬

‫‪Toolkit & Simulation‬‬ ‫العدد والمحاكاة‬


‫ُمقدم ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ـ ــة‪:‬‬
‫سوف ن َتعرف على االدوات ‪ ToolKit‬المستخدمة فً عملٌة البرمجة ‪ ،‬وكذلك على عملٌة المحاكاة للمسٌطر الدقٌق بأستخدام‬
‫َ‬ ‫فً هذه الوحدة‬
‫برامج الحاسوب ‪ Computer Software‬وذلك للكشف عن العلل ‪ Bugs‬وتصحٌحها قبل تحمٌل ‪ Download‬البرنامج الى ذاكرة‬
‫المسٌطر الدقٌق‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 005‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫عملية البرمجة‬
‫لٌتم برمجة المسٌطر الدقٌق ‪ٌ Microcontroller‬جب أن ٌربط الى جهاز حاسوب )‪ Personal Computer (PC‬وٌم ذلك عن طرٌق‬
‫مبرمجة خاصة ٌتم توصٌلها الى منافذ الحاسوب سواء كان هذا المنفذ ‪ Eathernet‬او منفذ ‪ Rs232‬أو منفذ ‪ USP‬وذلك باالعتماد على نوع‬
‫المبرمجة ‪ ،‬كما فً الشكل ادناة‬

‫المبرمجة ‪:‬‬
‫تتوفر فً السوق أنواع مختلفة من المبرمجات ‪ ،‬من هذة المبرمجات عبارة عن عدة متكاملة مثل المبرمجة من شركة ‪ Microchip‬هذة‬
‫المبرمجة مزودة بقواعد ‪ Socket‬لمختلف انواع ‪ ، PIC microcontrolrs‬وكذلك تم توصٌل مفاتٌح ومصابح للفحص ‪ ،‬وجهزت بوحدات ‪7‬‬
‫‪ segment,lcd character 2*16 , graphic lcd‬وغٌرها من الوحدات مثل الذاكرة وحدات دخل تماثلٌة والكثٌر ما علٌك سوا شرائها من‬
‫السوق وقراءة الدلٌل المرفق مع المبرمجة لتعرف اكثر عن مزاٌاها ‪.‬‬

‫عملية توصيل المبرمجة ‪ easypic7‬بجهاز الحاسوب‬


‫لكً ٌتم توصٌل المبرمجة ‪ easypic7‬بجهاز حاسوب تحتاج الى‬

‫‪ ‬كٌبل توصٌل من نوع ‪ Usb‬شبٌة بكٌبل الطابعة الكٌبل مرفق مع المبرمجة‪ ،‬الحظ الشكل ‪Figure 7.1‬‬
‫‪ ‬تحتاج الى سواقة ‪ Driver‬لتعرٌف المبرمجة الى نظام الحاسوب ‪ ،‬هذه التعرٌف مرفق مع المبرمجة اسم التعرٌف هو ‪mikroProg‬‬
‫‪ For PIC Drivers v2.00‬فقط حدد نوع النظام ‪Windows Version‬‬

‫ٌقوم هذا البرنامج بعملٌة نقل الملف ‪ hex. File‬الذي تم تولٌدة باستخدام بٌئة البرمة‬ ‫‪ ‬تحتاج الى برنامج ‪mikroProg‬‬
‫وذلك لٌتم نقلة الى ذاكرة المسٌطر الدقٌق ‪microcontroller‬‬

‫بعد أن تقوم بتوصٌل المبرمجة الى جهاز الحاسوب عن طرٌق كٌبل ‪ ، Usb‬وقمت بتنصٌب التعارٌف ‪ Drivers‬وبرنامج ‪، Microprog‬‬
‫للتأكد من أن المبرمجة تم توصٌلها بشكل صحٌح الى جهاز الحاسوب ‪ ،‬قم بتشغٌل برنامج ‪ Microprog‬واجهة البرنامج مبٌنة فً‬
‫الشــــــــكل ‪ Figure 7.2‬تجد فً اسفل واجهة البرنامج أٌقومة بشكل رمز منفذ ‪ USP‬عندما تكون باللون الرمادي فأنة المبرمجة تكون فً‬
‫حالة حالة عدم توصٌل أما اذا كانت باللون االحمر فهذا ٌدل على ان المبرمجة موصلة بشكل صحٌح الحظ الشكل ‪Figure 7.3‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 006‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Figure 7.3‬‬

‫‪Figure 7.1‬‬

‫‪Figure 7.2‬‬

‫كتابة الشفرة ‪ Code‬وتولٌد الملف ‪hex. File‬‬


‫لكً تولد ملف ‪ hex.‬الذي سٌتم خزنة فً ذاكرة المسٌطر الدقٌق ‪ ،‬تحتاج الى مترجم ٌقوم هذا المترجم بترجمة السالسل النصٌة ‪ Strings‬الى‬
‫لغة تفهمها االنظمة الرقمٌة بشكل ملف ٌسمى ‪ ، hex. File‬توفر شركة ‪ microchip‬مترجم ٌسمى ‪ mplab‬هذا المترجم ٌستقبل سالسل‬
‫نصٌة مكتوبة بصٌغة لغة التجمٌع ‪، Assembly language‬‬

‫خطوات تولٌد ملف ‪hex. File‬‬

‫قم بتنصٌب برنامج ‪ ، Mplab‬الشكل ‪ٌ Figure 7.4‬بٌن واجهة البرنامج‬ ‫‪‬‬

‫‪Figure 7.4‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 007‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫من قائمة ‪ project‬أختر ‪ project wizard‬سنفتح النافذة المبٌة فً الشكل ‪Figure 7.5‬‬ ‫‪‬‬

‫‪Figure 7.5‬‬

‫من النافذة ‪ project wizard‬انقر على زر ‪next‬‬ ‫‪‬‬


‫تضهر نافذة جدٌدة أختر منها نوع المسٌطر الدقٌق ‪ Device type‬كما هو موضح فً الشكل ‪Figure 7.6‬‬ ‫‪‬‬

‫‪Figure 7.6‬‬

‫عند النقر على زر ‪ next‬تضهر النافذة التالٌة ‪ Figure 7.7‬والتً تحدد فٌها مسار المترجم ‪ Assember‬اترك االعدادات‬ ‫‪‬‬
‫االفتــراصٌة لـــها ثم انقر على زر ‪next‬‬

‫‪Figure 7.3‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 008‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫بعد النقر على زر ‪ next‬تظهر النافذة التالٌة ‪ Figure 7.8‬والتً تحدد من خاللها أسم والمسار الذي ترٌد حفظ ملف ‪ hex.‬فٌة ثم انقر‬ ‫‪‬‬
‫على زر ‪ ، next‬كما هو موضح فً الشكل‬

‫‪Figure 7.8‬‬

‫تضهر لك النافذة الموضحة فً الشكل ‪ Figure 7.9‬والتً تطلب منك أضافة ملفات خارجٌة الى مشروعك‪،‬ال تقم باضافة اي ملف فقط‬ ‫‪‬‬
‫اضغط زر ‪. next‬‬

‫‪Figure 7.9‬‬

‫تظهر لك النافذة التالٌة ‪ Figure 7.10‬والتً تلخص الخطوات التً قمت بها ‪ ،‬فقط أضغط على زر ‪finsh‬‬ ‫‪‬‬

‫‪Figure 7.10‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 009‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫بعد أن تم تحدٌد نوع المسٌطر الدقٌق ‪ Microcrontroller type‬وتم تحدٌد اسم ومسار الملف ‪ٌ ، hex.‬تم أضافة ملفات المشروع كما هو‬
‫موضح فً الشكل ‪Figure 7.11‬‬

‫‪Figure 7.11‬‬

‫من القائمة ‪ file‬أختر ‪ new‬ستنبثق نافذة لتحرٌر االوامر ‪ Codes‬قم بكتابة البرنامج الذي ترٌد ترجمتة كما هو موضح فً الشكل‬ ‫‪‬‬
‫‪Figure 10.12‬‬

‫‪Figure 7.12‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 021‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫من القائمة ‪ file‬أختر ‪ Save‬وذلك لحفظ الملف فً اي مكان ترٌد ولٌكن المسار ‪ F:\myproject\untitled.asm‬ستتغٌر النصوص الى‬ ‫‪‬‬
‫نصوص ملونة كما فً الشكل ‪Figure 10.13‬‬

‫‪Figure 7.13‬‬

‫‪ ‬من النافذة ‪ myproject.mcw‬المبٌنة فً الشكل ‪ ، Figure 10.14‬أضغط بالزر االٌمن على الملف ‪ source files‬ستنبثق نافذة فرعٌة‬
‫‪ pop-up menue‬أختر منها …‪ Add Fliles‬ستنفتح نافذة مستكشف الملفات أختر الملف الذي قمت بحفظة فً الفقرة السابقة والذي هو‬
‫‪untitled.asm‬‬

‫‪Figure 7.13‬‬

‫اذهب الى القائمة ‪ project‬وأختر أالمر ‪ build all‬ستنبثق نافذة تطلب منك تحدٌد نوع طرٌقة تخزٌن البرنامج ‪ ،‬اذا اخترت االمر‬ ‫‪‬‬
‫‪ Absolute‬فانك تولد ملف مطلق اي ثابت عند عنوان معٌن وال ٌتغٌر موقع البرنامج داخل الذاكرة ‪ ،‬أما اذا أخترت االمر‬
‫‪ Relocatable‬فان موقع البرنامج سٌكون نسبً وقابل للتغٌر فً داخل الذاكرة كما هو موضح فً الشكل‪ ،‬أختر االمر ‪ Absolute‬اي‬
‫أننا نود أن ٌكون البرنامج محدد عند ‪ 0x00‬من الذاكرة‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 020‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫اذا كانت العملٌات التً قمت بها صحٌحة فستظهر لك النافذة التالٌة ‪ Figure 10.14‬والتً تشٌر الى أن عملٌة تولٌد ملف ‪ hex.‬تمت‬ ‫‪‬‬
‫بطرٌقة صحٌحة ‪.‬‬

‫‪Figure 7.14‬‬

‫عملٌة نقل الملف ‪ hex.‬الى ذاكرة المسٌطر الدقٌق ‪microcontroller‬‬


‫لكً تتم عملٌة نقل الملف ‪ hex.‬المتولد من برنامج ‪ ، mplab‬نحتاج الى برنامج ‪ microprog‬عند تشغٌل البرنامج تشاهد نافذة البرنامج‬
‫التالٌة ‪Figure 10.15‬‬

‫‪Figure 7.14‬‬

‫نالحظ من الشكل أنة عن طرٌق القائمة ‪ list box‬المعنونة ‪ MCU Family‬نستطٌع تحدٌد من خاللها عائلة المسٌطر الدقٌق مثالً العائلة‬
‫‪ PIC16F‬ثم عن طرٌق القائمة ‪ list box‬المعنونة ‪ MCU‬نستطٌع تحدٌد نوع المسٌطر الدقٌق ولٌكن مثالً المسٌطر ‪ ، PIC16f84A‬بد أن‬
‫تمت عملٌة تحدٌد نوع المسٌــــطر الدقٌــق ‪ microcontroller‬علٌنا تحمٌل الملف ‪ hex.‬الى البرنـــــامج وذلك عن طــرٌق المجموعة‬
‫‪ Hex file option‬ثم النقر على الزر ‪ load‬لتحمٌل الملف ‪ ، Hex.‬ما علٌنا االن سوى نقل البرنامج الى المسٌطر الدقٌق‬
‫‪ microcontroller‬عن طرٌق الزر ‪. Write‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 022‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫‪Simulation using proteus‬‬ ‫المحاكاة بأستخدام برنامج ‪proteus‬‬
‫ٌوجد هناك العدٌد من برامج المحاكاة المستخدمة لمحاكاة الدارات اإللكترونٌة ولكن ما ٌمٌز برنامج ‪ Proteus‬هو الدقة والسهولة فً محاكاة‬
‫المشارٌع وخصوصا أًنه ٌحتوي على مكاتب كثٌرة لكافة القطع اإللكترونٌة وهو ٌستطٌع أن ٌحاكً الدارات التً تحتوي على المتحكمات بسهولة‬
‫جدا مًما ٌتٌح للمصمم بأن ٌختبر عمل المتحكم قبل أن ٌتم حقن البرنامج فً المتحكم ‪ Microcontroller‬مما ٌسهل عملٌة التطوٌر فً البرامج‬
‫بسهولة وإضافة لذلك ٌستطٌع المتدرب أو الذي ٌدرس برمجة المتحكمات أن ٌتم إختبار برامجه وٌعدل علٌها دون أن ٌتم تطبٌقها ‪.‬‬

‫واجة البرنامج ‪proteus 7‬‬

‫بعد أن قمت بتولٌد الملف ‪ hex. File‬عن طرٌق برنامج ‪ ، mplab‬افتح برنامج ‪ proteus 7‬واجهة البرنامج موضحة فً الشكل‬
‫‪Figure10.15‬‬

‫‪Figure 7.15‬‬

‫بعد أن قمت بفتح البرنامج قم بفتح مكتبة العناصر ‪ Device‬كما هو موضح فً الشكل ‪ ،Figure 10.16‬تحتوي المكتبة على كافة‬ ‫‪‬‬
‫العناصر االلكترونٌة من المقاومات والمتسعات الى المعالجات الدقٌقة ‪ microprocessor‬والحاكمات الدقٌقة ‪microcontroller‬‬

‫‪Figure 7.16‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 023‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫ستنفتح نافذة المكتبة نافذة ‪ pick devices‬انتقً القائمة ‪ MICRO‬ثم انتقً المسٌطر الصغري ‪ PIC16f84a‬بالنقر المزدوج كما هو‬ ‫‪‬‬
‫موضح فً الشكل ‪Figure 10.17‬‬

‫‪Figure 7.17‬‬

‫بعد أن قمت بربط المكونات مع المسٌطر الصغري كما هو موضح فً الشكل ‪ Figure 10.18‬أدناة‬ ‫‪‬‬

‫‪Figure 7.18‬‬

‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 024‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬


‫أنقر نفراً مزدوجا على المسٌطر الصغري ‪ microcontroller‬ستنفتح نافذة ‪ Figure 10.19‬تطلب من تحدٌد الملف ‪ Hex file‬الذي‬ ‫‪‬‬
‫قمت بتولٌدة من برنامج ‪mplab‬‬

‫‪Figure 7.19‬‬

‫بعد أن قمت بعملٌة تحمٌل برنامج ‪ proteus‬بمسار الملف ‪ hex file‬قم بتشغٌل المحاكاة ‪ Simulation‬وذلمك من القائمة ‪ Debug‬ثم من‬
‫القائمة أختر ‪Start/Restart debugging‬‬

‫تم بحمد هللا‬


‫ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ‪ ) 025‬ـــــــــــــــــــ‬ ‫المسٌطر الدقٌق ‪Microcontroller‬‬

Das könnte Ihnen auch gefallen