Beruflich Dokumente
Kultur Dokumente
Email: CET.ENG2012@yahoo.com
وَاللّهُ أَخْرَجَكُم مِّه بُطُىنِ أُمَّهَبتِكُمْ الَ تَعْلَمُىنَ شَيْئًب وَجَعَلَ لَكُمُ الْسَّمْعَ وَاألَبْصَبرَ وَاألَفْئِدَةَ لَعَلَّكُمْ تَشْكُرُونَ
الحمـــــــــ ُد هلل رب العالمٌن ،وأشهـــــــــــد أن ال إله إال هللا وحـده ال َشرٌك له ،وأشهد أن محـــــــــــمداً َعبــــده ورسوله َ
وصفٌه َ
وخلٌله ،
صلوات ربً وســـالمه علٌه وعلى آله وأصـــــــــــــحابه أجمـعٌن ،والتــــــــــــــابعٌن ومن تبعهم بإحـسان إلى ٌـوم الدٌن . .
ُ
حٌث ٌشهد َعصرنا َهذا تطـوراً سرٌعا ً السِ ٌما فٌما ٌخصُ َمجال تقنٌات معـَـــــــالجة البٌانات نعٌشُ الٌوم فً َعصر َتكنلوجٌا ال َمعلومات ،
وكثرة األجهزة التً تم اختراعُها فً هذا ال َمــــجال مثل ، Microprocessor , PLC , Microcontrollerفالقرن العشرٌن هو بال
شك قرن اإللكترون والصناعات الحاسوبٌة وبخاصة فً العقود األربعة األخٌرة ,فاختراع الترانزٌستور ش ّكل قفز ٍة نوعٌ ٍة فً الصناعة
االلكترونٌة ,وغدا هذا العنصر فٌما بعد عنصراً أساس ٌّا ً فً صناعة الدوائر االلكترونٌة .نقطة التحول الثانٌة فً الصناعة االلكترونٌة بعد
الترانزٌستور تمثلت بنجاح العلماء فً صناعة دوائر متكاملة ) (ICمتناهٌة الصغر ،وخصوصا ً االختراع المتحكم الصُغري
Microcontrollerوالتً هً عبارة عن دائرة متكاملة وما ٌمٌز هذه الدائرة المتكاملة هً الوثوقٌة فً األداء إضافة إلى تطور تقنٌة
تصنٌعها و سعرها المنخفض الذي جعلها فً متناول الجمٌع والمتحكم الصُغري ٌختلف عن بقٌة الدارات المتكاملة فً أنه دارة متكاملة قابلة
للبرمجة ,أي أن عمله ٌتحدد وفق البرنامج المكتوب داخله ,وهو ذو وثوقٌة عالٌة ودقة متناهٌة فً معالجة البٌانات مما جعله العقل المدبّر
فً دارات التحكم االلكترونٌة.
حٌث ٌتكون هذا الكتاب من سبعة وحدات ،فً ُ هذا الكتاب سٌكون مدخلك نحو الفهم العمٌق لمبدء عمل المتحكم الصُغري وطرٌقة برمجة ،
الوحدة االولى تناولنا موضوع األنظمة ال َعددٌة وكٌفٌها تمثٌلها ،اما الوحدة الثانٌة فكانت مقدمة عن بنٌة االنظمة القابلة لل َبرمجة ،وفً الوحدة
الثالثة تناولنا البنٌة الصلبة Hardwareللمتحكم الصُغري ، Microcontrollerاما الوحدة الرابعة تناولت موضوع مسجل البٌــانات
، File Registerوفً الوحدة الخامسة تم شرح طقم التعلٌمات instruction setالخاصة بالمتحكم الصُغري، Microcontroller
وفً الوحدة السادسة سوف تتعلم مبادى البرمجة وطرق برمجة المتحكم الصُغري ، Microcontrollerاما الوحدة االخٌرة فخصصتها
عن االدوات Toolkitوالبرامج Softwaresالمستخدمة فً عملٌة البرمجة .
حمًد (عهيت انصالة وانسالو) اىل كم يسهى يزيد عشة األسالو وَبيُا
انواند وانواندة اىل أعش شخصني انذيٍ اوصالَي اىل يا اَا عيت
سوجتي انعشيشة اىل انشخص انذي كاٌ انسبة يف أكًال هذا انكتاب
مقدمــة:
الثنائً ،Binaryالسادس َعشر َ ،Hex. Decimalكٌفٌة َتمثٌلها وكٌفٌة ال َتحوٌل هذه الوحدة هً ُمقدمة للنظام ال ُعشري ُ ، Decimal
الحقٌقة أن الغاٌة األساسٌه لتقدٌم هذه الوحدة هً ال َتعرف على ب َعض ال َمفاهٌم األساسٌة مثل كٌفٌة تمثٌل األعداد
بٌن هذه اال َنظمة ،فً َ
ُ
الموجبة والسالبة فً ال ِنظام الثنائً ،والتعرف على حالة الطفحان ، Overflowحالة ال ُم َحمل ، Carryوغٌرها من المفاهٌم الواجب َ
التعرف علٌها قبل الدخول فً عالم المُسٌطر الدقٌق ..Microcontroller
إن النِظام أالكثر استخداما ً فً َحٌاتنا ال ٌَومٌة فً َعملٌات ال َعد و الحِساب هو النِظام العشري ، Decimal systemهذا ال ِنظام أساسه
Radixهو ، 10األساس َعشرة ٌعنً أن هذا النظام مكون من َعشر أعداد Digitل َتمثٌل ال ِقٌم Valuesهً 0,1,2,3,4,5,6,7,8,9
تسمى هذه األرقام ُمعا ِمالت Coefficientال ِنظام العشري ،فمثالً ال َعدد ٌ 123مكن َتفسٌرة ِبشكل،
نجد إن هذا ال َعدد مكون من ثالث مراتب Digitهً مرتبة األحاد الذي هو الرقم " ، "3مرتبة ال َعشرات الذي هو " ،"20مرتبة المئات
الذي هو " "100ومجموع هذه المراتب ٌتكون العدد الذي هو " ، "123بصورة عامة ٌمكن تمثٌل أي عدد بألنظام العشري بهذة الصٌغة،
الرقمٌة Digital Devicesل َتمثٌل األعداد Numbersو تمثٌل األِشارات َ ، Signalsهذا وهو ال ِنظام الذي ٌُستخدم فً األجهزة َ
ال ِنظام أساسة Radixهو " ، "2األساس أثنان ٌعنً أن هذا ال ِنظام مكون من َرقمٌن Two Digitلتمثٌل األعداد هما "ٌُ "0" , "1سمى
الرقمان ُمعامالت Coefficientال ِنظام الثنائً ،فمثالً العدد "100"bتمثل العدد " "4بألنظام ال ُعشري ،والعدد "1101"bتمثل
هذان َ
العدد " "13بالنظام العشري و َهكذا ،أي أن هذا النِظام مكون من سلسلسة من األصفار والوحدات فقط .. َ
مالحظة:
Figure 1.1
أذا ُكنت تود برمجة م َُسٌطر دَقٌق ٌَ ، Microcontrollerجب أن َتعرف كٌفٌة التعامل مع ال ِنظام الثنائً Binary
وال ِنظام العشري Decimalوكٌفٌة ال َتحوٌل بٌن هذه األنظمة ،ألنك ستحتاج عملٌة التحوٌل بكثرة اثناء عملٌة البرمجة
. programming
الثنائً الى ال ِنظام العشري َنضرب كل bitفً أساس النِظام Radixالذي هو 'َ '2مرفوعة لل ُس َرقم
لل َتحوٌل من النِظام ُ
الَمرتبة أي ،
ثم َنجمع كل bnألستخراج الناتج أي b2+b1+b0وهكذا ،مع ُمالحظة أن َمرتبة األحاد LSBتبدء بالقٌمة صفر أي أن
position := 0
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.1
حول العدد (1001)2بالنظام الثنائً الى ما ٌكافئة بالنظام العشري ؟
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.2
حول العدد (0110)2بالنظام الثنائً الى ما ٌكافئة بالنظام العشري ؟
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ناتج قسمة quotientالعدد 10÷2هو " ، "5والمتبقً هو " ، "0الذي ٌعتبر هو الخانة األقل أهمٌة ، LSBثم نقسم العدد 5÷2
ونستخرج باقً القسمة وهكذا ...وتستمر العملٌة الى أن ٌصبح العدد المقسوم أصغر من المقسوم علٌة لنتوقف ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.3
حول العدد (14)2بالنظام العشري الى ما ٌكافئة بالنظام ُ
الثنائً ؟
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.4
ُ
حول العدد (15)2بالنظام العشري الى ما ٌكافئة بالنظام الثنائً ؟
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Table 1.1
صلبلدي قرص َ كثٌر ما نسمع مصطلحات Giga byte , Mega byte ,Kilo byteالتً ُنشٌر بها الى سِ عات َخزنٌة ،مثالً نقول أن َ
أن أصغر وحدة قٌاس فً ال ِنظام ُ
حٌث َ Hard diskذو سعة َ ، 120 Giga byteنحن ِبذلك َنذكر وحدة القٌاس الخاصة باألنظمة َ
الرقمٌة ،
الثنائً تسمى bitوالتً َتحمل قٌمتان أما صفر أو واحد ،مجموع َثمان خانات 8-bitتسمى ، byteأي أن :
Figure 1.2
كما أن هناك قانون َتستطٌع من ِخاللة م َعرفة عدد البتات bit numbersاذا ُعلم أعظم َرقم Maximum Valueوذلك بأستخدام
ُ
حٌث، اللوغارتمات
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.5
أذا كان لدٌك مستوعب ( Registerالمستوعب او المسجل عبارة عن دائرة خزن رقمٌة)مكون من 16-bitفما هو اقصى عدد ٌمكن أن
ٌتحملة المستوعب
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.6
أذا كان لَدٌك مستوعب Registerأعظم رقم ٌ َستوعبة هو ال َعدد ) (32فما هو عدد البتات Bit Numberالذي ٌتكون منة المستوعب ؟
10
الحل:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Table 1.2
قلنا أن النظام الثنائً مكون من سِ لسلة من األصفار والواحدات ، Ones and Zerosو أن هذه السلسلة من األصفار والواحدات عِ بارة عن
أشارات كهربائٌة ، Electrical Signalsالسؤال الذي ٌتبادر الى الذهن كٌف ٌتم تمثل االعداد السالبة فً النظام الثنائً ؟!!
ٌجب أن تعرف انة هناك نوعان من البٌانات حسب طبٌعة تمثٌلها فً الحاسبات االلكترونٌة،
وهً األعداد التً ال تحتوي على أشارة أي انها كلها أعداد موجبة ،لنتخٌل لو كان لدٌنا مستوعب خزنً Registerمكون من ، 8-bitفأن
مدى األعداد التً ٌمكن تمثٌلها هً
نستنتج من ذلك أن أي قٌمة Valuesمكونة من جزئٌن جزء االشارة Signوجزء المقدار Magnitude
مالحظة:
عٌوب Disadvantageأستخدام األعداد السالبة Signed valueهو َخسارة المدى ، Rangeوذلك بتخصٌصنا خانة للشارة حٌث،
الجدول ٌ Table 1.3وضـــــــح َعـــدد مكون من 3-bitممــــثل بصٌغة عدد غـٌر بـدون إشارة Unsignedوصــٌـغة عدد بأشارة
َ
Signe-Magnitude
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قٌمة خاطئة،
الحل:
8
2 = 256 المدى Rangeلعدد مكون من 8-bitبدون إشارة هو
28-1 = 27 = 128 بعد تخصٌص خانة لالشارة ٌصبح المدى
0 to 127 أي أن مدى االعداد الموجبة التً ٌكون فٌها MSBهو 0هو
128 to 256 ومدى االعداد السالبة التً ٌكون فٌها MSBهو 1هو
مالحظة :
الرقمٌة Digital Deviceال َتس َتخدم أسلوب األشارة وال ُمقدار Sign-Magnitudeل َتمثٌل
الحقٌقة الحاسبات األلكترونٌة واألجهزة َ
فً َ
األعداد السالبة وذلك بسبب؟
تستخدم هذه الطرٌقة فً بعض االجهزة الرقمٌة لتمثٌل االعداد السالبة ،الٌجاد سالب العدد (6)10باستخدام المتمم االول نقوم باتباع الخطوات
التالٌة،
أذن سالب العدد (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
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.8
10 2
) (0010 0011أي ما ٌكافئة بالنظام العشري ) (35؟ جد سالب العدد
الحل:
َ نقلب كل خانة من العدد ) (0010 0011لٌكون لَدٌنا ()1101 1100
2 2
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.9
10 2
) (0010أي ما ٌكافئة بالنظام العشري ) (2؟ جد سالب العدد
الحل:
نقلب كل خانة من العدد لٌكون ) (0010لدٌنا ()1101
2 2
نحول العدد (1101)10الى النظام العشري )13(10أي أن سالب العدد ( )2هو ()220
10 10
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
أذن سالب ال َعدد (3)10بالنظام الثنائً هو )1111 1101(2أي ما ٌكافئة بالنظام العشري .(253)10
الجدول ٌ Table 1.5بٌن األختالف بٌن طرٌقة ال ُمتمم األول وطرٌقة ال ُمتمم الثانً وطرٌقة األشارة والمقدار وعدد بدون إشارة Unsigned
لعدد ثنائً مكون من ،3-bit
Table 1.5
مالحظة:
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.7
10
جد سالب العدد ) (11بأستخدام المتمم الثانً ؟
الحل:
نحول العدد ) (11الى النظام الثنائً ()1011
2 10
أذن سالب العَدد (9)10بالنظام الثنائً هو )0111(2أي ما ٌكافئة بالنظام العشري (7)10
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
أذا كان لدٌنا َعددان كل َعدد مكون من ، 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
Figure 1.2
عند أجراء عملٌة الجمع ،سنجمع الخانة B0مع الخانة ، A0ناتج الجمع الذي هو S0سوف نضعة فً خانة LSBواذا وجد محمل
) Carry(coutسٌنتقل الى المرحلة التً تلٌها كما هو الحال فً النظام العشري ،ثم نجمع الخانة A1مع الخانة B1مع قٌمة المُحمل Cinالذي
هو نفسة المحمل القادم من المرحلة السابقة Coutأي Cin = Coutوهكذا ،عملٌة الجمع تتم بالطرٌقة التالٌة ،
Table 1.6
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.6
أجمع العدد (0110)2مع العدد (0111)2؟
الحل:
أذن ناتج جمع العدد (6)10مع العدد (7)10هو العدد (13)10الذي ٌكافئة بالنظام الثنائً (01101)2
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.7
أجمع العدد (1100)2مع العدد ) (0011؟
2
الحل:
اذا أشترٌت حاسبة علمٌة 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لدائرة جمع و طرح باستخدام المتمم الثان
Figure 1.3
خطوات اٌجاد المتمم الثانً للعدد المطروح للتهٌئة ألجراء عملٌة الطرح :
مالحظة :
الناتج النهائً هو (1000)2أي ما ٌقابلة بالنظام العشري ، (8)10وهو فعالً ناتج عملٌة الطرح ، ) 13 – 5 )10
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 1.9
2 2
أطرح العدد ) (0100من العدد ) (0101؟
الحل:
2 2
العملٌة التً نرٌد ان نجرٌها هً ) )5-4أي ما ٌقابلها بالنظام الثنائً )(0101) - (0100
Y=5-4
نقوم أوالً بأٌجاد المكافئ الثنائً لكن من العدد (4)10الذي هو (0100)2والعدد (5)10الذي هو ، (0101)10كما تعلمنا سابقا ً أن عملٌة
الطرح تتم بأستخدام المتمم الثانً ،أي اننا سنجد المتمم الثانً للعدد (4)10الذي هو (1100)2لتصبع العملٌة كاالتً
الحظ أن ناتج العملٌة هو (1)10وهو فعالً ناتج عملٌة طرح ، (5 - 4)10المُهم لدٌنا هو ظهور محمل وهذا ٌدل على أن العدد االول أكبر من
العدد الثانً ،لنجري عملٌة الطرح التالٌة
Y=4-5
الحظ أن ناتج العملٌة هو ، (1111)10هذا الناتج هو عدد سالب ،سنناقشة الحقا ٌ ،المهم لدٌنا هو عدم ظهور محمل وهذا ٌدل على أن العدد
االول أصغر من العدد الثانً ،
أستنتاج:
عند أجراء عملٌة طرح بٌن عددٌن ،فان المحمل ٌ Carryظهر عندما ٌكون العدد االول أكبر من العدد الثانً،
عند أجراء عملٌة طرح بٌن عددٌن ،فان المحمل Carryال ٌظهر عندما ٌكون العدد االول أكبر من العدد الثانً،
لقد َتعلمنا مما َسبق أن أٌجاد ال ُمتمم الثانً ،معناة أٌجاد سالب ال َعدد ،مثالً ال َعدد (0110)2ال ُمتمم الثانً لة أو سالب ال َعدد هو ، (1010)2
كٌف ٌُمٌز الحاسوب بٌن ال َعدد (1010)2الذي هو (-6)10والعدد (1010)2الذي هو العدد (10)10؟؟؟ َ السؤال الذي ٌتبادر الى ال ِذهن
ٌستطٌع الحاسوب ال َتمٌٌز بٌن ال َعددٌن ٌَ ،ستخدم أسلوب األشارة وال ُمقدار بحٌث ٌُخصص الخانة MSBللشارة ،أي اذا كان MSB
لكً َ
واحد فهذا ٌدل على ان العدد سالب ,أما اذا كان MSBصفر فهذا ٌدل على أن العدد موجب وحسب الجدول ،Table 1.7
Table 1.7
أن الوحدات المسؤولة عن عملٌة تخزٌن األرقام داخل األجهزة الرقمٌة تسمى المسجالت ، Registersتخٌل أن لدٌنا حاسبة علمٌة وحدات
الخزن الداخلـٌة لها عبارة عن مســـــــجل Registerذات ســـــــعة باٌت واحد ، 1-byteأي أن المســــــــجل ٌتقبل اعلى قٌمة له التً هً
(1111 1111)2أي ما ٌقبلها بالنظام العشري ، (255)10نستنتج من ذلك أن إمكانٌة التخزٌن داخل االجهزة الرقمٌة محدودة ،تخٌل لو
أردنا جمع العدد 255مع العدد 1ماذا ٌحدث ؟؟؟
عملٌة الجمع ستكون ناتجها 256أي ما ٌقابلها بالنظام الثنائً ، (1 0000 0000)2لقد تجاوز الناتج العدد ال َمسموح ،الذي هو ، 255
فتظهر حالة الطفحان التً تسبب لنا تصفٌر المسجل . Reset Register
أن حالة الطفحان اٌضا ً تظهر فً الحالة التالٌة ،عند تغٌر اشارة ناتج عملٌة حسابٌة مثالً عند جمع عددٌن موجبٌن وأصبح الناتج عدد سالب
تظهر حالة الطفحان ،أو عند جمع عددٌن سالبٌن واصبح الناتج عدد موجب فتظهر حالة الطفحان ،هذا النوع من الطفحان ٌسمى الطفحان
باألشارة ،
لنأخذ مثال لنوضح فٌة عملٌة الفٌضان لنجمع العددٌن التالٌٌن ،
لنفرض أن ال َعددان )ُ (0001) ، (1111هما من َنوع األعداد بدون األشارة ، Unsigned Numbersأي أننا نرٌد َجمع َ
العدد (15)10 2 2
موجب الذي هو (16)10وهو فعالً ما حدث حٌث ان الناتج هو ، (1 0000)2فً هذه الحالة ٌظهر َ العدد (1)10لٌكون الناتج عدد
مع َ
فٌضان Overflowمن النوع االول الذي فٌة ٌتصفر الناتج ، Resetأما فٌضان Overflowباألشارة لٌم ٌظهر فً هذه الحالة،
لنفرض أن العددان (0001)2 ، (1111)2هما من نوع األعداد بأشارة ، Signed Numbersأي أننا نرٌد جمع العدد (1111)10وهو
عدد سالب ،اذا وجدنا المتمم الثانً لة نجد انة ، (-1)10مع العدد (1)10لٌكون الناتج عدد موجب الذي هو (0)10وهو فعالً ما حدث
حٌث ان الناتج هو ، (0000)2والمحمل ٌهمل كما تعلمنا عند إجراء عملٌة الطرح باستخدام المتمم الثانً ،فً هذه الحالة لم ٌظهر فٌضان
ال من النوع األول وال من النوع الثانً،
عملٌة الجمع التالٌة تحتمل تفسٌر واحد الن كال العددان موجبان ، (0111)2، (0111)2الحظ أن الناتج هو عَدد سالب والسبب فً ذلك هو إن الخانة
االكثر أهمٌة MSBتحمل القٌمة واحد ،نتٌجة لذلك ٌظهر لدٌنا طفحان بأشارة ، Overflow
لقد كان ال ُمبرمجٌن َقدٌما ٌتناقلون برامجهم المكونة من سِ لسلسة من األصفار والواحدات عن طرٌق أوراق 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النِظام
السادس عشر،
بما أن 24=16أي ٌمكن تقسٌم العدد الثنائً الى مجامٌع Groupكل مجموعة مكونة من 4-bitحسب الجدول ،Table 1.8
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
الحل:
2 16
نجزء العدد ) (ABالى جزئٌن ،أي Bو Aثم نجد مكافئ العدد Bبالنظام الثنائً الذي هو ) ،(1011ونجد مكافئ العدد Aبالنظام
الثنائً الذي هو ،(1010)2اذن مكافئ العدد ( AB)16هو .)10101011(2
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
بهذا أصبح للبرمجٌن نظام جدٌد ٌُسهل علٌهم التحوٌل من النظام الثنائً الى النظام السادس عشر ،مباشراً ،وسهل النقل ،أنظر للشفرة فً
الشكل Figure 1.5
Figure 1.5
وهً األنظمة المعتمدة على ربط َمجموعة من الرقائق الرقمٌة Chipsلتأدٌة مهمة معٌنة....
الشكل ٌ Figure 2.1وضح المخطط الصندوقً block diagramللنظام القابل للبرمجة Programmable Device
Memory
Unit
Figure 2.1
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ) 31ـــــــــــــــــــ المسٌطر الدقٌق Microcontroller
CPU Function وضٌفة وحدة المعالجة المركزٌة
تقوم و ُحدة المعالحة المركزٌة CPUبجلب وتنفٌذ البرنامج المخزن فً الذاكرة Memoryاو بصٌغة اخرى وضع ال َتعلٌمة المخزنة فً
الذاكرة Memoryقٌد التنفٌذ ،وذلك لتأدٌة المهمة المطلوبة من قبل شرٌحة المسٌطر الدقٌق ، Microcontrollerلكً ٌنفذ المعالج CPU
التعلٌمة المخزنة فً الذاكرة Memoryفأنة ٌمر بمرحلتٌن او دورتٌن
oنقل محتوٌات عداد البرامج PCالى الذاكرة memoryلكً ٌؤشر الموقع المطلوب desiresd location
oنقل محتوٌات الذاكرة Memoryالى سجل التعلٌمة IR
الشكل ٌ Figure 2.2وضع الترابط بٌن سجل التعلٌمة ، IRوعداد البرنامج ، PCوالذاكرة Memory
PC Memory
""Program
Figure 2.2
PC Memory
""Program
Figure 2.3
تتنوع التعلٌمات instructionحسب طبٌعة الوضٌفة التً تؤدٌها ،أي ٌمكن تقسٌم التعلٌمات الى مجامٌع
تسمى مجموعة االٌعازات هذه بطقم التعلٌمات ، instruction setسٌتم شرح هذه االٌعازات بشكل مفصل فً فصول الحقة ,غالب
ال َتعلٌمات التً تنفذ من قبل وحدة ال ُمعالجة ال َمركزٌة هً تعلٌمات حسابٌة ،تحتاج هذه التعلٌمات الحسابٌة الى دوائر جمع وطرح ودائر منطقٌة
logic circuitالداء الوضائف المنطقٌة مثل And,Or,Notالوحدة المسؤولة عن اجراء هذه العملٌات هً وحدة ال ِحساب وال َمنطق
)ALU(arithmetic 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بٌن مخطط لوحدة تولٌد دورة الماكنة،
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
وحدة السٌطرة،
Table 2.1
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 2.1
مذبذب oscillatorذو تردد 1 KHZربط الى معالج دورة الماكنة تستغرق اربع فترات زمنٌة لكً ٌتم تنفٌذ تعلٌمة واحدة فما هو الوقت
الذي تستغرقة التعلٌمة الواحدة لكً تنفذ وما هو عدد التعلٌمات التً ٌمكن تنفٌذها فً الثانٌة الواحدة ؟
الحل:
Time
أي أن الزمن
Time
أي أن النبظة tتسترق فترة زمنٌة مقدارها 0.001من الثانٌة ،اذن اربع نبظات تستغرق 4×0.001 = 0.004من الثانٌة ،أي ان فترة
تنفٌذ تعلٌمة واحد هً 0.004من الثانٌة ،اما عدد التعلٌمات التً ٌمكن تنفٌذه فً الثانٌة الواحده هً ،
CPU
Program Memory Program
Address Instruction Address Bus Counter
0x0 0000 0010
Execution Logic
Control Signals
Figure 2.6
Memory
PC
"Program" Register ALU
File
t1 t2 t3 t4
Control unit
Oscillator
Figure 2.7
oناقل العناوٌن : Address Busوهو الناقل الذي ٌنقل عناوٌن ، Addressمثل الناقل الذي ٌربط عداد البرنامج PCبوحدة الذاكرة ،
oناقل البٌانات : Data Busهو الناقل الذي ٌنقل البٌانات ، Dataمثل الناقل الذي ٌربط وحدة الذاكرة مع سجل التعلٌمة ، IRوكذلك
الناقل الذي ٌربط وحدة ALUمع ، Register file
oنواقل السٌطرة : Control Bussوهو الناقل الذي ٌرسل اشارات السٌطرة لٌضمن عمل وتزامن الوحدات االخرى ،مثل هذه
االشارات هً إشارات وحدة السٌطرة ، t1,t2,t3,t4إشارات السٌطرة موضحة فً الشكل اعالة بشكل اسهم Arrow
لكً ٌؤدي CPUعملة ٌ ،حتاج الى توجٌة ،عملٌة التوجٌة تتم عن طرٌق سلسلة من أالوامر ُ instructionتسمى برنامج ..هذا البرنامج
َ
ٌخزن داخل ذاكرة ..... memory
Write
Read
Location 1024
8-bit
Figure 2.8
كما أن هناك عالقة بٌن عدد البتات لناقل العناوٌٌن وعدد مواقع الذاكرة التً هً ،
مثالً اذا عدد بتات ناقل العناوٌن 14-bitفأن عدد المواقع هو 1024موقع ،
قد اقترح العام Von-Neumannعلى أن البرنامج Programوالمعطٌات ، Dataتقع فً نفس رقاقة الذاكرة ،هذا النظام متبع فً
الحواسٌب الشخصٌة ، Personal computerأما العالم Harvardأقترح على أن البرنامج Programوالمعطٌات Dataمفصولة عن
بعضهما البعض ،أي أن كل قسم ٌقع على رقاقة ،هذا النظام متبع فً المسٌطرات الدقٌقة ، Microcontrollerالشكل Figure 2.9
ٌوضح ذلك ....
Harvard
Von-Neumann
Figure 2.9
مالحظة :
ذاكرة البرنامج program memoryهً الذاكرة التً ٌخزن فٌها التعلٌمات ، sinstructionوذاكرة البٌانات ، Data memoryهً
الذاكرة التً تخزن فٌها المعطٌات Operandاو المعامالت المراد معالجتها ،وغٌرها من البٌانات الضرورٌة ،مثالً تخزٌن القٌم ثابتة مثل
النسبة الثابتة πالتً قٌمته 3.14وذلك لالستفادة منها اثناء معالجة البرنامج ،
CPU
Control ALU
Unit
ADC
Data In Data In File Register
Figure 2.10
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
نتعرف على بُنٌة المُسٌطر الصغري Architecture of Microcontrollerوعلى َتنظٌم ذاكرة المُسٌطر الصغري سوف َ
َ فً هذه الوحدة
، Memory Organizationكما سنتعرف من خالل هذة الوحدة على كٌفٌة تهٌئة المسٌطر الصغري للعمل ،أرجوا من القارء ال َكرٌم
قراءة هذه الوحدة ب َتركٌز ،ألن هذه الوحدة ُتعتبر أساس الفهم ال َ
صحٌح ل َبرمجة المُسٌطر ال َدقٌق و عملة .
ٌتوفر المُسٌطر ال َدقٌق فً السوق ب َشكل دائرة متكاملة ) ، 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تصف هذا المسٌطر بالمواصفات
التالٌة،
وهً المكونات المادٌة الملموسة Physical Componentمن االجهزة القابلة للبرمجة ،مثل جهاز الحاسوب ٌتكون من لوحة المفاتٌح
،المعالج ،الذاكرة ،هذه المواد كلها تعتبر مكونات صلبة ، Hardwareاما نظام التشغٌل والبرمجٌات فتعتبر مكونات البرمجٌات
صلبة
Softwareالتً تدٌر وتشرف على عمل المكونات الصلبة ، Hardwareفً هذه الوحدة سنتطرق لبُنٌة المُسٌطر الدَ قٌق ال َ
فسنتركها لوحدات الحقة ،الشكل ٌ Figure 3.2وضح بنٌة المسٌطر الدقٌق ، PIC16f84A
Hardwareاما ال َبرمجٌات َ
Figure 3.2
وحدة المُعالجة ال َمركزٌة 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هما ؟
أن ، File Registerعبارة عن وحدة َخزنٌة ،تستخدم لخزن البٌانات المهمة والمراد معالجتها ،وكذلك تحتوي على مواقع لها عالقة
باعدادات Configurationوحدات األدخال واألخراج وغٌرها ،موضوع File Registerسٌتم مناقشة باسهاب الحقا ً ،لنأخذ أول اٌعاز لنا
فً المسٌطر الدقٌق Microcontrollerالذي هو ،
تقوم هذه التعلٌمة او األٌعاز برفع احد بتات مسجل Registerالى القٌمة واحد ،تتكون هذه التعلٌمة من جزئٌن ،
-0الجزء األول وهً شفرة ال َعملٌة ) Opcode (operation codeالتً هً BSFوهً اختصار لكلمة ، Bit set flagالتً تخبر
المعالج او المسٌطر الدقٌق بالوضٌفة النً نرٌد اجراءها التً هً جعل أحدى بتات bitمُسجل Registerقٌمتة واحد.
-2الجزء الثانً هو المُعامالت Operandالذي هو Reg.الذي ٌقصد به المسجل الهدف الذي نرٌد رفع احد بتاتة الى القٌمة واحد ،
والجزء bوالذي هو رقم البت المراد جعل او رفع قٌمته الى الواحد من المسجل المستهدف ،
مالحظة:
أن سعة المسجالت Registersال َموجدوه فً File Registerهو ، 8-bitلذلك ٌطلق على المسٌطر الدقٌق PIC16f84Aأنة نظـــــــام ذو
، 8-bit
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
أحد المسجالت الموجدة فً file Registerهو المسجل الذي عنوانة 0x0Cبالنظام السادس عشر ،المطلوب جعل قٌمة البت bitالثالث
تساوي واحد من هذا المسجل ؟
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
الحل:
مالحظة:
الرقم وذلك للدالله على أن الرقم بالنظام السادس عشر 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
ٌقصد بالعنونة الغٌر مُباشرة هو أن عنونه أو الوصول الى أحد مسجالت File Registerال ٌتم عن طرٌق التعلٌمة ، instructionبل ٌتم
عن طرٌق مسجل أخر خاص وهو المسجل ) FSR(file select Registerالحظ الشكل ، Figure 3.3اذا حمل هذا المسجل على سبٌل
المثال بالقٌمة FSR = 0X0Cفان هذه المسجل ٌ FSRشٌر بذلك الى المسجل الذي عنوانة 0X0Cمن ، File Registerوتضهر محتوٌات
المسجل 0X0Cالذي عنون عن طرٌق المسجل FSRعلى مسجل ٌسمى ) INDF(indirect register flagالذي هو موجــــــــود ضمن
File Registerلٌتم معالجتها ،هذا الموضوع سٌتم مناقشتة بشكل اوسع فً وحدات الحقة ،
الشكل Figure 3.3هو جزء من بنٌة معالج المسٌطر َ ، PIC16f84Aعمدت الى تقسم بنٌة المعالج وذلك لكً ٌسهل عملٌة فهما واستٌعابها ،
لنفهم ما هو مسجل العمل Working Registerاو W Reg.الموجود فً الشكل ٌ Figure 3.2جب علٌنا فهم ألٌة عمل وحدة الحساب
والمنطق ALUفً المسٌطر ،PIC16f84A
العمل )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المُسٌطر ال َدقٌق ،وهذا ما سوف تكتشفة فً وحدة
البرمجة أنشاء هللا.
هناك مسجل ضمن بنٌة المُسطر ال َدقٌق ٌ 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
صل ال َتعلٌمة الى مسُجل ال َتعلٌمة 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بٌن مخطط صندوقً بسٌط لوحدة تولٌد
دورة الماكنة ،
Frequency
Machine Cycle Generation
Oscilltor
Figure 3.6
هناك ذاكرتان فً وحدة المسٌطر الدقٌق PIC16f84Aهما ذاكرة البرنامج Program memoryوذاكر البٌانات ، data memoryلكل
من هاتان الذاكرتان نواقلهما Busesالخاصة ،لذلك ٌمكن قراءة الذاكرتان فً نفس الدورة . Cycle
فً المسٌطر الدقٌق ُ 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
تستخدم هذة هذه المسجالت للغراض العامة ،مثل خزن المعامالت ، Operandsخزن نواتج العملٌات ، Resultوغٌرها من ال َعملٌات
تبدء هذه المسجالت عند bank 0من الموقع 0Chوتنتهً عند الموقع ، 4Fhاما عند bank 1فانها تبدء من الموقع 8Chوتنتهً عند الموقع
. CFh
تستخدم هذة هذه المسجالت للغراض الخاصة ،مثل تهٌئة أطراف Peripheralالمسٌطر الدقٌق ، PIC16f84Aتهئٌة المؤقتات والعدادات
وغٌرها من ال َعملٌات ،لكل موقع من هذه المواقع له وضٌفة معٌنة ستتعرف علٌها خالل مواصلتك لقراءة الكتاب ،تبدء هذه المسجالت عند
bank 0من الموقع 00hوتنتهً عند الموقع ، 0Bhاما عند bank 1فانها تبدء من الموقع 80hوتنتهً عند الموقع . 8Bh
مالحظة :
ألحظ أنه عند bank0فان المواقع من 50hالى 7Fhفهً غٌر منفذة ، unimplementedأي متروكة وكذلك بالنسبة لـ bank1فأن
المواقع من D0hالى ، FFh
ٌحتوي المُسٌطر ال َدقٌق َ 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أي عند حدوث
مقاطعة للمسٌطر الدقٌق فانة ٌبدء التنفٌذ من هذا العنوان ،سٌتم شرح المقاطعات فً فصول الحقة أن شاء هللا .
هناك دائرة مؤقت Timer circuitداخل وحدة المُسٌطر ال َدقٌق ، Microcontrollerتقوم هذه الدائرة بتوفٌر فترة تأخٌر مقدارها 72ملً
ثانٌة قبل ان ٌنهض (ٌعمل) المسٌطر الدقٌق microcontrollerوذلك لكً تظمن استقرار الطاقة الن عدم استقرار مصدر الطاقة ٌؤثر على
عمل المسٌطر الدقٌق .
تعمل دائرة المؤقت هذه عمل ، power up timerحٌث توفر هذه الدائرة فترة تأخٌر زمنٌة قبل ان تعمل وحدة السٌطرة Control Unit
التً ٌغذٌها المذبذب وذلك لكً نظمن استقرار الذبذبة الن عدم استقرار الذبذبة ٌؤثر على عمل وحدة السٌطرة وبذلك عمل المُسٌطر ال َدقٌق.
عند تجهٌز المسٌطر الدقٌق Microcontrollerبالطاقه لغرض َتشغٌلة ٌ ، Runningجب التأكد من أن مستوى الطاقة المطلوب مزود بشكل
الحظ ٌحتوي المُسٌطر الدَ قٌق Microcontrollerعلى دائرة تتأكد من ان تجهٌز
صحٌح ،لحسن َ صحٌح لكً ٌعمل المُسٌطر ال َدقٌق بشكل َ
الطاقه وصل للحد المطلوب واال أعاد الجهاز االقالع من جدٌد Resetتمسى هذه الدائرة ).Power On Reset(POR
ٌَحتوي المُسٌطر ال َدقٌق PIC16f84Aعلى مكدس Stackذو سعة 8مواقع ٌ ،ستخدم فً عملٌات القفز ،
ٌحتوي المسٌطر الدقٌق PIC16f84Aعلى ذاكرة EEPROMقابلة للقراءة والكتابة ذات سعة 64موقع ،وكل موقع ذو طول كلمة ، 8-bit
تستخدم لخزن المعلومات ،حٌث ان هذه المعلومات ستضل مخزونة حتى بعد فصل مصدر التغذٌة عن الشرٌحة ،ترتبط مع هذه الذاكرة
مسجلٌن ،مسجل العنوان EEADRعند تحمٌل هذا المسجل بقٌمة معٌنة فاننا بذلك نشٌر الى موقع من مواقع ذاكرة EEPROMالـ ، 64عند
خزن بٌانات عند موقع الذاكرة المعنون عن طرٌق مسجل EEADRفاننا نحمل البٌانات Dataالمراد خزنها الى المسجل ، EEDATAوكذلك
عند قراءة معلومات من الذاكرة EEPROMالمعنون عن طرٌق مسجل EEADRفاننا نجد البٌانات Dataقد حملت الى المسجل ، EEDATA
عملٌات القراءة والكتابة تتم عن طرٌق تعلٌمات واعدادات خاصة سنتناولها فً فصول الحقة ان شاء هللا .
Timer المؤقت
ٌحتوي المسٌطر الدقٌق على مؤقت ٌستخدم فً عملٌات التوقٌق Timingكما ٌستخدم فً عملٌات العد ، Countingسٌتم شرح الموضوع فً
فصول الحقة .
ٌحتوي المُسٌطر ال َدقٌق على منفذٌن 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
ٌتم تغلٌف 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ممكن أن ٌستخدم هذا المرفئ فً
عملٌات أالدخال أو عملٌات أالخراج ،
RB0 o
له وظٌفة المقاطعة interruptلبرنامج المسٌطر الدقٌق
RA4 o
ممكن ان ٌعمل هذا الطرف كطرف قدح لعداد Counterأو مؤقت . Timer
عند َتسلٌط جهد منخفظ على َهذا ال َطرف ٌتم مسح برنامج ال َشرٌحة ،لذلك نربط هذا الطرف الى ال ُجـــهد الموجب ،+5 Vdcكما هو
موضــــــــــــــح فً الشكل Figure 3.10
Figure 3.10
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
ٌعتبر 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
العملٌات تبدء
تستخدم هذة المسجالت للغراض العامة ،مثل خزن المعامالت ، Operandsخزن نواتج العملٌات ، Resultوغٌرها من َ
هذه المسجالت عند bank 0من الموقع 0Chوتنتهً عند الموقع ، 4Fhاما عند bank 1فانها تبدء من الموقع 8Chوتنتهً عند الموقع
. CFh
تستخدم هذة هذه المسجالت للغراض الخاصة ،مثل تهٌئة أطراف Peripheralالمسٌطر الدقٌق ، PIC16f84Aتهئٌة المؤقتات والعدادات
وغٌرها من ال َعملٌات ،لكل موقع من هذه المواقع له وضٌفة معٌنة ستتعرف علٌها خالل مواصلتك لقراءة الكتاب ،تبدء هذه المسجالت عند
bank 0من الموقع 00hوتنتهً عند الموقع ، 0Bhاما عند bank 1فانها تبدء من الموقع 80hوتنتهً عند الموقع ٌ ، 8Bhتكون File
Registerمن مجموعة مسجالت للغراض خاصة،عددها 22سجل،وهً كاألتً
وهو سجل مكون من ) 8-bitالمستخدم منها فقط ( 5-bitالنة ٌتعامل مع port Aالمكون من ، 5-bitوضٌفتة تحدٌد أتجاة نقل البٌانات
، Dataأي تحدٌد طرف األدخال Inputأو األخراج ٌ ،Outputوجد هذا المسجل فً الموقع 0x85من ، bank1القٌمة صفر تعنً
الطرف المحدد من port aهو طرف أدخال ، inputأما القٌمة واحد فتعنً ان الطرف هو طرف أخراج ، Outputلكً نجعل porta
كلة منفذ أخراج ما علٌنا سوى تحمٌل المسجل trisaبالقٌمة 0x00
ولكً نجعل portaكلة منفذ أدخال ما علٌنا سوى تحمٌل المسجل trisaبالقٌمة 0xFF
ولكً نجعل اول طرف RA0من portaطرف ادخال Inputوباقً االطراف هً اطراف خروج Outputما علٌنا سوى تحمٌل المسجل
trisaبالقٌمة 0xFE
مالحظة:
راجع الوحدة االولى النظام السادس عشر Hex. Decimal system
ٌعمل هذا السجل نفس عمل المسجل trisaولكنة مسؤول عن المنفذ ، portbوهو سجل مكون من 8-bitوضٌفتة تحدٌد أي بت من
portbهو االدخال او االخراج ٌ ،وجد هذا المسجل فً الموقع 0x86من bank1
وهو سجل مكون من 8-bitوضٌفتة استقبال البٌانات فً حالة الكون المنفذ Aأدخال ،أو أخراج البٌانات الى العالم الخارجً فً حالة كون
المنفذ Aأخراج ،وٌوجد هذا المسجل فً الموقع 0x05من bank0
وهو سجل مكون من 8-bitوضٌفتة استقبال البٌانات فً حالة الكون المنفذ Bأدخال ،أو أخراج البٌانات الى العالم الخارجً فً حالة كون
المنفذ Bأخراج ،وٌوجد هذا المسجل فً الموقع 0x06من bank0
Figure 4.2
ٌرفع هذا الطرف الى القٌمة واحد عند بداٌة تشغٌل المسٌطر الدقٌق ،وٌصفر resetعندما ٌدخل المسٌطر الدقٌق فً نمط حفظ
استهالك الطاقة مثل تنفٌذ تعلٌمة ، Sleepكما ٌحصل فً الحاسب الشخصً عند تركة لفترة بدون ان تقوم بأي عمل ،او عند تنفٌذ
التعلٌمة CLRWDTوذلك لتصفٌر مؤقت الحراسة.
مالحظة:
Figure 4.3
أذا كنت من متخصصً علم االلكترونٌات الرقمٌة ،وقد استخدمت عداد تصاعدي بأستخدام مجموعة نطاطات ، Flip-flopفاكٌد أنت تعرف
أن العدادات تستخدم كمقــــــــسمة للتردد وذلك بأخذ طرف من أطراف مخــــــارج العداد ،ال حظ الشــــكل Figure 4.4تجد عداد
ٌســــمى 8-bit prescalerخرج هذا العداد ربط الى مازج multiplexerمن نوع 8-1 Muxالحظ ان اشارت تحدٌد دخل المازج هً
ps0,ps1,ps2اي أن خرج العدد سٌقسم بشكل موزون اي عند الخرج االول للعداد ستجد أن قٌمة التردد هً نفسها تردد دخل العداد وعند
الخرج الثانً ستجد أن خرج العداد هو التردد مقسوم على 2وعند الطرف الثالث سٌكون التردد مقسوم على 4وهكذا ٌ ،ستخدم المازج
كمفتاح . Selector
Figure 4.4
مالحظة :
لمزٌد من المعلومات فً كٌف استخدام العدادات كمقسمة للتردد اقرء أحد كتب االلكترونٌات الرقمٌة .
الجدول التالً ٌبٌن نسبة تقسٌم التردد لكل من المؤقت timerومؤقت الحراسة Watchdog timer
Table 4.0
فً المسٌطر الدقٌق ٌ pic16f84aوجد نوعان من المؤقتات وهما مؤقت الحراسة watchdog timerوالمؤقت timerوكال الموقتان
عدادان اعتٌادٌان ٌحتاجان الى تردد frequencyلكً ٌعمالن ،واٌضا ً ٌمكن تقسٌم هذا التردد باالعتماد على قٌم ps0,ps1,ps2الحظ
الجدول ،table 4.0اذن الخٌار ٌ PSAقوم باسناد المقسم الى مؤقت الحراسة عندما ٌكون PSA=1وٌسند المقسم الى المؤقت timerعندما
تكون PSA=0ونسبة التقسٌم كما علمنا تعتمد على ، ps0,pos1,ps2أعلم ان تردد موقت الحراسة WDTMRهو نفسة تردد المذبب
Oscilatorوتردد المؤقت هو Oscilator/4اي تردد المصدر مقسم على اربعة.
J
CL
K
،
Figure 4.5
مالحظة :
الغاٌة األساسٌة الستخدام مقسم التردد prescalerهو لتحدٌد سرعة العدد Counting
ٌحتوي المسٌطر الدقٌق على وضٌفة ،المؤقت ، timerالعداد ، counterباستخدام هذه الخانة ٌمكن التنقل بٌن النمطٌن ،اذا كانت قٌمة
الخانة صفر فنمط المؤقت timerهو المفعل فً المسٌطر الدقٌق ،اما اذا كانت قٌمة الخانة واحد فنمط العداد counterهو المفعل،
بالنسبة للعداد،لكً ٌزداد ٌحتاج الى عملٌة قدح من احدى اطراف المسٌطرٌ ،تم ذلك عند طرٌق الطرف ، RA4/TOCK 1من خالل هذه
الخانة ٌمكنا تحدٌد نوع جبهة القدح من الحافة الصاعدة او الحافة النازلة حسب..
اما بالنسبة لنمط المؤقت ،فٌمكن بدء المؤقت Start timingعن طرٌق الطرف RA4
تستخدم لتحدٌد حافة القدح لعملٌة المقاطعة ، interruptسٌتم شرح المقاطعات فً فصول الحقة ،وتكون الحافة
عند كل طرف من اطراف المرفأ ٌ ، portbوجد مقاومة سحب ، pull up resistorهذه المقامات ممكن تفعٌلها عندما تكون قٌمة هذه
الخانة صفر ،او ابطالها عندما تكون قٌمة هذه الخانة واحد،
مالحظة :
لمعلومات اكثر عن مقاومات pull up,pull downراجع اي كتاب عن االلكترونٌات الرقمٌة .
وهو مسجل مكون من ٌ 8-bitقع عند العنوان 0x04من bank 0والعنوان 0x84من ، bank 1عند تحمٌل هذا المسجل بقٌمة معٌنة ،
فانة ٌعتبر هذة القٌمة عنوان Addressلمسجل ،اي أن قٌمة مسجل FSRتشٌر الى عنوان مسجل اخر ،مثالَ لو حملنا المسجل FSR
بالقٌمة 0x05اي اننا حملنا المسجل بعنوان ، Protaفٌشٌر المسجل FSRالى المسجل ، Portaوتضهر محتوٌات المسجل portaعند
المسجل INDFالذي سنشرحة فً الفقرة التالٌة .
ٌقوم هذا المسجل بخزن محتوٌات مسجل تم االشارة الٌة عن طرٌق المسجل ٌ ، FSRقع عند العنوان 0x00من bank 0والعنوان 0x80من
، bank 1تسمى طرٌقة العنونة هذ بالعنونة الغٌر مباشرة ،الحظ الشفرة التالٌة التً تبٌن العالقة بٌن المسجل FSRوالمسجل ، INDR
وهو مسجل مكون من ٌ ، 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
ٌتكون هذا المسجل من ، 8-bitكل خانة لها وضٌفة معٌنة ،هذا المسجل مسئول عن تنفٌذ او تفعٌل خدمة المقاطعات فً المتحكم الصغري
ٌ ،microcontrollerقع هذا المسجل عند العنوان 0x0Bمن bank0والعنوان 0x8Bمن ، bank1الشكل ٌ Fig 6.7بٌن مسجل
INTCON
Figure 4.7
عندما ترفع هذة الخانة الى الواحد فانة ٌمكن خدمة المقاطعات بجمٌع انواعها ،اما عندما تصفر هذة الخانة فانة المسٌطر الدقٌق ٌبطل
خدمة المقاطعات .
عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة الذاكرة EEPROMوالتً تشٌر الى انتهاء عملٌة الكتابة
، Writtingأما عندما تصفر هذة الخانة فانة ٌتم ابطال خدمة المقاطعة الكتمال عملٌة الكتابة للذاكرة . EEPROM
عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة المؤقت Timerوالتً تحدث انتهاء الوقت ،timesأما
عندما تصفر هذة الخانة فانة ٌتم ابطال خدمة مقاطعة المؤقت . Timer
عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة بواسطة الطرف ، INTأما عندما تصفر هذة الخانة فانة ٌتم
ابطال خدمة مقاطعة . INT
عندما ترفع هذة الخانة الى القٌمة واحد فأن المسٌطر الدقٌق ٌمكن خدمة مقاطعة بواسطة االطراف ، RB7,RB6,RB5,RB4أما عندما
تصفر هذة الخانة فانة ٌتم ابطال خدمة مقاطعة عن طرٌق هذة االطراف .
ٌرفع هذا العلم بشكل ذاتً عند حدوث مقاطعة عند الطرف . INT
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ ( ) 64ـــــــــــــــــــ المسٌطر الدقٌق Microcontroller
)RBIF (Register portb Interrupt Flag oالخانة RBIF
ٌرفع هذا العلم الى القٌمة واحد بشكل ذاتً عند حدوث مقاطعة من الطرف .RB4-RB7
ٌرفع هذا العلم الى الحالة واحد عند طفحان المؤقت ، Timer0مشٌر الى انتهاء الزمن المحدد للمؤقت.
ٌستخدم هذا المسجل المكون من 8-bitلتحدٌد عنوان Addressالذاكرة Eepromلكً ٌتم القراءة او الكتابة الى هذا الذاكرة ٌ ،قع هذا
المسجل عند الموقع 0x09من . bank0
ٌستخدم هذا المسجل المكون من 8-bitالرسال البٌانات Dataالى الذاكرة eepromلٌتم خزن البٌانات باالعتماد على العنوان الذي ٌتم
تحدٌدة بواسطة المسجل ، EEADRكذلك ٌقوم هذا المسجل باستقبال البٌانات التً ٌتم قراءتها من ذاكرة ٌ ، eepromقع هذا المسجل عند
الموقع 0x08من . bank0
ٌتكون هذا المسجل من 8-bitالمستغل منها فقط ٌ ، 5-bitقوم هذا المسجل بالتحكم بعملٌات القراءة والكتابة الى الذاكرة ٌ ، eepromقع هذا
المسجل عند العنوان 0x88من ٌ ، bank 1بٌن الشكل Fig 4.8المسجل eecon1
-
Bit 7 Bit 0
EEPGD - - - WRERR WREN WR RD
Figure 4.8
عند رفع هذة الخانة الى القٌمة واحد تمكن عملٌة القراءة من الذاكرة ، eepromوال ٌمكن تصفٌرها النها تصفر بعد أن تتم عملٌة
القراءة.
عند رفع هذة الخانة الى القٌمة واحد تبدء عملٌة الكتابة الى الذاكرة ، eepromوال ٌمكن تصفٌرها النها تصفر بعد أن تتم عملٌة
الكتابة.
عند رفع هذة الخانة الى القٌمة واحد تمكن عملٌة الكتابة الى الذاكرة ، eepromوعند تصفٌرها النها تصفر تبطل عملٌة الكتابة.
عندما ترفع هذة الخانة الى القٌمة واحد فانة تشٌر بذلك الى حدوث خطأ فً عملٌة الكتابة ،أما عندما تصفر فذلك ٌدل على أن عملٌة
الكتابة تمت .
عندما ترفع هذة الخانة الى القٌمة واحد فانة تشٌر بذلك الى ذاكرة البرنامج ،eeprom program memoeyأما عند تصفٌر هذة
الخانة فأنة ٌتم التاشٌر الى ذاكرة البٌانات eeprom data memory
عبارة عن سِ لسلة من ال َتعلٌمات أو األٌعازات instructionالمُتتابعة ،التً توجه َعمل الماٌكروكونترولر PIC16f84Aلغرض تأدٌة
َوضٌفة معٌنة .
Table 5.1
َتقوم َهذه ال َتعلٌمة ب َتصفٌر أحد بتات مُسجل ، Registerوتأخذ ال َتعلٌمة الصٌغة التالٌة ،
BCF f , b
حٌث :
َتستهلك هذه ال َتعلٌمة دَورة ماكنة واحدة ،أي أن هذه ال َتعلٌمة َتستغرق َفترة َزمنٌة مقداره 1ماٌكروثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Bit Set Flag التعلٌمة BSF
َتقوم هذه ال َتعلٌمة برفع أحد بتات مسجل Registerالى ال َقٌمة واحد ،وتأخذ ال َتعلٌمة الصٌغة التالٌة ،
BSF f , b
حٌث :
ٌُ :fمثل المُسجل المُراد َرفع أحد بتاتة Bitإلى القٌمة واحد،
ٌُ :bمثل َرقم البت Bitالمُراد َرفع قٌمته إلى الواحد من المُسجل ، f
مُالحظة:
َتستهلك هذه ال َتعلٌمة دَورة ماكنة واحدة ،أي أن هذه ال َتعلٌمة َتستغرق َفترة َزمنٌة مقداره 1ماٌكروثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Bit Test Flag Skip If Set التعلٌمة BTFSS
تقوم التعلٌمة األولى والتً هً BTFSS 0x0C,2بفحص البت Bitالثانً من المسجل 0x0Cفأذا كان واحد ٌُ ،حمل عداد البرنامج PC
بعنوان ال َتعلٌمة الثالثة التً هً BCF 0x0C,3لٌنفذها ،بصٌغة أخرى عندما ُتنفذ ال َتعلٌمة BTFSSوكان البت المراد فحصة ٌساوي واحد
ٌتم َقفز ال َتعلٌمة التً َتلً َتعلٌمة BTFSSلٌتم تنفٌذها أي سٌتم قفز التعلٌمة الثانٌة الى التعلٌمة الثالثة والتً هً BCF 0x0C,3لقوم المعالج
بتنفٌذها ،أما أذا كان البت Bitالمُراد فحصة ٌَحمل القٌمة صفر فٌتم تنفٌذ التعلٌمة التً تلً التعلٌمة BTFSSمباشرتا ً أي سٌتم تنفٌذ التعلٌمة
الثانٌة BSF 0x0C,3وٌستمر تنفٌذ البرنامج ’ أي سٌتم تنفٌذ التعلٌمة الثالثة اٌضا ً والرابعة وهكذا ،اذن التعلٌمة BTFSSتعتبر من تعلٌمات
القفز Jumpوتأخذ الت َعلٌمة الصٌغة التالٌة ،
BTFSS f , b
مالحظة:
تستغرق َتستهلك هذه ال َتعلٌمة دورة ماكنة واحدة إذا لم ٌتحقق ال َشرط أي إذا كان البت المُراد َفحصة صفر ،أن هذه ال َتعلٌمة فً هذه الحالة َ
فترة َزمنٌة مقدارها 1ماٌكرو ثانٌة ،أما إذا َتحقق ال َشرط أي عندما ٌكون البت المراد فحصة ًٌحمل القٌمة واحد ،فستأخذ هذه ال َتعلٌمة
الزمنٌة التً َتستغرقها ال َتعلٌمة ستكون 2ماٌكروثانٌة.
دورتان ماكنة أي ان الفترة َ
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Bit Test Flag Skip If Clear التعلٌمة BTFSC
حٌث أن تعلٌمة BTFSCتقفز Jumpingأذا كان البت Bitالمُراد َفحصة ٌَحمل القٌمة صفر ُ َتعمل هذه ال َتعلٌمة َعكس َعمل َتعلٌمة BTFSS
،أما اذا كان البت المراد فحصة ٌحمل القٌمة واحد فسٌتم تنفٌذ التعلٌمة التً تلً َتعلٌمة BTFSCمباشرتا َ ،تأخذ التعلٌمة الصٌغة التالٌة ،
BTFSC f , b
حٌث:
مالحظة:
َتستهلك هذه ال َتعلٌمة دورة ماكنة واحدة إذا لم ٌتحقق ال َشرط أي إذا كان البت المُراد َفحصة واحد ،أن هذه ال َتعلٌمة فً هذه الحالة ت َستغرق
فترة َزمنٌة مقدارها 1ماٌكرو ثانٌة ،أما إذا تحقق الشرط أي عندما ٌكون البت المراد فحصة ًٌحمل القٌمة صفر ،فستأخذ هذه ال َتعلٌمة
الزمنٌة التً َتستغرقها ال َتعلٌمة ستكون 2ماٌكروثانٌة.
دورتان ماكنة أي ان الفترة َ
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
وهً التعلٌمات التً تسٌطر على سٌر عمل البرنامج مثل تعلٌمات القفز ، Jumpوكذلك تتضمن التعلٌمات الخاصة بتحمٌل قٌم ثابتة K
الى مسجل معٌن ،الجدول ٌ Table 5.2وضح مجموعة تعلٌمات السٌطرة والثوابت ،
Table 5.2
تقوم هذه التعلٌمة بنقل قٌمة ثابتة Lateralالى مسجل العمل ،W Reg.وتأخذ التعلٌمة الصٌغة التالٌة ،
MOVLW K
حٌث:
ٌ :Kمثل الرقم الثابت المراد أجراء نقلة مسجل العمل . W Reg.
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ADD Lateral to W Reg. التعلٌمة ADDLW
تقوم هذه التعلٌمة بجمع قٌمة ثابتة Lateralمع قٌمة مسجل العمل ، W Reg.وتخزن النتٌجة فً مسجل العمل ، W Reg.تأخذ التعلٌمة
الصٌغة التالٌة ،
ADDLW K
تقوم هذه التعلٌمة بأجراء عملٌة ANDالمنطقٌة بٌن مسجل العمل W Reg.وقٌمة ثابتة ،وتأخذ التعلٌمة الصٌغة التالٌة ،
ANDLW K
حٌث:
ٌ :Kمثل الرقم الثابت المراد أجراء عملٌة ANDالمنطقٌة علٌة .
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
CALL Statement التعلٌمة CALL
تقوم هذه التعلٌمة باستدعاء برنامج ثانوي Subroutineمخزون فً موقع اخر من الذاكرة ،تأخذ التعلٌمة الصٌغة التالٌة ،
CALL K
حٌث:
مالحظة:
تستهلك هذه التعلٌمة دورتان ماكنة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 2ماٌكرو ثانٌة
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بتعطٌل وضٌفة مؤقت الحراسة ، ،تأخذ التعلٌمة الصٌغة التالٌة.
CALL K
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة
تقوم هذه التعلٌمة بالقفز الى موقع أخر من الذاكرة ،تأخذ التعلٌمة الصٌغة التالٌة ،
Goto K
حٌث:
مالحظة:
تستهلك هذه التعلٌمة دورتان ماكنة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 2ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Exclusive OR Lateral With W Reg. التعلٌمة XORLW
تقوم هذه التعلٌمة بأجراء عملٌة Ex-ORالمنطقٌة بٌن مسجل العمل W Reg.وقٌمة ثابتة ،وتأخذ التعلٌمة الصٌغة التالٌة ،
XORLW K
حٌث:
ٌ :Kمثل الرقم الثابت المراد أجراء عملٌة Ex-ORالمنطقٌة علٌة .
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
IORLW K
حٌث:
ٌ :Kمثل الرقم الثابت المراد أجراء عملٌة ORالمنطقٌة علٌة .
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بطرح قٌمة ثابتة Lateralمن قٌمة مسجل العمل ، W Reg.وتخزن النتٌجة فً مسجل العمل ، W Reg.تأخذ التعلٌمة الصٌغة التالٌة ،
SUBLW K
حٌث:
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 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ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تستخدم هذه التعلٌمة للعودة من برنامج الفرعً ، 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
،الجدول ٌ Table 5.3وضح مجموعة التعلٌمات على مستوى البت المتوفرة فً المسٌطر ، PIC16f84A
Table 5.3
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
ADD W Reg. to flag التعلٌمة ADDWF
تقوم هذه التعلٌمة بأجراء عملٌة الجمٌع بٌن مسجل العمل W Reg.وأي مسجل أخر ، fتاخذ هذه التعلٌمة الصٌغة التالٌة ،
ADDWF f, d
:dتاخذ قٌمتان اما 0او ، 1اذا d=0سٌتم تخزٌن ناتج الجمع فً مسجل العمل ، W=W+fاما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً
المسجل fأي ، f=f+W
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 5.1
الحل:
MOVLW 0x04
ADDWF 0x0C , 1
نقوم أوالً بتحمٌل مسجل العمل بالقٌمة 0x04عن طرٌق التعلٌمة ، MOVLW 0x04ثم نقوم بأجراء عملٌة الجمع بٌن قٌمة مسجل العمل W
Reg.وقٌمة المسجل 0x0Cعن طرٌق التعلٌمة ADDWF 0x0C,1والقٌمة واحد لٌتم خزن ناتج الجمع فً المسجل ،0x0C
تقوم هذه التعلٌمة بطرح قٌمة مسجل العمل W Reg.من مسجل أخر ، fتاخذ هذه التعلٌمة الصٌغة التالٌة ،
SUBWF f, d
حٌث:
:dتاخذ قٌمتان اما 0او ، 1اذا كانت d=0سٌتم تخزٌن ناتج الطرح فً مسجل العمل ، W=f-Wاما اذا كانت قٌمة d=1فسٌتم تخزٌن
الناتج فً المسجل fأي ، f=f-W
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بعملٌة تبدٌل Swappingاالربع بتات السفلٌة low nippleللمسجل ، fمع اربع بتات العلوٌة ، High nippleوتاخذ
التعلٌمة الصٌغة التالٌة
SUBWF f, d
حٌث:
: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ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بأجراء عملٌة 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ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بتصفٌر قٌمة مسجل معٌن ،تأخذ التعلٌمة الصٌغة التالٌة ،
CLRF f
حٌث:
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
No Operation Instruction التعلٌمة NOP
ال تقوم هذه التعلٌمة بأي وضٌفة ،تستخدم عادة فً عملٌات التاخٌر ، Delayحٌث أن هذه التعلٌمة تأخذ دورة ماكنة واحدة لذلك تستغرق هذه
التعلٌمة فتره زمنٌة مقدارها 1ماٌكروثانٌة،تأخذ التعلٌمة الصٌغة التالٌة ،
NOP
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 5.1
الحل:
NOP
NOP
NOP
لقد قمنا بكتابة ثالث تعلٌمات NOPكل تعلٌمة تستغرق فترة زمنٌة مقدارها 1ماٌكروثانٌة بدون تأدٌة أي وضٌفة ،اذا المحصلة الكلٌة لهذة
التعلٌمات الثالثة 3ماٌكروثانٌة
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Clear Working Register التعلٌمة CLRW
تقوم هذه التعلٌمة بتصفٌر قٌمة مسجل العمل ، W Reg.تأخذ التعلٌمة الصٌغة التالٌة ،
CLRW
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Compliment Flag Instruction التعلٌمة COMF
تقوم هذه التعلٌمة بأٌجاد متمم Complimentمسجل ، fتأخذ التعلٌمة الصٌغة التالٌة ،
COMF f,d
حٌث:
:dإذا كانت d=0سٌتم تخزٌن ناتج متمم المسجل fفً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن ناتج المتمم فً
المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Decrement Flag التعلٌمة DECF
تقوم هذه التعلٌمة بأنقاص قٌمة مسجل fبالقٌمة واحد ،وتأخذ التعلٌمة الصٌغة التالبة
DECF f,d
حٌث:
:dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بزٌادة قٌمة مسجل fبالقٌمة واحد ،وتأخذ التعلٌمة الصٌغة التالً
INCF f,d
حٌث:
: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
figure 5.2
RRF f,d
حٌث:
:dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Rotate Left Through Carry تعلٌمة RLF
تقوم هذه التعلٌمة بأزاحة Shiftودوران Rotateمحتوٌات مسجل fباتجاة الٌسار ،وعند خروج البت االكثر أهمٌة MSBمن المسجل ، f
ٌخزن فً خانة المحمل carryمن مسجل الحالة ، Status registerوعند خروج قٌمة المحمل ٌ Carryخزن فً خانة األقل أهمٌة LSB
من المسجل ،fالحظ الشكل Fig 5.3
Register
figure 5.3
RLF f,d
حٌث:
: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تأخذ التعلٌمة الصٌغة التالٌة
حٌث:
:dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 5.2
الحل:
MOVF 0x0E,1
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
Move W Reg. to Flag تعلٌمة MOVWF
تقوم هذه التعلٌمة بنقل محتوٌات مسجل العمل W Reg.الى مسجل ، fتأخذ التعلٌمة الصٌغة التالٌة
MOVWF f
حٌث:
:dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أي أن هذه التعلٌمة تستغرق فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،
تقوم هذه التعلٌمة بزٌادة محتوٌات مسجل fبالقٌمة واحدة ،ثم تفحص النتٌجة اذا كانت اكبر من الصفر ٌتم تنفٌذ التعلٌمة التً تلً تعلٌمة
INCFSZاما اذا كانت النتٌجة صفر فسٌتم قفز التعلٌمة التً تلً تعلٌمة ، INCFSZهذه التعلٌمة مشابهة تقرٌبا ً لعمل تعلٌمة BTFSZفً
عملٌة القفز،تأخذ التعلٌمة الصٌغة التالٌة
INCFSZ f ,d
حٌث:
:dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أذا كانت قٌمة المسجل بعد الزٌادة اكبر من صفر أي ال تتم عملٌة القفز ، Jumpتستغرق التعلٌمة
فً هذه الحالة فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،اما اذا كانت قٌمة المسجل بعد الزٌادة تساوي صفر فتستغرق وحدة السٌطرة دورتان ماكنة
أي ستستغرق التعلٌمة فترة زمنٌة مقدارها 2ماٌكروثانٌة
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 5.3
الحل:
تقوم أول تعلٌمتان بنقل القٌمة ffhالى مسجل العمل Wعن طرٌق تعلٌمة MOVLW 0xFFوذلك بغٌة نقلة الى مسجل االغراض العامة
0Chعن طرٌق تعلٌمة ،MOVWF 0x0Cثم تأتً التعلٌمة الثالثة التعلٌمةل INCFSZلتقوم بزٌادة محتوٌات المسجل 0Chبواحد بما أن
المسجل ٌ 0Chحتوي أالن على القٌمة FFhوعند زٌادتة بواحد سٌتم تصفٌر المسجل وذلك الن سعة المسجل 0Chالقصوى هً 8-bitأي
القٌمة القصوى هً ، FFhراجع الوحدة االولى عملٌة الفٌضان ، Overflowبما أن المسجل ٌ 0Chحمل القٌمة صفر أالن ،ستقوم
التعلٌمة INCFSZبالقفز الى التعلٌمة الخامسة INCF 0x0C,1لتقوم بزٌادة محتوٌات المسجل 0Chبواحد لتصبح محتوٌات المسجل 0Ch
هً القٌمة . 1
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
تقوم هذه التعلٌمة بانقاص محتوٌات مسجل fبالقٌمة واحدة ،ثم تفحص النتٌجة اذا كانت اكبر من الصفر ٌتم تنفٌذ التعلٌمة التً تلً تعلٌمة
DECFSZاما اذا كانت النتٌجة صفر فسٌتم قفز التعلٌمة التً تلً تعلٌمة ، ،DECFSZتأخذ التعلٌمة الصٌغة التالٌة
DECFSZ f ,d
حٌث:
: dإذا كانت d=0سٌتم تخزٌن الناتج فً مسجل العمل ،W Reg.أما اذا كانت قٌمة d=1فسٌتم تخزٌن الناتج فً المسجل ، f
مالحظة:
تستهلك هذه التعلٌمة دورة ماكنة واحدة ،أذا كانت قٌمة المسجل بعد النقصان اكبر من صفر أي ال تتم عملٌة القفز ، Jumpتستغرق التعلٌمة
فً هذه الحالة فترة زمنٌة مقداره 1ماٌكرو ثانٌة ،اما اذا كانت قٌمة المسجل بعد النقصان تساوي صفر فتستغرق وحدة السٌطرة دورتان
ماكنة أي ستستغرق التعلٌمة فترة زمنٌة مقدارها 2ماٌكروثانٌة،
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 4.1
الحل:
تقوم أول تعلٌمتان بنقل القٌمة 01hالى مسجل العمل Wعن طرٌق تعلٌمة MOVLW 0x01وذلك بغٌة نقلة الى مسجل االغراض العامة
0Chعن طرٌق تعلٌمة ،MOVWF 0x0Cثم تأتً التعلٌمة الثالثة التعلٌمةل DECFSZلتقوم بانقاص محتوٌات المسجل 0Chبواحد بما أن
المسجل ٌ 0Chحتوي أالن على القٌمة 01hوعند انقاصه بواحد سٌتم تصفٌر المسجل ،بما أن المسجل ٌ 0Chحمل القٌمة صفر أالن ،ستقوم
التعلٌمة DECFSZبالقفز الى التعلٌمة الخامسة INCF 0x0C,1لتقوم بزٌادة محتوٌات المسجل 0Chبواحد لتصبح محتوٌات المسجل 0Ch
هً القٌمة . 1
لقد تعرفنا على البرنامج وقلنا انة مجموعة من التعلٌمات المتتابعة لتأدٌة مهمة معٌنة ٌ ،تم خزن البرنامج داخل ذاكرة المسٌطر الصغري
بهٌئة ثنائٌة او سلسلة من األصفار والواحدات ،لكتابة البرنامج نحتاج لغة برمجة والتً هً عبارة عن بروتوكول او صٌغة متفق علٌها
لكتاب ة البرنامج ،كما هو الحال فً لغات البشر فهناك اللغة االنكلٌزٌة والفرنسٌة والعربٌة ولكل من هذه اللغات قواعد معٌنة لتشكل جمل
سلٌمة ،وهكذا هو الحال مع االنظمة الرقمٌة ،تتم عملٌة كتابة البرامج بطرٌقتٌن ،
هذه اللغات توفر لنا كتابة التعلٌمات باستخدام مجموعة من الرموز واالرقام والكلمات القرٌبة الى اللغة االنكلٌزٌة ٌ ،تم ترجمة هذا السالسل
من الكلمات الى سلسلة من االصفار والواحدات تفهما الماكنة تسمى 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
وهً اللغات التً ٌكتب البرامج فٌها بشكل مخططات انسٌابٌة flow codesكما هو موضح فً الشكل Fig 6.1
Figure 6.1
هً الصٌغة السهلة القراءة للبشر المقابلة للغة اآللة .فلغة اآللة عبارة عن تتابع من البتات ) (bitsتمثل عملٌة حاسوبٌة أو أمر للحاسوب،
تصبح أسهل للقراءة عندما تستبدل برموز تعبر عنها.
ولكل معالج لغة تجمٌع خاصة به ،وتحتاج لغة التجمٌع ما ٌسمى المجمـِّع Assemblerوهو الذي ٌقوم بتحوٌل لغة التجمٌع التً ٌستطٌع
البشر قراءتها والتعدٌل فٌها إلى لغة اآللة التً ٌستطٌع المعالج تنفٌذها .وتستخدم هذه اللغة اآلن من قبل البشر وذلك لبرمجة أجزاء من
نظم التشغٌل أو برمجة انظمة الزمن الحقٌقً . Real time system
العالمة ) (Labelوهو ما ٌتم به اإلشارة لسطر ما لٌتم استدعاءه فً عملٌات القفز واالستدعاء .
األمر ) (Instructionوهو ٌكون مناظر فً الغالب ألمر فً المعالج وهو ما سٌقوم المعالج بتنفٌذه عند الوصول لهذا
السطر أثناء تنفٌذ البرنامج.
المعامل ) (Operandوهو المتغٌر الذي سٌتم تطبٌق األمر علٌه.
من ممٌزاتها
قبل كتابة التعلٌمات هناك توجٌهات ٌ directiveجب كتابتها مع البرنامج هذة التوجات توجة المعالج CPUاٌن هً بداٌة البرنامج واٌن هً
نهاٌة البرنامج ،كما توجة المعالج CPUالى ترجمة البرنامج الى تعلٌمات ٌفهمها المسٌطر المقصود خزن البرنامج فٌة .
ٌتكون هٌكل البرنامج من دالة رئٌسٌة 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فهً تدل على نهاٌة البرنامج .
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وٌتم ذلك عن طرٌق
عملٌة الكتابة 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من المنافذ مهمة لقراءة البٌانات من المحٌط الخارجً مثالً لمعرفة حالة المفاتٌح 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
Variable المتغيرات
فً عملٌة برمجة المسٌطرات الدقٌقة ،المتغٌرات هً مواقع خزنٌة داخل ذاكرة المسٌطر الصغري Pic16f84aلهذة المواقع الخزنٌة أسم
محدد ،وٌمكن تعرٌف المتغٌرات فً المسٌطر الصغري على غرار باقً لغات البرمجة ،وتكون الصٌغة كأالتً
هً قٌم مسندة لها اسماء معرفة لتسهٌل التعامل مع القٌم ٌ ,Valuesمكن استخدام تعلٌمة EQUالسناد أسماء للقٌم ، Valuesوتكون
الصٌغة كأالتً
Comment التعليقات
وهً عبارة عن نصوص غٌر قابلة للترجمه وال ٌفسرها المعالج تستخدم لالرشاد والتذكٌر وما ٌمٌز التعلٌقات انها مسبوقة بالرمز ";" وتأخذ
الصٌغة التالٌة
Examble:
#DEFINE Input 1
#DEFINE Output 0
البرنامجات التالٌان متكافئان ،كتب البرنامج االول بصٌغة منظمة باستخدام المعرفات ،اما البرنامج الثانً فقد كتب بصٌغة مباشرة
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال 6.0
سنتعلم فً هذا المثال كٌفٌة أجراء عملٌة الضرب فً المسٌطر الصغري ،لنفرض لدٌنا متغٌران وهما X,Yوالمتغٌر Zونرٌد أجراء العملٌة
االتٌة
Z := X * Y
عملٌة الضرب ببساطة هً عملٌة جمع ،أي أن عملٌة الضرب X*Yلنفرض نرٌد أجراء العملٌة X*5فالعملٌة هً
لقد قمنا بعملٌة جمع المتغٌر Xخمس مرات وذلك الن قٌمة المتغٌر Yهً ،5عملٌة الضرب فً هذة الحالة تصلح فقط عندما تكون االعداد
صحٌحٌة والناتج اقل من 255أي أن عملٌة الضرب ٌكون ناتجها ،8-bitهناك خوازمٌات أعقد ٌمكنك االستعانة بها ،لكً ٌكون الشرح
واضح لم اتطرق لها ،
ORG التعليمة
تقوم هذه التعلٌمة بتحدٌد بداٌة موقع تخزٌن البرنامج فً الذاكرة ،وبشكل افتراضً ٌتم تخزٌن البرنامج عند الموقع 0x00ان لم تكتب
التعلٌمة ORG 0x00
CBLOCK التعليمة
تقوم هذه التعلٌمة بتعٌٌن اسماء لقٌم ولكن بشكل متسلسل ،حٌث تقوم بأعطاء قٌمة االولٌة الول ثابت ، Constantوبقٌة الثوابت ٌتم تحدٌد
قٌمها ذاتٌا باالعتماد على القٌمة االولٌة ،الحظ المثال التالً
Cblock 0x02
First, second, third ;first=0x02, second=0x03, third=0x04
endc
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
My_micro_name macro
; instructions
endm
Suproutine االجراءات
االجرائات Subroutineاو البرامج الفرعٌة عبارة عن برامج-او اجزاء برامج-ثانوٌة ٌتم استخدامها الداء غرض معٌن ومن فوائدها:
list p=16f84a
>include <p16f84a.inc
MAIN
CALL subroutine
GOTO MAIN
Subroutine
;Instruction
Return
end
list p=16f84a
>include <p16f84a.inc
) 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
goto main
end
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
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
مثال : 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
list p=16f84a
>include <p16f84a.inc
main
DECF 0x0E,1
RLF 0x0E,1
goto main
end
قمنا فً المثال السابق بطرح محتوٌات المسجل 0x0Eمباشرتا ً فقط بذكر عنوان المسجل ،ثم قمنا بتزحٌف المزجل بت واحد الى الٌمٌن ،هذة
الطرٌقة تسمى العنونة المباشرة .
list p=16f84a
>include <p16f84a.inc
main
MOVLW 0x0E
MOVWF 0x04 ;FSR
DECF 0x00 ;INDF
RRF 0X00
goto main
end
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
end
َهذا ال َنوع من ال َفحص ٌُ ،Scanسمى األنتخاب ، pollingالسؤال الذي ٌَتبادر الى الذِهن ؟!!
لتفحص األطراف Scanningب َشكل oالمُسٌطر ال ٌَستطٌع تنفٌذ اكثر من مهمة ،واذا حاولت وتمكنت ،فستحاول تنفٌذ المهمة ثم ترجع َ
ترك releaseَ متكرر ،تخٌل لو أن المسٌطر ٌنفذ المهمة األخرى ،وفً نفس الوقت ضغط شخص على لوحة ألمفاتٌح ِبسُرعة ثم
ألمفتاح ،عندها المُسٌطر عندما ٌعود ل َفحص األطراف ال ٌَجد أي طرف ٌشٌر الى وجود زر مضغوط ؟!!
oممكن إن المُسٌطر ال َ
ٌتحسس أو ٌفقد األشارة فً عملٌة األنتخاب ..Polling
معنى المقاطعة فً اللُغة وهو مقاطعة شًء أو َعمل ما ألداء عمل اكثر أهمٌة ث َم ال َعودة الى ال َعمل السابق ..وهو فعالً ما ٌحدث فً المُسٌطر
الصغري حٌث أن المقاطعة ، 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ممكن تفعٌل خدمة المقاطعة علٌها ،قبل استخدام المقاطعات ٌجب علٌنا ،
BSF 0x0b,7
-2نمكن خدمة المقاطعة عند الطرف RB0بتمكٌن الخانة INTEمن المسجل INTCONكاالتً
BSF 0x0b,4
عند هذه اللحظة ،المسٌطر الدقٌق سٌكون لة العلم متى سٌذهب لبرنامج خدمة المقاطعة ، ISRوذلك عند تحسس اشارة عند الطرف
،RB0فقط بقً شئ واحد مهم هل المقاطعة ستتم عندما ؟!!
falling edge الطرف ٌ RB0تحول من المنطق الواحد الى المنطق الصفر o
rising edge الطرف ٌ RB0تحول من المنطق الصفر الى المنطق الواحد o
هذا ٌتم تحدٌدة من خالل مسجل خاص داخل المسٌطر الدقٌق ٌدعى ، Optionالخانة التً تهمنا حالٌا َ هً الخانة السادسة حٌث
مالحظة:
عند بداٌة تشغٌل المسٌطر الصغري بشكل طبٌعً ٌؤشر عداد البرنامج PCعلى الموقع 0x00من الذاكرة ،عند حدوث مقاطعة فان عداد
البرنامج ٌحمل بالقٌمة 0x04مؤدٌا ً الى جعل المسٌطر الصغري ٌؤشر الى موقع الذاكرة 0x04لذلك ٌجب اخبار PICباننا سوف نحجز
الموقع 0x04لبرنامج خدمة المقاطعة ISRونفصلة عن البرنامج الرئٌسً كاألتً ،
Goto Main
End
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال : 6.6
فً هذا المثال سوف نقوم بتفعٌل خدمة المقاطعة عند الطرف ، Rb0حٌث أذا كان هناك أشارة عند الطرف ٌ ، Rb0تم استدعاء برنامجة
خدمة المقاطعات ISRبشكل ذاتً وذلك لكً ٌرفع البت االول من المسجل portaالى القٌم واحد .
list p=16f84a
>include <p16f84a.inc
قبل ان ندخل فً موضوع المؤقت ،دعنا نتحدث عن وحدة سٌطرة قلٌالً ،وحدة السٌطرة او الوحدة التً تولد دورة الماكنة machine
cycle generationهً فً الحقٌقٌة عبارة عن عداد حلقً مكون من 4-bitكل دورة كاملة لهذا العداد تشٌر الى نهاٌة تعلٌمة ،سرعة هذا
العداد الحلقً او سرعة دورة الماكنة تعتمد على سرعة المذبذب , oscillatorالشكل ٌ Fig 6.5بٌن وحدة السٌطرة
4MHZ
Ring Counter
OSCILLATOR
Machine cycle generation
Figure 6.5
لجلب التعلٌمة الى مسجل ، IRونفس الوقت ٌزداد عداد البرنامج بواحد
: T1 -0خالل هذه الدورة ٌتم نقل محتوٌات PCالى الذاكرة َ
لٌشٌر الى التعلٌمة التالٌة .
: T4,T3 ,T2 -2دورة تنفٌذ التعلٌمة وهً متغٌرة تعتمد على نوع التعلٌمة .
مجمل األربع نبظات هذه التً ٌتم فٌها جلب وتنفٌذ التعلٌمة ،تسمى دورة التعلٌمة machine cycleمع مالحظة انة بعض التعلٌمات
تحتاج الى اكثر من دورة ماكنة . one machine cycle
وبما ان التعلٌمة تحتاج اربع نبظات من دورة الماكنة لكً تنفذ بشكل كامل
مالحظة:
كل التعلٌمات فً المسٌطر الصغري تاخذ دورة ماكنة واحدة أي 1 microباستثناء التعلٌمات التً فٌها عملٌة القفز . jump
اذن الوقت المستغرق لتنفٌذ البرنامج السابق هو ، 3 microالحظ البرنامج التالً ،
Table 6.1
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
مثال : 6.7
لنفرض أنك حملت المسجل tmr0بالقٌمة 0x64وقٌمة مقسم التردد هً ps2,ps1,ps0هً 010فما هو زمن حدوث حالة الطفحان اذا
كان التردد 4 Mhz
الحل:
نحول القٌمة 0x64التً هً بالنظام السادس عشر الى ما ٌقابلها بالنظام العشري والتً هً ، 100وبما أن مقسم التردد حمل بالقٌمة 010
اذن نسبة التقسٌم هً 1/8من الجدول ،Table 6.1وكان تردد المصدر هو . 4 Mhz
لنقوم أالن بتعدٌل بسٌط على المعادالت أعالة ،لنعوض المعادلة رقم ) (1فً المعادلة رقم ) (2فنحصل
ُ
حٌث أن الزمن Tهو مقلوب تردد المصدر
الجدول ٌ Table 6.2بٌن قٌم مختلفة للمسجل Tmr0عند قٌم مختلفة من ، overflowالقٌم الفارغة داللة أن القٌة الناتجة هً قٌمة سالبة
وال ٌجوز تحمٌل المسجدل Tmr0بالقٌم السالبة .
Table 6.2
-0اخبار المسٌطر الدقٌق باننا نرٌد تفعل خدمة المؤقت وذلك عن طرٌق السجل optionعند القٌمة TOCSحٌث أن
اذا طلبت العد من الصفر الى العشرة من شخصٌن طبعا ً سرعة العد ستختلف فمثال الشخص االول ٌعد كل ثانٌة ،اما الشخص
الثانً فمثالً ٌعد كل ثانٌتٌن ،أذن ما هً الفترة التً ٌزداد فٌها مؤقت الحراسة ؟!! بشكل افتراض المؤقت ٌعد كل 08ماٌكرو ثانٌة،
وهذة القٌمة قابلة للتغٌر باستخدام سجل .. option
اخبار المسٌطر الدقٌق بتفعٌل enableاو ابطال disableخدمة مؤقت الحراسة WDT
تذكر !!! أن الخانات PS0,PS1,PS2مشتركة بٌن المؤقت Timer0ومؤقت الحراسة ، WDTلذلك ٌجب تحدٌد الوضٌفة التابعة لهذة الخانات
،وذلك عن طرٌق الخانة PSAمن مسجل ، Optionحٌث اذا رفعة هذه الخانة PSAالى القٌمة واحد فهذا ٌعنً أن قٌمة التقسٌم
PS0,PS1,PS2هً لمؤقت الحراسة ، WDTبمجرد ما ترفع قٌمة الخانة PSAالى الواحد ٌتم تفعٌل مؤقت الحراسة ،حسب الشفرة التالٌة
Bsf 0x03,5
Bsf 0x81,3
BCF 0x83,5
Figure 6.1
المبرمجة :
تتوفر فً السوق أنواع مختلفة من المبرمجات ،من هذة المبرمجات عبارة عن عدة متكاملة مثل المبرمجة من شركة Microchipهذة
المبرمجة مزودة بقواعد Socketلمختلف انواع ، PIC microcontrolrsوكذلك تم توصٌل مفاتٌح ومصابح للفحص ،وجهزت بوحدات 7
segment,lcd character 2*16 , graphic lcdوغٌرها من الوحدات مثل الذاكرة وحدات دخل تماثلٌة والكثٌر ما علٌك سوا شرائها من
السوق وقراءة الدلٌل المرفق مع المبرمجة لتعرف اكثر عن مزاٌاها .
كٌبل توصٌل من نوع 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
Figure 7.1
Figure 7.2
Figure 7.4
Figure 7.5
Figure 7.6
عند النقر على زر nextتضهر النافذة التالٌة Figure 7.7والتً تحدد فٌها مسار المترجم Assemberاترك االعدادات
االفتــراصٌة لـــها ثم انقر على زر next
Figure 7.3
Figure 7.8
تضهر لك النافذة الموضحة فً الشكل Figure 7.9والتً تطلب منك أضافة ملفات خارجٌة الى مشروعك،ال تقم باضافة اي ملف فقط
اضغط زر . next
Figure 7.9
تظهر لك النافذة التالٌة Figure 7.10والتً تلخص الخطوات التً قمت بها ،فقط أضغط على زر finsh
Figure 7.10
Figure 7.11
من القائمة fileأختر newستنبثق نافذة لتحرٌر االوامر Codesقم بكتابة البرنامج الذي ترٌد ترجمتة كما هو موضح فً الشكل
Figure 10.12
Figure 7.12
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من الذاكرة
Figure 7.14
Figure 7.14
نالحظ من الشكل أنة عن طرٌق القائمة list boxالمعنونة MCU Familyنستطٌع تحدٌد من خاللها عائلة المسٌطر الدقٌق مثالً العائلة
PIC16Fثم عن طرٌق القائمة list boxالمعنونة MCUنستطٌع تحدٌد نوع المسٌطر الدقٌق ولٌكن مثالً المسٌطر ، PIC16f84Aبد أن
تمت عملٌة تحدٌد نوع المسٌــــطر الدقٌــق microcontrollerعلٌنا تحمٌل الملف hex.الى البرنـــــامج وذلك عن طــرٌق المجموعة
Hex file optionثم النقر على الزر loadلتحمٌل الملف ، Hex.ما علٌنا االن سوى نقل البرنامج الى المسٌطر الدقٌق
microcontrollerعن طرٌق الزر . Write
بعد أن قمت بتولٌد الملف hex. Fileعن طرٌق برنامج ، mplabافتح برنامج proteus 7واجهة البرنامج موضحة فً الشكل
Figure10.15
Figure 7.15
بعد أن قمت بفتح البرنامج قم بفتح مكتبة العناصر Deviceكما هو موضح فً الشكل ،Figure 10.16تحتوي المكتبة على كافة
العناصر االلكترونٌة من المقاومات والمتسعات الى المعالجات الدقٌقة microprocessorوالحاكمات الدقٌقة microcontroller
Figure 7.16
Figure 7.17
بعد أن قمت بربط المكونات مع المسٌطر الصغري كما هو موضح فً الشكل Figure 10.18أدناة
Figure 7.18
Figure 7.19
بعد أن قمت بعملٌة تحمٌل برنامج proteusبمسار الملف hex fileقم بتشغٌل المحاكاة Simulationوذلمك من القائمة Debugثم من
القائمة أختر Start/Restart debugging