برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الميكروكونترولر PIC والبرجة بلغة السى والمترجم مسكروسى برو :: الميكروكونترولر PIC والبرمجة بلغة السى والمترجم ميكروسى برو
صفحة 1 من اصل 1
برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
سوف نستخدم البرمجة بلغة السى مع المترجم ميكروسى برو والميكروكونترولر PIC12F675 .
فى البداية نقوم بإنشاء مشروع جديد ، وسوف يتم إعداد المشاريع المستخدمة هنا بالإعدادات التالية :
• استخدام المذبذب الداخلى ،
• واستخدام الأطراف GP4 , GP5 كأطراف دخل / خرج ،
• مع تعطيل مؤقت الحراسة والإعادة واستخدام الطرف GP3 كطرف دخل .
وذلك عن طريق نافذة تحرير المشروع Edit Project . فى جميع المشاريع سوف نستخدم المذبذب الداخلى بالقيمة 4 ميجاهرتز كما هو مبين بالشكل التالى .
تمهيد :
علاوة على إعداد سجل منفذ الدخل/الخرج GPIO وسجل التحكم فى اتجاه منفذ الدخل/الخرج TRISIO ، ينبغى تهيئة (إعداد) السجل ANSEL (سجل اختيار وضع الدخل طرف الدخل التناظرى) والسجل CMCON (سجل التحكم فى المقارن التناظرى ) لاستخدام القنوات التناظرية كمداخل / مخارج رقمية كما يلى :
سوف نستخدم البرمجة بلغة السى مع المترجم ميكروسى برو والميكروكونترولر PIC12F675 .
فى البداية نقوم بإنشاء مشروع جديد ، وسوف يتم إعداد المشاريع المستخدمة هنا بالإعدادات التالية :
• استخدام المذبذب الداخلى ،
• واستخدام الأطراف GP4 , GP5 كأطراف دخل / خرج ،
• مع تعطيل مؤقت الحراسة والإعادة واستخدام الطرف GP3 كطرف دخل .
وذلك عن طريق نافذة تحرير المشروع Edit Project . فى جميع المشاريع سوف نستخدم المذبذب الداخلى بالقيمة 4 ميجاهرتز كما هو مبين بالشكل التالى .
تمهيد :
علاوة على إعداد سجل منفذ الدخل/الخرج GPIO وسجل التحكم فى اتجاه منفذ الدخل/الخرج TRISIO ، ينبغى تهيئة (إعداد) السجل ANSEL (سجل اختيار وضع الدخل طرف الدخل التناظرى) والسجل CMCON (سجل التحكم فى المقارن التناظرى ) لاستخدام القنوات التناظرية كمداخل / مخارج رقمية كما يلى :
- الكود:
CMCON = 7 ; // Set GP<2:0> to digital I/O
ANSEL=0; // digital I/O ANS<3:0>: Analog Select bits ,
//1 = Analog input , 0 = Digital I/O.
TRISIO = 0x08; //Set GP3as input (rest) ,and SET GP<5:4,2:0> as outputs
GPIO = 0; // Clear GPIO
رد: برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
التدريب رقم 1 :
الميكروكونترولر PIC12F675و برنامج وميض ليد والمحاكاة ببرنامج بروتيس :
هذا البرنامج يعتبر أول خطوة لتعلم كيفية استخدام الميكروكونترولر PIC12F675 فى مشاريعك .
الدائرة الكهربية :
أول شىء يجب ملاحظته عدم وجود مذبذب كريستال ، وذلك لاستخدام المذبذب الداخلى بتردد 4MHz كمصدر للساعة . وأيضا ، الطرف GP3 عادة يستخدم كطرف "إعادة" reset للميكروكونترولر PIC12F675 ، لكن لزيادة العدد الكلى للأطراف المتاحة للأغراض الأخرى لا يستخدم الطرف GP3 كطرف إعادة . لذلك ، لكى تجعل الميكروكونترولر PIC12F675 يعمل ، فقط تحتاج لتوفير القدرة بالطرف "1" (+5V) والطرف "8" (0V) لهذا الميكروكونترولر .
البرنامج :
قم بإنشاء مشروع جديد باستخدام معالج إنشاء مشروع جديد ، فى نهاية المطاف تظهر لك نافذة تحرير الكود وهى بمثابة منطعة العمل .
لعلك لاحظت أن النافذة تحتوى على السطور التالية :
هذه السطور قام بإنشائها المترجم نبابة عنك ولتذكيرك بأن أى برنامج بلغة السى يجب أن بحتوى على الأقل على هذه السطور والتى تعرف بما يسمى بالدالة الرئيسية main وأن برنامجك الرئيسى بجب أن يكتب بين قوس البداية والنهاية .
فى بداية البرنامج الرئيسى يجب كتابة إعدادات السجلات المختلفة حتى يتم إخبار (تهيئة) المترجم بذلك . فى هذا البرنامج سوف نقوم بجعل جميع الأطراف مداخل/مخارج رقمية فقط ، لذلك يجب التهيئة بالشكل المبين أدناه:
الخطوة التالية هى كتابة البرنامج الذى تريد تنفيذه بناء على خطة التنفيذ . هنا نريد عمل وميض لليد متصل بالطرف (7) GP0 مع تكرار هذا الوميض بصفة مستمرة .
عملية التكرار بصفة مستمرة تستلزم إنشاء حلقة تكرار لانهائى وهو ما يتحقق باستخدام الصيغة :
على أن يتم كتابة ما نريد تكرارة (يعرف بجسم أو كتلة حلقة التكرار ) بين الأقواس المجعدة .
وميض الليد يعنى فصل الليد لفترة نصف ثانية ثم توصيلها لفترة نصف ثانية أخرى ثم التكرار .
عملية فصل الليد تتحقق بجعل الطرف المتصل بالليد عند الجهد 0V وهو ما نعبر عنه بالصيغة GPIO.B0=0; .
عملية الحفاظ على الليد فى حالة فصل لمدة نصف ثانية تتحقق باستخدام دالة التأخير بقيمة 500 ملى ثانية بالصيغة delay_ms(500); .
عملية توصيل الليد تتحقق بجعل الطرف المتصل بالليد عند الجهد +5V وهو ما نعبر عنه بالصيغة GPIO.B0=1; .
عملية الحفاظ على الليد فى حالة توصيل لمدة نصف ثانية تتحقق باستخدام دالة التأخير بقيمة 500 ملى ثانية بالصيغة delay_ms(500); .
وتتكرر الخطوات السابقة بصفة مستمرة .
ملحوظات :
1- لعلك لاحظت وجود الفاصلة المنقوطة فقط فى نهاية كل تعليمة أو أمر .
2- ولعلك لاحظت أيضا وجود الأحرف (//) وبعدها شرح للتعليمة ، هذه الأخرف تخبر المترجم بأن ما يأتى بعدها وحتى نهاية السطر هو تعليق ومن ثم يقوم بتجاهله ولا يتم ترجمته .
فى نهاية المطاف يكون البرنامج بالشكل التالى :
الآن قم ببناء (ترجمة) البرنامج (لاتنسى تحرير أعدادات المشروع بالشكل المطلوب) وحمل الملف الناتج HEX على برنامج بروتيس وجرب وشاهد النتيجة .
الميكروكونترولر PIC12F675و برنامج وميض ليد والمحاكاة ببرنامج بروتيس :
هذا البرنامج يعتبر أول خطوة لتعلم كيفية استخدام الميكروكونترولر PIC12F675 فى مشاريعك .
الدائرة الكهربية :
أول شىء يجب ملاحظته عدم وجود مذبذب كريستال ، وذلك لاستخدام المذبذب الداخلى بتردد 4MHz كمصدر للساعة . وأيضا ، الطرف GP3 عادة يستخدم كطرف "إعادة" reset للميكروكونترولر PIC12F675 ، لكن لزيادة العدد الكلى للأطراف المتاحة للأغراض الأخرى لا يستخدم الطرف GP3 كطرف إعادة . لذلك ، لكى تجعل الميكروكونترولر PIC12F675 يعمل ، فقط تحتاج لتوفير القدرة بالطرف "1" (+5V) والطرف "8" (0V) لهذا الميكروكونترولر .
البرنامج :
قم بإنشاء مشروع جديد باستخدام معالج إنشاء مشروع جديد ، فى نهاية المطاف تظهر لك نافذة تحرير الكود وهى بمثابة منطعة العمل .
لعلك لاحظت أن النافذة تحتوى على السطور التالية :
- الكود:
void main() {
}
هذه السطور قام بإنشائها المترجم نبابة عنك ولتذكيرك بأن أى برنامج بلغة السى يجب أن بحتوى على الأقل على هذه السطور والتى تعرف بما يسمى بالدالة الرئيسية main وأن برنامجك الرئيسى بجب أن يكتب بين قوس البداية والنهاية .
فى بداية البرنامج الرئيسى يجب كتابة إعدادات السجلات المختلفة حتى يتم إخبار (تهيئة) المترجم بذلك . فى هذا البرنامج سوف نقوم بجعل جميع الأطراف مداخل/مخارج رقمية فقط ، لذلك يجب التهيئة بالشكل المبين أدناه:
- الكود:
void main() {
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
}
الخطوة التالية هى كتابة البرنامج الذى تريد تنفيذه بناء على خطة التنفيذ . هنا نريد عمل وميض لليد متصل بالطرف (7) GP0 مع تكرار هذا الوميض بصفة مستمرة .
عملية التكرار بصفة مستمرة تستلزم إنشاء حلقة تكرار لانهائى وهو ما يتحقق باستخدام الصيغة :
- الكود:
while(1)
{
…….
}
على أن يتم كتابة ما نريد تكرارة (يعرف بجسم أو كتلة حلقة التكرار ) بين الأقواس المجعدة .
وميض الليد يعنى فصل الليد لفترة نصف ثانية ثم توصيلها لفترة نصف ثانية أخرى ثم التكرار .
عملية فصل الليد تتحقق بجعل الطرف المتصل بالليد عند الجهد 0V وهو ما نعبر عنه بالصيغة GPIO.B0=0; .
عملية الحفاظ على الليد فى حالة فصل لمدة نصف ثانية تتحقق باستخدام دالة التأخير بقيمة 500 ملى ثانية بالصيغة delay_ms(500); .
عملية توصيل الليد تتحقق بجعل الطرف المتصل بالليد عند الجهد +5V وهو ما نعبر عنه بالصيغة GPIO.B0=1; .
عملية الحفاظ على الليد فى حالة توصيل لمدة نصف ثانية تتحقق باستخدام دالة التأخير بقيمة 500 ملى ثانية بالصيغة delay_ms(500); .
وتتكرر الخطوات السابقة بصفة مستمرة .
ملحوظات :
1- لعلك لاحظت وجود الفاصلة المنقوطة فقط فى نهاية كل تعليمة أو أمر .
2- ولعلك لاحظت أيضا وجود الأحرف (//) وبعدها شرح للتعليمة ، هذه الأخرف تخبر المترجم بأن ما يأتى بعدها وحتى نهاية السطر هو تعليق ومن ثم يقوم بتجاهله ولا يتم ترجمته .
فى نهاية المطاف يكون البرنامج بالشكل التالى :
- الكود:
void main()
{
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
while(1)
{
GPIO.B0 = 0 ; //LED off
delay_ms(500); // half sec delay
GPIO.B0 = 1 ; //LED on
delay_ms(500); // half sec delay
}
}
الآن قم ببناء (ترجمة) البرنامج (لاتنسى تحرير أعدادات المشروع بالشكل المطلوب) وحمل الملف الناتج HEX على برنامج بروتيس وجرب وشاهد النتيجة .
رد: برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
التعديل الأول :
جعل البرنامج أكثر سهولة للغهم والقراءة :
• بوضع جميع الإعدادات فى شكل برنامج فرعى (فى لغة السى يسمى دالة Function والتى سوف نتعرض لها لاحقا ) بالشكل التالى :
ويتم استدعائها فى بداية دالة البرنامج الرئيسى فى سطر واحد فقط وبصيغة تعليمة بالشكل التالى :
• مع استخدام توجيه التعريف #define : وهو ليس تعليمة (لذلك لا تستخدم فى نهايته الفاصلة المنقوطة) ولكنه مجرد توجيه لإخبار أن عليه استبدال تسمية ما ، وتكون ذات مغزى، بمعرف من ضمن معرفاته .
• واستخدام تعليق مكتوب على عدة أسطر يبدأ بالأحرف (/*) وينتهى بلأحرف (*/) .
• يتم تعريف طرف الليد LED على أنه GP0 ( يمكنك استخدام أى طرف تريده) عن طريق التوجيه #define .
مرة أخرى :
فى الدالة الرئيسية :
• فى البداية يتم تحديد الإعدادات : هنا يتم فصل عمل كل من المحول من تناظرى لرقمى ADC والمقارن لجعل الطرف GP0 وباقى الأطراف كأطراف دخل أو خرج رقمى (المحول ADC والمقارن فى الحالة الافتراضية يكونا فى حالة تشغيل . لذلك يجب علينا فصلهما لأستخدام جميع الاطراف كمداخل / مخارج رقمية ) .أيضا نستخدم السجل TRISIO لتحديد اتجاه أى طرف كمدخل أو كمخرج . وايضا استخدام السجل GPIO لجعل أى طرف فى الحالة المنطقية المرتفعة high أو فى الحالة المنطقية المنخفضة low .
• يتم تحويل حالة طرف الليد LED فى حلقة while بعد كل نصف ثانية . بهذه الطريقة يمكنك بسهولة جعل الليد يومض باستخدام الميكروكونترولر PIC12F675 .
جعل البرنامج أكثر سهولة للغهم والقراءة :
• بوضع جميع الإعدادات فى شكل برنامج فرعى (فى لغة السى يسمى دالة Function والتى سوف نتعرض لها لاحقا ) بالشكل التالى :
- الكود:
void init(){
CMCON = 7 ; // Set GP<2:0> to digital I/O
ANSEL=0; // digital I/O ANS<3:0>: Analog Select bits ,
//1 = Analog input , 0 = Digital I/O.
TRISIO = 0x08; //Set GP3as input (rest) ,and SET GP<5:4,2:0> as outputS
GPIO = 0; // Init GPIO
}
ويتم استدعائها فى بداية دالة البرنامج الرئيسى فى سطر واحد فقط وبصيغة تعليمة بالشكل التالى :
- الكود:
Init();
• مع استخدام توجيه التعريف #define : وهو ليس تعليمة (لذلك لا تستخدم فى نهايته الفاصلة المنقوطة) ولكنه مجرد توجيه لإخبار أن عليه استبدال تسمية ما ، وتكون ذات مغزى، بمعرف من ضمن معرفاته .
• واستخدام تعليق مكتوب على عدة أسطر يبدأ بالأحرف (/*) وينتهى بلأحرف (*/) .
- الكود:
/*
EX1: LED blinking using PIC12F675
4MHz internal clock
Master Clear Enable : Disable
Eng:F.Abdelaziz
Date :04-03-2016/
*/
//define LED pin
#define LED GPIO.F0
#define ON 1
#define OFF 0
void Init(){
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
}
//main function
void main()
{
Init(); //Call init function
while(1)
{
LED = OFF ; //LED off
delay_ms(500); // half sec delay
LED = ON ; //LED on
delay_ms(500); // half sec delay
}
}
• يتم تعريف طرف الليد LED على أنه GP0 ( يمكنك استخدام أى طرف تريده) عن طريق التوجيه #define .
مرة أخرى :
فى الدالة الرئيسية :
• فى البداية يتم تحديد الإعدادات : هنا يتم فصل عمل كل من المحول من تناظرى لرقمى ADC والمقارن لجعل الطرف GP0 وباقى الأطراف كأطراف دخل أو خرج رقمى (المحول ADC والمقارن فى الحالة الافتراضية يكونا فى حالة تشغيل . لذلك يجب علينا فصلهما لأستخدام جميع الاطراف كمداخل / مخارج رقمية ) .أيضا نستخدم السجل TRISIO لتحديد اتجاه أى طرف كمدخل أو كمخرج . وايضا استخدام السجل GPIO لجعل أى طرف فى الحالة المنطقية المرتفعة high أو فى الحالة المنطقية المنخفضة low .
• يتم تحويل حالة طرف الليد LED فى حلقة while بعد كل نصف ثانية . بهذه الطريقة يمكنك بسهولة جعل الليد يومض باستخدام الميكروكونترولر PIC12F675 .
رد: برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
تمهيد للتعديل الثالث : بعض عوامل التعامل مع البت المفردة Bitwise operators :
• عامل "المكمل" أو معكوس البت (~) : هذا العامل يعمل على معامل واحد فقط يكتب على يمينه ~LED ، هذا العامل يقوم بعكس حالة البت أو كل بت للمعامل لموجود على يمينه .
• العامل المنطقى XOR (أو الحصرية) ورمزه (^) ، هذا العامل له معاملان على جانبيه ، حيث يقوم بإجراء العملية المنطقية XOR ، وفيها يتم مقارنة البتات المناظرة لكل من المعاملين فإذا كان فقط أحد البتين (حصرى) بواحد كانت النتيجة بواحد وخلاف ذلك ( البتان بواحد أو البتان بصفر) تكون النتيجة بصفر .
علامة التساوى (=) فى لغة السى تستخدم كعامل تعيين أو تخصيص ولها معاملين ، حيث تقوم بنسخ المعامل الموجود على يمينها إلى المعامل الوجود على يسارها .
• عامل "المكمل" أو معكوس البت (~) : هذا العامل يعمل على معامل واحد فقط يكتب على يمينه ~LED ، هذا العامل يقوم بعكس حالة البت أو كل بت للمعامل لموجود على يمينه .
• العامل المنطقى XOR (أو الحصرية) ورمزه (^) ، هذا العامل له معاملان على جانبيه ، حيث يقوم بإجراء العملية المنطقية XOR ، وفيها يتم مقارنة البتات المناظرة لكل من المعاملين فإذا كان فقط أحد البتين (حصرى) بواحد كانت النتيجة بواحد وخلاف ذلك ( البتان بواحد أو البتان بصفر) تكون النتيجة بصفر .
علامة التساوى (=) فى لغة السى تستخدم كعامل تعيين أو تخصيص ولها معاملين ، حيث تقوم بنسخ المعامل الموجود على يمينها إلى المعامل الوجود على يسارها .
رد: برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
التعديل الثانى :
استخدام معامل المكمل أو عكس البت (~) :
استخدام معامل المكمل أو عكس البت (~) :
- الكود:
/*
EX1: LED blinking using PIC12F675
4MHz internal clock
Master Clear Enable : Disable
Eng:F.Abdelaziz
Date :04-03-2016/
*/
//define LED pin
#define LED GPIO.F0
#define ON 1
#define OFF 0
void Init(){
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
}
//main function
void main()
{
Init(); //Call init function
while(1)
{
LED = ~LED ; //Inverse the state of pin GP0
delay_ms(500); // half sec delay
}
}
رد: برمجة العائلة PIC12F6XX والمترجم ميكروسى يرو :
التعديل الثالث : استخدام العامل XOR وهو (^) :
- الكود:
/*
EX1: LED blinking using PIC12F675
4MHz internal clock
Master Clear Enable : Disable
Eng:F.Abdelaziz
Date :04-03-2016/
*/
//define LED pin
#define LED GPIO.F0
#define ON 1
#define OFF 0
void Init(){
ANSEL = 0x00; //set port as digital I/O , not analog input
CMCON = 0x07; //shut off the comparator
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
}
//main function
void main()
{
Init(); //Call init function
while(1)
{
LED = LED^1 ; //Inverse the state of pin GP0
delay_ms(500); // half sec delay
}
}
مواضيع مماثلة
» أنواع البيانات Types والمتغيرات والمترجم ميكروسى برو
» مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :
» مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» ما هو الميكروكونترولر Microcontroller ؟
» مارس 2014: متعة برمجة الميكروكونترولر PIC بلغة السى والمترجم (الكومبيلر) ميكروسى برو :
» مشاريع الميكروكونترولر PIC18F2550 مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» مراجعة برمجة الميكروكونترولر PIC من خلال مشاريع الميكروكونترولر PIC16F877A مع الدايودات المشعة للضوء والمترجم ميكروسى برو :
» ما هو الميكروكونترولر Microcontroller ؟
منتديات الهندسة الكهربية والإلكترونية والميكاترونكس والكومبيوتر :: الميكروكونترولر PIC والبرجة بلغة السى والمترجم مسكروسى برو :: الميكروكونترولر PIC والبرمجة بلغة السى والمترجم ميكروسى برو
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى