برمجة لغة التجميع للمبتدئين مع أمثلة البرامج. الوكالة الفيدرالية للتعليم في الاتحاد الروسي

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

لم أشارك مطلقًا في أتمتة إشارات المرور ، لذلك توصلت إلى الخوارزمية بنفسي. ها هو:
1. إشارة ضوئية لعبور مشاة قابل للتعديل. أولئك. اشارة مرور للسيارات ، اشارة مرور للمشاة وزر للمشاة ، بالضغط على المشاة يخطر برغبته في عبور الطريق.
2. بعد بدء البرنامج ، تضيء المصابيح الخضراء للسيارات واللون الأحمر للمشاة.
3. عندما يضغط أحد المشاة على الزر ، يومض اللون الأخضر للسيارات ، ثم اللون الأصفر ، ثم الأحمر. بعد ذلك ، يضيء اللون الأخضر للمشاة ، وبعد وقت محدد مسبقًا يبدأ في الوميض ، ويضيء باللون الأحمر للمشاة ، ثم يضيء باللونين الأصفر والأحمر للسيارات ، ثم باللون الأخضر.
4. في غضون فترة زمنية محددة بعد الضوء الأخضر عند إشارة مرور المشاة ، لا يؤدي الضغط على الزر بواسطة أحد المشاة إلى بدء خوارزمية الانتقال. تبدأ خوارزمية الانتقال في هذه الحالة فقط بعد انقضاء الوقت المحدد.
يتم تنفيذ برمجة PLC في بيئة برمجة Unity بلغات معيار IEC 61131-3. يتضمن هذا المعيار 5 لغات. على سبيل المثال ، اخترت لغة كتل الوظائف - FBD.
هنا متصفح المشروع في Unity:

تكوين PLC:


يتكون PLC من لوحة تركيب ، ومصدر طاقة (1) ، ووحدة تحكم (2) ، ووحدة إدخال منفصلة لإشارات 32 24V DC (4) ، ووحدة إدخال منفصلة لإشارات 32 24V DC (5). في مشروع حقيقي ، يمكن أن يكون هناك العشرات من لوحات التركيب المتصلة بوحدة تحكم واحدة عبر شبكات مختلفة ، ومئات من وحدات الإدخال / الإخراج.
إنشاء متغيرات من الأنواع المطلوبة في محرر المتغير:


المتغيرات المرتبطة بقنوات وحدة الإدخال / الإخراج لها عنوان يشير إلى المجموعة والوحدة والقناة التي ترتبط بها الإشارة.
يتكون البرنامج من أقسام يتم تنفيذها في كل دورة من فحص وحدة التحكم بالترتيب.
بشكل مبسط ، تبدو دورة فحص وحدة التحكم كما يلي:
1. قراءة إشارات الإدخال من وحدة الإدخال إلى متغيرات مع العناوين.
2. أداء الأقسام.
3. كتابة القيم من المتغيرات مع العناوين لإخراج إشارات وحدات الإخراج.
4. انتقل إلى الخطوة 1.
قم بإنشاء قسم الساعة بمولد نبضات لمدة 0.5 ثانية. تقوم كتلة TP ، عندما تتغير إشارة الدخل من 0 إلى 1 ، بإخراج نبضة لمدة معينة عند الخرج.


هنا وأدناه ، يتم عرض لقطات شاشة للأقسام في وضع الرسوم المتحركة ، وليس وضع التحرير. يعرضون قيم المتغيرات في الوقت الحالي عند الاتصال بـ PLC مع برنامج محمل (أرقام للمتغيرات الرقمية ، اللون الأخضر (1) - الأحمر (0) للمنطق المنطقي).
القسم الرئيسي يعالج المنطق الرئيسي.
تقوم كتلة SR بتعيين الإخراج إلى 1 عندما يكون S1 = 1 وتعيد تعيين الإخراج إلى 0 عندما يكون R = 1.
تحدد مجموعة R_TRIG الإخراج لدورة مسح واحدة إلى 1 عند انتقالات الإدخال من 0 إلى 1 (كاشف الحافة الصاعدة).
تقوم مجموعة F_TRIG بتعيين الإخراج لدورة مسح واحدة إلى 1 عند انتقالات الإدخال من 1 إلى 0 (كاشف الحافة الخلفية).
تم استبدال متغير inButton المرتبط بقناة الزر في القسم بـ inButtonForTest من أجل التمكن من تغيير قيمته على محاكي وحدة التحكم بدون أجهزة حقيقية.


يقوم قسم المخرجات بتوليد إشارات خرج للتحكم في إشارات المرور.


تحميل المشروع في محاكي وحدة التحكم:


يمكن عرض قيمة أي متغيرات في جدول الرسوم المتحركة:


ولكن لتسهيل التصحيح ، يمكنك إنشاء شاشة مشغل برسومات بسيطة ، ترتبط الرسوم المتحركة الخاصة بها بالمتغيرات:

دعنا نحاول عبور الطريق:

لم أكن أتوقع أن تكون هناك حاجة إلى 30 كتلة للتحكم في كائن بسيط مثل إشارة المرور.
في المقالة التالية ، سأوضح لك كيفية كتابة هذا البرنامج باستخدام جميع لغات IEC 61131-3 في نفس الوقت.

محدث. تصحيح خطأ في اسم المعيار.

(أشكال) ، (لوحة).

قبل إنشاء تطبيق ، يجب مراجعة وصف المكونات الجديدة.

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

تقدم المشروع

1. إنشاء مشروع جديد. احفظه في مجلد منفصل ، أطلق عليه اسم "Traffic Light".

2. ضع على النموذج لوحة (TPanel) بثلاثة أشكال (TShape) ، وزرين (TB) ، وحقل نصي (TEdit) ، ونقش (TLabel) ، ومؤقت (TTimer) وفقًا للعينة:

يجب أن تبدو هذه:

2. عمل التصميم:

قم بتعيين قيم الخاصية المحددة في عارض الكائنات:

عنصر خاصية المعنى
Form1 شرح إشارات المرور
لوحة 1 شرح *فارغة*
الشكل 1 شكل stCircle
الشكل 2 شكل stCircle
الشكل 3 شكل stCircle
التسمية 1 شرح سرعة
تحرير 1 نص *فارغ*
زر +1 شرح يبدأ
زر 2 شرح قف

3. نقوم بإنشاء حدث لـ Form1 في قسم OnCreate - اضغط على علامة الحذف

قم بإنشاء حدث لـ Timer1 في قسم OnTimer - اضغط على علامة الحذف

4. تعيين ألوان للأشكال:

العمل النهائي:

5. أثناء تحميل النموذج ، يتم تعطيل المؤقت ، وتصبح الأشكال الموجودة على اللوحة غير مرئية.

قم بإنشاء معالج حدث لحدث FormCreate (انقر نقرًا مزدوجًا فوق مكون Form1) والصق هذا الرمز:

vark: عدد صحيح ؛ الإجراء TForm1.FormCreate (المرسل: TObject) ؛ بدء Timer1.Enabled: = خطأ ؛ Shape1.Visible: = false ؛ Shape2.Visible: = خطأ ؛ Shape3.Visible: = false ؛ نهاية؛

6. لتبديل مصابيح إشارة المرور ، اكتب رمز البرنامج في معالج الأحداث Timer1Timer. سيتم تنفيذ هذا الرمز في الفاصل الزمني الذي يدخله المستخدم في حقل السرعة. وفقًا للمؤقت ، يتم تحديد رقم المصباح الذي يجب تشغيله في الوقت الحالي.

انقر نقرًا مزدوجًا فوق مكون Timer1 والصق هذا الرمز:

6. اكتب رمز زر البداية. من خلال النقر على الزر ، تتم قراءة الفاصل الزمني للمؤقت من حقل السرعة ، ويتم ضبط قراءات المؤقت على صفر ويتم تشغيل المؤقت.

انقر نقرًا مزدوجًا فوق مكون Button1 والصق الكود:

الإجراء TForm1.Button1Click (المرسل: TObject) ؛ start Timer1.Interval: = StrToInt (Edit1.text) ؛ ك: = 0 ؛ Timer1.Enabled: = صحيح ؛ نهاية؛

7. اكتب كود البرنامج لزر الإيقاف. بعد النقر على الزر ، يجب إيقاف تشغيل المؤقت ، وتصبح مصابيح إشارة المرور غير مرئية مرة أخرى.

انقر نقرًا مزدوجًا فوق مكون Button2 والصق الكود:

الإجراء TForm1.Button2Click (المرسل: TObject) ؛ بدء Timer1.Enabled: = خطأ ؛ Shape1.Visible: = false ؛ Shape2.Visible: = خطأ ؛ Shape3.Visible: = false ؛ نهاية؛

8. قم بتشغيل المشروع. في حقل السرعة ، أدخل الرقم 1000 (1000 مللي ثانية = 1 ثانية). ستبدأ إشارات المرور في التبديل كل ثانية واحدة.

أرتيم بوزنياك ، طالبة في الصف العاشر "أ" ، المدرسة الثانوية رقم 23 ، إكيباسبوز

عندما ألصق ابني نموذجًا لإشارة ضوئية من الورق للمدرسة ، جاءت الفكرة: "لماذا لا نجمع له نموذجًا عمليًا لإشارة ضوئية على متحكم دقيق". على الإنترنت ، هناك العديد من المخططات والبرامج الخاصة بهم التي تنفذ مبدأ إشارة المرور البسيطة. لكنها إما معقدة للغاية بالنسبة للعبة (محول DC-DC ، وسجلات التحول ، وما إلى ذلك) أو يتم تقديمها فقط كمثال على برنامج مجمع بسيط. أود أن أريكم مخطط الدائرة ورمز التجميع لإشارة مرور لعبة كاملة مع بعض الميزات الإضافية. علاوة على ذلك ، يتم تجميعها على متحكم دقيق "بنس واحد" وفقًا لأبسط مخطط ، وهو أمر مهم للمبتدئين. آمل أن تكون هذه الدائرة البسيطة بالنسبة للكثيرين ممن يبدأون في تعلم برمجة المتحكمات الدقيقة PIC ، أول تصميم تم تجميعه بالفعل على PIC. بسيط ، ولكنه يحتوي في نفس الوقت على التقنيات والسمات الأساسية للبرمجة ، سيجعل البرنامج من السهل فهمها وتجربتها.

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

مميزات موجزة للجهاز:

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

لذلك ، دعنا ننتقل إلى وصف الدائرة ودراستها.

يتم تجميع الدائرة على متحكم دقيق PIC12F629 رخيص. النواتج GP0-GP2 ، GP4 ، GP5 (الأرجل 7 ، ب ، 5 ، 3 ، 2) المبرمجة كمخرجات تستخدم مباشرة للتحكم في المصابيح. يتم تجميع مصابيح LED في كل اتجاه في سلسلة لتقليل الاستهلاك الحالي. المقاومات R3-R8 تحد من تيارات LED. في حالة وجود اختلاف كبير في إخراج مصابيح LED بألوان مختلفة ، فسيتعين عليك تحديد المقاومات المناسبة. على سبيل المثال ، لدي مجموعتان أصفر متصلتان على التوازي ومتصلتان بنفس المقاوم ، ونفس القيمة مثل الباقي وتلمع حتى أكثر سطوعًا من المجموعات الأخرى (العائد أكبر).

في هذه الدائرة ، يتم تزويد مصابيح LED بـ 1.5 فولت أكثر من المتحكم الدقيق من عنصر إضافي (في هذه الحالة ، عند إيقاف تشغيل الإخراج ، لا ينتقل التيار إلى خرج الدائرة المصغرة ، نظرًا لأن هناك حاجة إلى جهد أكبر بكثير من أجل افتح انتقالات اثنين من مصابيح LED من 1.5 فولت (2.5 درجة مئوية على الأقل). وحتى مع كسر كل من مصابيح LED (وهو أمر غير مرجح) ، فإن التيار من خلال الصمام الثنائي الواقي الداخلي إلى زائد مصدر الطاقة سيكون حوالي 7.5 مللي أمبير ، وهو أقل بكثير من المسموح به.الاستهلاك الحالي لمصابيح LED أعلى بكثير من استهلاك MK ، لذلك ، يمكن إهمال الفرق في تصريف العناصر (من خلال واحد لا يتدفق الاستهلاك الحالي لـ MC). تم إثباته تجريبيًا أنه على الرغم من انخفاض التيار من خلال مصابيح LED عند تفريغ البطارية ، فإن سطوع توهجها يظل عند مستوى مقبول على النطاق الكامل لجهد البطارية.الدائرة مبسطة للغاية ، ولا يوجد مثبت للجهد الكهربي يستهلك تيارًا إضافيًا ، مما جعل من الممكن التخلي عن مفتاح الطاقة (الاستهلاك الحالي في وضع السكون - 1-3 م كا).

يتم توصيل زر التحكم في أوضاع تشغيل الجهاز بدبوس GP3 (دبوس 4) ، والذي تم الإعلان عنه كمدخل رقمي في بتات التكوين. عند الضغط على الزر ، تحدث مقاطعة يحدث في معالجها ما يلي. عند الضغط عليه لفترة طويلة (أكثر من 4 ثوانٍ) يدخل الجهاز في وضع السكون. باستخدام مكابس أقصر ، يتم تبديل سرعة إشارة المرور بالتتابع في دائرة مع الإشارة إلى السرعة الحالية وفقًا للشكل.

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

سيستمر شحن خلايا AA في وضع السكون لمدة عام على الأقل ، ولهذا السبب لا يحتوي الجهاز على مفتاح طاقة. يدخل الجهاز في وضع السكون أيضًا بعد 0.5 - 1 ساعة (حسب سرعة تبديل الألوان) من العمل دون الضغط على الزر. يتم الخروج من وضع السكون عن طريق الضغط على أي زر. يتم توفير الطاقة للمتحكم الدقيق من خلال المسامير 1 و 8. لحفظ المسامير وتبسيط التصميم ، فإنه يحتوي على وضع مولد داخلي بدون عناصر خارجية.

تفسيرات صغيرة للبرنامج ، والتي ترد في المرفق.

تتم معالجة ضغطات الأزرار في الإجراءات الفرعية: wait_butt__ - انتظار الضغط والتسجيل لمدة 6 ثوانٍ. بدون الضغط على زر push_butt__ - تسجيل مدة الضغط ، wait_nobutt__ - انتظار زر غير مضغوط. في لحظة تغيير حالة إشارة المرور (الأصفر والأخضر الوامض) ، تتم قراءة القيم الموجودة على منفذ الإخراج من الجدول في الإجراء الفرعي اللباقة__ (قضم منخفض أو مرتفع). وبالمثل ، تكون إشارة الحالة عند الضغط على الزر من روتين ind__. للدخول إلى وضع السكون بعد انقضاء وقت التشغيل ، يحدث انتقال إجباري إلى روتين معالج المقاطعة عن طريق تعيين علامة المقاطعة برمجيًا. من خلال تغيير الثوابت CONST_MIN و CONST_REG و CONST_SL ، يمكنك تغيير فترة الوميض باللون الأخضر ، على التوالي ، والوضع الأولي عند توصيل البطارية ، ووقت التشغيل بدون تأثير قبل التبديل إلى وضع السكون.

لوحة الدوائر المطبوعة مصنوعة من الألياف الزجاجية أحادية الجانب ولها أبعاد 22x87 ملم. يتم تثبيت مصابيح LED على الحافة بالتوازي مع اللوحة في اتجاهات مختلفة. يتم تثبيت الأجزاء الوسطى واحدة من جانب تركيب الأجزاء ، والأخرى - من جانب المسارات مع ربط الخيوط في فتحات اللوحة وتثبيتها من جانب الأجزاء باستخدام قطرة من اللحام ، ومن جانب المسارات عن طريق اللحام بالمسارات المقابلة.

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

يتم إدخال كلمة التكوين في الذاكرة تلقائيًا عند تحميل البرنامج الثابت (يتم تعيين "الطائر" فقط في عنصر "PWRT" ، ويتم "إعادة تعيين" باقي العناصر ، ويتم تعيين عمود "المذبذب" على "intOSC GP4" ). أولاً ، تحتاج إلى قراءة البرنامج الثابت من دائرة ميكروية فارغة وكتابة قيمة الكلمة في نهاية ذاكرة البرنامج على العنوان 03FF ، وهو مطلوب لضبط تردد المذبذب الداخلي لمثيل معين من الدائرة المصغرة. بعد تحميل ملف HEX في البرنامج ، يجب عليك إدخال هذه القيمة يدويًا على العنوان 03FF. في هذا الجهاز ، لا يعد انحراف التردد أمرًا بالغ الأهمية ، ولكن لا يزال يتعين عليك معرفة أن مثل هذا الإجراء مطلوب لهذه الدائرة المصغرة. في الحالات القصوى ، إذا فقدت قيمة المصنع ، فلا يمكنك فعل أي شيء - فقد اتخذ البرنامج إجراءات للعمل بشكل صحيح في هذه الحالة أيضًا.

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

يحتوي التطبيق على: نموذج ، لوحة دوائر مطبوعة بتنسيق LAY ، برنامج تجميع MPASM ، ملف برنامج ثابت HEX.

قائمة عناصر الراديو

تعيين اكتب فئة كمية ملحوظةمحلالمفكرة الخاصة بي
IC1 MK الموافقة المسبقة عن علم 8 بت

PIC12F629

1 تراجع إلى المفكرة
R1 المقاوم

3 كيلو أوم

1 0.125 واط إلى المفكرة
R2 المقاوم

100 أوم

1 0.125 واط إلى المفكرة
R3-R8 المقاوم

200 أوم

6 0.125 واط إلى المفكرة
HL1 ، HL2 ، HL9 ، HL10 الصمام الثنائي الباعث للضوء

AL307A

4 أحمر إلى المفكرة
HL3 ، HL4 ، HL11 ، HL12 الصمام الثنائي الباعث للضوء

عندما ألصق ابني نموذجًا لإشارة ضوئية من الورق للمدرسة ، جاءت الفكرة: "لماذا لا نجمع له نموذجًا عمليًا لإشارة ضوئية على متحكم دقيق". على الإنترنت ، هناك العديد من المخططات والبرامج الخاصة بهم التي تنفذ مبدأ إشارة المرور البسيطة. لكنها إما معقدة للغاية بالنسبة للعبة (محول DC-DC ، وسجلات التحول ، وما إلى ذلك) أو يتم تقديمها فقط كمثال على برنامج مجمع بسيط. أود أن أريكم مخطط الدائرة ورمز التجميع لإشارة مرور لعبة كاملة مع بعض الميزات الإضافية. علاوة على ذلك ، يتم تجميعها على متحكم دقيق "بنس واحد" وفقًا لأبسط مخطط ، وهو أمر مهم للمبتدئين. آمل أن تكون هذه الدائرة البسيطة بالنسبة للكثيرين ممن يبدأون في تعلم برمجة المتحكمات الدقيقة PIC ، أول تصميم تم تجميعه بالفعل على PIC. بسيط ، ولكنه يحتوي في نفس الوقت على التقنيات والسمات الأساسية للبرمجة ، سيجعل البرنامج من السهل فهمها وتجربتها.

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

مميزات موجزة للجهاز:

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

لذلك ، دعنا ننتقل إلى وصف المخطط والنظر فيه:

يتم تجميع الدائرة على متحكم دقيق غير مكلف. النواتج GP0-GP2 ، GP4 ، GP5 (الأرجل 7 ، ب ، 5 ، 3 ، 2) المبرمجة كمخرجات تستخدم مباشرة للتحكم في المصابيح. يتم تجميع مصابيح LED في كل اتجاه في سلسلة لتقليل الاستهلاك الحالي. المقاومات R3-R8 تحد من تيارات LED. في حالة وجود اختلاف كبير في إخراج مصابيح LED بألوان مختلفة ، فسيتعين عليك تحديد المقاومات المناسبة. على سبيل المثال ، لدي مجموعتان أصفر متصلتان على التوازي ومتصلتان بنفس المقاوم ، ونفس القيمة مثل الباقي وتألق حتى أكثر سطوعًا من المجموعات الأخرى (العائد أكبر).

في هذه الدائرة ، يتم تزويد مصابيح LED بـ 1.5 فولت أكثر من المتحكم الدقيق من عنصر إضافي (في هذه الحالة ، عند إيقاف تشغيل الإخراج ، لا ينتقل التيار إلى خرج الدائرة المصغرة ، نظرًا لأن هناك حاجة إلى جهد أكبر بكثير من أجل افتح انتقالات اثنين من مصابيح LED من 1.5 فولت (2.5 درجة مئوية على الأقل). وحتى مع كسر كل من مصابيح LED (وهو أمر غير مرجح) ، فإن التيار من خلال الصمام الثنائي الواقي الداخلي إلى زائد مصدر الطاقة سيكون حوالي 7.5 مللي أمبير ، وهو أقل بكثير من المسموح به.الاستهلاك الحالي لمصابيح LED أعلى بكثير من استهلاك MK ، لذلك ، يمكن إهمال الفرق في تصريف العناصر (من خلال واحد لا يتدفق الاستهلاك الحالي لـ MC). تم إثباته تجريبيًا أنه على الرغم من انخفاض التيار من خلال مصابيح LED عند تفريغ البطارية ، فإن سطوع توهجها يظل عند مستوى مقبول على النطاق الكامل لجهد البطارية.الدائرة مبسطة للغاية ، ولا يوجد مثبت للجهد الكهربي يستهلك تيارًا إضافيًا ، مما جعل من الممكن التخلي عن مفتاح الطاقة (الاستهلاك الحالي في وضع السكون - 1-3 م كا).

يتم توصيل زر التحكم في أوضاع تشغيل الجهاز بدبوس GP3 (دبوس 4) ، والذي تم الإعلان عنه كمدخل رقمي في بتات التكوين. عند الضغط على الزر ، تحدث مقاطعة يحدث في معالجها ما يلي. عند الضغط عليه لفترة طويلة (أكثر من 4 ثوانٍ) يدخل الجهاز في وضع السكون. باستخدام مكابس أقصر ، يتم تبديل سرعة إشارة المرور بالتتابع في دائرة مع الإشارة إلى السرعة الحالية وفقًا للشكل:

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

سيستمر شحن خلايا AA في وضع السكون لمدة عام على الأقل ، ولهذا السبب لا يحتوي الجهاز على مفتاح طاقة. ينتقل الجهاز إلى وضع السكون أيضًا بعد 0.5 - 1 ساعة (حسب سرعة تبديل اللون) من التشغيل دون الضغط على الزر. يتم الخروج من وضع السكون عن طريق الضغط على أي زر. يتم توفير الطاقة للمتحكم الدقيق من خلال المسامير 1 و 8. لحفظ المسامير وتبسيط التصميم ، فإنه يحتوي على وضع مولد داخلي بدون عناصر خارجية.

شرح بسيط عن البرنامج يرد في المرفق:

تتم معالجة ضغطات الأزرار في الإجراءات الفرعية: wait_butt__ - انتظار الضغط والتسجيل لمدة 6 ثوانٍ. بدون الضغط على زر push_butt__ - تسجيل مدة الضغط ، wait_nobutt__ - انتظار زر غير مضغوط. في لحظة تغيير حالة إشارة المرور (الأصفر والأخضر الوامض) ، تتم قراءة القيم الموجودة على منفذ الإخراج من الجدول في الإجراء الفرعي اللباقة__ (قضم منخفض أو مرتفع). وبالمثل ، تكون إشارة الحالة عند الضغط على الزر من روتين ind__. للدخول إلى وضع السكون بعد انقضاء وقت التشغيل ، يحدث انتقال إجباري إلى روتين معالج المقاطعة عن طريق تعيين علامة المقاطعة برمجيًا. من خلال تغيير الثوابت CONST_MIN و CONST_REG و CONST_SL ، يمكنك تغيير فترة الوميض باللون الأخضر ، على التوالي ، والوضع الأولي عند توصيل البطارية ، ووقت التشغيل بدون تأثير قبل التبديل إلى وضع السكون.

لوحة الدوائر المطبوعة مصنوعة من الألياف الزجاجية أحادية الجانب ولها أبعاد 22x87 ملم. يتم تثبيت مصابيح LED على الحافة بالتوازي مع اللوحة في اتجاهات مختلفة. يتم تثبيت الأجزاء الوسطى أحدهما من جانب تثبيت الأجزاء ، والآخر من جانب المسارات ، وربط الخيوط في فتحات اللوحة وتثبيتها من جانب الأجزاء بقطرة من اللحام ، ومن جانب المسارات عن طريق اللحام بالمسارات المقابلة.

جميع المقاومات 0.125 واط. يمكنك أن تأخذ أي مصابيح LED محلية أو مستوردة ، ويفضل أن تكون من نفس النوع مع انخفاض الجهد المباشر بتيار 10 مللي أمبير ، حوالي 2 فولت. زر - أي بدون تثبيت. يتم تثبيت المتحكم الدقيق على الكتلة.

يتم إدخال كلمة التكوين في الذاكرة تلقائيًا عند تحميل البرنامج الثابت (في IC-Prog ، يتم تعيين "طائر" فقط في عنصر "PWRT" ، ويتم "إعادة تعيين" باقي العناصر ، ويتم تعيين "intOSC GP4" في عمود "المذبذب"). أولاً ، تحتاج إلى قراءة البرنامج الثابت من دائرة ميكروية فارغة وكتابة قيمة الكلمة في نهاية ذاكرة البرنامج على العنوان 03FF ، وهو مطلوب لضبط تردد المذبذب الداخلي لمثيل معين من الدائرة المصغرة. بعد تحميل ملف HEX في البرنامج ، يجب عليك إدخال هذه القيمة يدويًا على العنوان 03FF. في هذا الجهاز ، لا يعد انحراف التردد أمرًا بالغ الأهمية ، ولكن لا يزال يتعين عليك معرفة أن مثل هذا الإجراء مطلوب لهذه الدائرة المصغرة. في الحالات القصوى ، إذا فقدت قيمة المصنع ، فلا يمكنك فعل أي شيء - فقد اتخذ البرنامج إجراءات للعمل بشكل صحيح في هذه الحالة أيضًا.

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

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

IDE للمجمع

السؤال الأول هو: في أي بيئة تطوير تقوم بالبرمجة في المجمع؟ الجواب واضح - MASM32. هذا هو البرنامج القياسي المستخدم لهذا PL. يمكنك تنزيله على الموقع الرسمي masm32.com كأرشيف ، ستحتاج إلى فك ضغطه ثم تشغيل مثبت install.exe. كبديل ، يمكنك استخدام FASM ، لكن الكود الخاص بها سيكون مختلفًا بشكل كبير.

قبل العمل ، الشيء الرئيسي هو عدم نسيان إضافة السطر إلى متغير نظام PATH:

ج: \ masm32 \ بن

برنامج "Hello world" في المجمع

يُعتقد أن هذا هو البرنامج الأساسي في البرمجة ، والذي يكتبه المبتدئين أولاً عندما يتعرفون على اللغة. ربما لا يكون هذا النهج صحيحًا تمامًا ، ولكنه بطريقة أو بأخرى يتيح لك رؤية نتيجة مرئية على الفور:

386 .model flat، stdcall option casemap: none lib / kernel32.lib .data msg_title db "Title"، 0 msg_message db "Hello world"، 0 .code start: استدعاء MessageBox، 0، addr msg_message، addr msg_title، MB_OK استدعاء ExitProcess ، 0 نهاية البداية

أولاً ، نقوم بتشغيل محرر qeditor.exe في المجلد باستخدام MASM32 المثبت ، ونكتب رمز البرنامج فيه. بعد أن نحفظه كملف بالملحق ".asm" ، ونبني البرنامج باستخدام عنصر القائمة "Project" → "Build all". إذا لم تكن هناك أخطاء في الكود ، فسيقوم البرنامج بالتجميع بنجاح ، وعند الإخراج سنحصل على ملف exe جاهز يعرض نافذة Windows مع نقش "Hello world".

إضافة رقمين على المجمع

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

486 .model flat ، stdcall option casemap: none lib / kernel32.lib تتضمن /masm32/macros/macros.asm uselib masm32، comctl32، ws2_32 .data .code start: mov eax، 123 mov ebx، -90 add eax، ebx test يستدعي eax ، eax jz zero ، MessageBox ، 0 ، chr $ ("In eax ليس 0!") ، chr $ ("Info") ، 0 jmp lexit zero: استدعاء MessageBox، 0، chr $ ("In eax 0!" )، chr $ ("Info")، 0 lexit: استدعاء ExitProcess، 0 end start

هنا نستخدم ما يسمى بالعلامات والأوامر الخاصة مع استخدامها (jz ، jmp ، test). دعونا نلقي نظرة فاحصة:

  • اختبار - يستخدم للمقارنة المنطقية بين المتغيرات (المعاملات) في شكل بايت أو كلمات أو كلمات مزدوجة. للمقارنة ، يستخدم الأمر الضرب المنطقي ، وينظر إلى البتات: إذا كانت تساوي 1 ، فإن بت النتيجة ستكون مساوية لـ 1 ، وإلا - 0. إذا تلقينا 0 ، يتم تعيين الأعلام مع ZF ( علامة صفرية) ، والتي ستكون مساوية لـ 1 يتم تحليل النتائج على أساس ZF.
  • jnz - إذا لم يتم تعيين علم ZF في أي مكان ، يتم إجراء القفزة على هذا الملصق. غالبًا ما يتم استخدام هذا الأمر إذا كان البرنامج لديه عمليات مقارنة تؤثر بطريقة ما على نتيجة ZF. وتشمل هذه فقط الاختبار و cmp.
  • jz - إذا كانت علامة ZF لا تزال مضبوطة ، فسيتم القفز على الملصق.
  • jmp - بغض النظر عما إذا كان هناك ZF أم لا ، يتم إجراء قفزة على الملصق.

برنامج مجموع المجمع

برنامج بدائي يوضح عملية جمع متغيرين:

486 .model flat، stdcall option casemap: none lib / kernel32.lib تتضمن /masm32/macros/macros.asm uselib masm32، comctl32، ws2_32 .data msg_title db "Title"، 0 A DB 1h B DB 2h db 128 dup ( ؟) تنسيق db "٪ d"، 0. code start: MOV AL، A ADD AL، B استدعاء wsprintf، addr buffer، addr format، eax استدعاء MessageBox، 0، addr buffer، addr msg_title، MB_OK استدعاء ExitProcess، 0 end start

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

الحصول على قيمة من سطر الأوامر في المجمع

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

486 .model flat، stdcall option casemap: none lib / kernel32.lib تتضمن /masm32/macros/macros.asm uselib masm32، comctl32، ws2_32 .data. code start: call GetCommandLine؛ سيتم وضع النتيجة في eax push 0 push chr $ ("Command Line") دفع eax ؛ نأخذ النص للإخراج من eax push 0 call MessageBox push 0 call ExitProcess end

يمكنك أيضًا استخدام طريقة بديلة:

486 .model flat، stdcall option casemap: none lib / kernel32.lib تتضمن /masm32/macros/macros.asm uselib masm32، comctl32، ws2_32 .data. code start: call GetCommandLine؛ سيتم وضع النتيجة في eax استدعاء GetCommandLine استدعاء MessageBox، 0، eax، chr $ ("Command Line") ، 0 استدعاء ExitProcess ، 0 دفع 0 استدعاء ExitProcess end start

يتم استخدام Invoke هنا - ماكرو خاص يبسط كود البرنامج. في وقت الترجمة ، يتم تحويل أوامر الماكرو إلى تعليمات التجميع. بطريقة أو بأخرى ، نستخدم المكدس - طريقة بدائية لتخزين البيانات ، ولكن في نفس الوقت مريحة للغاية. حسب الاصطلاح ، stdcall ، في جميع وظائف WinAPI ، يتم تمرير المتغيرات عبر المكدس ، بترتيب عكسي فقط ، ويتم وضعها في سجل eax المناسب.

حلقات في المجمع

حالة الاستخدام:

البيانات msg_title db "العنوان" ، 0 A DB 1h buffer db 128 dup (؟) format db "٪ d"، 0 .code start: mov AL، A .REPEAT inc AL .UNTIL AL == 7 استدعاء wsprintf ، addr buffer ، تنسيق addr ، AL استدعاء MessageBox ، 0 ، addr buffer ، addr msg_title ، MB_OK استدعاء ExitProcess ، 0 end start .data msg_title db "Title" ، 0 buffer db 128 dup (؟) format db "٪ d"، 0 .code start: mov eax، 1 mov edx، 1 .WHILE edx == 1 inc eax .IF eax == 7 .BREAK .ENDIF .ENDW يستدعي wsprintf، addr buffer، addr format، eax استدعاء MessageBox، 0، addr buffer، addr msg_title، MB_OK استدعاء ExitProcess ، 0

يتم استخدام أمر التكرار لإنشاء حلقة. علاوة على ذلك ، باستخدام inc ، يتم زيادة قيمة المتغير بمقدار 1 ، بغض النظر عما إذا كان في ذاكرة الوصول العشوائي أو في المعالج نفسه. من أجل مقاطعة الحلقة ، يتم استخدام التوجيه ".BREAK". يمكنه في الوقت نفسه إيقاف الدورة ومواصلة عملها بعد "التوقف". يمكنك أيضًا مقاطعة تنفيذ كود البرنامج والتحقق من التكرار وأثناء الشرط باستخدام التوجيه ".CONTINUE".

مجموع عناصر المصفوفة في المُجمع

نحن هنا نجمع قيم المتغيرات في المصفوفة باستخدام حلقة "for":

486 .model flat، stdcall option casemap: none lib / kernel32.lib تتضمن /masm32/macros/macros.asm uselib masm32، comctl32، ws2_32 .data msg_title db "Title"، 0 A DB 1h x dd 0،1،2، 3،4،5،6،7، 8،9،10،11 n dd 12 المخزن المؤقت db 128 تنسيقًا مزدوجًا (؟) db "٪ d"، 0. code start: mov eax، 0 mov ecx، n mov ebx، 0 L: إضافة eax، x add ebx، اكتب x dec ecx cmp ecx، 0 jne L استدعاء wsprintf، addr buffer، addr format، eax استدعاء MessageBox، 0، addr buffer، addr msg_title، MB_OK استدعاء ExitProcess، 0 end start

الأمر dec ، مثل inc ، يغير قيمة المعامل بمقدار واحد ، فقط في الاتجاه المعاكس ، إلى -1. لكن cmp يقارن المتغيرات باستخدام طريقة الطرح: يطرح قيمة واحدة من الثانية ، واعتمادًا على النتيجة ، يحدد العلامات المناسبة.

ينتقل الأمر jne إلى تسمية بناءً على نتيجة مقارنة المتغيرات. إذا كانت سالبة ، يحدث الانتقال ، وإذا كانت المعاملات لا تتساوى مع بعضها البعض ، فلن يتم تنفيذ الانتقال.

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

المشاهدات بعد: 767