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

Automatic control , PLC , Electronics , HMI , Machine technology development , Arabic & Islamic topics , Management studies and more
 
الرئيسيةالبوابة*أحدث الصورالتسجيلدخول

 

 برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)

اذهب الى الأسفل 
2 مشترك
كاتب الموضوعرسالة
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 7:55

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)

المرجع :

http://justanotherlanguage.org/

مقدمة :

لغة JAL هى لغة ذات مصدر مفتوح تم إنشاؤها لبرمجة الميكروكونترولر PIC . إذا كنت مهتم بالإلكترونيات فإن هذه اللغة تكون خاصة بك .

ماذا تعنى JAL؟

هى إختصار للعبارة Just Another Language "مجرد لغة أخرى" .

لماذا نستخدم لغة JAL ؟

لغة JAL هى لغة عالية المستوى مخصصة للميكروكونترولر PIC . تتيح لك هذه اللغة برمجة الميكروكونترولر PIC بسهولة . هى لغة مجانية مفتوحة المصدر تعتمد سلسلة الأنواع PIC 10,12,16,18.

لغة JAL هى لغة ذات شكل متحرر لبرمجة الميكروكونترولر PIC . يمكن نشر الأوامر على عدة أسطر حسب رغبتك . التبويبات Tabs والفراغات spaces والأسطر الجديدة newlines جميعها تعتبر مكان أبيض (فارغ) whitespace. لا يوجد علامة "تحديد" delimiter بين الأوامر المختلفة . نظريا يمكنك وضع جميع الأوامر فى سطر واحد طويل . عمليا , الأماكن البيضاء تؤدى إلى برامج أسهل فى القراءة لأن إى إصطلاح تختارة يكون ممكنا .

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



التحميل والتثبيت Installation & Download:

1- تحميل البرنامج من الرابط :



http://jaledit.googlecode.com/files/JALPack_2.4_0.4_0.6.1.0.exe,

سوف يتم تحميل البرنامج JALv2 والمحرر JalEdit .

2- تحديث التثبيت بصفة مستمرة بتحميل المكتبات والأمثلة من الرابط :





http://code.google.com/p/jallib/downloads/list



يتم نسخ المحتويات إلى دليل تثبيت مكتبة البرنامج Jallib .

3- يتم تشغيل البرنامج وتثبيته تبعا للخطوات التالية :



التفاصيل بملف word على الرابط :



http://www.eeecb.com/vb/showthread.php?p=3099#post3099
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 7:56

لماذا استخدام الميكروكونترولر PIC ولغة JALv2 وهذا الموضوع ؟



1- بساطة الاستخدام :



نعم , هذا صحيح , الميكروكونترولر يكون سهل الاستخدام بمساعدة لغة JAL مفتوحة المصدر . ليس فقط الميكروكونترولر ولكن العديد من الأجهزة hardware الخارجية المعقدة تصبح سهلة مثل أجهزة :الاتصال عن طريق USB و التحويل من تناظرى لرقمى ADC و الاتصال التسلسلى والأقراص الصلبة Hard Disks و وبطاقات SD Cards ووحدات العرض LCD والحساسات وغيرها الكثير .



كل ما تحتاجه هو كمية صغيرة من المعرفة حول الإلكترونيات العامة وسوف نتناول بقية ما تحتاج لمعرفته.



2- تبسيط الدائرة الكهربية :



هل ترغب فى تقليص حجم الدوائر الخاصة بك ؟ ما الذى تستخدمه حاليا لبناء الدوائر الرقمية ؟



السلسلة 74LS والسلسلة CMOS والمؤقت 555 ....



يمكنك بناء أى شىء بهذه الدوائر المتكاملة ولكن كم عدد ما تحتاجه لإكمال مشروعك ؟



باستخدام الميكروكونترولر يمكنك تقليص الدائرة إلى شريحة واحدة هى الميكروكونترولر نفسه .



3- مشاريع أكبر :



لا توجد حدود لما يمكن بناءه .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:00

ما الذى تحتاجه للبدء ؟

سوف تحتاج إلى الآتى :

1- شريحة ميكروكونترولر PIC .

2- جهاز برمجة للميكروكونترولر PIC .

3- لغة برمجة , وهى هنا JALv2 , ومكتبات , وهى هنا JALLIB , ومحرر ,وهو هنا JAL EDIT.

4- جهاز كومبيوتر ويفضل أن يكون به منفذ تسلسلى .

5- برمجيات لتحميل (حرق) ملف كود البرنامج بالميكروكونترولر .

6- مجموعة من العناصر الإلكترونية ولوحة تجارب وأسلاك ومقياس متعدد .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:06

برنامجك الأول : وميض ليد Blink A Led

فى هذا البرنامج التعليمى سوف نتعرف على كيفية توصيا أول دائرة لنا عن طريق عمل وميض لليد .

من أين نبدأ ؟

لنجعل ليد يومض أى يضىء on و ينطفىء off .

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

بناء الدائرة الكهربية :



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-f0827bdf9e





برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-b87bf53e45

















الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:09

فهم بناء الدليل JALPack :

فى البداية إلقة نظرة على محتويات الدليل JALPack بالكومبيوتر حيث قمت بالتثبيت :





برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-47e49b7db2








المجلد : المترجم compiler

يحفظ برمجيات المترجم لتحويل كود لغة JAL إلى كود HEX لتحميله على الميكروكونترولر .

المجلد : المحرر jaledit

محرر نصوص لغة JAL حيث سوف تكتب كود برنامجك .

المجلد : المكتبة lib

يحتوى على مجموعة من المكتبات ضرورية لجعل الأشياء تعمل .

المجلد : عينة sample

يحتوى على أمثلة للعمل .

· قم بإنشاء مجلد باسم workspace , وفى هذا المجلد قم بإنشاء مجلد باسم blink_a_led ( على سبيل المثال يكون المسار C: \ JALPack \workspace\blink_a_led\ .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:16

كتابة التعليمات البرمجية (الكود) :

سوف نكتب برنامج لوميض ليد . الكود بكامله ذات نص مميز بألوان محددة .

1- الجزء الأول : (بلوك) العنوان والكاتب Title & Author Block :

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




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-8e157be3b8



الكود:


-- ------------------------------------------------------
-- Title: Blink-a-led of the Microchip pic16f877a
--
-- Author: Rob Hamerling, Copyright (c) 2008..2009, all rights reserved.
--
-- Adapted-by:
--
-- Compiler: 2.4l
--
-- This file is part of jallib (http://jallib.googlecode.com)
-- Released under the BSD license (http://www.opensource.org/licenses/bsdlicense.php)
--
-- Description:
-- Sample blink-a-led program for Microchip PIC16f877a.
--
-- Sources:
--
-- Notes:
-- - File creation date/time: 14 Oct 2009 20:24:20.
--
-- ------------------------------------------------------




يمكنك رؤية "شرطتان "-" للإعلان عن "تعليق" comment حتى يتم تجاهله من قبل المترجم . أيضا يمكن استخدام الفاصلة المنقوطة “;” للتعليقات .

ونحن نمضى , سوف نقوم بالتعليق على طول البرنامج حتى يصبح من السهل علينا قراءة برنامجنا .



تذكر :

التعليقات Comments :

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

الصيغة :

;this is a comment

-- and this too

يستخدم سطر التعليق لتوضيح السبب من البرنامج أو سبب فعل الأشياء وطريقة عملها . التعليق مفيد جدا فى المستقبل كمرجع أو عندما تريد مشاركة الأخرين بالبرامج .

من المفضل عمليا بيان إصدار لغة JAL فى أو سطر بالبرنامج وهذا يزيل الكثير من التساؤلات .

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



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:21





2- الجزء الثانى : إختيار نوع الميكروكونترولر PIC :

فى الكود التالى يتم اختيار الميكروكونترولر 16F877A ( يمكنك استخدام أى نوع آخر) :





الكود:


include 16f877a -- target PICmicro






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-484fb33e4d





تذكر :

نموذج برنامج لغة JAL يجب أن يبدأ باستدعاء المكتبة التى تتضمن تفاصيل الميكروكونترولر PIC المستهدف بكتابة البرنامج عن طريق التعليمة include 16f877a -- target PICmicro


الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:26

3- الجزء الثالث :إختيار سرعة (تردد) الكريستال :

فى الكود التالى يتم استخدام كريستال بتردد 20 MHz :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-d6032d3f30





4- الجزء الرابع : تهيئة إعدادات الميكروكونترولر PIC

فى الكود التالى بعض الإعدادات الداخلية للميكروكونترولر PIC , والتى تسمى المصهرات fuses .

تحديد (ضبط) المذبذب OSC ليكون "سرعة عالية" HS يخبر الميكروكونترولر بنوع المصدر الخارجى للساعة (مذبذب الكريستال) .

يجب أن تقوم بإيقاف تمكين disable الأطراف التناظرية بالتعليمة enable_digital_io() " تفعيل المداخل / المخارج الرقمية" .

لا داعى للقلق بشأن التحديدات الأخرى .




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-1da316905d





الكود:


-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
--



تذكر :

الأمر Pragma :

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

أمثلة :








برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-96999ebfbe



الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:32

1- إختيار طرف خرج Choose an output pin

دعونا نختار طرف خرج للتحكم فى الليد . كما ترى من الدائرة الكهربية , الييد متصل بالطرف رقم #2 .



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-b9e6613a8b










كما ترة الطرف #2 هو الطرف RA0/ANO . اسم الطرف هو RA0 , بينما AN0 هو اسم آخر لنفس الطرف ( يستخدم كمدخل تناظرى كما سنرى فيما بعد ) . فى لغة JAL يعبر عن الطرف RA0بالصيغة pin_A0 .

الطرف RA0 هو طرف دخل/خرج رقمى من النوع TTL وليس من النوع "خرج مصب مفتوح". خرج المصب المفتوح ( مثل الطرف RA4 ) يحتاج لمقاومة جذب لأعلى توصل بين الطرف والجهد الموجب V+ .



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-a798a89b4d








الآن نكتب كود الطرف A0 . سوف نستخدم "اسم مستعار" “alias” فقط حتى يتثنى لنا فى المستقبل الإشارة إلى الطرف (A0) بالاسم المستعار “led” . بهذه الطريقة لم نعد بحاجة لتذكر اسم الطرف (فيما عدا سجل الاتجاه فى السطر التالى من الكود ) .






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-26dfd9cc1c



الكود:


--
-- You may want to change the selected pin:
alias led is pin_A0

الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:37

6- الجزء السادس : تهيئة (إعداد) الطرف كمدخل أو كمخرج "إتجاه البيانات" :

الآن يجب علينا أن نخبر الميكروكونترولر PIC عما إذا كان هذا الطرف كمدخل أو كمخرج . تحديد الاتجاه دائما تكون بالصيغة (pin_ + pinname_ + direction) " , وحيث أننا نكتب بيانات إلى المنفذ بغرض توصيل الليد فيكون الطرف مخرج وتكون الصيغة :






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-36c9c3f5fb



الكود:


pin_A0_direction = output




كما يمكننا عمل اسم مستعار alias بالصيغة :

alias led_direction is pin_A0_direction



عندئذ يمكننا كتابة الكود :



led_direction =output

بهذه الطريقة يمكننا تغييره من مخرج إلى مدخل فى منتصف البرنامج بدون معرفة اسم الطرف . لكن فى حالتنا هذه سوف نستخدمه مرة واحدة لذلك فلا حاجة لعمل اسم مستعار .



تذكر :

الأسماء المستعارة Alias names :
عندما يكون للطرف الواحد عدد من الوظائف تبعا لسجلات التحكم أو أعدادات بتات التهيئة , يتم إعلان أسماء مستعارة للوصول إلى الطرف باسم يعبر عن وظيفته .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:43

1- الجزء السابع : كتابة البرنامج الرئيسى

الآن لدينا ليد تحت سيطرتنا , دعنا نخبرها عما تفعله .

نريد أن تستمر الليد فى فعل ما نريده بصفة مستمرة "إلى الأبد" forever لذلك سوف نقوم بعمل حلقة غير منتهية :


برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-792d4e5441





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

فى هذه الحلقة سوف :

· نخبر الليد بالقيام بالتوصيل on .


· الآن تأخير (إنتظار) لربع ثانية (250ms) حتى يتثنى لنا رؤية الليد وهى فى حالة التوصيل :



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-19c49d1110








· ثم فصل الليد off :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-f8cac246d9





· ثم إنتظار آخر قبل العودة للتوصيل مرة أخرى :








برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-d61f0f85f7





· غلق (إنهاء) الحلقة , عندما يصل الميكروكونترولر لهذا الموقع يعود مرة أخرى إلى بداية الحلقة :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-e402f462bf





وهذا كل ما لدينا فى البرنامج . إحفظ الملف , وسوف يكون بالشكل التالى :







الكود:


-- ------------------------------------------------------
-- Title: Blink-a-led of the Microchip pic16f877a
--
-- Author: Rob Hamerling, Copyright (c) 2008..2009, all rights reserved.
--
-- Adapted-by:
--
-- Compiler: 2.4l
--
-- This file is part of jallib (http://jallib.googlecode.com)
-- Released under the BSD license (http://www.opensource.org/licenses/bsdlicense.php)
--
-- Description:
-- Sample blink-a-led program for Microchip PIC16f877a.
--
-- Sources:
--
-- Notes:
-- - File creation date/time: 14 Oct 2009 20:24:20.
--
-- ------------------------------------------------------
include 16f877a -- target PICmicro
-- This program assumes a 20 MHz resonator or crystal
-- is connected to pins OSC1 and OSC2.
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
--
enable_digital_io() -- disable analog I/O (if any)
--
--
-- You may want to change the selected pin:
alias led is pin_A0
pin_A0_direction = output
forever loop
led = ON
_usec_delay(250000)
led = OFF
_usec_delay(250000)
end loop
--



الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 8:46

ترجمة كود البرنامج إلى ملف سداسى عشر .hex :

الميكروكونترولر PIC لا يفهم الكود المكتوب بلغة JAL , ولكنه يفهم الأعداد السداسية عشر وهذه هى وظيفة المترجم compiler . يأخد المترجم القود القابل للقراءة بمعرفتنا ويحوله إلى كود يمكن أن يفهمه الميكروكونترولر PIC .

إذا كنت تستخدم المحرر JALEdit , إنقر على قائمة الترجمة compile واختار "ترجمة" compile :



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-3af4ffd9b4








إذا تم كل شىء على ما يرام فسوف يكون لديك الملف blink_a_led.hex موجود بنفس مجلد المشروع blink_a_led.jal , أما إذا كان هناك أخطاء errorsأو تحذيرات warnings , فإن المترجم سوف يخبرك بها .

الخطأ error يعنى أن الكود به مشكلة ولا يمكن توليد الملف .hex . إذا كان هناك تحذير (تنبيه) warning , فسوف يتم توليد الملف .hex وقد يمكن تشغيله على الميكروكونترولر PIC ولكن يجب تصحيح الكود .



كتابة ملف hex على الميكروكونترولر :

حسب نوع جهاز البرمجة يتم تحميل (حرق) الملف السداسى عشر بالميكروكونترولر .



تجربة البرنامج :

شغل الدائرة وشاهد النتائج . سوف ترى الليد وهو يومض .



تهنئة :

لم أنهيت برنامجك الأول بنجاح .

يمكنك مشاهدة النتيجة بالفديو على الرابط التالى :

https://www.youtube.com/watch?v=PYuPZO7isoo




الرجوع الى أعلى الصفحة اذهب الى الأسفل
metwally.mustafa
فريق أول
فريق أول
metwally.mustafa


عدد الرسائل : 4226
العمر : 38
الموقع : Egypt
العمل/الترفيه : automation engineer
تاريخ التسجيل : 12/01/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 9:20

جزاكم الله خيرا ............موضوع متميز

_________________
I am so far behind, I think i am first
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 11:20

ترجمة كود البرنامج إلى ملف سداسى عشر .hex :

الميكروكونترولر PIC لا يفهم الكود المكتوب بلغة JAL , ولكنه يفهم الأعداد السداسية عشر وهذه هى وظيفة المترجم compiler . يأخد المترجم القود القابل للقراءة بمعرفتنا ويحوله إلى كود يمكن أن يفهمه الميكروكونترولر PIC .

إذا كنت تستخدم المحرر JALEdit , إنقر على قائمة الترجمة compile واختار "ترجمة" compile :













إذا تم كل شىء على ما يرام فسوف يكون لديك الملف blink_a_led.hex موجود بنفس مجلد المشروع blink_a_led.jal , أما إذا كان هناك أخطاء errorsأو تحذيرات warnings , فإن المترجم سوف يخبرك بها .

الخطأ error يعنى أن الكود به مشكلة ولا يمكن توليد الملف .hex . إذا كان هناك تحذير (تنبيه) warning , فسوف يتم توليد الملف .hex وقد يمكن تشغيله على الميكروكونترولر PIC ولكن يجب تصحيح الكود .



كتابة ملف hex على الميكروكونترولر :

حسب نوع جهاز البرمجة يتم تحميل (حرق) الملف السداسى عشر بالميكروكونترولر .



تجربة البرنامج :

شغل الدائرة وشاهد النتائج . سوف ترى الليد وهو يومض .



تهنئة :

لم أنهيت برنامجك الأول بنجاح .

يمكنك مشاهدة النتيجة بالفديو على الرابط التالى :

https://www.youtube.com/watch?v=PYuPZO7isoo





باختصار يمكن كتابة الكود بالشكل التالى





الكود:


include 16f877a          -- إستدعاء أو ضم ملف خواص الميكروكونترولر المستهدف
enable_digital_io()      -- جميع المداخل/ المخارج رقمية
alias led is pin_A0      -- تسمية الطرف باسم مستعار
pin_A0_direction = output -- تحديد اتجاه التطرف كمخرج
forever loop              -- حلقة غير منتهية
led = ON                  -- إضاءة الليد
_usec_delay(250000)      -- إنتظار أو تأخير ربع ثانية
led = OFF                -- إطفاء الليد
_usec_delay(250000)      -- إنتظار أو تأخير ربع ثانية
end loop                  -- نهاية الحلقة الغير منتهية

الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 12:01

تنفيذ التدريب باستخدم برمجيات بروتيس :





برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-8c8543e756





الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 12:06

الملفات فى المرفقات على الرابط



http://www.eeecb.com/vb/showthread.php?p=3112#post3112
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 18:47

تدريب على التعامل مع المخارج فقط "وميض ليدات":

أولا : الميكروكونترولر المستخدم هو PIC16F877A :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-7d81b33eff





برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-967a34a445















الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 18:56

ثانيا : المكونات :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-fce43eaf9b





ملاحظة :

الأطراف 1,11,12,31,32 دائما يجب أن تكون موصلة بغض النظر عن المشروع الذى تقوم بإنشاءه . عند استخدام كريستال فإن الأطرف 13 , 14 أيضا تكون موصلة دائما .

الشىء الوحيد الذة تحتاج لاختياره فى هذا المشروع هو " مكان توصيل الليدات" وحيث أنهيمكننا اختيار إى أطراف من المنافذ ports B , C , D فسوف نختار أى أطراف عشوائيا ولتكن الأطراف 22(D3) و 23(C4) .



ثالثا : الدائرة الكهربية:



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-aeb036961f






الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالأربعاء 6 يونيو 2012 - 19:06

رابعا : البرمجة :

يتم كتابة البرنامج باستخدام المحرر JALEdit . بمجرد بدء المحرر سوف تشاهد صفحة فارغة حيث يتم إدخال البرنامج .




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-1b0f05f626







يتكون البرنامج من سلسلة أوامر . هذه الأوامر تخبر الميكروكونترولر PIC16F877A كما يجب عليه القيام بفعله . تبدأ الأوامر من إلى الصفحة إلى أسفلها ( بعض الأوامر سوف يسبب القفز إلى أجزاء مختلفة) . البرمجة بلغة JAL ليس لها شكل معين لتوزيع الأوامر على الصفحة . لكنك تحتاج إلى أن تكون قادرا على فهم البرنامج بنفسك لذلك سوف نضع بعض القواعد لأنفسنا :

1- كل سطر سوف يكون به أمر واحد فقط .

2- سوف نستخدم تعليقات مختصرة لشرح ما يفعله البرنامج .

3- نبدأ بإعداد الحلقات و الأوامر الشرطية .

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

الخطوة الأول فى البرنامج هى تحميل مكتبة . هذه المكتبة تحتوى على أوامر إضافية , والتى عادة لا يمكن أن تكون جزء من لغة JAL نفسها لأنها تختلف حسب نوع الميكروكونترولر . وأنت كمبرمج لا تحتاج لمعرفة ما تحتويه لذلك فهى مخبأة بعيدا فى مكتبة . الشىء الوحيد الذى تحتاج لفعله هو استخدام المكتبة التى تتمشى مع الميكروكونترولر . وحيث أننا نكتب برنامج للميكروكونترولر 16F877A يتم تحميل المكتبة "16f877a"




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-f6fda9aa9a





تحميل المكتبة يتم بالأمر التالى :

-- target PICmicro

include 16f877a




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-05c4b661c3





أوامر لغة JAL القياسية يتم التعرف عليها عن طريق المحرر وكود الألوان . المتغيرات والأوامر من المكتبة تكون باللون الأزرق .

· السطر الأول يبدأ بشرطتين "-" لبيان تعليق وهو يخصك أنت بينما يتم تجاهلة بالمترجم , أى أن الميكروكونترولر لن يفعل بالتعليق أى شىء .

· السطر الثانى يبدأ بالأمر include ثم اسم المكتية . كل شىء موجود بهذه المكتبة يتم إدراجه (ضمه) عند هذه النقطة (دون أن تراه ) .

حيث أن الأطراف الرقمية بالميكروكونترولر 16F877A يمكن أن تكون مخارج أو مداخل فإننا نحتاج لتعريف إتجاهات الأطراف التى ننوى استخدامها . فى هذا البرنامج نريد أن يكون كلا الطرفين مخارج لأننا نرغب فى تحويل الليدات المتصلة بهذه الأطراف بين حالة التوصيل on وحالة الفصل off .



صيغة أوامر تحديد ( تعيين) إتجاه البيانات :

pin_c4_direction = output

pin_d3_direction = output




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-3700972703







تذكر : يجب بيان "اتجاه الطرف" لكل طرف تستخدمه .

يتم عمل إضاءة الليد عن طريق تطبيق القدرة على الطرف المتصل به الليد . يتم فعل ذلك عن طريق جعل الطرف فى الحالة المنطقية "المرتفعة" high . يتم فصل القدرة عن الطرف عن طريق جعله فى الحالة المنطقية "المنخفضة" low .



صيغة الأوامر :

pin_d3 = high

pin_c4 = low


برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-3605212f2d





بعد تنفيذ هذه الأوامر فإن الليد المتصل بالطرف d3 يكون فى حالة توصيل "مضىء" والليد المتصل بالطرف c4 فى حالة فصل "مطفأ" . وحيث أننا نرغب فى عمل وميض بالليدات , فإن الخطوة التالية تكون العكس .

pin_d3 = low

pin_c4 = high




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-f0fec2859c





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

صيغة الأمر :

_usec_delay(1_000_000) -- one second delay




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-457c3948f5







العدد الموجود بين الأقواس يحدد مدة الانتظار مقدرة بالميكروثانية .

باستخدام هذه الأوامر فإن الليد سوف يومض لمرة واحدة فقط , لكن الوميض الحقيقى لا يتوقف . لذلك فإن أوامرنا تحتاج لأن تتكرر بصفة مستمرة , أى "إلى الأبد" forever .

صيغة حلقة التكرار الغير منتهى :

forever loop

end loop

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-44b1045998








يمكن أن يصبح البرنامج بالشكل :






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-3a42331c02







كما ترى تم إعداد هذه الحلقة بغرض التكرار الغير منتهى . وهذا يجعل من الواضح جدا أين تبدأ الحلقة وأين تنتهى . تذكر أن هذه هى القاعدة الثالثة التى وضعناها كمدخل للبرنامج .

الآن حان الوقت المناسب لإدخال البرنامج بالمحرر وحفظه .





الكود:


-- JAL 2.0.4
include 16f877
pragma target clock 20_000_000 -- oscillator frequency
-- configuration memory settings (fuses)
pragma target OSC HS -- HS crystal or resonator
pragma target WDT disabled -- no watchdog
pragma target LVP disabled -- no Low Voltage Programming
--
enable_digital_io() -- disable analog I/O (if any)
-- definitions
pin_c4_direction = Output
pin_d3_direction = Output

forever loop

      -- LEDs in starting state
      pin_d3 = high
      pin_c4 = low
      _usec_delay(1_000_000) -- one second delay

      -- LEDs switched
      pin_d3 = low
      pin_c4 = high
      _usec_delay(1_000_000) -- one second delay

end loop

الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالخميس 7 يونيو 2012 - 17:47

المفاتيح Switches :

يتناول هذا الجزء موضوع المشاريع التى تتعامل مع المفتاح .

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

ملخص المشاريع :

1- المؤقت Timer :

ويعرف أيضا بالمذبذب المتعدد أحادى الاستقرار ( أو المذبذب المتعدد للطلقة أو النبضة الواحدة) . عند الضغط اللحظى على المفتاح الضاغط يضىء الليد ويظل مضىء لفترة زمنية محددة ( مؤقت تأخير الفصل) .

2- مفتاح بطريقين Two way switch :

استخدام مفتاح ضاغط لتحويل حالة ليد بين التوصيل on والفصل off . يسمى أيضا مذبذب متعدد ثنائى الاستقرار .

3- النرد (زهر الطاولة) Dice

النرد الإلكتروتى كتطبيق لمفتاح بدون إرتدادات de-bounced .

4- جرس الباب السرى Secret doorbell :

جرس باب يعطى رنين فقط عند إدخال كود سرى عن طريق لوحة مفاتيح keypad .
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالخميس 7 يونيو 2012 - 17:55

المؤقت Timer :

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



معلومات فنية :

غير مسموح للطرف الذى يستخدم ( يعنى أن الميكروكونترولر يبحث عن هذا الطرف) بأن يكون "سائب" float بل دائما يجب أن يوصل إما إلى الجهد الموجب 5 V أو الأرضى 0V . هذا يعنى أن لدينا طريقتين لتوصيل المفتاح كما فى الشكل التالى :



برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-19efe10a30






فى الحالة الأولى (جهة اليسار) :

يكون الطرف فى الحالة العادية عند الجهد المرتفع 5 V . هذا الجهد يسمى "1" أو"true" أو high"" . بمجرد غلق المفتاح يهبط جهد الطرف إلى الصفر . هذا الجهد يسمى "0" أو "false" أو "low" . عند هذه النقطة , يمر تيار قدرة 0.5mA خلال المقاومة , هذا التيار ليس بالكثير , ولكنه يعطينا سببا لاستخدام المفتاح المفتوح فى الوضع العادى حيث يتم غلقه فقط عند الحاجة . بهذه التهيئة تتولد إشارة منخفضة low عند غلق المفتاح . تسمى هذه الحالة "فعال فى الحالة المنخفضة" active low .

فى الحالة الثانية (جهة اليمين) :

بنفس الطريقة السابقة يمكن القول أن هذه الحالة تمثل "فعال فى الحالة المرتفعة" active high والتى تبدو كطريقة تفكير طبيعية حيث أن غلق المفتاح (حالة التفعيل) يؤدى إلى تطبيق الجهد المرتفع 5 V على الطرف .

نظريا يمكن أن يتم توصيل المفتاح بإى طرف للميكروكونترولر PIC16F877A ( فيما عدا أطراف القدرة , بالطبع) . الميكروكونترولر PIC16F877A له أنواع مختلفة من الأطراف . من المهم تذكر أن المنفذ portA والمنفذ portE هى مداخل تناظرية . هذه المنافذ تقيس الجهد على أطرافها . يمكنك توصيل مفتاح بها , لكن فى كل مرة تريد أن تعرف ما إذا كان المفتاح مفتوح أو مغلق يجب عليك قياس الجهد وإلا يجب عليك تغيير الأطراف من مداخل تناظرية إلى رقمية أولا . لذلك من السهل استخدام الأطراف الرقمية الاعتيادية بالمنافذ portB,C,D .

إذا تم استخدام الطرف d1(pin20) فى نظام active low (الشكل الأيمن) , يمكن للبرنامج تحديد موضع المفتاح كما يلى :





الكود:


If pin_d1 == 1 then

            --switch on     

else

            -- switch off

end if



بينما للدائرة بالجانب الأيسر يمكن كتابة :



الكود:


If pin_d1 then

            --switch on     

else

            -- switch off

end if

الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالخميس 7 يونيو 2012 - 18:01

الدائرة الكهربية :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-fe1d14ec3f



البرنامج :

الفكرة :

الليد سوف يظل مضىء حتى بعد تحرير الزر الضاغط . أسهل طريقة لعمل ذلك هى استخدام عبارة التأخير .

فى بداية البرنامج نحتاج لتعريف اتجاه البيانات لكل طرف مستخدم كما يلى :

pin_d1_direction = input

pin_d2_direction = output

المفتاح متصل بالطرف d1 لذلك يكون هذا الطرف مدخل . الليد متصل بالطرف d2 لذلك يكون هذا الطرف مخرج .

لتسهيل تذكر ما هو متصل بالطرف يمكنك تسمية الأطراف فى البرنامج كما يلى :



var bit switch is pin_d1

var bit led is pin_d2



هذا يعنى أن "switch" يكافىء "pin_d1" وأن "led" يكافىء "pin_d2" . كما أن المترجم يفهم أن "on" تكافىء "high" و "off" تكافىء "low" .

البرنامج يكون بالشكل :




برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-5e0819f1b7







الكود:


-- JAL ver

include 16f877a -- target PICmicro

-- This program assumes a 20 MHz resonator or crystal

-- is connected to pins OSC1 and OSC2.

pragma target clock 20_000_000 -- oscillator frequency

-- configuration memory settings (fuses)

pragma target OSC HS -- HS crystal or resonator

pragma target WDT disabled -- no watchdog

pragma target LVP disabled -- no Low Voltage Programming

--

enable_digital_io() -- disable analog I/O (if any)

-- define pins

pin_d1_direction = input

pin_d2_direction = output

--

var bit switch is pin_d1

var bit led is pin_d2

 

-- initial condition

led = off

-- loop

forever loop

 

    if pin_d1 then -- condition

          -- switch is on

          led = on

          _usec_delay(3_000_000)

          led = off

    end if

 

end loop







الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالخميس 7 يونيو 2012 - 18:06

المفتاح ذو الوضعين Two way switch :

فى هذا المشروع يتم استخدام مفتاح ضاغط لتوصيل وفصل ليد . يسمى هذا المفتاح أيضا "مذبذب ثنائى الاستقرار" .

معلومات فنية :

المطلوب : عند الضغط على الزر الضاغط يتم توصيل (إضاءة) الليد إذا حدث وكان فى حالة الفصل (مطفأ) , أو فصله إذا حدث وكان موصل (مضىء) . الصعوبة تكمن فى عدم معرفة الحالة الراهنة لليد هل هو موصل أم مفصول ؟ يمكننا عمل ذلك ببساطة عن طريق التحقق من حالة طرفه ثم تغيرها .

سوف نستخدم " عامل operator المعكوس NOT أو المكمل "المتمم" Complement " . هذا العامل يقوم بتحويل الواحد "1" إلى معكوسه أو المكمل له وهو الصفر "0" وتحويل الصفر إلى معكوسه أو المكمل له وهو الواحد ويرمز له بالرمز "!" . لتوضيح ما يفعله هذا العامل نستخدم جدول الحقيقة التالى :






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-91973a5dde







نظرا لأن الطرف الرقمة يمكن فقط أن يكون له أحد حالتين ,الصفر أو الواحد , ( 0 or 1 ) يمكننا تغيير حالته كما يلى :



الكود:


pin_d2 = ! pin_d2

 


أو عند استخدام الاسماء المستعارة يكون :



الكود:


led = ! led


نتيجة لذلك فإن القطعة الصغيرة للكود التالى سوف تقوم بتوصيل وفصل الليد فى كل مرة يتم الضغط فيها على المفتاح الضاغط :



الكود:


if switch then

            led = ! led

end if


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



الكود:


while switch loop

end loop

 


المشكلة المتبقية هى "الارتدادات" bouncing . عندما تقوم بالضغط على المفتاح فإن التلامسات المعدنية يحدث بها ذبذبات أو ارتدادات . خلال زمن حدوث الارتدادات يتم فصل وتوصيل التلامسات عدة مرات . أنت لن تلاحظ ذلك , لكن الميكروكونترولر يشعر ويتأثر بها . سوف يراها كسلسلو من عمليات التحويل بين التوصيل والفصل on/off . فترة تأخير قصيرة تكون كافية للتخلص من هذا التأثير . الكود التالى يبين ذلك :





الكود:


if switch then

            led = ! led

            while switch loop

                        delay_10ms(1)

            end loop

end if

 


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



الكود:


flag = ! flag

pin_d2 = flag


بالطبع تحتاج أولا تعريف المتغير flsg كما يلى :
الرجوع الى أعلى الصفحة اذهب الى الأسفل
F.Abdelaziz
عقيد
عقيد



عدد الرسائل : 639
تاريخ التسجيل : 20/05/2009

برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Empty
مُساهمةموضوع: رد: برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)    برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Emptyالخميس 7 يونيو 2012 - 18:11

الدائرة الكهربية :






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-9bf81e375a





البرنامج :

عند تشغيل البرنامج يجب التأكد من أن الليد فى حالة الفصل off بالعبارة led = off .

شكل البرنامج كما يلى :






برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)  Domain-255c6b9e7e





الكود:


-- JAL 2.0.4

include 16f877a -- target PICmicro

-- This program assumes a 20 MHz resonator or crystal

-- is connected to pins OSC1 and OSC2.

pragma target clock 20_000_000 -- oscillator frequency

-- configuration memory settings (fuses)

pragma target OSC HS -- HS crystal or resonator

pragma target WDT disabled -- no watchdog

pragma target LVP disabled -- no Low Voltage Programming

--

enable_digital_io() -- disable analog I/O (if any)

var bit switch is pin_d1

var bit led is pin_d2

-- define pins

pin_d1_direction = input

pin_d2_direction = output

led = off

forever loop

if switch then

      led = ! led

      while switch loop

      _usec_delay(10000)-- 10 ms

      end loop

end if

end loop









النرد (زهر الطاولة) Dice :
الرجوع الى أعلى الصفحة اذهب الى الأسفل
 
برمجة الميكروكونترولر PIC بلغة JAL (Just Another Language)
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» حمل ملفات : أساسيات برمجة الميكروكونترولر بلغة السى والمترجم ميكروسى برو
» ترجمة وإعداد كتاب الميكروكونترولر PIC والبرمجة بلغة السى والمترجم mikroC PRO
» أساسيات البرمجة بلغة الأسمبلى 4- عملية كتابة البرنامج بلغة الأسمبلى وتطوير البرامج
» دورة برمجة الميكروكنترولر(PIC) وتطبيقاته بلغة C على اليوتيوب
» برمجة الميكروكونترولر PIC& AVR بالمخطط السلمى ladder diagram من البداية وحتى الاحتراف

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
منتدى التحكم الآلي والإلكترونيات :: منتديات التحكم الآلي والإلكترونيات :: منتدى الميكروكنترولر Micro Controller-
انتقل الى: