مدخلك الشخصى إلى الميكروكونترولر Your Personal Introductory Course :The PIC Microcontroller
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الفئة الأولى :: منتدى البرمجة بلغة الأسمبلى
صفحة 1 من اصل 1
مدخلك الشخصى إلى الميكروكونترولر Your Personal Introductory Course :The PIC Microcontroller
مدخلك الشخصى إلى الميكروكونترولر PIC :
The PIC Microcontroller:
Your Personal Introductory Course
مقدمة :
الآن أصبح من الممكن برمجة الرقائق ( الشرائح – الدوائر المتكاملة) ، لقد ولت الأيام التى كان يتم فيها بناء الدوائر تحيط بالرقائق ( دوائر خارج الرقائق) ، والآن يمكننا أن نبنى رقائق تحيط بالدوائر ( دوائر داخل الرقائق ، أى مدمجة ) . هذه التكنولوجيا الآن لا حدود لها ويمكن صنع العديد من الدوائر المعقدة أصغر بعدة مرات من خلال استخدام هذه المتحكمات الدقيقة microcontrollers ، والتى يعتبر الميكروكونترولر PIC مثال ممتاز لها .
عندما تشترى الميكروكونترولر PIC ، فإنك تحصل على كتلة من السليكون عديمة الفائدة ، بإمكانيات مذهلة . هذه القطعة لن تفعل شيئا بدون البرنامج الذى تكتبه . تحت قيادتك ، تقريبا أى عدد أو مجموعة من الشرائح المنطقية العادية يمكن أن تقلص (تحشر) فى برنامج واحد والذى بدوره يوضع داخل الميكروكونترولر PIC .
الشكل التالى يوضح خطوات تطوير برنامج الميكروكونترولر PIC .
برمجة الميكروكونترولر PIC هو كل ما تقوم به مع الاعداد ، سواء كانت ثنائية ، أو عشرية ، أو سداسية عشر .
خدعة البرمجة تكمن فى جعل الشريحة تؤدى المهمة المعينة عن طريق تحريك (نقل) ومعالجة الأعداد. والأكثر من ذلك ، هناك مجموعة محددة من المهام التى يمكن أن تؤديها على الأعداد ، هذه المهام تعرف بالتعليمات instructions . يستخدم البرنامج تعليمات عامة بسيطة ، وأيضا تعليمات أكثر تعقيدا والتى تقوم بعمل أكثر من مهمة محددة . الشريحة سوف تخطو خلال التعليمات واحدة تلو الأخرى ، وتؤدى ملايين التعليمات كل ثانية ( وهذا يعتمد على تردد المذبذب المستخدم) ، وبهذه الطريقة تؤدى وظيفتها .
الأعداد فى الميكروكونترولر PIC يمكن أن تكون :
1- مستقبلة من المداخل ( باستخدام منفذ الدخل) .
2- مخزنة فى حجرات (أماكن - مواقع) خاصة داخل الرقاقة ، وتسمى سجلات الملف ‘file registers’
3- معالجة ( العمليات الحسابية مثل الجمع والطرح والعمليات المنطقية مثل AND وغيرها ) .
4- مرسلة للخارج خلال المخارج (باستخدام منفذ الخرج) .
وهذا هو أساسا كل ما فى برمجة الميكروكونترولر PIC ، لحسن الحظ هناك بعض الوظائف المفيدة الأخرى والتى يوفرها لنا الميكروكونترولر PIC مثل المؤقتات المدمجة بالشريحة ، أو بعض الأعلام التى تشير إلى ما إذا كان حدث أو لم يحدث شىء معين ، والتى تجعل الحياة أسهل بكثير .
The PIC Microcontroller:
Your Personal Introductory Course
مقدمة :
الآن أصبح من الممكن برمجة الرقائق ( الشرائح – الدوائر المتكاملة) ، لقد ولت الأيام التى كان يتم فيها بناء الدوائر تحيط بالرقائق ( دوائر خارج الرقائق) ، والآن يمكننا أن نبنى رقائق تحيط بالدوائر ( دوائر داخل الرقائق ، أى مدمجة ) . هذه التكنولوجيا الآن لا حدود لها ويمكن صنع العديد من الدوائر المعقدة أصغر بعدة مرات من خلال استخدام هذه المتحكمات الدقيقة microcontrollers ، والتى يعتبر الميكروكونترولر PIC مثال ممتاز لها .
عندما تشترى الميكروكونترولر PIC ، فإنك تحصل على كتلة من السليكون عديمة الفائدة ، بإمكانيات مذهلة . هذه القطعة لن تفعل شيئا بدون البرنامج الذى تكتبه . تحت قيادتك ، تقريبا أى عدد أو مجموعة من الشرائح المنطقية العادية يمكن أن تقلص (تحشر) فى برنامج واحد والذى بدوره يوضع داخل الميكروكونترولر PIC .
الشكل التالى يوضح خطوات تطوير برنامج الميكروكونترولر PIC .
برمجة الميكروكونترولر PIC هو كل ما تقوم به مع الاعداد ، سواء كانت ثنائية ، أو عشرية ، أو سداسية عشر .
خدعة البرمجة تكمن فى جعل الشريحة تؤدى المهمة المعينة عن طريق تحريك (نقل) ومعالجة الأعداد. والأكثر من ذلك ، هناك مجموعة محددة من المهام التى يمكن أن تؤديها على الأعداد ، هذه المهام تعرف بالتعليمات instructions . يستخدم البرنامج تعليمات عامة بسيطة ، وأيضا تعليمات أكثر تعقيدا والتى تقوم بعمل أكثر من مهمة محددة . الشريحة سوف تخطو خلال التعليمات واحدة تلو الأخرى ، وتؤدى ملايين التعليمات كل ثانية ( وهذا يعتمد على تردد المذبذب المستخدم) ، وبهذه الطريقة تؤدى وظيفتها .
الأعداد فى الميكروكونترولر PIC يمكن أن تكون :
1- مستقبلة من المداخل ( باستخدام منفذ الدخل) .
2- مخزنة فى حجرات (أماكن - مواقع) خاصة داخل الرقاقة ، وتسمى سجلات الملف ‘file registers’
3- معالجة ( العمليات الحسابية مثل الجمع والطرح والعمليات المنطقية مثل AND وغيرها ) .
4- مرسلة للخارج خلال المخارج (باستخدام منفذ الخرج) .
وهذا هو أساسا كل ما فى برمجة الميكروكونترولر PIC ، لحسن الحظ هناك بعض الوظائف المفيدة الأخرى والتى يوفرها لنا الميكروكونترولر PIC مثل المؤقتات المدمجة بالشريحة ، أو بعض الأعلام التى تشير إلى ما إذا كان حدث أو لم يحدث شىء معين ، والتى تجعل الحياة أسهل بكثير .
بعض النصائح قبل البدء:
بعض النصائح قبل البدء:
لأولائك الذين لا دراية لهم بالبرمجة على الإطلاق ، قد يكون هناك بعض الأفكار والتى تكون جديدة تماما ، بل وبعض جوانب المتحكم PLC قد تبدو غريبة . سوف يتم الآن شرح بعض النقاط الأساسية .
أنظمة الترقيم : الثنائى binary ، والعشرى decimal ، والسداسى عشر hexadecimal :
فى البداية هناك العمل على أنظمة الأعداد المختلفة : الثنائى ، والعشرى ، والسداسى عشر .
العدد الثنائى هو عدد "قاعدته أو أساسه " العدد "2" ، أى هناك نوعين فقط من الأرقام digit هما الصفر "0" والواحد "1" . على خلاف العدد العشرى الذى قاعدته العدد "10" ، أى أن هناك عشر أرقام مختلفة هى الأرقام من "0" إلى "9" . وبالمثل العدد السداسى عشر قاعدته العدد "16" ، ومن ثم فإن هناك 16 رقم مختلف هى (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E , F) .
الجدول التالى يوضح كيفية العد باستخدام الأنظمة المختلفة :
الرقم الثنائى binary digit ( أو البت bit) الموجود أقصى اليمين يعرف بالبت الأقل أهمية (الأدنى قيمة) أو اختصارا "LSB" كما يسمى أيضا "bit 0" ( الترقيم يبدأ من الصفر وليس من الواحد ) .
البت bit 0 تعرض "أحاد العدد" ( الواحد "1" قيمته بواحد "1" ) . البت الموجودة على يسارها (bit 1) الواحد "1" قيمته "2" ، والبت التالية (bit 2 ) الواحد "1" قيمته "4" وهكذا .
لاحظ أن "1" يساوى 2 أس صفر أى 2^0 ، وأن "2" تساوى 2 أس واحد أى 2^1 ، وأن "4" تساوى 2 أس 2أى 2^2 وهكذا ، ومن ثم فإن رقم البت يناظر قوة أو أس العدد "2" التى تمثلها البت ، ولكن لاحظ أن الترقيم يذهب من اليمين إلى اليسار ( أحيانا يتم نسيان ذلك) .
السلسلة المكونة من 8 بت تعرف بالبايت byte . البت الأعلى فى الترقيم تعرف بالبت الأكثر أهمية ( الأقصى قيمة) واختصارا MSB ، وهى البت bit 7 فى حالة البايت .
بالمثل فى نظام الترقيم السداسى عشر ، البت bit 0 تمثل عدد الأحاد (مضاعفات الواحد) (16^0 = 1) والبت bit 1 تمثل عدد مضاعفات العدد 16 (16^1 = 16) وهكذا .
أحد الأشياء المفيدة للنظام السداسى عشر هى سهولة ترجمة النظام الثنائى . فإذا قسمت العدد الثنائى إلى مجموعات كل مجموعة مكونة من 4 بت ( تسمى نبل nibbles أى بايتات صغيرة) ، فإن هذه المجموعات الصغيرة يمكن أن تترجم بشكل فردى (كل على حدة) إلى رقم سداسى عشر ‘hex’ digit .
نظام 8 بت 8-bit system :
الميكروكونترولر PIC هو نظام 8 بت ، لذلك فهو يتعامل مع الأعداد بطول 8 بت . العدد الثنائى "11111111" هو أكبر عدد مكون من 8 بت وهو يساوى "255" بالعشرى ويساوى "FF" بالسداسى عشر .
مع برمجة الميكروكونترولر PIC ، تستخدم رموز مختلفة لتحديد نظم الترقيم المختلفة ( العدد العشرى 11111111 يختلف كثيرا عن العدد الثنائى 11111111 ) .
فى لغة الأسمبلى (التجميع) ، يتم بيان العدد الثنائى بالشكل b’00101000’ ، والعدد العشرى بالشكل d’72’ أو بالشكل .72"" ( تبدو مثل 72 من المئة ولكنها قد تكون أسرع كثيرا فى الكتابة ، إذا كنت تستخدم الأعداد العشرية بكثرة ) . نظام الترقيم السداسى عشر هو النظام الافتراضى ، ولكن من أجل التوضيح يتم كتابة الحرف الصغير "h" بعد العدد ، على سبيل المثال 28h . بدلا من ذلك ، يمكنك كتابة الحروف "0x" عند بداية العدد ، على سبيل المثال "0x3D" .
عند التعامل مع مدخلات ومخرجات الميكروكونترولر PIC ، دائما يتم استخدام النظام الثنائى ، مع كل طرف دخل أو طرف خرج يناظر بت معينة . الواحد "1" يناظر لما يعرف "بالمنطق واحد" logic 1 ، وهذا يعنى أن طرف الميكروكونترولر PIC يكون عند جهد المنبع ( على سبيل المثال +5 V ) . الصفر "0" يدل على أن الطرف عند "المنطق صفر" logic 0 ،أو عند "0 V" . عند استخدام الأطراف كمداخل ، فإن الحدود بين منطق الصفر ومنطق الواحد تكون عند منتصف جهد المنبع ، على سبيل المثال +2.5 V .
وأخيرا ، إذا رغبت ، فى أى مرحلة البحث عن ما تعنيه تعليمة معينة ، يمكنك بسهولة الرجوع إلى الملحق الذى سوف نرفقة والذى يبين قائمة بجميع التعليمات مع وظائفها .
الخطوات الأولية :
تتكون العملية الأساسية لتطوير برنامج الميكروكونترولر PIC من خمس خطوات :
1- اختيار نموذج الميكروكونترولر ، وبناء مخطط السريان flowchart للبرنامج .
2- كتابة البرنامج ( باستخدام برنامج المفكرة Notepad المتوفر مع النوافذ أو غيره من برمجيات التطوير المناسبة ) .
3- ترجمة (تجميع) البرنامج ( تغيير ما قمنا بكتابته إلى شىء يفهمه الميكروكونترولر PIC ) .
4- محاكاة البرنامج لمعرفة أنه يعمل أو لا يعمل .
5- تحميل البرنامج إلى الميكروكونترولر الفعلى .
دعونا ننظر إلى بعضها بمزيد من التفصيل .
1- اختيار الميكروكونترولر PIC الخاص بك :
لأولائك الذين لا دراية لهم بالبرمجة على الإطلاق ، قد يكون هناك بعض الأفكار والتى تكون جديدة تماما ، بل وبعض جوانب المتحكم PLC قد تبدو غريبة . سوف يتم الآن شرح بعض النقاط الأساسية .
أنظمة الترقيم : الثنائى binary ، والعشرى decimal ، والسداسى عشر hexadecimal :
فى البداية هناك العمل على أنظمة الأعداد المختلفة : الثنائى ، والعشرى ، والسداسى عشر .
العدد الثنائى هو عدد "قاعدته أو أساسه " العدد "2" ، أى هناك نوعين فقط من الأرقام digit هما الصفر "0" والواحد "1" . على خلاف العدد العشرى الذى قاعدته العدد "10" ، أى أن هناك عشر أرقام مختلفة هى الأرقام من "0" إلى "9" . وبالمثل العدد السداسى عشر قاعدته العدد "16" ، ومن ثم فإن هناك 16 رقم مختلف هى (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E , F) .
الجدول التالى يوضح كيفية العد باستخدام الأنظمة المختلفة :
الرقم الثنائى binary digit ( أو البت bit) الموجود أقصى اليمين يعرف بالبت الأقل أهمية (الأدنى قيمة) أو اختصارا "LSB" كما يسمى أيضا "bit 0" ( الترقيم يبدأ من الصفر وليس من الواحد ) .
البت bit 0 تعرض "أحاد العدد" ( الواحد "1" قيمته بواحد "1" ) . البت الموجودة على يسارها (bit 1) الواحد "1" قيمته "2" ، والبت التالية (bit 2 ) الواحد "1" قيمته "4" وهكذا .
لاحظ أن "1" يساوى 2 أس صفر أى 2^0 ، وأن "2" تساوى 2 أس واحد أى 2^1 ، وأن "4" تساوى 2 أس 2أى 2^2 وهكذا ، ومن ثم فإن رقم البت يناظر قوة أو أس العدد "2" التى تمثلها البت ، ولكن لاحظ أن الترقيم يذهب من اليمين إلى اليسار ( أحيانا يتم نسيان ذلك) .
السلسلة المكونة من 8 بت تعرف بالبايت byte . البت الأعلى فى الترقيم تعرف بالبت الأكثر أهمية ( الأقصى قيمة) واختصارا MSB ، وهى البت bit 7 فى حالة البايت .
بالمثل فى نظام الترقيم السداسى عشر ، البت bit 0 تمثل عدد الأحاد (مضاعفات الواحد) (16^0 = 1) والبت bit 1 تمثل عدد مضاعفات العدد 16 (16^1 = 16) وهكذا .
أحد الأشياء المفيدة للنظام السداسى عشر هى سهولة ترجمة النظام الثنائى . فإذا قسمت العدد الثنائى إلى مجموعات كل مجموعة مكونة من 4 بت ( تسمى نبل nibbles أى بايتات صغيرة) ، فإن هذه المجموعات الصغيرة يمكن أن تترجم بشكل فردى (كل على حدة) إلى رقم سداسى عشر ‘hex’ digit .
نظام 8 بت 8-bit system :
الميكروكونترولر PIC هو نظام 8 بت ، لذلك فهو يتعامل مع الأعداد بطول 8 بت . العدد الثنائى "11111111" هو أكبر عدد مكون من 8 بت وهو يساوى "255" بالعشرى ويساوى "FF" بالسداسى عشر .
مع برمجة الميكروكونترولر PIC ، تستخدم رموز مختلفة لتحديد نظم الترقيم المختلفة ( العدد العشرى 11111111 يختلف كثيرا عن العدد الثنائى 11111111 ) .
فى لغة الأسمبلى (التجميع) ، يتم بيان العدد الثنائى بالشكل b’00101000’ ، والعدد العشرى بالشكل d’72’ أو بالشكل .72"" ( تبدو مثل 72 من المئة ولكنها قد تكون أسرع كثيرا فى الكتابة ، إذا كنت تستخدم الأعداد العشرية بكثرة ) . نظام الترقيم السداسى عشر هو النظام الافتراضى ، ولكن من أجل التوضيح يتم كتابة الحرف الصغير "h" بعد العدد ، على سبيل المثال 28h . بدلا من ذلك ، يمكنك كتابة الحروف "0x" عند بداية العدد ، على سبيل المثال "0x3D" .
عند التعامل مع مدخلات ومخرجات الميكروكونترولر PIC ، دائما يتم استخدام النظام الثنائى ، مع كل طرف دخل أو طرف خرج يناظر بت معينة . الواحد "1" يناظر لما يعرف "بالمنطق واحد" logic 1 ، وهذا يعنى أن طرف الميكروكونترولر PIC يكون عند جهد المنبع ( على سبيل المثال +5 V ) . الصفر "0" يدل على أن الطرف عند "المنطق صفر" logic 0 ،أو عند "0 V" . عند استخدام الأطراف كمداخل ، فإن الحدود بين منطق الصفر ومنطق الواحد تكون عند منتصف جهد المنبع ، على سبيل المثال +2.5 V .
وأخيرا ، إذا رغبت ، فى أى مرحلة البحث عن ما تعنيه تعليمة معينة ، يمكنك بسهولة الرجوع إلى الملحق الذى سوف نرفقة والذى يبين قائمة بجميع التعليمات مع وظائفها .
الخطوات الأولية :
تتكون العملية الأساسية لتطوير برنامج الميكروكونترولر PIC من خمس خطوات :
1- اختيار نموذج الميكروكونترولر ، وبناء مخطط السريان flowchart للبرنامج .
2- كتابة البرنامج ( باستخدام برنامج المفكرة Notepad المتوفر مع النوافذ أو غيره من برمجيات التطوير المناسبة ) .
3- ترجمة (تجميع) البرنامج ( تغيير ما قمنا بكتابته إلى شىء يفهمه الميكروكونترولر PIC ) .
4- محاكاة البرنامج لمعرفة أنه يعمل أو لا يعمل .
5- تحميل البرنامج إلى الميكروكونترولر الفعلى .
دعونا ننظر إلى بعضها بمزيد من التفصيل .
1- اختيار الميكروكونترولر PIC الخاص بك :
الخطوة الأولى : اختيار الميكروكونترولر PIC الخاص بك :
الخطوة الأولى : اختيار الميكروكونترولر PIC الخاص بك :
قبل البدء فى كتابة البرنامج ، سوف تكون فكرة جيدة أن تؤدى بعض المهام الابتدائية (الأولية) .
• فى البداية تحتاج إلى ملخص للمشروع ، ما الذى أنت عازم على فعله وما الذى يفعله بالضبط .
• الخطوة التالية هى رسم مخطط الدائرة الكهربية ، والبحث على وجه الخصوص فى مداخل ومخارج الميكروكونترولر . فكل جهاز PIC له عدد محدد من المداخل والمخارج ، يجب أن تستخدم هذا بوصفه واحدا من العوامل الحاسمة فى الجهاز المستخدم ، وبالتالى يجب عليك عمل قائمة بجميع المدخلات والمخرجات المطلوبة . فى البداية سوف نستخدم الميكروكونترولر PIC16F54 ( له حتى 12 مدخل / مخرج ) .
مثال رقم 1 :
ملخص المشروع :
"تصميم جهاز لحساب أو عد عدد مرات الضغط على مفتاح ضاغط وعرض القيمة على شاشة سفن سيجمنت ذات رقم واحد . عندما تصل القيمة إلى تسعة (9) يتم إعادته للصفر".
1- شاشة السفن سيجمنت تحتاج لسبعة مخارج .
2- المفتاح الضاغط يحتاج إلى مدخل واحد .
وبالتالى نحتاج إلى 8 أطراف دخل / خرج . فى هذه الحالة ، يمكن استخدام الميكروكونترولر PIC16F54 ، على سبيل المثال ، كما فى الشكل التالى :
مثال رقم 2 :
ملخص المشروع :
تصميم نظام لاختبار 16 مفتاح ضاغط وعرض رقم المفتاح المضغوط ( على سبيل المثال الرقم 11 ) على شاشتين سفن سجمنت .
يبدو من الوهلة الأولى أننا نحتاج إلى عدد غير قليل من المدخلات والمخرجات :
1- الشاشتين السفن سيجمنت تتطلب سبعة مخارج لكل شاشة ، وبالتالى يكون المجموع 14 .
2- المفاتيح الضاغطة تتطلب مدخل لكل مفتاح ، أى الإجمالى 16 .
وبالتالى فإن المجموع الكلى يكون 30 طرف دخل / خرج ، والذى يزيد عن الحد الأقصى لإمكانيات الميكروكونترولر PIC16F54 ، ومع ذلك فإنه لن يكون من الضرورى استخدامها ، لأن هذه القيمة يمكن خفضها بشكل ملحوظ .
عن طريق عملية تعرف بعملية "المسح" scan فإن المفاتيح الضاغطة ، يمكن قراءتها جميعا باستخدام 8 أطراف فقط (8 صفوف و 8 أعمدة) ، وشاشتى السفن سيجمن يمكن التحكم بهما بواسطة 9 أطراف فقط ( 7 بيانات ، و 2 تحكم) . النتيجة أننا نحتاج إلى إجمالى 17 طرف دخل / خرج ، لذلك يمكن استخدام الميكروكونترولر PIC16F57 ، على سبيل المثال . الشكل التالى يبين كيفية تنفيذ ذلك :
• بجعل الطرف المسمى RC0 (صف) عند المنطق "1" (+5V) والأطراف RC1,RC2,RC3 (باقى الصفوف) عند المنطق صفر "0"(0V) ، يتم تمكين المفاتيح 13 إلى 16 .
• بعد ذلك يمكن اختبار كل مفتاح من هذه المفاتيح على حدة عن طريق اختبار الأطراف من RC4 إلى RC7 (الأعمدة) . وبالتالى عن طريق جعل الأطراف من RC0 إلى RC3 عند المنطق واحد "1" واحد تلو الآخر ، يمكن اختبار كل المفاتيح الضاغطة بشكل فردى .
عملية مسح شاشات السفن سيجمنت تنطوى أساسا على :
• عرض عدد على أحد الشاشات لفترة قصيرة ، ثم بعد ذلك يتم فصل off هذه الشاشة أثناء عرض عدد آخر على الشاشة الأخرى .
• الأطراف من RB0 إلى RB6 تحتوى على شفرة البيانات من أجل كل من الشاشتين (على التوازى) ، وعن طريق جعل الطرف RA0 أو الطرف RA1 عند المنطق واحد "1" ، يمكنك تشغيل on أى من الشاشتين بشكل منفرد . وبالتالى فإن العروض تكون فى الواقع وامضة (متقطعة) "تشغيل و فصل" on / off بسرعة عالية ، فتعطى الانطباع (خداع بصرى) بأنهما يكونان فى حالة تشغيل on مستمر .
تمرين :
حدد الميكروكونترولر المناسب لمشروع يستخدم من أجل عد عدد مرات الضغط على مفتاح ضاغط وعرض النتيجة على أربع شاشات سفن سيجمنت ، أى العد سوف يكون حتى "9999" .
الخطوة التالية : إنشاء مخطط السريان (الانسياب) flowchart :
قبل البدء فى كتابة البرنامج ، سوف تكون فكرة جيدة أن تؤدى بعض المهام الابتدائية (الأولية) .
• فى البداية تحتاج إلى ملخص للمشروع ، ما الذى أنت عازم على فعله وما الذى يفعله بالضبط .
• الخطوة التالية هى رسم مخطط الدائرة الكهربية ، والبحث على وجه الخصوص فى مداخل ومخارج الميكروكونترولر . فكل جهاز PIC له عدد محدد من المداخل والمخارج ، يجب أن تستخدم هذا بوصفه واحدا من العوامل الحاسمة فى الجهاز المستخدم ، وبالتالى يجب عليك عمل قائمة بجميع المدخلات والمخرجات المطلوبة . فى البداية سوف نستخدم الميكروكونترولر PIC16F54 ( له حتى 12 مدخل / مخرج ) .
مثال رقم 1 :
ملخص المشروع :
"تصميم جهاز لحساب أو عد عدد مرات الضغط على مفتاح ضاغط وعرض القيمة على شاشة سفن سيجمنت ذات رقم واحد . عندما تصل القيمة إلى تسعة (9) يتم إعادته للصفر".
1- شاشة السفن سيجمنت تحتاج لسبعة مخارج .
2- المفتاح الضاغط يحتاج إلى مدخل واحد .
وبالتالى نحتاج إلى 8 أطراف دخل / خرج . فى هذه الحالة ، يمكن استخدام الميكروكونترولر PIC16F54 ، على سبيل المثال ، كما فى الشكل التالى :
مثال رقم 2 :
ملخص المشروع :
تصميم نظام لاختبار 16 مفتاح ضاغط وعرض رقم المفتاح المضغوط ( على سبيل المثال الرقم 11 ) على شاشتين سفن سجمنت .
يبدو من الوهلة الأولى أننا نحتاج إلى عدد غير قليل من المدخلات والمخرجات :
1- الشاشتين السفن سيجمنت تتطلب سبعة مخارج لكل شاشة ، وبالتالى يكون المجموع 14 .
2- المفاتيح الضاغطة تتطلب مدخل لكل مفتاح ، أى الإجمالى 16 .
وبالتالى فإن المجموع الكلى يكون 30 طرف دخل / خرج ، والذى يزيد عن الحد الأقصى لإمكانيات الميكروكونترولر PIC16F54 ، ومع ذلك فإنه لن يكون من الضرورى استخدامها ، لأن هذه القيمة يمكن خفضها بشكل ملحوظ .
عن طريق عملية تعرف بعملية "المسح" scan فإن المفاتيح الضاغطة ، يمكن قراءتها جميعا باستخدام 8 أطراف فقط (8 صفوف و 8 أعمدة) ، وشاشتى السفن سيجمن يمكن التحكم بهما بواسطة 9 أطراف فقط ( 7 بيانات ، و 2 تحكم) . النتيجة أننا نحتاج إلى إجمالى 17 طرف دخل / خرج ، لذلك يمكن استخدام الميكروكونترولر PIC16F57 ، على سبيل المثال . الشكل التالى يبين كيفية تنفيذ ذلك :
• بجعل الطرف المسمى RC0 (صف) عند المنطق "1" (+5V) والأطراف RC1,RC2,RC3 (باقى الصفوف) عند المنطق صفر "0"(0V) ، يتم تمكين المفاتيح 13 إلى 16 .
• بعد ذلك يمكن اختبار كل مفتاح من هذه المفاتيح على حدة عن طريق اختبار الأطراف من RC4 إلى RC7 (الأعمدة) . وبالتالى عن طريق جعل الأطراف من RC0 إلى RC3 عند المنطق واحد "1" واحد تلو الآخر ، يمكن اختبار كل المفاتيح الضاغطة بشكل فردى .
عملية مسح شاشات السفن سيجمنت تنطوى أساسا على :
• عرض عدد على أحد الشاشات لفترة قصيرة ، ثم بعد ذلك يتم فصل off هذه الشاشة أثناء عرض عدد آخر على الشاشة الأخرى .
• الأطراف من RB0 إلى RB6 تحتوى على شفرة البيانات من أجل كل من الشاشتين (على التوازى) ، وعن طريق جعل الطرف RA0 أو الطرف RA1 عند المنطق واحد "1" ، يمكنك تشغيل on أى من الشاشتين بشكل منفرد . وبالتالى فإن العروض تكون فى الواقع وامضة (متقطعة) "تشغيل و فصل" on / off بسرعة عالية ، فتعطى الانطباع (خداع بصرى) بأنهما يكونان فى حالة تشغيل on مستمر .
تمرين :
حدد الميكروكونترولر المناسب لمشروع يستخدم من أجل عد عدد مرات الضغط على مفتاح ضاغط وعرض النتيجة على أربع شاشات سفن سيجمنت ، أى العد سوف يكون حتى "9999" .
الخطوة التالية : إنشاء مخطط السريان (الانسياب) flowchart :
الخطوة التالية : إنشاء مخطط السريان (الانسياب) flowchart :
الخطوة التالية : إنشاء مخطط السريان (الانسياب) flowchart :
بعد تحديد نموذج معين للميكروكونترولر PIC ، فإن الخطوة التالية هى إنشاء مخطط الانسياب . هذا المخطط يشكل العامود الفقرى للبرنامج ، ويكون أسهل بكثير كتابة البرنامج من مخطط الانسياب عن كتابته من الصفر (البداية) .
مخطط الانسياب يجب أن يظهر الخطوات الأساسية التى يجب أن ينفذها الميكروكونترولر PIC ، ويعرض بناء لهيكل برنامج واضح . البرنامج ممكن أن يكون به "قفزات" jumps أثناء تنقل الميكروكونترولر خلال البرنامج سطر تلو السطر ، فبدلا من تنفيذ التعليمة التالية ، فإنه يقفز إلى جزء آخر من البرنامج . جميع البرامج تتطلب نوعا من القفز ، كما أن البرامج تصنع حلقة ، لا يمكن أن تنتهى .
مثال رقم 1 :
الشكل التالى يوضح مخطط انسياب لبرنامج ببساطة يحافظ على ليد LED فى حالة تشغيل on :
صندوق "الإعداد" setup يمثل بعض الخطوات التى يجب اتخاذها كجزء من بداية كل برنامج ، وذلك لإعداد الوظائف المختلفة ، سوف نتناولها لاحقا .
يجب استخدام "مستطيلات بأركان مستديرة" من أجل صناديق البداية start والنهاية finish .
يمكن أيضا استخدام القفز الشرطى ( بصناديق على شمل معين ) : "إذا حدث شىء ما ، عندئذ يتم القفز إلى مكان ما " .
مثال رقم 2 :
الشكل التالى يوضح مخطط انسياب لبرنامج من أجل تشغيل ليد عند الضغط على مفتاح ضاغط :
فى بعض الأحيان صندوق مخطط الانسياب قد يمثل تعليمة واحدة فقط ، ولكن أحيانا أخرى قد يمثل قدرا كبيرا من التعليمات ، ومثل هذا المخطط يسمح لك بتصور بناء هيكل البرنامج دون الخوض فى جميع تفاصيل التعليمات .
كتابة البرنامج من مخطط الانسياب ينطوى فقط على كتابة تعليمات أداء المهام التى يمليها كل صندوق ، وبهذه الطريقة يتم تقسيم برنامج كبير إلى أجزاء صغيرة الحجم .
تمرين :
ارسم مخطط انسياب يمثل البرنامج المطلوب لعمل وميض لليد ، تشغيل وإيقاف كل ثانية ( on واحد ثانية و off واحد ثانية) ، وجهاز تنبيه buzzer يصدر صوتا لمدة واحد ثانية كل خمس ثوانى .
الخطوة التالية : كتابة البرنامج :
بعد تحديد نموذج معين للميكروكونترولر PIC ، فإن الخطوة التالية هى إنشاء مخطط الانسياب . هذا المخطط يشكل العامود الفقرى للبرنامج ، ويكون أسهل بكثير كتابة البرنامج من مخطط الانسياب عن كتابته من الصفر (البداية) .
مخطط الانسياب يجب أن يظهر الخطوات الأساسية التى يجب أن ينفذها الميكروكونترولر PIC ، ويعرض بناء لهيكل برنامج واضح . البرنامج ممكن أن يكون به "قفزات" jumps أثناء تنقل الميكروكونترولر خلال البرنامج سطر تلو السطر ، فبدلا من تنفيذ التعليمة التالية ، فإنه يقفز إلى جزء آخر من البرنامج . جميع البرامج تتطلب نوعا من القفز ، كما أن البرامج تصنع حلقة ، لا يمكن أن تنتهى .
مثال رقم 1 :
الشكل التالى يوضح مخطط انسياب لبرنامج ببساطة يحافظ على ليد LED فى حالة تشغيل on :
صندوق "الإعداد" setup يمثل بعض الخطوات التى يجب اتخاذها كجزء من بداية كل برنامج ، وذلك لإعداد الوظائف المختلفة ، سوف نتناولها لاحقا .
يجب استخدام "مستطيلات بأركان مستديرة" من أجل صناديق البداية start والنهاية finish .
يمكن أيضا استخدام القفز الشرطى ( بصناديق على شمل معين ) : "إذا حدث شىء ما ، عندئذ يتم القفز إلى مكان ما " .
مثال رقم 2 :
الشكل التالى يوضح مخطط انسياب لبرنامج من أجل تشغيل ليد عند الضغط على مفتاح ضاغط :
فى بعض الأحيان صندوق مخطط الانسياب قد يمثل تعليمة واحدة فقط ، ولكن أحيانا أخرى قد يمثل قدرا كبيرا من التعليمات ، ومثل هذا المخطط يسمح لك بتصور بناء هيكل البرنامج دون الخوض فى جميع تفاصيل التعليمات .
كتابة البرنامج من مخطط الانسياب ينطوى فقط على كتابة تعليمات أداء المهام التى يمليها كل صندوق ، وبهذه الطريقة يتم تقسيم برنامج كبير إلى أجزاء صغيرة الحجم .
تمرين :
ارسم مخطط انسياب يمثل البرنامج المطلوب لعمل وميض لليد ، تشغيل وإيقاف كل ثانية ( on واحد ثانية و off واحد ثانية) ، وجهاز تنبيه buzzer يصدر صوتا لمدة واحد ثانية كل خمس ثوانى .
الخطوة التالية : كتابة البرنامج :
الخطوة التالية : كتابة البرنامج :
الخطوة التالية : كتابة البرنامج :
بمجرد اكتمال مخطط الانسياب ، يجب عليك تحميل "قالب برنامج الميكروكونترولر PIC" على جهاز الكمبيوتر ( سوف نتناول ذلك قريبا) وكتابة البرنامج الخاص بك به . كل هذا يمكن القيام به ببرنامج نصوص بسيط مثل المفكرة Notepad والذى يأتى مع النوافذ (أو أى حزمة تطوير أخرى مناسبة ) .
بمجرد اكتمال مخطط الانسياب ، يجب عليك تحميل "قالب برنامج الميكروكونترولر PIC" على جهاز الكمبيوتر ( سوف نتناول ذلك قريبا) وكتابة البرنامج الخاص بك به . كل هذا يمكن القيام به ببرنامج نصوص بسيط مثل المفكرة Notepad والذى يأتى مع النوافذ (أو أى حزمة تطوير أخرى مناسبة ) .
الخطوة التالية : التجميع (الترجمة) :
الخطوة التالية : التجميع (الترجمة) :
عندما تنتهى من كتابة البرنامج ، يكون جاهزا للترجمة . وهذا يعنى تحويل ما كتبته ( والذى يتكون فى الغالب من الكلمات) إلى سلسلة من الأعداد التى يفهمها الكمبيوتر وسوف تكون قادرة على الاستخدام للتحميل على الميكروكونترولر PIC . هذا الشكل الجديد للبرنامج يتكون فقط من الأعداد وهو يسمى الكود السداسى عشر hex code أو الملف السداسى عشر hex file ويكون له الامتداد (.hex) .
فى الأساس ، لغة الميكروكونترولر PIC "المعقدة" التى سوف تتعلمها قريبا هى هنا ببساطة لجعل كتابة البرنامج أكثر سهولة . جميع البرامج الأولية تتكون من أعداد ( بعض الأشخاص يكتب البرامج فعليا باستخدام الأعداد فقط ولكن ذلك بالتأكيد ليس من المستحسن كما أن إصلاح المشاكل يكون مثل الكابوس ) . لذلك فإن المجمع (المترجم) أو الأسمبلر ، وهو قطعة من البرمجيات تقوم بترجمة كلماتك إلى أعداد . إذا فشلت فى التعرف على أحد كلماتك فسوف تسجل خطأ (الخطأ الأكيد) . وقد تسجل تحذير للأخطاء المحتملة ( أشياء بالتأكيد غير عادية ولكن ليس بالضرورة غير صحيحة) . الشىء الآخر الذى قد تعطيه لك هو "رسالة" message ( شىء لايكون خطأ ، ولكن عند الترجمة كان غير مألوف .
لا تقلق إذا كنت مرتبكا نتيجة للغة الأسمبلى ، فكل شىء سوف يكون واضحا كلما تقدمت فى البرمجة الفعلية .
فأنت الأن يجب أن تكون على استعداد لبدء كتابة البرنامج الأول الخاص بك .....
عندما تنتهى من كتابة البرنامج ، يكون جاهزا للترجمة . وهذا يعنى تحويل ما كتبته ( والذى يتكون فى الغالب من الكلمات) إلى سلسلة من الأعداد التى يفهمها الكمبيوتر وسوف تكون قادرة على الاستخدام للتحميل على الميكروكونترولر PIC . هذا الشكل الجديد للبرنامج يتكون فقط من الأعداد وهو يسمى الكود السداسى عشر hex code أو الملف السداسى عشر hex file ويكون له الامتداد (.hex) .
فى الأساس ، لغة الميكروكونترولر PIC "المعقدة" التى سوف تتعلمها قريبا هى هنا ببساطة لجعل كتابة البرنامج أكثر سهولة . جميع البرامج الأولية تتكون من أعداد ( بعض الأشخاص يكتب البرامج فعليا باستخدام الأعداد فقط ولكن ذلك بالتأكيد ليس من المستحسن كما أن إصلاح المشاكل يكون مثل الكابوس ) . لذلك فإن المجمع (المترجم) أو الأسمبلر ، وهو قطعة من البرمجيات تقوم بترجمة كلماتك إلى أعداد . إذا فشلت فى التعرف على أحد كلماتك فسوف تسجل خطأ (الخطأ الأكيد) . وقد تسجل تحذير للأخطاء المحتملة ( أشياء بالتأكيد غير عادية ولكن ليس بالضرورة غير صحيحة) . الشىء الآخر الذى قد تعطيه لك هو "رسالة" message ( شىء لايكون خطأ ، ولكن عند الترجمة كان غير مألوف .
لا تقلق إذا كنت مرتبكا نتيجة للغة الأسمبلى ، فكل شىء سوف يكون واضحا كلما تقدمت فى البرمجة الفعلية .
فأنت الأن يجب أن تكون على استعداد لبدء كتابة البرنامج الأول الخاص بك .....
سجلات الملف The file registers :
سجلات الملف The file registers :
"مفتاح" الميكروكونترولر PIC هو "سجلات الملف" file registers الخاصة به . إذا فهمتها تكون قد قطعت نصف الطريق . تخيل أن الميكروكونترولرPIC كأنه "خزانة ملفات" (مثل الشانون) ، به العديد من الأدراج ، كل درج يحتوى على عدد ذو 8 بت ( بايت) . هذه الأدراج هى سجلات الملف . بالإضافة إلى سجلات الملف هذه يوجد "السجل العامل" working register . هذا السجل يكون مختلف لأنه ليس جزءا من خزانة الملفات . هذا السجل ضرورى لأنه لا يمكن إلا فتح درج واحد فقط (أى سجل ملف واحد فقط) فى نفس الوقت . لذلك ، تخيل نقل عدد من أحد الأدراج إلى درج آخر . أولا ، تقوم بفتح الدرج الأول ، وأخذ العدد خارجه ثم إغلاقه ، والآن ... أين يكون العدد ؟ الإجابة تكون أنه فى "السجل العامل" ، كنوع من الجسر bridge (قنطرة عبور) بين اثنين من سجلات الملف ( فكر فيه على أنه العامل الذى يقف أمام خزانة الملفات لخدمتها) . يتم حفظ العدد مؤقتا فى السجل العامل حتى يتم فتح الدرج الثانى ، حيث يتم وضع العدد بهذا الدرج .
وكما ترى من الشكل أعلاه ، يتم تخصيص (تعيين) رقم معين لكل سجل ملف . يجب عليك استدعاء سجلات الملف بأسمائها الفعلية عند كتابة البرنامج ( لأن ذلك يكون أسهل بكثير فى المتابعة) ، ومن ثم فإن المترجم (الأسمبلر) سوف يترجم هذه الأسماء إلى أرقام مرة أخرى عند إنشاء الملف السداسى عشر .
لا تقلق بشأن أسماء ووظائف سجلات الملف هذه ، فسوف يتم مناقشتها فى وقت لاحق .
ومع ذلك ، يمكن تلخيصها فيما يلى :
• السجلات "00" إلى "06" لها وظائف محددة "أغراض خاصة" .
• والسجلات من "07" إلى "1F" هى سجلات "أغراض عامة" ، والتى يكون لك السيطرة الكاملة
عليها . يمكنك استخدام سجلات ملف الأغراض العامة لتخزين الأرقام ويمكن أن تعطى لها الاسم الذى تريده . وبطبيعة الحال سوف تحتاج إلى إخبار المترجم كيف يترجم الأسماء الخاصة بك إلى أرقام .
على سبيل المثال ، إذا كنت تريد استخدام سجل الملف "0C" لتخزين عدد الساعات التى مرت ، فربما كنت تريد أن تسميها باسم مثل "الساعات" Hours . لكن ، عندما يعمل المترجم خلال البرنامج الخاص بك ، فإنه لن يفهم ما قصدته بكلمة ‘Hours’ إلا إذا كنت قد أعلنته أولا . سوف تعرف كيف وأين تعلن سجلات الملف الخاصة بك قريبا ، عندما ننظر فى قالب البرنامج .
قبل ذلك ، نحتاج لمقدمة موجزة للسجلات "05" و "06" :
المنافذ ports هى الوصلات بين الميكروكونترولر PIC والعالم الخارجى ، فهى مدخلاته inputs ومخرجاته outputs . المنفذ الأول ، Port A ، لديه أربعة بتات فقط ، أى أنه يحتفظ بنبل nibble بدلا من بايت كامل ، وهو السجل الوحيد الذى يفعل ذلك . كل بت bit تقابل طرف دخل / خرج خاص ، لذلك فإن البت bit 0 بالمنفذ Port A تقابل الطرف المسمى RA0 ( الطرف 17 فى PIC16F54 والطرف 6 فى PIC16F57 كما فى الشكل أدناه ) .
ولذلك عندما تكتب عدد 8-bit إلى المنفذ Port A ، يتم تجاهل الأربعة بتات ذات القيمة الأعلى ، وكذلك عندما تقرأ عدد 8-bit من المنفذ Port A ، يتم قراءة الأربعة بتات ذات القيمة الأعلى كأصفار "0" .
على سبيل المثال ، دعنا نقول أن RA0, RA1, RA2 , RA3 تعمل كمداخل inputs ، وهناك مفتاح ضاغط بين كل دخل والجهد (+5 V) . إذا تم الضغط على جميع هذه المفاتيح الضاغطة ، فإن العدد العشرى "15" ( العدد الثنائى "1111") سوف يكون فى المنفذ Port A .
وعلى العكس ، إذا كانت الأطراف تعمل كمخارج وتم توصيلها جميعا إلى ليدات كما فى الشكل أدناه ، فإن تحريك (نقل) العدد "15" إلى المنفذ Port A سوف يؤدى إلى تشغيل الليدات الأربعة .
تمرين :
باعتبار الترتيب الموجود بالشكل إعلاه ، فمن أجل إنشاء أضواء متحركة (جراى) chase مكونة من أربعة ليدات ( كما بالشكل أدناه) ، يجب نقل سلسلة من الأعداد إلى المنفذ Port A واحد تلو الآخر . فما هى هذه الأعداد (مطلوب الإجابة بالثنائى والعشرى والسداسى عشر) ؟
المنفذ Port B ( والمنفذ Port C بالميكروكونترولر PIC16F57 ) هو ببساطة منفذ دخل / خرج آخر ، تماما مثل المنفذ Port A فى جميع النواحى ما عدا أن لديه 8 بتات ( أى يحفظ بايت) . المنفذ Port C بالميكروكونترولر PIC16F57 هو السجل "07" ، لذلك لاحظ أن سجلات الأغراض العامة فى هذا الجهاز تبدأ من "08" فصاعدا .
"مفتاح" الميكروكونترولر PIC هو "سجلات الملف" file registers الخاصة به . إذا فهمتها تكون قد قطعت نصف الطريق . تخيل أن الميكروكونترولرPIC كأنه "خزانة ملفات" (مثل الشانون) ، به العديد من الأدراج ، كل درج يحتوى على عدد ذو 8 بت ( بايت) . هذه الأدراج هى سجلات الملف . بالإضافة إلى سجلات الملف هذه يوجد "السجل العامل" working register . هذا السجل يكون مختلف لأنه ليس جزءا من خزانة الملفات . هذا السجل ضرورى لأنه لا يمكن إلا فتح درج واحد فقط (أى سجل ملف واحد فقط) فى نفس الوقت . لذلك ، تخيل نقل عدد من أحد الأدراج إلى درج آخر . أولا ، تقوم بفتح الدرج الأول ، وأخذ العدد خارجه ثم إغلاقه ، والآن ... أين يكون العدد ؟ الإجابة تكون أنه فى "السجل العامل" ، كنوع من الجسر bridge (قنطرة عبور) بين اثنين من سجلات الملف ( فكر فيه على أنه العامل الذى يقف أمام خزانة الملفات لخدمتها) . يتم حفظ العدد مؤقتا فى السجل العامل حتى يتم فتح الدرج الثانى ، حيث يتم وضع العدد بهذا الدرج .
وكما ترى من الشكل أعلاه ، يتم تخصيص (تعيين) رقم معين لكل سجل ملف . يجب عليك استدعاء سجلات الملف بأسمائها الفعلية عند كتابة البرنامج ( لأن ذلك يكون أسهل بكثير فى المتابعة) ، ومن ثم فإن المترجم (الأسمبلر) سوف يترجم هذه الأسماء إلى أرقام مرة أخرى عند إنشاء الملف السداسى عشر .
لا تقلق بشأن أسماء ووظائف سجلات الملف هذه ، فسوف يتم مناقشتها فى وقت لاحق .
ومع ذلك ، يمكن تلخيصها فيما يلى :
• السجلات "00" إلى "06" لها وظائف محددة "أغراض خاصة" .
• والسجلات من "07" إلى "1F" هى سجلات "أغراض عامة" ، والتى يكون لك السيطرة الكاملة
عليها . يمكنك استخدام سجلات ملف الأغراض العامة لتخزين الأرقام ويمكن أن تعطى لها الاسم الذى تريده . وبطبيعة الحال سوف تحتاج إلى إخبار المترجم كيف يترجم الأسماء الخاصة بك إلى أرقام .
على سبيل المثال ، إذا كنت تريد استخدام سجل الملف "0C" لتخزين عدد الساعات التى مرت ، فربما كنت تريد أن تسميها باسم مثل "الساعات" Hours . لكن ، عندما يعمل المترجم خلال البرنامج الخاص بك ، فإنه لن يفهم ما قصدته بكلمة ‘Hours’ إلا إذا كنت قد أعلنته أولا . سوف تعرف كيف وأين تعلن سجلات الملف الخاصة بك قريبا ، عندما ننظر فى قالب البرنامج .
قبل ذلك ، نحتاج لمقدمة موجزة للسجلات "05" و "06" :
المنافذ ports هى الوصلات بين الميكروكونترولر PIC والعالم الخارجى ، فهى مدخلاته inputs ومخرجاته outputs . المنفذ الأول ، Port A ، لديه أربعة بتات فقط ، أى أنه يحتفظ بنبل nibble بدلا من بايت كامل ، وهو السجل الوحيد الذى يفعل ذلك . كل بت bit تقابل طرف دخل / خرج خاص ، لذلك فإن البت bit 0 بالمنفذ Port A تقابل الطرف المسمى RA0 ( الطرف 17 فى PIC16F54 والطرف 6 فى PIC16F57 كما فى الشكل أدناه ) .
ولذلك عندما تكتب عدد 8-bit إلى المنفذ Port A ، يتم تجاهل الأربعة بتات ذات القيمة الأعلى ، وكذلك عندما تقرأ عدد 8-bit من المنفذ Port A ، يتم قراءة الأربعة بتات ذات القيمة الأعلى كأصفار "0" .
على سبيل المثال ، دعنا نقول أن RA0, RA1, RA2 , RA3 تعمل كمداخل inputs ، وهناك مفتاح ضاغط بين كل دخل والجهد (+5 V) . إذا تم الضغط على جميع هذه المفاتيح الضاغطة ، فإن العدد العشرى "15" ( العدد الثنائى "1111") سوف يكون فى المنفذ Port A .
وعلى العكس ، إذا كانت الأطراف تعمل كمخارج وتم توصيلها جميعا إلى ليدات كما فى الشكل أدناه ، فإن تحريك (نقل) العدد "15" إلى المنفذ Port A سوف يؤدى إلى تشغيل الليدات الأربعة .
تمرين :
باعتبار الترتيب الموجود بالشكل إعلاه ، فمن أجل إنشاء أضواء متحركة (جراى) chase مكونة من أربعة ليدات ( كما بالشكل أدناه) ، يجب نقل سلسلة من الأعداد إلى المنفذ Port A واحد تلو الآخر . فما هى هذه الأعداد (مطلوب الإجابة بالثنائى والعشرى والسداسى عشر) ؟
المنفذ Port B ( والمنفذ Port C بالميكروكونترولر PIC16F57 ) هو ببساطة منفذ دخل / خرج آخر ، تماما مثل المنفذ Port A فى جميع النواحى ما عدا أن لديه 8 بتات ( أى يحفظ بايت) . المنفذ Port C بالميكروكونترولر PIC16F57 هو السجل "07" ، لذلك لاحظ أن سجلات الأغراض العامة فى هذا الجهاز تبدأ من "08" فصاعدا .
قالب البرنامج A program template :
قالب البرنامج A program template :
فى هذا الجزء والأجزاء اللاحقة سوف نبدأ فى النظر فى "التعليمات" . قد تجد أنها غير مألوفة ، ولكن لحسن الحظ هناك عدد قليل من القواعد العامة التى يمكن استخدامها لفك شفرة التعليمات المجهولة .
القاعدة الأولى :
أينما تواجه الحرف "f" فى التعليمة ، فهو يشير إلى "سجل ملف" file register .
والحرف "w" دائما تقريبا يعنى "السجل العامل" working register ، والحرف "b" تشير إلى البت bit فى الغالبية العظمى من الحالات . وأخيرا الحرف "l" عادة يشير إلى "الحرفى" literal ، وهو ما يعنى فعليا "العدد" . ولذلك فإن التعليمة التى تحتوى على الحرف "l" تتطلب "عدد" ليتم تحديده بعد ذلك . على سبيل المثال ، التعليمة المستخدمة فى المثال القادم (bsf) "تحدد" set بت فى سجل الملف ( تجعلها بواحد) .
مثال :
هناك عدد قليل من العناصر الأساسية لكتابة برنامج PIC ، واحدة من هذه القواعد هى " بنية السطر" . المثال السابق يوضح "عينة لسطر برمجة" .
• "الاختيارى" الأول هو التسمية أو العنوان label ، وهو مطلوب إذا كنت تريد أن تقفز إلى هذا المكان فى البرنامج .
• بعد ذلك تأتى "التعليمة الفعلية" : وهى "bsf" ، وتعنى "ماذا أنت فاعل" .
• بعد ذلك يأتى "المفعول به" إى المقصود بالفعل .
• وأخيرا يأتى شرح بكلمات خاصة بك بما قمت بفعله للتو . من المهم أن تلاحظ أنه يمكنك كتابة ما تريد فى برنامج PIC طالما أنه يأتى "بعد فاصلة منقوطة" . وإلا فإن المترجم سيحاول ترجمة ما كتبته ( على سبيل المثال ‘turns on LED’ ) ، وبالطبع سوف يفشل ويعطىك خطأ ERROR . أثناء قيام الأسمبلر بالمسح خلال السطر تلو الآخر ، فسوف يقفز إلى أسفر إلى السطر التالى بمجرج أن يأتى إلى الفاصلة المنقوطة . لا أستطيع أن أؤكد كم هو مهم شرح كل سطر تكتبه . أولا ما كتبته قد يكون له معنى إثناء كتابته ، ولكن عند العودة إلية بعد فترة من الوقت ، سوف يكون من الصعب فهمه .
وثانيا ، فإنه يسمح لشخص آخر أن يقرأ خلال البرنامج الخاص بك بسهولة معقولة . يمكن فى بعض الأحيان أن يكون من الصعب جدا كتابة شرح جيد ، لأنه يجب أن يكون واضح جدا وفى نفس الوقت غير طويل جدا .
مثال :
التعليق أعلاه يعنى القليل جدا ( فمن السهل أن ترى أن البت bit 0 يتم تحديدها) . فمن الأفضل القول "لماذا" كتبت ما كتبته ، والآثار المترتبة على ذلك .
فى هذا الجزء والأجزاء اللاحقة سوف نبدأ فى النظر فى "التعليمات" . قد تجد أنها غير مألوفة ، ولكن لحسن الحظ هناك عدد قليل من القواعد العامة التى يمكن استخدامها لفك شفرة التعليمات المجهولة .
القاعدة الأولى :
أينما تواجه الحرف "f" فى التعليمة ، فهو يشير إلى "سجل ملف" file register .
والحرف "w" دائما تقريبا يعنى "السجل العامل" working register ، والحرف "b" تشير إلى البت bit فى الغالبية العظمى من الحالات . وأخيرا الحرف "l" عادة يشير إلى "الحرفى" literal ، وهو ما يعنى فعليا "العدد" . ولذلك فإن التعليمة التى تحتوى على الحرف "l" تتطلب "عدد" ليتم تحديده بعد ذلك . على سبيل المثال ، التعليمة المستخدمة فى المثال القادم (bsf) "تحدد" set بت فى سجل الملف ( تجعلها بواحد) .
مثال :
- الكود:
(Label) bsf porta, 0 ; turns on LED
هناك عدد قليل من العناصر الأساسية لكتابة برنامج PIC ، واحدة من هذه القواعد هى " بنية السطر" . المثال السابق يوضح "عينة لسطر برمجة" .
• "الاختيارى" الأول هو التسمية أو العنوان label ، وهو مطلوب إذا كنت تريد أن تقفز إلى هذا المكان فى البرنامج .
• بعد ذلك تأتى "التعليمة الفعلية" : وهى "bsf" ، وتعنى "ماذا أنت فاعل" .
• بعد ذلك يأتى "المفعول به" إى المقصود بالفعل .
• وأخيرا يأتى شرح بكلمات خاصة بك بما قمت بفعله للتو . من المهم أن تلاحظ أنه يمكنك كتابة ما تريد فى برنامج PIC طالما أنه يأتى "بعد فاصلة منقوطة" . وإلا فإن المترجم سيحاول ترجمة ما كتبته ( على سبيل المثال ‘turns on LED’ ) ، وبالطبع سوف يفشل ويعطىك خطأ ERROR . أثناء قيام الأسمبلر بالمسح خلال السطر تلو الآخر ، فسوف يقفز إلى أسفر إلى السطر التالى بمجرج أن يأتى إلى الفاصلة المنقوطة . لا أستطيع أن أؤكد كم هو مهم شرح كل سطر تكتبه . أولا ما كتبته قد يكون له معنى إثناء كتابته ، ولكن عند العودة إلية بعد فترة من الوقت ، سوف يكون من الصعب فهمه .
وثانيا ، فإنه يسمح لشخص آخر أن يقرأ خلال البرنامج الخاص بك بسهولة معقولة . يمكن فى بعض الأحيان أن يكون من الصعب جدا كتابة شرح جيد ، لأنه يجب أن يكون واضح جدا وفى نفس الوقت غير طويل جدا .
مثال :
- الكود:
bsf porta, 0 ; sets bit 0 of Port A
التعليق أعلاه يعنى القليل جدا ( فمن السهل أن ترى أن البت bit 0 يتم تحديدها) . فمن الأفضل القول "لماذا" كتبت ما كتبته ، والآثار المترتبة على ذلك .
الآن دعونا ننظر فى "قالب البرنامج" Program template
الآن دعونا ننظر فى "قالب البرنامج" ، مع الوضع فى الاعتبار أن هذا ما هو إلا مثال بسيط وقد ترغب فى إضافة أو إزالة عناوين من أجل القالب الشخصى الخاص بك . بشكل عام ، مع البرنامج بأكمله ، تكون فكرة جيدة استخدام الفراغات بين الأشياء ، وتقسيم الأقسام ذات الصلة بسطور . أقترح إنشاء ذلك بعلامة التساوى (=) ، وبيطبيعة الحال تحتاج للفاصلة المنقوطة ( ; ) فى بداية كل سطر .
- الكود:
Program template
;************************************
; written by: *
; date: *
; version: *
; file saved as: *
; for PIC… *
; clock frequency: *
;************************************
; PROGRAM FUNCTION: _______________________________________
;______________________________________________________________
list P = 16F5x
include “c:\pic\p16f5x.inc”
;============
; Declarations:
porta equ 05
portb equ 06
(portc equ 07)
org 1FFh
goto Start
org 0
;===========
; Subroutines:
Init clrf porta ; resets input/output ports
clrf portb
(clrf portc)
movlw b’xxxx’ ; sets up which pins are inputs and which
tris porta ; are outputs
movlw b’xxxxxxxx’
tris portb
(movlw b’xxxxxxxx’
tris portc)
retlw 0
;=============
; Program Start:
Start
call Init
Main
(Write your program here)
END
الجزء الأول
الجزء الأول :
"رأس أو مقدمة أو عنوان البرنامج " المحاط بسطرين لرمز النجمة (*) ( بهدف الأناقة ليس إلا ) :
يحتوى هذا الجزء على بعض العناوين (الرؤوس) التى تسمح لأى قارىء آخر الحصول بسرعة على فكرة البرنامج . أهم ما يوجد به :
• "for PIC…." ، لكى يتم إدراج رقم نموذج الجهاز مثل 16F54 أو 16F57 ، اعتمادا على الميكروكونترولر PIC الذى تستخدمه .
• clock frequency: لبيان تردد المذبذب ( مقاومة / مكثف أو كريستال ) الذى قمت بتوصيله . الميكروكونترولر PIC يحتاج إلى إشارة ثابتة (مستقرة) لتخبره متى يتحرك (ينتقل) إلى التعليمة التالية ( فى الواقع ينفذ تعليمة كل أربع دورات للساعة ) ، لذلك إذا ، على سبيل المثال ، قمت بتوصيل مذبذب
4 MHz ( أى أربعة ملايين إشارة كل ثانية) فإن الميكروكونترولر PIC سوف ينفذ مليون تعليمة فى الثانية الواحدة . فى هذه الحالة يكون تردد الساعة 4 MHz .
"رأس أو مقدمة أو عنوان البرنامج " المحاط بسطرين لرمز النجمة (*) ( بهدف الأناقة ليس إلا ) :
- الكود:
;************************************
; written by: *
; date: *
; version: *
; file saved as: *
; for PIC… *
; clock frequency: *
;************************************
يحتوى هذا الجزء على بعض العناوين (الرؤوس) التى تسمح لأى قارىء آخر الحصول بسرعة على فكرة البرنامج . أهم ما يوجد به :
• "for PIC…." ، لكى يتم إدراج رقم نموذج الجهاز مثل 16F54 أو 16F57 ، اعتمادا على الميكروكونترولر PIC الذى تستخدمه .
• clock frequency: لبيان تردد المذبذب ( مقاومة / مكثف أو كريستال ) الذى قمت بتوصيله . الميكروكونترولر PIC يحتاج إلى إشارة ثابتة (مستقرة) لتخبره متى يتحرك (ينتقل) إلى التعليمة التالية ( فى الواقع ينفذ تعليمة كل أربع دورات للساعة ) ، لذلك إذا ، على سبيل المثال ، قمت بتوصيل مذبذب
4 MHz ( أى أربعة ملايين إشارة كل ثانية) فإن الميكروكونترولر PIC سوف ينفذ مليون تعليمة فى الثانية الواحدة . فى هذه الحالة يكون تردد الساعة 4 MHz .
الجزء الثانى :
الجزء الثانى :
والأهم أكثر بكثير من هذه العناوين هى الإجراءات (الأفعال) الأولية الفعلية التى يجب أداؤها .
• السطر list P = 16F5x : وهو غير مكتمل . يتم استبدال 5x برقم الميكروكونترولر PIC الذة تسنخدمه ( على سبيل المثال 54) ، ولذلك سوف تكون عينة السطر هى list P = 16F54 . هذا السطر "يخبر المترجم" (الأسمبلر) بنوع الميكروكونترولر PIC الذى تستخدمه .
• السطر include “c:\pic\p16f5x.inc” : يمكن المترجم لتحميل ما يعرف باسم "ملف البحث أو التفتيش " look-up file . هذا الملف مثل "قاموس الترجمة " للمترجم . سوف يفهم المترجم معظم البنود التى كتبتها ، ولكنه قد يحتاج للبحث ترجمات لبعضها الآخر . جميع سجلات الملف ذات الوظائف الخاصة (00 to 07) يتم إعلانها (تعريفها) فى ملف البحث . عند تثبيت برمجيات PIC سيتم تلقائيا إنشاء ملفات البحث هذه ووضعها فى دليل ( على سبيل المثال
“C:/Program Files/Microchip/MPASM Suite/” ) . أقترح عليك نسخ ملفات البحث ذات الصلة ( بالامتداد .inc) فى مجلد يسمى "PIC" على محرك الأقراص "C" بحيث يكون من الأسهل أن تتذكر المسار الصحيح ، ولكن هذا الأمر متروك لك . وبغض النظر ، يجب أن تكتب مسار صالح لملف البحث .
- الكود:
;_______________________
list P = 16F5x
include “c:\pic\p16f5x.inc”
;============
والأهم أكثر بكثير من هذه العناوين هى الإجراءات (الأفعال) الأولية الفعلية التى يجب أداؤها .
• السطر list P = 16F5x : وهو غير مكتمل . يتم استبدال 5x برقم الميكروكونترولر PIC الذة تسنخدمه ( على سبيل المثال 54) ، ولذلك سوف تكون عينة السطر هى list P = 16F54 . هذا السطر "يخبر المترجم" (الأسمبلر) بنوع الميكروكونترولر PIC الذى تستخدمه .
• السطر include “c:\pic\p16f5x.inc” : يمكن المترجم لتحميل ما يعرف باسم "ملف البحث أو التفتيش " look-up file . هذا الملف مثل "قاموس الترجمة " للمترجم . سوف يفهم المترجم معظم البنود التى كتبتها ، ولكنه قد يحتاج للبحث ترجمات لبعضها الآخر . جميع سجلات الملف ذات الوظائف الخاصة (00 to 07) يتم إعلانها (تعريفها) فى ملف البحث . عند تثبيت برمجيات PIC سيتم تلقائيا إنشاء ملفات البحث هذه ووضعها فى دليل ( على سبيل المثال
“C:/Program Files/Microchip/MPASM Suite/” ) . أقترح عليك نسخ ملفات البحث ذات الصلة ( بالامتداد .inc) فى مجلد يسمى "PIC" على محرك الأقراص "C" بحيث يكون من الأسهل أن تتذكر المسار الصحيح ، ولكن هذا الأمر متروك لك . وبغض النظر ، يجب أن تكتب مسار صالح لملف البحث .
الجزء الثالث :
الجزء الثالث :
وهذا يعنى أنه يمكنك كتابة porta أو PORTA وسوف يفهم المترجم كل منهما باعتباره سجل الملف "5" ، من المفضل أيضا إعلان أرقام سجلات الملف بترتيب تصاعدى .
أسفل الإعلانات يوجد ثلاثة سطور :
مثال رقم 1 :
بعد ذلك يأتى أمر المترجم "org" ، متبوعا برقم العنوان الذى ترغب فى إعطائه للسطر التالى .
مثال رقم 2 :
الميكروكونترولر PIC16F54 له "512" عنوان ( 200h بالسداسى عشر) فى ذاكرة البرنامج الخاصة به ، وبعبارة أخرى أنه يمكن حفظ البرامج التى تصل إلى "512" تعليمة فى الطول .
أول تعليمة يتم تنفيذها عندما يتم تشغيل الميكروكونترولر PIC ( أو عند إعادة التعيين reset) هى المسماه "متجه إعادة التعيين" reset vector ، وتشير للعنوان 1FFh بالنسبة للميكروكونترولر PIC16F54 . ونحن نريد أن يبدأ الميمروكونترولر PIC من عند مكان فى البرنامج والذى قمنا سميناه start ، لذلك حتى نضمن أن التعليمة الموجودة عند العنوان 1FFh تكون goto start . فى القالب ، يتم استخدام "org" لوضع التعليمة goto start عند العنوان 1FFh ، مما يجعلها أول ما يتم تنفيذه . ومع ذلك ، فإن التعليمات اللاحقة يجب أن تبدأ العد من الصفر ، وبالتالى فإن الأمر التالى يكون "org 0 " . كتابة عنوان ذاكرة البرنامج بواسطة التعليمة يوضح كيف تعمل :
التعليمة الأولى التى يتم تنفيذها (goto start) تجعل الشريحة تذهب (تقفز) إلى الجزء من البرنامج المسمى "start" ، وبالتالى سوف يبدأ الميكروكونترولر PIC فى تشغيل البرنامج من المكان الذى قمت بكتابة start فيه . الأنواع المختلفة من الميكروكونترولر PIC لها متجهات إعادة تعيين مختلفة ، لذلك يجب تغيير قالب البرنامج وفقا لذلك .
- الكود:
;============
; Declarations:
porta equ 05
portb equ 06
(portc equ 07)
org 1FFh
goto Start
org 0
;===========
- الكود:
;============
; Declarations:
Hours equ 0Ch
- الكود:
;============
; Declarations:
porta equ 05h
Hours equ 0Ch
وهذا يعنى أنه يمكنك كتابة porta أو PORTA وسوف يفهم المترجم كل منهما باعتباره سجل الملف "5" ، من المفضل أيضا إعلان أرقام سجلات الملف بترتيب تصاعدى .
أسفل الإعلانات يوجد ثلاثة سطور :
- الكود:
org 1FFh
goto Start
org 0
مثال رقم 1 :
- الكود:
start
0043 bsf porta, 0 ; turns on LED
; (This is to prove comments aren’t counted)
0044 goto start ; loops back to start
بعد ذلك يأتى أمر المترجم "org" ، متبوعا برقم العنوان الذى ترغب فى إعطائه للسطر التالى .
مثال رقم 2 :
- الكود:
start
0043 bsf porta, 0 ; turns on LED
org 3 ; makes the address number of the next
; instruction 3
0003 bsf porta, 1 ; turns on buzzer
0004 goto start ; loops back to start
الميكروكونترولر PIC16F54 له "512" عنوان ( 200h بالسداسى عشر) فى ذاكرة البرنامج الخاصة به ، وبعبارة أخرى أنه يمكن حفظ البرامج التى تصل إلى "512" تعليمة فى الطول .
أول تعليمة يتم تنفيذها عندما يتم تشغيل الميكروكونترولر PIC ( أو عند إعادة التعيين reset) هى المسماه "متجه إعادة التعيين" reset vector ، وتشير للعنوان 1FFh بالنسبة للميكروكونترولر PIC16F54 . ونحن نريد أن يبدأ الميمروكونترولر PIC من عند مكان فى البرنامج والذى قمنا سميناه start ، لذلك حتى نضمن أن التعليمة الموجودة عند العنوان 1FFh تكون goto start . فى القالب ، يتم استخدام "org" لوضع التعليمة goto start عند العنوان 1FFh ، مما يجعلها أول ما يتم تنفيذه . ومع ذلك ، فإن التعليمات اللاحقة يجب أن تبدأ العد من الصفر ، وبالتالى فإن الأمر التالى يكون "org 0 " . كتابة عنوان ذاكرة البرنامج بواسطة التعليمة يوضح كيف تعمل :
- الكود:
org 1FF
01FF goto start
org 0
;===========
; Subroutines:
0000 Init clrf porta ;
0001 clrf portb ;
etc.
التعليمة الأولى التى يتم تنفيذها (goto start) تجعل الشريحة تذهب (تقفز) إلى الجزء من البرنامج المسمى "start" ، وبالتالى سوف يبدأ الميكروكونترولر PIC فى تشغيل البرنامج من المكان الذى قمت بكتابة start فيه . الأنواع المختلفة من الميكروكونترولر PIC لها متجهات إعادة تعيين مختلفة ، لذلك يجب تغيير قالب البرنامج وفقا لذلك .
الجزء الرابع :
الجزء الرابع :
هذا الجزء من القالب يحتوى على "الروتينات الفرعية" subroutines . وهى معقدة جدا وسيتم مناقشتها فى مرحلة لاحقة ، كل ما تحتاج أن تعرفه فى هذه اللحظة هو أن القسم المسمى (المعنون) "التهيئة" Init هو روتين فرعى ، ويتم الوصول إليه باستخدام تعليمة "الاستدعاء" call . يجب استخدام الروتين الفرعى Init لتهيئة كل ما يخص الميكروكونترولر PIC . مع شرائح الميكروكونترولر PIC16F5x ، فإن هذا ينطوى أساسا على اختيار أى أطراف الميكروكونترولر PIC يقوم بالعمل كمداخل inputs ، وأيها يقوم بالعمل كمخارج outputs . فى حالات أخرى مع أنواع PIC الأكثر تعقيدا ، سوف يتطلب تهيئة أكثر . لاحظ أن هذه التهيئة تم وضعها فى الروتين الفرعى Init فقط لجعله خارج طريق الجسم الرئيسى للبرنامج وبالتالى جعله أكثر إتقانا وأكثر سهولة فى القراءة .
• فى البداية يتم استخدام التعليمة :
• التعليمة الثانية :
• بعد ذلك تأتى التعليمة : tris لتأخذ العدد الموجود بالسجل العامل وتستخدمه لتحديد أى بتات المنفذ تعمل كمداخل وأيها يعمل كمخارج . الواحد "1" الثنائى سوف يناظر المدخل والصفر "0" الثنائى يناظر الخرج . الأطراف التى لا تستخدم من الأفضل أن تجعلها مخارج .
مثال :
باستخدام PIC16F54 ، وتوصيل الأطراف RA0, RA1,RA3 إلى مفاتيح ضاغطة ، وتوصيل شاشة سفن سيجمنت إلى الأطراف RB0 إلى RB6 ، وتوصيل الأطراف RA2 و RB7 إلى أجهزة تنبيه buzzers . ما الذى يجب أن تكتب لتحديد أطراف الدخل / الخرج بشكل صحيح ؟
أولا : ليس هناك مواصفات للمنفذ Port C ( وهذا طبيعى لأن PIC16F54 لا يملك هذا المنفذ ) .
ثانيا : تذكير بأن ترقيم البت يذهب من اليمين إلى اليسار .
تمرين :
باستخدام PIC16F57 ، وتوصيل الأطراف RA1 و RA2 لتشغيل ليدات ، وتوصيل الأطراف RA0 و RA3 بحساسات لدرجة الحرارة ؟، والأطراف من RB0 إلى RB6 تتحكم فى شريحة منفصلة ، والطرف RB7 متصل بمفتاح ضاغط . والأطراف من RC1 إلى RC5 تحمل إشارات إلى الميكروكونترولر PIC من الكمبيوتر ، وباقى الأطراف الأخرى غير متصلة . ما الذى يجب أن تكتب فى قسم التهيئة Init من البرنامج ؟
يتم وضع التعليمة retlw فى نهاية الروتين الفرعى ، عادة مع صفر "0" بعدها .
- الكود:
;===========
; Subroutines:
Init clrf porta ; resets input/output ports
clrf portb
(clrf portc)
movlw b’xxxx’ ; sets up which pins are inputs and which
tris porta ; are outputs
movlw b’xxxxxxxx’
tris portb
(movlw b’xxxxxxxx’
tris portc)
retlw 0
;=============
هذا الجزء من القالب يحتوى على "الروتينات الفرعية" subroutines . وهى معقدة جدا وسيتم مناقشتها فى مرحلة لاحقة ، كل ما تحتاج أن تعرفه فى هذه اللحظة هو أن القسم المسمى (المعنون) "التهيئة" Init هو روتين فرعى ، ويتم الوصول إليه باستخدام تعليمة "الاستدعاء" call . يجب استخدام الروتين الفرعى Init لتهيئة كل ما يخص الميكروكونترولر PIC . مع شرائح الميكروكونترولر PIC16F5x ، فإن هذا ينطوى أساسا على اختيار أى أطراف الميكروكونترولر PIC يقوم بالعمل كمداخل inputs ، وأيها يقوم بالعمل كمخارج outputs . فى حالات أخرى مع أنواع PIC الأكثر تعقيدا ، سوف يتطلب تهيئة أكثر . لاحظ أن هذه التهيئة تم وضعها فى الروتين الفرعى Init فقط لجعله خارج طريق الجسم الرئيسى للبرنامج وبالتالى جعله أكثر إتقانا وأكثر سهولة فى القراءة .
• فى البداية يتم استخدام التعليمة :
- الكود:
clrf FileReg ;
• التعليمة الثانية :
- الكود:
movlw number ;
• بعد ذلك تأتى التعليمة : tris لتأخذ العدد الموجود بالسجل العامل وتستخدمه لتحديد أى بتات المنفذ تعمل كمداخل وأيها يعمل كمخارج . الواحد "1" الثنائى سوف يناظر المدخل والصفر "0" الثنائى يناظر الخرج . الأطراف التى لا تستخدم من الأفضل أن تجعلها مخارج .
مثال :
باستخدام PIC16F54 ، وتوصيل الأطراف RA0, RA1,RA3 إلى مفاتيح ضاغطة ، وتوصيل شاشة سفن سيجمنت إلى الأطراف RB0 إلى RB6 ، وتوصيل الأطراف RA2 و RB7 إلى أجهزة تنبيه buzzers . ما الذى يجب أن تكتب لتحديد أطراف الدخل / الخرج بشكل صحيح ؟
- الكود:
movlw b’1011’
tris porta
movlw b’00000000’
tris portb
retlw 0
أولا : ليس هناك مواصفات للمنفذ Port C ( وهذا طبيعى لأن PIC16F54 لا يملك هذا المنفذ ) .
ثانيا : تذكير بأن ترقيم البت يذهب من اليمين إلى اليسار .
تمرين :
باستخدام PIC16F57 ، وتوصيل الأطراف RA1 و RA2 لتشغيل ليدات ، وتوصيل الأطراف RA0 و RA3 بحساسات لدرجة الحرارة ؟، والأطراف من RB0 إلى RB6 تتحكم فى شريحة منفصلة ، والطرف RB7 متصل بمفتاح ضاغط . والأطراف من RC1 إلى RC5 تحمل إشارات إلى الميكروكونترولر PIC من الكمبيوتر ، وباقى الأطراف الأخرى غير متصلة . ما الذى يجب أن تكتب فى قسم التهيئة Init من البرنامج ؟
يتم وضع التعليمة retlw فى نهاية الروتين الفرعى ، عادة مع صفر "0" بعدها .
الجزء الأخير :
الجزء الأخير :
أخيرا الجزء الأخير من القالب يحمل "البداية" start ، حيث يبدأ البرنامج .
• لاحظ أن الشىء الأول الذى يتم عمله هو إعدادات تهيئة مداخل ومخارج المنافذ .
• بعد السطر call Init يوجد العنوان Main والذى بعده تقوم بكتابة البرنامج الخاص بك .
• فى نهاية البرنامج يجب أن تكتب "النهاية" END .
- الكود:
;=============
; Program Start:
Start
call Init
Main
(Write your program here)
END
أخيرا الجزء الأخير من القالب يحمل "البداية" start ، حيث يبدأ البرنامج .
• لاحظ أن الشىء الأول الذى يتم عمله هو إعدادات تهيئة مداخل ومخارج المنافذ .
• بعد السطر call Init يوجد العنوان Main والذى بعده تقوم بكتابة البرنامج الخاص بك .
• فى نهاية البرنامج يجب أن تكتب "النهاية" END .
مواضيع مماثلة
» كتاب - مدخلك الشخصى إلى الميكروكونترولر PIC
» ما هو الميكروكونترولر Microcontroller ؟
» برمجة الميكروكونترولر CHAPTER 2 - Programming Microcontroller
» دوائر ربط (توصيل) الميكروكونترولر MICROCONTROLLER INTERFACING CIRCUITS
» مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» ما هو الميكروكونترولر Microcontroller ؟
» برمجة الميكروكونترولر CHAPTER 2 - Programming Microcontroller
» دوائر ربط (توصيل) الميكروكونترولر MICROCONTROLLER INTERFACING CIRCUITS
» مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الفئة الأولى :: منتدى البرمجة بلغة الأسمبلى
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى