|
تحميل كتب مجانية, مراجع للتحميل كتب مجانية, كتب عربية للتحميل, كتب ألكترونية, كتب اجنبية, كتب تعليمية, مراجع عربية,كتب للتحميل, كتب للقراءة. |
| LinkBack | أدوات الموضوع | انواع عرض الموضوع |
#31
| ||
| ||
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 |
#32
| ||
| ||
نظام عمل موديول المؤقت Timer 0 كعداد : سوف يستخدم موديول المؤقت Tier 0 كعداد لعد نبضات الساعة الخارجية والتى تصل عن طريق الطرف RA4/T0CKI . نبضات الساعة الخارجية سوف يتم اشتقاقها من منبع التيار المتردد . منبع التيار المتردد المستخدم جيبى ذو جهد وتردد 120V, 60 Hz ( بالطبع يمكن تغيير الجهد والتردد إلى 220V , 50 Hz ) . سوف يتم أولا تخفيض الجهد إلى إشارة بجهد وتردد 9 V, 60 Hz ياستخدام محول أو أدابتر تيار متردد . وقبل توصيل هذه الإشارة إلى الطرف T0CKI يجب تقويمها (توحيدها) وقطع (قص – تحديد) قيمة جهد الذروة عند +5V . الدائرة التالية تحول الجهد 9 V, 60 Hz AC voltage إلى موجة مربعة تقريبا بجهد +5V مناسبة كمدخل للعداد من الطرف T0CKI . يتم توصيل الموجة المربعة إلى الطرف RA4/T0CKI للميكروكونترولر PIC16F628 . يبدأ السجل TMR0 من الصفر ويعد النبضات الواصلة فى فترة زمنية قدرها واحد ثانية . يتم عرض النتيجة على شاشة وحدة عرض LCD .عدد النبضات فى الثانية هو تردد الإشارة الواصلة وهو 60 Hz . الدائرة الكهربية :
__________________ angel4angel4angel4angel4angel4 |
#33
| ||
| ||
__________________ angel4angel4angel4angel4angel4 |
#34
| ||
| ||
كود: /* Timer0 as a counter Oscillator @ 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF */ // LCD module connections sbit LCD_RS at RB0_bit; sbit LCD_EN at RB1_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB0_bit; sbit LCD_EN_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // End LCD module connections // Define Messages char message1[] = "Frequency= Hz"; char *freq = "00"; void Display_Freq(unsigned int freq2write) { freq[0] = (freq2write/10)%10 + 48; // Extract tens digit freq[1] = freq2write%10 + 48; // Extract ones digit // Display Frequency on LCD Lcd_Out(1, 11, freq); } void main() { CMCON = 0x07 ; // Disbale comparators TRISB = 0b00000000; // PORTB All Outputs TRISA = 0b000110000; // INPUTS : RA4= T0CKI, RA5=MCLR OPTION_REG = 0b00101000; // Prescaler (1:1), TOCS =1 for counter mode Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CLEAR); // CLEAR display Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Out(1,1,message1); // Write message1 in 1st row do { TMR0=0; Delay_ms(1000); // Delay 1 Sec Display_Freq(TMR0); } while(1); // Infinite loop }
__________________ angel4angel4angel4angel4angel4 |
#35
| ||
| ||
__________________ angel4angel4angel4angel4angel4 |
مواقع النشر (المفضلة) |
| |