قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

mondo32
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 4
نشاط [ mondo32 ]
قوة السمعة:0
قديم 07-02-2013, 02:43 PM المشاركة 1   
افتراضي مساعدة في برمجة timer 0 Twitter FaceBook Google+



السلام عليكم ورحمة الله وبركاته
انا احتاج الى توضيح بخصوص كيفة برمجة التايمر 0 ليعمل كمؤقت وليس كعداد
pic16f877a ... شكرا

اعلانات

الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 666
نشاط [ funky112233 ]
قوة السمعة:92
قديم 07-02-2013, 02:59 PM المشاركة 2   
افتراضي


بسم الله الرحمن الرحيم

تفضل يا اخى

http://www.qariya.com/vb/showthread.php?t=85615

طبعا الشرح مفيهوش كلام تانى جزا الله صاحبة كل خير

ودة اربط كويس جدا بردوة

http://www.qariya.com/vb/showthread.php?t=46338

واذا احتجت مساعدة مباشرة انا تحت امرك ان شاء الله

بالتوفيق ان شاء الله

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

mondo32
:: مهندس ::
تاريخ التسجيل: Jan 2011
المشاركات: 4
نشاط [ mondo32 ]
قوة السمعة:0
قديم 07-02-2013, 03:10 PM المشاركة 3   
Post


بسم الله الرحمن الرحيم

تفضل يا اخى

http://www.qariya.com/vb/showthread.php?t=85615

طبعا الشرح مفيهوش كلام تانى جزا الله صاحبة كل خير

ودة اربط كويس جدا بردوة

http://www.qariya.com/vb/showthread.php?t=46338

واذا احتجت مساعدة مباشرة انا تحت امرك ان شاء الله

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


kishoko
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2011
المشاركات: 122
نشاط [ kishoko ]
قوة السمعة:0
قديم 08-02-2013, 04:56 PM المشاركة 4   
افتراضي


السلام عليكم ورحمة الله وبركاته
انا احتاج الى توضيح بخصوص كيفة برمجة التايمر 0 ليعمل كمؤقت وليس كعداد
pic16f877a ... شكرا
اخى العزيز لكى تستخدم تايمر0 كمؤقت لابد من عمل الاتى :
1- تفعيل مقاطعه تايمر0
2- مسح سجل علم مقاطعه تايمر0
3- تفعيل سجل المقاطعات العامه
4- ضبط اعدادات تايمر0 عن طريق سجل التحكم الخاص به

فمثلا اذا كنت تستخدم pic16f877a فان الخطوات البرمجيه كالاتى :
int T0_cnt;
void interrupt(){
IF(TMR0IE_BIT&&TMR0IF_BIT){++T0_cnt;TMR0IF_BIT=0;T MR0IE_BIT=1;}
}
void main(){
TRISB=0;PORTB=0;
TMR0IE_BIT=1;
TMR0IF_BIT=0;
GIE_BIT=1;
OPTION_REG=8;
While(1){

}
}
فى السطور السابقه عملنا على تشغيل مقاطعه تايمر0 كمؤقت ولكن كيف يمكننا استخدامه كمؤقت لحساب فترة زمنيه لعشر ثوانى مثلا ؟
الاجابه هى انه عندما يعمل تايمر0 كمؤقت زمنى فان قيمته تزداد من 0 و حتى 255 واذا زادت عن 255 تحدث للمؤقت طفحان اى ان قيمته تعود ل 0 و تحدث مقاطعه البرنامج الرئيسي اى ان البرنامج الرئيسي يعمل توقف مؤقت للأوامر التى يقوم بتنفيذها ثم يذهب سريعا لداله المقاطعات و من خلالها يمكننا تنفيذ اى اوامر كما هو واضح اننا نقوم بزيادة عداد معين T0_cnt و هذا العداد يعد كم مرة حدث طفحان لتايمر0 ولكن ما فائدة ان نعلم ذلك ؟
اصبر معى و ستفهم التالى , عندما يعمل تايمر0 كمؤقت زمنى فكل زيادة لقيمته تعتبر تعليمه قام البك بتنفيذها و بالتالى كل طفحان لتايمر0 يعتبر تنفيذ ل 256 تعليمه و اذا علمنا زمن تنفيذ التعليمه بالبك فسنعرف زمن طفحان تايمر0 و بالتالى يمكننا حساب اى مدة زمنيه .
لحساب زمن تنفيذ اى تعليمه يقوم بها البك نستخدم القانون التالى :
Instruction Time = (4*Timer Prescaler)/Clock in HZ
و تكون قيمه Instruction Time بالثانيه اذا كانت قيمه الكريستاله المستخدمه بالهرتز وليس ميجا هرتز فمثلا اذا استخدمنا المقسم الداخلى لنبضات تايمر0 "Prescaler 1:1" مع كريستاله بقيمه 4 ميجا هرتز عندئذ يكون زمن تنفيذ التعليمه هو 1us اى واحد مايكروثانيه و هى واحد من مليون جزء من الثانيه و عندئذ يكون زمن طفحان تايمر0 هو 256 مايكرو ثانيه و بالتالى اذا اردنا حساب مدة زمنيه قدرها 10 ثوانى فنجد ان قيمه ال10 ثوانى تعادل 39062.5 مرة من مرات طفحان تايمر0 و بالتالى سيكون البرنامج السابق كالتالى
int T0_cnt;
void interrupt(){
IF(TMR0IE_BIT&&TMR0IF_BIT){++T0_cnt;TMR0IF_BIT=0;T MR0IE_BIT=1;IF(T0_cnt==39062){T0_cnt=0;PORTB};}
}
void main(){
TRISB=0;PORTB=0;
TMR0IE_BIT=1;
TMR0IF_BIT=0;
GIE_BIT=1;
OPTION_REG=8;
While(1){

}
}
اخى العزيز اتمنى ان يكون شرحى لاقى قبولك ولكن لكى تفهم طبيعه عمل تايمر0 لابد ان تمسك بورقه وقلم لكى لا تتوة وسط الحسابات و اى استفسار احنا تحت امرك

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 10:29 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025