التعليق على البرنامج
1- مقدمة البرنامج : التعليقات : /*………*/
· اسم البرنامج : ADC_on LEDs لعرض نتائج التحويل ADC على ليدات
· الوصف : مثال بسيط لاستخدام مكتوبة المحول ADC .
· الميكروكونترولر : PIC16F887 .
· تردد المذبذب : HS, 08.0000 MHz
· المترجم mikroC PRO for PIC
· ملاحظات : المدخل التناظرى : القناة الثانية AN2 ويتم محاكاته بمقاومة متغيرة .والليدات متصلة بالمنفذ PORTC والمنفذ PORTD .
2- قبل الدخول إلى الدالة الرئيسية يتم تعريف متغير نوع unsigned int ( بسعة 2 بايت أى 16 خانة ليتسع لنتيجة التحويل ADC ذات العشر خانات ) بالاسم temp_res (أو أى اسم يناسب البرنامج الفعلى ) .
unsigned int temp_res;
3- بداية الدالة الرئيسية
void main() {
4- أعدادات سجلات التحكم والمنافذ :
أ- إعداد : اختيار القناة (أو القنوات) المطلوب أن تكون كمدخل تناظرى وجعل باقى القنوات كمداخل ومخارج رقمية للاستفادة منها وذلك عن طريق سجل اختيار القنوات السفلية ANSELوسجل اختيار القنوات العلوية (يعتمد على عدد القنوات بالميكروكونترولر ).
· إعداد القناة الثانية أى الطرف AN2 كمدخل تناظرى والخانة المتحكمة فيه هى الخانة الثالثة بالسجل ANSEL لذلك يجب وضع القيمة 0x04 = 0b00000100 بهذا السجل .
ANSEL = 0x04; // Configure AN2 pin as analog
· لا توجد أى قنوات تناظرية مطلوبة فى سجل التحكم ANSELH ولذلك يتم وضع القيمة صفر به حتى يمكن الاستفادة منه كمداخل / مخارج رقمية وهى الوظائف العامة .
ANSELH = 0; // Configure other AN pins as digital I/O
· إعداد جميع أطراف السجل PORTA كمداخل لأن به المدخل التناظرى .
· إعداد جميع أطراف السجل PORTC كمخارج لتوصيل ليدات بها .
· إعداد جميع أطراف المنفذ PORTD كمخارج لتوصيل ليدات بها .
TRISA = 0xFF; // PORTA is input
TRISB = 0; // PORTB is output
TRISC = 0; // PORTC is output
5- إنشاء حلقة غير منتهية باستخدام do { ……} while (1) وفيها يتم :
do {
· قراءة القيمة الناظرية من على القناة رقم (2) باستخدام الدالة ADC_Read(2) للحصول على نتيجة التحويل ذات العشر خانات ونسخها إلى المتغير ذات الستة عشر خانة temp_res .
temp_res = ADC_Read(2); // Get 10-bit results of AD conversion
· إرسال الثمانى خانات المنخفضة بالمتغير temp_res إلى الثمانى خانات الخاصة بالمنفذ PORTB .
PORTB = temp_res; // Send lower 8 bits to PORTB
· عمل إزاحة لمحتويات المتغير ذات الستة عشر خانة بمقدار بايت أى 8 خانات جهة اليمين وتكون النتيجة أن تزاح الخانتان الأولى والثانية فى البايت العلوى للمتغير (وهما باقى النتيجة التناظرية) إلى الخانتان الأولى والثانية فى البايت السفلى للمتغير , عندئذ يتم نسخ محتويات المتغير إلى المنفذ PORTC فيتم نقل الخانتان المتبقيتان من نتيجة التحويل إلى الخانة RC1 و RC0 لعرض النتيجة كاملة على PORTB + (RC0+RC1)
PORTC = temp_res >> 8; // Send 2 most significant bits to RC1, RC0
· تكرار الحلقة إلى مالا نهاية
} while(1);
6- نهاية الدالة الرئيسية والبرنامج .
}
المحاكاة :