الانتقال إلى المحتوى الرئيسي

كيفية تمرير منفذ أفر كمعلمة إلى وظيفة: دليل عملي للمبتدئين

في برمجة ميكروكنترولر أفر ، فإنه غالبا ما يكون من الضروري العمل مع منافذ الإدخال/الإخراج. تتمثل إحدى طرق إدارة المنافذ في استخدام الوظائف. تعد القدرة على تمرير المنفذ كمعلمة وظيفية مهارة مهمة ستساعد في تطوير برامج أكثر مرونة وقابلة لإعادة الاستخدام.

للعمل مع المنافذ على ميكروكنترولر أفر ، يتم استخدام سجل دركس ، والذي يسمح لك لتعيين وضع الإدخال / الإخراج لكل دبوس من الميناء. عند استخدام الوظائف ، يتيح لك تمرير المنفذ كمعلمة إجراء نفس النوع من العمليات باستخدام منافذ مختلفة ، مما يجعل الكود أكثر تنوعا وقابلية للتطوير.

مثال على استخدام الوظيفة لتعيين جميع دبابيس المنفذ على وضع الإخراج:

باطل سيتبورتديركشن (متقلبة يونت 8_ت *ميناء) {

* المنفذ = 0 فرنك سويسري;

}

في هذا المثال ، تأخذ وظيفة سيتبورتديركشن مؤشر إلى سجل المنفذ كمعلمة وتعيين كافة دبابيس المنفذ إلى وضع الإخراج عن طريق تعيين قيمة التسجيل إلى 0 إكس إف. لاحظ استخدام الكلمة الرئيسية المتقلبة قبل نوع بيانات التسجيل ، مما يضمن تحديث قيمة السجل حتى عند تحسينها بواسطة المترجم.

وهكذا ، تمرير المنفذ كمعلمة وظيفة يسمح لك لجعل رمز أكثر مرونة وقابلة لإعادة الاستخدام ، وهو أمر مهم خصوصا عند تطوير المشاريع على ميكروكنترولر أفر. مهارة تمرير منفذ كمعلمة هي مهارة مفيدة لكل مطور يعمل مع هذه المتحكمات الدقيقة.

  1. كيفية استخدام منفذ أفر كمعلمة
  2. الخطوة 1: فهم الوظائف والمعلمات
  3. الخطوة 2: استكشاف منفذ أفر
  4. الخطوة 3: تحديد وظيفة مع المعلمة منفذ أفر
  5. الخطوة 4: مثال على استخدام وظيفة مع منفذ أفر
  6. سؤال وجواب

كيفية استخدام منفذ أفر كمعلمة

عند العمل مع ميكروكنترولر أفر ، المنفذ هو عنصر مهم للسيطرة على إدخال البيانات والإخراج. بشكل افتراضي ، يحتوي كل متحكم أفر على العديد من المنافذ التي يمكن استخدامها للتحكم في الأجهزة المتصلة بها. يتكون منفذ واحد من دبابيس 8 بت ، يمكن تكوين كل منها كمدخل أو إخراج.

لكن في بعض الأحيان يصبح من الضروري تمرير المنفذ إلى الوظيفة كمعلمة. هذا يمكن أن يكون مفيدا عندما تريد كتابة التعليمات البرمجية العالمية التي يمكن أن تعمل مع منافذ مختلفة أو مع ميكروكنترولر أفر مختلفة. في هذه الحالة ، يمكنك استخدام مؤشر إلى المنفذ بدلا من قيمة ثابتة.

هنا مثال على وظيفة بسيطة تأخذ منفذ أفر كمعلمة:

منفذ قراءة باطل (منفذ متطاير 8 طن*) {

قيمة النقطة 8 = * المنفذ ؛ / / قراءة قيمة المنفذ

// القيام بشيء بالقيمة المستلمة

}

هنا قمنا بتعريف وظيفة 'ريدبورت' ، الذي يقبل مؤشر إلى نوع البيانات` إينت 8_ت متقلبة. يعني نوع البيانات المتطاير رقم 8-تي أنه مؤشر لقيمة 8 بت يمكن تغييرها بواسطة عوامل خارجية ويجب معالجتها بدرجة عالية من الدقة.

داخل الدالة ، يمكننا استخدام مؤشر 'المنفذ' للوصول إلى قيمة المنفذ. على سبيل المثال ، يمكننا قراءة قيمة المنفذ الحالي باستخدام `*ميناء` مؤشر ديريفيرانس العملية. ثم يمكننا إجراء أي عمليات بالقيمة الناتجة.

هنا مثال على استخدام وظيفة ' ريدبورت` :

كثافة العمليات الرئيسية () {

// تعريف المنفذ

متطاير يونت 8_ت * ميبورت = & بورب

// استدعاء دالة مع تمرير المنفذ كوسيطة

إلى ريدبورت (ميبورت);

العودة 0;

}

في هذا المثال ، حددنا المتغير 'ميبورت' ، وهو مؤشر إلى `بورتب' – واحدة من منافذ ميكروكنترولر أفر. ثم نقوم بتمرير هذا المتغير إلى وظيفة 'ريدبورت'. داخل وظيفة ' ريدبورت` ، يمكننا العمل مع هذا المنفذ من خلال قراءة القيمة وتنفيذ أي عمليات معها.

وهكذا ، وذلك باستخدام منفذ أفر كمعلمة يسمح لك لخلق رمز أكثر مرونة وتنوعا للعمل مع منافذ أفر مختلفة و ميكروكنترولر.

الخطوة 1: فهم الوظائف والمعلمات

الوظائف هي لبنة البناء الأساسية للبرمجة. إنها كتل من التعليمات البرمجية التي تؤدي مهام معينة. تستخدم الوظائف لإعادة استخدام الكود وتبسيط البرامج وإنشاء هيكل أكثر تنظيما لرمز البرنامج.

معلمات الوظيفة هي القيم التي يتم تمريرها إلى الوظيفة عند استدعائها. إنها تسمح للوظيفة بالعمل مع بيانات مختلفة دون معرفة هذه البيانات مسبقا. يتم تعريف المعلمات داخل الأقواس بعد اسم الوظيفة ومفصولة بفواصل.

على سبيل المثال ، تخيل دالة تضيف رقمين:

وظيفة إضافة أرقام (أ ، ب) {

العودة أ + ب;

}

في هذا المثال ، تحتوي دالة الأرقام الإضافية على معلمتين أ و ب. عندما يتم استدعاء الوظيفة ، سيتم استخدام القيم التي يتم تمريرها كوسيطات بدلا من المعلمات المقابلة. على سبيل المثال ، عند استدعاء الدالة الإضافية(2 ، 3) ، ستكون النتيجة 5 ، حيث يتم تمرير القيمتين 2 و 3 إلى المعلمتين أ و ب ، على التوالي.

يتيح لنا استخدام الوظائف والمعلمات إنشاء رمز مرن وقابل للتطوير. يمكننا استدعاء نفس الوظيفة مرارا وتكرارا مع بيانات مختلفة ، مما يبسط تطوير وصيانة رمز البرنامج.

الخطوة 2: استكشاف منفذ أفر

للعمل مع منفذ أفر ، تحتاج إلى فهم هيكلها وقدراتها. يتكون كل منفذ أفر من العديد من السجلات التي تسمح لك لتكوين وإدارة المخرجات.

السجلات الرئيسية لميناء أفر:

  • نزع السلاح والتسريح وإعادة الإدماج-سجل التوجيه
  • ميناء-سجل القيم دبوس
  • رقم التعريف الشخصي سجل لقراءة قيم رقم التعريف الشخصي

تسجيل الاتجاه (در) يسمح لك لتكوين كل دبوس منفذ للإدخال أو الإخراج.

يحدد سجل قيمة رقم التعريف الشخصي (المنفذ) القيمة المنطقية على كل رقم تعريف شخصي للمنفذ. إذا تم ضبط الإخراج على الإخراج ، فإن تغيير قيمة سجل المنفذ سيؤدي إلى تعيين أو إعادة تعيين الإخراج المقابل.

يسمح لك سجل قراءة قيمة الدبوس (رقم التعريف الشخصي) بقراءة حالة دبابيس المنفذ. إذا تم ضبط الإخراج على الإدخال ، فعندئذ باستخدام هذا السجل ، يمكنك الحصول على الحالة الحالية لإشارة الإدخال.

يتم استخدام اثنين من أهم الوظائف لإدارة المخرجات:

  • بينمود هو وظيفة لتحديد اتجاه الإخراج (الإدخال أو الإخراج)
  • ديجيتالوريت هي وظيفة لتحديد أو إعادة تعيين القيمة المنطقية للإخراج

الآن بعد أن فهمت أساسيات العمل مع منفذ أفر ، كنت على استعداد للانتقال إلى إعلان وتمرير منفذ أفر كمعلمة إلى وظيفة.

الخطوة 3: تحديد وظيفة مع المعلمة منفذ أفر

بعد أن كنت قد أعلنت وتهيئة منفذ أفر ، يمكنك تحديد وظيفة من شأنها أن تستخدم هذا المنفذ كمعلمة.

لتحديد وظيفة مع معلمة منفذ أفر ، يجب تحديد نوع بيانات المعلمة في رأس الدالة. في هذه الحالة ، سيتم تحديد نوع البيانات كما شار غير موقعة ، لأن منفذ أفر يمكن أن تأخذ القيم من 0 إلى 255.

هنا مثال على تحديد وظيفة مع المعلمة منفذ أفر:

باطل مغمض(منفذ شار غير موقع) {

// التعليمات البرمجية الخاصة بك لوميض الصمام أو السيطرة على منفذ أفر

}

في هذا المثال ، تأخذ الدالة ذات الوميض معلمة منفذ نوع حرف غير موقعة. داخل وظيفة ، يمكنك استخدام منفذ المرسلة إلى فلاش ليد أو للسيطرة على المكونات الأخرى المتصلة بمنفذ أفر.

الخطوة 4: مثال على استخدام وظيفة مع منفذ أفر

الآن أن لدينا وظيفة تقبل منفذ أفر كمعلمة ، دعونا ننظر إلى مثال على استخدامه. لنفترض أن لدينا لوحة اردوينو ونريد تعيين قيمة معينة على منفذ سي.

أولا ، نعلن عن متغير من النوع المتطاير يونت 8_ تي ، والذي سيحتوي على قيمة المنفذ ج. ثم نسمي وظيفة سيتبورتفالو () ، ويمر عليه عنوان متغير منفذ ج كمعلمة:

# تشمل

// وظيفة إعداد قيمة المنفذ

باطل سيتبورتفالو (متقلب يونت 8_ت * بورت ، يونت 8_ت القيمة)

{

* المنفذ = القيمة;

}

كثافة العمليات الرئيسية()

{

// إعلان متغير المنفذ ج

متطاير يونت 8_ت * بورتك = & بورتك

// تحديد قيمة المنفذ ج

سيتبورتفالو (بورتك ، 0 إكس إف);

// ...

// باقي كود البرنامج

// ...

العودة 0;

}

في هذا المثال ، نعلن أن متغير المنفذ كمؤشر إلى نقطة متطايرة 8_ تي. ثم نمرر هذا المؤشر إلى وظيفة سيتبورتفالو () لتعيين قيمة المنفذ ج إلى 0 فرنك سويسري.

لاحظ أننا نستخدم عامل إلغاء الإحالة * لتغيير القيمة المشار إليها بواسطة مؤشر المنفذ. هذا يسمح لنا بتعيين قيمة المنفذ ج عبر مؤشر تم تمريره إلى الوظيفة.

وهكذا ، يوضح المثال كيف يمكنك استخدام وظيفة مع منفذ أفر في التعليمات البرمجية الخاصة بك عن طريق تمرير المؤشر المقابل إلى المنفذ كمعلمة وظيفة.

سؤال وجواب