|
تحميل كتب مجانية, مراجع للتحميل كتب مجانية, كتب عربية للتحميل, كتب ألكترونية, كتب اجنبية, كتب تعليمية, مراجع عربية,كتب للتحميل, كتب للقراءة. |
| LinkBack | أدوات الموضوع | انواع عرض الموضوع |
#26
| ||
| ||
256 x 256 μs = 65.536 ms وهى التى تناظر معمل قسمة 256 . قيم معامل القسمة يتم اختيارها برمجيا بواسطة الخانات PS0, PS1,PS2 " خانات اختيار معامل القسمة " بالسجل OPTION . من أجل تخصيص استخدام معامل القسمة مع موديول المؤقت Timer 0 يجب مسح clear = 0 الخانة PSA " تخصيص معامل القسمة " . إما إذا كانت الخانة PSA بواحد set = 1 فلا يتم تخصيص أى معامل قسمة لموديول المؤقت . فيما يلى تفاصيل السجل OPTION_REG والسجل INTCON : نظام العداد Counter Mode
__________________ angel4angel4angel4angel4angel4 |
#27
| ||
| ||
نظام العداد Counter Mode
__________________ angel4angel4angel4angel4angel4 |
#28
| ||
| ||
__________________ angel4angel4angel4angel4angel4 |
#29
| ||
| ||
كود: */ // Define LED connection sbit LED at RB0_bit; unsigned short Num; // Interrupt service routine void interrupt() { Num ++; // Interrupt causes Num to be incremented by 1 if(Num == 18) { LED = ~LED; // Toggle LED every sec Num = 0; } TMR0 = 39; // TMR0 returns to its initial value INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur } void main() { CMCON = 0x07 ; // Disbale comparators TRISB = 0b00000000; // PORTB All Outputs TRISA = 0b00100000; // PORTA All Outputs, Except RA5=MCLR LED = 0; Num = 0; OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0 TMR0 = 39; // Timer T0 counts from 39 to 255 INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts do { // You main programs goes here } while(1); // infinite loop }
__________________ angel4angel4angel4angel4angel4 |
#30
| ||
| ||
البرنامج : فى البداية سوف ننشأ زمن تأخير بقيمة واحد ثانية تقريبا باستخدام موديول المؤقت Timer 0 كمؤقت . الميكروكونترولر يعمل على تردد ساعة المذبذب Fosc = 4MHz لذلك يكون الزمن الدورى للتعليمة هو 1 μs . لتوليد فترة تأخير زمنى قدرها ثانية يجب أن يعد المؤقت مليون 1000000 دورة تعليمة . فإذا استخدمنا معامل القسمة prescaler بالقيمة 256 فإن العدد المطلوب يقل من مليون إلى 1000000/256 = 3906 . والآن إذا حملنا السجل TMR0 بالقيمة المسبقة 39 فإن طفحانه سوف يحدث بعد 256-39 = 217 counts وهكذا تكون عدد مرات الطفحان المطلوبة 3906/217 = 18 . بهذه الإعدادات فإنه بعد 18 مرة طفحان للسجل TMR0 (وفى كل مرة يتم تحميله مسبقا بالقيمة 39 ) ينقضى فترة زمنية قدرها واحد ثانية تقريبا . البرنامج يوظف هذا التأخير فى عمل وميض لليد . التعليق على البرنامج : 1- مقدمة (رأس) البرنامج : /*PIC16F628 2- تعريف الطرف RB0 (المتصل به الليد) باسم يسهل تتبع وفهم البرنامج وهو LED . هذا الطرف هو الخانة صفر من سجل وظائف خاصة وهو المنفذ PORTB لذلك نستخدم التعبير 1 sec timer using TIMER0 Oscillator @ 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF */ sbit LED at RB0_bit; " تذكر هذا التعريف" . والإعلان عن متغير العداد . // Define LED connection 3- دالة أو روتين خدمة المقاطعة والتى يتم استدعائها وتنفيذها عند حدوث المقاطعة وتحتوى على :sbit LED at RB0_bit; unsigned short Num; // Interrupt service routine void interrupt() { Num ++; // Interrupt causes Num to be incremented by 1 if(Num == 18) { 4- بداية الدالة الرئيسية حيث يتم الإعدادات LED = ~LED; // Toggle LED every sec Num = 0; } TMR0 = 39; // TMR0 returns to its initial value INTCON.T0IF = 0; // Bit T0IF is cleared so that the interrupt could reoccur } void main() {
# إعداد جميع أطراف المنفذ PORTB كمخارج . # إعداد جميع أطراف المنفذ PORTA كمخارج فيما عدا الطرف RA5 فيعد كمدخل MCLR . CMCON = 0x07 ; // Disbale comparators · الحالة الابتدائية : الليد مطفأ وعداد المؤقت بصفر TRISB = 0b00000000; // PORTB All Outputs TRISA = 0b00100000; // PORTA All Outputs, Except RA5=MCLR LED = 0; · إعدادات موديول المؤقت Timer 0 والسجل TMR0 : Num = 0; # فى سجل الخيارات OPTION_REG يتم تخصيص معامل القسمة لموديول المؤقت Timer 0 واختيار معامل القسمة له بالقيمة 256 . OPTION_REG = 0x07; // Prescaler (1:256) is assigned to the timer TMR0 # تحميل السجل TMR0 بقيمة مسبقة قدرها 39 ليقوم بالعد بدءا منها وحتى 255 حيث يحدث الطفحان والمقاطعة . TMR0 = 39; // Timer T0 counts from 39 to 255 # فى سجل التحكم فى المقاطعة INTCON : تمكين المقاطعة بسجل المؤقت TMR0 عند طفحانه والتمكين العام للمقاطعات INTCON = 0xA0; // Enable interrupt TMR0 and Global Interrupts · الدخول فى حلقى غير منتهية تحتوى على البرنامج المطلوب تنفيذه بينما يعمل المؤقت فى الخلفية من وراء الكواليس . do { نظام عمل موديول المؤقت Timer 0 كعداد : // You main programs goes here } while(1); // infinite loop }
__________________ angel4angel4angel4angel4angel4 |
مواقع النشر (المفضلة) |
| |