برنامج تعليمي لبرمجة لغة سي مضمن مع لغة كايل

جرب أداة القضاء على المشاكل





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

برمجة النظام المضمن

برمجة النظام المضمن



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


البرنامج التعليمي لبرمجة لغة سي المضمن (8051)

لكتابة البرنامج ، يجب أن يكون لدى المصممين المضمنين معرفة كافية بأجهزة المعالجات أو وحدات التحكم المعينة لأن برمجة C المدمجة هي تقنية برمجة كاملة متعلقة بالأجهزة.



دروس البرمجة

دروس البرمجة

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

نظام مضمن

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

نظام مضمن

نظام مضمن

مقدمة عن متحكم 8051

المتحكم 8051 هو متحكم أساسي ، تم تقديمه لأول مرة بواسطة 'شركة Intel' منذ عام 1970. تم تطويره بواسطة هندسة المعالج 8086. 8051 عبارة عن عائلة من وحدات التحكم الدقيقة ، تم تطويرها بواسطة جهات تصنيع مختلفة مثل Philips و Atmel و dalls وما إلى ذلك. متحكمات 8051 تم استخدامه في الكثير من المنتجات المضمنة من ألعاب الأطفال الصغار إلى أنظمة السيارات الكبيرة.


8051 متحكم

8051 متحكم

المتحكم 8051 هو 8 بت هندسة 'CISC' . وتتكون من ذاكرة ، واتصال تسلسلي ، ومقاطعات ، ومنافذ إدخال / إخراج ، ومؤقت / عدادات ، مدمجة في شريحة واحدة متكاملة ، مبرمجة للتحكم في الأجهزة الطرفية التي يتم توصيلها بها. يتم تخزين البرنامج في ذاكرة الوصول العشوائي الخاصة بالمتحكم الدقيق ولكن قبل كتابة البرنامج ، يجب أن نكون على دراية بذاكرة الوصول العشوائي منظمة من متحكم.

برمجة النظام المضمن: إعلان الأساسيات

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

#يشمل

تطوير برمجة سي المدمجة

تطوير برمجة سي المدمجة

يسمى امتداد لغة C لغة برمجة C المضمنة. بالمقارنة مع ما سبق ، فإن البرمجة المضمنة بلغة C لديها بعض الميزات الإضافية مثل أنواع البيانات والكلمات الرئيسية وملف الرأس أو ملف المكتبة يتم تمثيله على أنه

#يشمل

كلمات رئيسية إضافية مضمنة

  • sbit
  • قليلا
  • SFR
  • متقلب
  • تحديد وحدات الماكرو

يتم استخدام 'sbit' للإعلان عن رقم التعريف الشخصي الفردي لوحدة التحكم الدقيقة. على سبيل المثال ، LED متصل بـ P0.1 pin ، لا ينصح بإرسال القيمة إلى طرف المنفذ مباشرة ، أولاً ، علينا أن نعلن الدبوس بمتغير آخر ثم بعد أن نتمكن من استخدامه في أي مكان في البرنامج.

بناء الجملة: sbit a = P0 ^ 1 // يعلن الدبوس المعني بمتغير //
أ = 0x01 // أرسل القيمة إلى منفذ المنفذ //

يتم استخدام 'بت' للتحقق من حالة المتغير.

بناء الجملة: bit c // يعلن عن متغير البت //
c = a // قيمة مخصصة للمتغير c //
إذا (c == 1) // تحقق من الشرط صحيحًا أو خطأ //

{
… ..
……
}

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

بناء الجملة: منفذ SFR = 0x00 // 0x00 هو عنوان port0 يتم الإعلان عنه بواسطة متغير المنفذ //
المنفذ = 0x01 // ثم أرسل القيمة إلى المنفذ 0 //
تأخير()
المنفذ = 0x00
تأخير()

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

بناء الجملة: متغير int k

الماكرو هو اسم يتم استخدامه للإعلان عن كتلة العبارات كتوجيه قبل المعالج. عندما يتم استخدام الاسم ، يتم استبداله بمحتويات الماكرو. تمثل وحدات الماكرو #define. يتم تحديد دبابيس المنفذ بالكامل بواسطة وحدات الماكرو.

بناء الجملة: #define dat Po // يتم التصريح عن المنفذ بالكامل بواسطة متغير //
dat = 0x01 // إرسال البيانات إلى المنفذ 0 //

برامج C الأساسية المضمنة

سوف تختلف برمجة متحكم دقيق لكل منهما نوع نظام التشغيل . على الرغم من وجود العديد من أنظمة التشغيل مثل Linux و Windows و RTOS وما إلى ذلك. ومع ذلك ، تتمتع RTOS بالعديد من المزايا لتطوير الأنظمة المدمجة. تتناول هذه المقالة برمجة C الأساسية المضمنة لتطوير برمجة C المضمنة باستخدام متحكم 8051.

خطوات برمجة سي المدمجة

خطوات برمجة سي المدمجة

  • يومض LED باستخدام متحكم 8051
  • يتم عرض الأرقام على شاشة عرض من 7 أجزاء باستخدام متحكم 8051
  • برنامج وحسابات عداد / عداد باستخدام متحكم 8051
  • حسابات الاتصال التسلسلي والبرنامج باستخدام متحكم 8051
  • برامج المقاطعة باستخدام متحكم 8051
  • برمجة لوحة المفاتيح باستخدام متحكم 8051
  • برمجة LCD مع متحكم 8051

يومض LED باستخدام متحكم 8051

LED هو جهاز أشباه الموصلات يستخدم في العديد من التطبيقات ، في الغالب لغرض الإشارة. يتم العثور على مجموعة كبيرة من التطبيقات كمؤشرات أثناء الاختبار للتحقق من صحة النتائج في مراحل مختلفة. إنها رخيصة جدًا ومتوفرة بسهولة في مجموعة متنوعة من الأشكال والألوان والأحجام. تستخدم المصابيح للتصميم لوحات عرض الرسائل وأضواء إشارات التحكم في حركة المرور وما إلى ذلك. هنا يتم توصيل مصابيح LED مع PORT0 من المتحكمات الدقيقة 8051.

يومض LED باستخدام متحكم 8051

يومض LED باستخدام متحكم 8051

1. 01010101
10101010

# تضمين // ملف الرأس //
void main () // نقطة إحصاء تنفيذ البرنامج //
{
غير موقعة int i // نوع البيانات //
بينما (1) // للحلقة المستمرة //
{
P0 = 0x55 // أرسل القيمة السداسية إلى المنفذ 0 //
لـ (أنا = 0i<30000i++) //normal delay//
P0 = 0x3AA // أرسل القيمة السداسية إلى المنفذ 0 //
لـ (أنا = 0i<30000i++) //normal delay//
}
}

2. 00000001

00000010

00000100

.

.

10،000،000

#يشمل

باطل رئيسي ()

{

غير موقعة أنا

حرف j ، ب

بينما (1)

{

P0 = 0x01

ب = P0

لـ (j-0j<3000j++)

لـ (j = 0j<8j++)

{

ب = ب<<1

P0 = ب

لـ (j-0j<3000j++)

}

}

}

3. 00001111

11110000

#يشمل

باطل رئيسي ()

{

غير موقعة أنا

بينما (1)

{

P0 = 0x0F

لـ (j-0j<3000j++)

P0 = 0xF0

لـ (j-0j<3000j++)

}

}

4. 00000001

00000011

00000111

.

.

11111111

#يشمل

باطل رئيسي ()

{

غير موقعة أنا

حرف j ، ب

بينما (1)

{

P0 = 0x01

ب = P0

لـ (j-0j<3000j++)

لـ (j = 0j<8j++)

0x01

P0 = ب

لـ (j-0j<3000j++)

}

}

عرض الأرقام على شاشة 7-Segment باستخدام متحكم 8051

ال شاشات من 7 أجزاء هي شاشات العرض الإلكترونية الأساسية ، والتي تستخدم في العديد من الأنظمة لعرض المعلومات الرقمية. يتكون من ثمانية مصابيح LED متصلة بطريقة متسلسلة لعرض الأرقام من 0 إلى 9 ، عند تشغيل مجموعات مناسبة من مصابيح LED. يمكنهم عرض رقم واحد فقط في كل مرة.

عرض الأرقام على شاشة 7-Segment باستخدام متحكم 8051

عرض الأرقام على شاشة 7-Segment باستخدام متحكم 8051

1. WAP لعرض الأرقام من '0 إلى F' على أربع شاشات من 7 قطع؟

#يشمل
sbit a = P3 ^ 0
sbit ب = P3 ^ 1
sbit ج = P3 ^ 2
sbit د = P3 ^ 3
باطل رئيسي ()
{
unsignedchar n [10] = {0 × 40،0xF9،0 × 24،0 × 30،0 × 19،0 × 12،0 × 02،0xF8،0xE00،0 × 10}
بدون توقيعك ، ي
أ = ب = ج = د = 1
بينما (1)
{
لـ (أنا = 0i<10i++)
{
P2 = n [i]
لـ (j = 0j<60000j++)
}
}
}

2. WAP لعرض الأرقام من '00 إلى 10' على شاشات 7 قطاعات؟

#يشمل
sbit a = P3 ^ 0
sbit ب = P3 ^ 1
عرض باطل 1 ()
عرض باطل 2 ()
تأخير باطل ()
باطل رئيسي ()
{
unsignedchar n [10] = {0 × 40،0xF9،0 × 24،0 × 30،0 × 19،0 × 12،0 × 02،0xF8،0xE00،0 × 10}
بدون توقيعك ، ي
ds1 = ds2 = 0
بينما (1)
{
لـ (أنا = 0 ، أنا<20i++)
عرض 1 ()
عرض 2 ()
}
}
عرض باطل 1 ()
{
أ = 1
ب = 0
P2 = s [ds1]
تأخير()
أ = 1
ب = 0
P2 = s [ds1]
تأخير()
}
عرض باطل 2 ()
{
ds1 ++
إذا (ds1> = 10)
{
ds1 = 0
ds2 ++
إذا (ds2> = 10)
{
ds1 = ds2 = 0
}
}
}
تأخير باطل ()
{
غير موقعة ك
لـ (ك = 0 ك<30000k++)
}

برنامج وحسابات عداد / عداد باستخدام متحكم 8051

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

تأخير الموقت

WAP لتوليد التأخير الزمني 500us باستخدام T1M2 (timer1 and mode2)؟

#يشمل

باطل رئيسي ()
{
حرف غير موقعة أنا
TMOD = 0x20 // اضبط وضع المؤقت //
لـ (أنا = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // اضبط تأخير الوقت //
TH1 = 0x00
TR1 = 1 // مؤقت oN //
بينما (TF1 == 0) // تحقق من بت العلم //
TF1 = 0
}
TR1 = 0 // مؤقت متوقف //
}

تأخير حلقة طبيعية

تأخير باطل ()

{
غير موقعة ك
لـ (ك = 0 ك<30000k++)
}

حسابات الاتصال التسلسلي والبرنامج باستخدام متحكم 8051

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

حسابات الاتصال التسلسلي والبرنامج باستخدام متحكم 8051

حسابات الاتصال التسلسلي والبرنامج باستخدام متحكم 8051

1. WAP لإرسال الحرف 'S' إلى النافذة التسلسلية ، استخدم 9600 كمعدل الباود؟

28800 هو أقصى معدل للباود للمتحكم 8051

28800/9600 = 3

يتم تخزين معدل البث بالباود '3' في المؤقتات

#يشمل

باطل رئيسي ()

{
SCON = 0x50 // بدء الاتصال التسلسلي //
TNOD = 0x20 // حدد وضع المؤقت //
TH1 = 3 // تحميل معدل الباود //
TR1 = 1 // Timer ON //
SBUF = 'S' // قم بتخزين الحرف في السجل //
بينما (TI == 0) // تحقق من سجل المقاطعة //
TI = 0
TR1 = 0 // إيقاف تشغيل المؤقت //
بينما (1) // حلقة مستمرة //
}

2. WAP لاستقبال البيانات من المحطة الطرفية الفائقة وإرسال تلك البيانات إلى المنفذ 0 من وحدة التحكم الدقيقة باستخدام 9600 باود؟

28800 هو أقصى معدل للباود للمتحكم 8051

28800/9600 = 3

يتم تخزين معدل البث بالباود '3' في المؤقتات

#يشمل

باطل رئيسي ()
{
SCON = 0x50 // بدء الاتصال التسلسلي //
TMOD = 0x20 // حدد وضع المؤقت //
TH1 = 3 // تحميل معدل الباود //
TR1 = 1 // Timer ON //
PORT0 = SBUF // أرسل البيانات من SBUF إلى المنفذ 0 //
بينما (RI == 0) // تحقق من سجل المقاطعة //
RI = 0
TR1 = 0 // إيقاف تشغيل المؤقت //
while (1) // إيقاف البرنامج عند استلام الحرف //
}

برامج المقاطعة باستخدام متحكم 8051

المقاطعة هي إشارة تجبر على إيقاف البرنامج الحالي وتنفيذ البرنامج الآخر على الفور. يوفر الميكروكونترولر 8051 6 مقاطعات داخلية وخارجية مصادر المقاطعة . عند حدوث المقاطعة ، يقوم المتحكم الدقيق بإيقاف المهمة الحالية مؤقتًا والانتباه إلى المقاطعة عن طريق تنفيذ ISR ثم يعود الميكروكونترولر إلى المهمة الأخيرة.

WAP لأداء عملية التحول إلى اليسار عند حدوث المقاطعات 0 في المؤقت ، ثم إجراء عملية المقاطعة لـ P0 في الوظيفة الرئيسية؟

#يشمل

حرف ب

مؤقت باطل 0 () المقاطعة 2 // الموقت المحدد 0 المقاطعة //
{
ب = 0x10
P1 = ب<<2
}
باطل رئيسي ()
{
حرف غير موقّع أ ، أنا
IE = 0x82 // تمكين المقاطعة timer0 //
TMOD = 0x01
TLo = 0xFC // مؤقت المقاطعة //
TH1 = 0xFB
TR0 = 1
أ = 0x00
بينما (1)
{
لـ (أنا = 0i<255i++)
{
أ ++
بو = أ
}
}
}

برمجة لوحة المفاتيح باستخدام متحكم 8051

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

برمجة لوحة المفاتيح باستخدام متحكم 8051

برمجة لوحة المفاتيح باستخدام متحكم 8051

1. WAP لتبديل مؤشر LED بالضغط على المفتاح

#يشمل
sbit a = P3 ^ 0
sbit ب = P3 ^ 1
sbit ج = P3 ^ 2
sbit د = P3 ^ 3
تأخير باطل ()
باطل رئيسي ()
{
بينما (1)
{
أ = 0
ب = 1
ج = 1
د = 1
تأخير()
أ = 1
ب = 0
ج = 1
د = 1
تأخير باطل ()
{
حرف غير موقعة أنا
TMOD = 0x20 // اضبط وضع المؤقت //
لـ (أنا = 0i<2i++) //double the time daly//
{
TL1 = 0x19 // اضبط تأخير الوقت //
TH1 = 0x00
TR1 = 1 // مؤقت oN //
بينما (TF1 == 0) // تحقق من بت العلم //
TF1 = 0
}
TR1 = 0 // مؤقت متوقف //
}

2. WAP لتشغيل مؤشر LED بالضغط على المفتاح '1' على لوحة المفاتيح؟

#يشمل

sbit r1 = P2 ^ 0
sbit c1 = P3 ^ 0
مؤشر LED sbit = P0 ^ 1

باطل رئيسي ()
{

r1 = 0
إذا (c1 == 0)
{

الصمام = 0xff
}
}

3. WAP لعرض الرقم 0،1،2،3،4،5 على الجزء السبعة بالضغط على المفتاح المعني على لوحة المفاتيح؟

#يشمل

sbit r1 = P2 ^ 0

sbit c1 = P3 ^ 0

sbit r2 = P2 ^ 0

sbit c2 = P3 ^ 0

sbit a = P0 ^ 1

باطل رئيسي ()

{

r1 = 0 أ = 1

إذا (c1 == 0)

{

أ = 0xFC

}

إذا (c2 == 0)

{

أ = 0x60

}

إذا (c3 == 0)

{

أ = 0xDA

}

إذا (c4 == 0)

{

أ = 0xF2

}

}

برمجة LCD مع متحكم 8051

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

برمجة LCD مع متحكم 8051

برمجة LCD مع متحكم 8051

WAP لعرض 'EDGEFX KITS' على شاشة LED؟

#يشمل
# تعريف كام P0

voidlcd_initi ()
voidlcd_dat (حرف غير موقعة)
voidlcd_cmd (حرف غير موقعة)
تأخير باطل ()
عرض باطل (أحرف غير موقعة ، أحرف غير موقعة)

sbitrs = P2 ^ 0
sbitrw = P2 ^ 1
sbit في = P2 ^ 2
باطل رئيسي ()
{

lcd_initi ()
lcd_cmd (0x80)
تأخير (100)
lcd_cmd (0xc0)
عرض ('edgefx kits'، 11)
بينما (1)
}

عرض باطل (أحرف غير موقعة ، أحرف غير موقعة)
{
ث غير موقعة
لـ (w = 0w{
lcd_data (s [w])
}
}
voidlcd_initi ()
{
lcd_cmd (0 × 01)
تأخير (100)
lcd_cmd (0 × 38)
تأخير (100)
lcd_cmd (0 × 06)
تأخير (100)
lcd_cmd (0x0c)
تأخير (100)
}
voidlcd_dat (أحرف غير موقعة)
{
مشط = ذلك
ص = 1
rw = 0
في = 1
تأخير (100)
في = 0
}
}
voidlcd_cmd (حرف cmd غير موقعة)
{
جاء = cmd
ص = 0
rw = 0

في = 1
تأخير (100)
في = 0
}
تأخير باطل (بدون إشارة int n)
{

غير موقعة أ
لـ (أ = 0 أ}

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