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

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

valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 16-08-2013, 02:16 PM المشاركة 1   
ha مساعدة في الريجيسترات cmcon و ANSEL و OSCCON Twitter FaceBook Google+



السلام عليكم
اريد شرح الريجسترات cmcon و ANSEL و OSCCON
و مهامهم في الميكرو كونترولر خصوصا دور كل بت

و اذا كان هناك ريجيسترات اخرى ارجو منكم شرحها

عندي مشكل تاني هو لما اقوم بهدا الامر

if(T>=Tmax)
{ porta.f5=0; porta.f3=1; porta.f1=1;}
if(T<Tmax)
{ porta.f5=1; porta.f3=0; porta.f1=0;}

فقط البورت RA5 من يعمل
لانو لما تصبح T>=Tmax البوتان RA3 و RA1 لا يصبحان 5 فولت عكس الامر اللي وضعته في التعليمة ايف

شكرا لكم
تحياتي

اعلانات

valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 17-08-2013, 01:26 PM المشاركة 2   
افتراضي


ارجو المساعد

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 17-08-2013, 03:52 PM المشاركة 3   
افتراضي


السلام عليكم
اريد شرح الريجسترات cmcon و ANSEL و OSCCON
و مهامهم في الميكرو كونترولر خصوصا دور كل بت

و اذا كان هناك ريجيسترات اخرى ارجو منكم شرحها

عندي مشكل تاني هو لما اقوم بهدا الامر

if(T>=Tmax)
{ porta.f5=0; porta.f3=1; porta.f1=1;}
if(T<Tmax)
{ porta.f5=1; porta.f3=0; porta.f1=0;}

فقط البورت RA5 من يعمل
لانو لما تصبح T>=Tmax البوتان RA3 و RA1 لا يصبحان 5 فولت عكس الامر اللي وضعته في التعليمة ايف

شكرا لكم
تحياتي
سلام عليكم
ANSEL
ريجستر مهمته تحديد اي طرف يعمل انلوك ام ديجيتل هو معناه anloge selector
لناخذ على سبيل مثال PIC16F676
http://upload.qariya.info/images/qar...53db1d3157.png
هنا اذا وضعت في بت =1 معناه اذا طرف اصبحanalog ام اذا وضعت 0 يصبح digital

مثال الاخر
pic16f887
له ريجسترات اثنان هما ansel , anselh
http://upload.qariya.info/images/qar...f8090a6062.png
http://upload.qariya.info/images/qar...28646c57d5.png
طبعا تلاحظ اخي من مخطط اي بك اذا رايت مكتوب ام اي رجل بــ AN معناه يمكن ان يشتغل انلوك او ديجيتل لذا عليك برمجته في بدايه وسجل ANSEL او ADCON1
وغيرها من سجلات مهمتها هي تحديد اي طرف يعمل انلوك ام ديجيتل
================================================
OSCCON
ريجيستر يتحكم بتردد ساعه اي عندما تريد تغير تردد كرستاله عليك ضبط هذا سجل
لناخذ على سبيل مثال PIC16F887
http://upload.qariya.info/images/qar...1d84ce4b1f.png
http://upload.qariya.info/images/qar...427c40f43f.png
سوف تلاحظ ان كل سجل متكون من 8 بتات
تلاحظ مثلا في صوره bit 6-4 IRCF<2:0>: Internal Oscillator Frequency Select bits
يعني يخبرك انه من بت 4 الى بت 6
اعطاك عده حالات وفي كل حاله يتغير تردد كرستاله فمثلا انت تريد تردد 8mhz
اذن لابد وضع هذه بتات كلها 111
كيف تضع ذلك اكتب اسم بت واخبره =1 يعني لمثالنا

;IRCF2_bit=1 ; IRCF1_bit=1 ; ;IRCF1_bit=1
هنا اصبح تردد 8 ميكاهيرتز
ولكن اذا وضعت تردد كرستاله 4 ميكاهيرتز فلاداعي بتغير هذا بتات لكونه هو مبرمج على 4 ميكاهيرتز
=================================================
بالنسبه للكود
جرب كتابه الامر porta=0b00001010 وهذا يعني خليت porta.f3=porta.f1=1
او اكتب porta=10;
اي حولت porta=0b00001010 بنظام باينري الى عشري اي porta=10;


اما porta.f5=1
porta=0b00100000
او porta=32

http://upload.qariya.info/images/qar...546f16f348.png
طبعا هذا طريقه راح يتأثر بورت كله واذا ردت لايتاثر بورت كله سوف اخبرك بطريقه


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 17-08-2013, 09:35 PM المشاركة 4   
افتراضي


سلام عليكم
ANSEL
ريجستر مهمته تحديد اي طرف يعمل انلوك ام ديجيتل هو معناه anloge selector
لناخذ على سبيل مثال PIC16F676
http://upload.qariya.info/images/qar...53db1d3157.png
هنا اذا وضعت في بت =1 معناه اذا طرف اصبحanalog ام اذا وضعت 0 يصبح digital

مثال الاخر
pic16f887
له ريجسترات اثنان هما ansel , anselh
http://upload.qariya.info/images/qar...f8090a6062.png
http://upload.qariya.info/images/qar...28646c57d5.png
طبعا تلاحظ اخي من مخطط اي بك اذا رايت مكتوب ام اي رجل بــ AN معناه يمكن ان يشتغل انلوك او ديجيتل لذا عليك برمجته في بدايه وسجل ANSEL او ADCON1
وغيرها من سجلات مهمتها هي تحديد اي طرف يعمل انلوك ام ديجيتل
================================================
OSCCON
ريجيستر يتحكم بتردد ساعه اي عندما تريد تغير تردد كرستاله عليك ضبط هذا سجل
لناخذ على سبيل مثال PIC16F887
http://upload.qariya.info/images/qar...1d84ce4b1f.png
http://upload.qariya.info/images/qar...427c40f43f.png
سوف تلاحظ ان كل سجل متكون من 8 بتات
تلاحظ مثلا في صوره bit 6-4 IRCF<2:0>: Internal Oscillator Frequency Select bits
يعني يخبرك انه من بت 4 الى بت 6
اعطاك عده حالات وفي كل حاله يتغير تردد كرستاله فمثلا انت تريد تردد 8mhz
اذن لابد وضع هذه بتات كلها 111
كيف تضع ذلك اكتب اسم بت واخبره =1 يعني لمثالنا

;IRCF2_bit=1 ; IRCF1_bit=1 ; ;IRCF1_bit=1
هنا اصبح تردد 8 ميكاهيرتز
ولكن اذا وضعت تردد كرستاله 4 ميكاهيرتز فلاداعي بتغير هذا بتات لكونه هو مبرمج على 4 ميكاهيرتز
=================================================
بالنسبه للكود
جرب كتابه الامر porta=0b00001010 وهذا يعني خليت porta.f3=porta.f1=1
او اكتب porta=10;
اي حولت porta=0b00001010 بنظام باينري الى عشري اي porta=10;


اما porta.f5=1
porta=0b00100000
او porta=32

http://upload.qariya.info/images/qar...546f16f348.png
طبعا هذا طريقه راح يتأثر بورت كله واذا ردت لايتاثر بورت كله سوف اخبرك بطريقه
بارك الله فيك اخوي
شرح مميز بارك الله فيك
بالنسبة للنقطة الاخيرة
انا لا اريد ان يتاثر كل البورت لاني مستعمل الرجول الاخري
ارجو منك افادتي بالطريقة الثانية و لك كل الشكر و التقدير


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 18-08-2013, 02:29 AM المشاركة 5   
افتراضي


اخي كريم سلام عليكم
انت تعلم انه اذا كتبت الامر porta=0 معناه كل اطرافه =0 ولكني اريد فقد الاطراف معينه هي لي تتغير
اولا ملاحظه احيانا قد يكتب porta.f0=1 هي نفسها RA0_bit=0
لكن ماهو الفرق
الفرق porta.f0=1 تكتب هكذا فقط في مايكروسي
RA0_bit=0 هذه تكتب في لغه لاني اتحكم بريجستر مباشره انظر صوره
http://upload.qariya.info/images/qar...e3c3ab985b.png
ماتلاحظه بالصوره ان كل بت له اسم معين فمثلا portb.f3 هذه في مايكروسي
اما عامه استطيع كتابتها بشكل RB3_bit ( وانا افضل تعامل مع ريجستر بشكل مباشر)
يعني بشكل في ريجستر عندما تريد تحكم في بت معين اخذه اسمه من ريجستر واضع بعد اسم هذا الامتداد bit _ فانه سوف يتحكم به مباشره
اما اذا كتب اسم ريجستر فانه سوف يتحكم بكل بتات مثلا porta=0 معناها كل بتات راح تصبح قيمهما بصفر
=========================================
نرجع للموضوع
دعنا نفترض اني اريد اتحكم بت رقم 1 ورقم 3 وبت رقم 5 من بورت a وبقيه لاتتأثر
هنا استخدم عباره & ( shift+7 من لوحه المفاتيح)
كيف اكتبها
porta=porta&0b11010101+num
ماذا فعلت هنا 0b11010101 لو امعنت نظر فيه لوجدت اني بت الذي اريد لايتاثر وضعته بــ 1 وبت الذي اريد تحكم به جعلته بــ 0 تسمى هذه طريقه بعزل بتات
كيف تعمل & لنفرض عندي مدخلين a b ومخرج z
a b z
0 0 0
0 1 0
0 0 1
1 1 1
ا
اي انني لو عملت porta.f7 & مع 1 نتيجه = porta.f7 لانه ماراح يتاثر
اما اذا عملت porta.f7 & مع 0 نتيجه => porta.f7=0
وعليه في مثالنا
porta=porta&0b11010101+num
راح يصفر فقط RA5_bit=0 RA3_bit=0 RA1_bit=0
وبقيه يعتمد على قيم موجوده لاني عملت & لهما مع 1 وليس مه 0
اما ماهو num
الان يا اخي عزل بتات وتريد ان تضيف لهما قيم
RA5_bit=1 RA3_bit=1 RA1_bit=0
هنا num=0b00101000
هنا اخي عندما تجمع مع بورت بعد عزل بتات مطلوبه لابد في عمليه تجمع ان تجمع 0 مع كل بت الذي لاتريده لا يتاثر اي عكس مافعلته & اما بتات الي انت تتحكم بها اذا تريدها=1 اجمع معها 1 تريدها 0 اجمع معها 0
ملاحظه راح اكتب ماوضعته اعلاه بنظام عشري

http://upload.qariya.info/images/qar...1b3f6c5fbc.png
http://upload.qariya.info/images/qar...1373d7ef08.png
;porta=porta&213+40
وهكذا اخي
باختصار اعمل & مع1 للبت الذي لايتاثر وعمل & مع 0 للبت الذي تريده
في عمليه جمع وهنا انا فرضت اسم متغير num وطبعا من نوع char اي 8 بت لان اي بورت من 8 بت
تضع 0 في كل بت لاتريده ان يتاثر واضع اي قيمه تريدها 0 او 1 في بت الذي تريد تحكم به
اخي لاتتردد في سؤال حتى تفهم هذه فقره لانها مهمه خصوصا اذا كان بورت يتحكم باكثر من حمل فبطبع لاتريده ان يتاثر
تحياتي


Mohammedalharbi
:: مهندس متواجد ::
تاريخ التسجيل: Dec 2012
المشاركات: 58
نشاط [ Mohammedalharbi ]
قوة السمعة:0
قديم 18-08-2013, 06:28 AM المشاركة 6   
افتراضي


السلام عليكم
ان شاءالله اشتغل الكود معاك اخوي valion . اذا لازالت المشكلة موجودة, ياليت لو تذكر نوع ال pic المستخدم حتى نقدر نساعدك.


valion
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: Algeria
المشاركات: 46
نشاط [ valion ]
قوة السمعة:0
قديم 18-08-2013, 10:05 AM المشاركة 7   
افتراضي


اخي كريم سلام عليكم
انت تعلم انه اذا كتبت الامر porta=0 معناه كل اطرافه =0 ولكني اريد فقد الاطراف معينه هي لي تتغير
اولا ملاحظه احيانا قد يكتب porta.f0=1 هي نفسها RA0_bit=0
لكن ماهو الفرق
الفرق porta.f0=1 تكتب هكذا فقط في مايكروسي
RA0_bit=0 هذه تكتب في لغه لاني اتحكم بريجستر مباشره انظر صوره
http://upload.qariya.info/images/qar...e3c3ab985b.png
ماتلاحظه بالصوره ان كل بت له اسم معين فمثلا portb.f3 هذه في مايكروسي
اما عامه استطيع كتابتها بشكل RB3_bit ( وانا افضل تعامل مع ريجستر بشكل مباشر)
يعني بشكل في ريجستر عندما تريد تحكم في بت معين اخذه اسمه من ريجستر واضع بعد اسم هذا الامتداد bit _ فانه سوف يتحكم به مباشره
اما اذا كتب اسم ريجستر فانه سوف يتحكم بكل بتات مثلا porta=0 معناها كل بتات راح تصبح قيمهما بصفر
=========================================
نرجع للموضوع
دعنا نفترض اني اريد اتحكم بت رقم 1 ورقم 3 وبت رقم 5 من بورت a وبقيه لاتتأثر
هنا استخدم عباره & ( shift+7 من لوحه المفاتيح)
كيف اكتبها
porta=porta&0b11010101+num
ماذا فعلت هنا 0b11010101 لو امعنت نظر فيه لوجدت اني بت الذي اريد لايتاثر وضعته بــ 1 وبت الذي اريد تحكم به جعلته بــ 0 تسمى هذه طريقه بعزل بتات
كيف تعمل & لنفرض عندي مدخلين a b ومخرج z
a b z
0 0 0
0 1 0
0 0 1
1 1 1
ا
اي انني لو عملت porta.f7 & مع 1 نتيجه = porta.f7 لانه ماراح يتاثر
اما اذا عملت porta.f7 & مع 0 نتيجه => porta.f7=0
وعليه في مثالنا
porta=porta&0b11010101+num
راح يصفر فقط RA5_bit=0 RA3_bit=0 RA1_bit=0
وبقيه يعتمد على قيم موجوده لاني عملت & لهما مع 1 وليس مه 0
اما ماهو num
الان يا اخي عزل بتات وتريد ان تضيف لهما قيم
RA5_bit=1 RA3_bit=1 RA1_bit=0
هنا num=0b00101000
هنا اخي عندما تجمع مع بورت بعد عزل بتات مطلوبه لابد في عمليه تجمع ان تجمع 0 مع كل بت الذي لاتريده لا يتاثر اي عكس مافعلته & اما بتات الي انت تتحكم بها اذا تريدها=1 اجمع معها 1 تريدها 0 اجمع معها 0
ملاحظه راح اكتب ماوضعته اعلاه بنظام عشري

http://upload.qariya.info/images/qar...1b3f6c5fbc.png
http://upload.qariya.info/images/qar...1373d7ef08.png
;porta=porta&213+40
وهكذا اخي
باختصار اعمل & مع1 للبت الذي لايتاثر وعمل & مع 0 للبت الذي تريده
في عمليه جمع وهنا انا فرضت اسم متغير num وطبعا من نوع char اي 8 بت لان اي بورت من 8 بت
تضع 0 في كل بت لاتريده ان يتاثر واضع اي قيمه تريدها 0 او 1 في بت الذي تريد تحكم به
اخي لاتتردد في سؤال حتى تفهم هذه فقره لانها مهمه خصوصا اذا كان بورت يتحكم باكثر من حمل فبطبع لاتريده ان يتاثر
تحياتي
الله يعطيك الف عافية اخوي محمود
و الله كفيت و وفيت
بوزكت
الحمد لله عامتني اليوم شيأ جديد بارك الله فيك
ادا ما ثقلت علبك يالغالي
عندي استفسار اخير
عن طلريقة استعمال المقاطعة في التايمر
انا لحد الان استعمل الديلاي
و لاكن وصلت لحد حيث الديلاي لا تصلح

و الف شكر لك

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب faresbba34 ( أعجبته المشاركة )

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 18-08-2013, 02:49 PM المشاركة 8   
افتراضي


الله يعطيك الف عافية اخوي محمود
و الله كفيت و وفيت
بوزكت
الحمد لله عامتني اليوم شيأ جديد بارك الله فيك
ادا ما ثقلت علبك يالغالي
عندي استفسار اخير
عن طلريقة استعمال المقاطعة في التايمر
انا لحد الان استعمل الديلاي
و لاكن وصلت لحد حيث الديلاي لا تصلح

و الف شكر لك
سلام عليكم
امر بسيط اخي
طبعا الفرق بين ديلي وتايمرزيرو هو ان مايكرو يصبح مشغول في تنفيذ الامر ديلي ولاينفذ اي شي الا باستخدام بعض حيل
اما في تايمرزيرو فان تايمر يكون عمله مستقل تماما عن عمل مايكرو وينطبق على حال pwm ايضا يعمل باستقلال تام عن مايكرو
نرجع كيف نفعل تايمر زيرو
=================
هنا لابد من تفعيل سجل مقاطعات وهما intcon , option_reg
http://upload.qariya.info/images/qar...2c8e5d399c.png
http://upload.qariya.info/images/qar...3afd5fae10.png

INTCON :

وهو كما في الصورة عبارة عن سجل مكون من (8Bit) كل( Bit ) له وظيفة محددة وتوضيحها كالتالي:

البيت رقم 7 : وهو بيت تفعيل جميع انواع المقاطعات :عندما نضع القيمة (1)في هذا البيت يقوم بتفعيل جميع انواع المقاطعات الموجودة في المتحكم وبدونه لن تعمل اي مقاطعة في المتحكم.طبعا يتم الغاء جميع المقاطعات بوضع القيمة( 0) في هذا البيت.

البيت رقم6: وهو بيت تفعل مقاطعة الملحقات (مثل تفعيل مقاطعة المحول من ثماثلي الى ديجيتال ADC ) فعندما نريد استخدام مقاطعات للاجزاء الملحقة نقوم بوضع القيمة(1) في هذا البيت ، اما لالغائها فنقوم بوضع القيمة(0) في هذا البيت.بما ان المعظم لا يستخدم الملحقات لذلك فنحن نضع القيمة(0) غالبا في هذا البيت.

البيت رقم5: وهو بيت تفعيل مقاطعة طفحان التايمر زيرو، ولكن ماذا يعني هذا (طفحان التايمر زيرو)؟؟ان التايمر زيرو هو سجل مكون من 8 بيت ايضا، ويستطيع هذا السجل ان يعد من القيمة(00000000) وحتى القيمة (11111111) اي من صفر وحتى 255 فعتدما يصل الى القيمة الاخيرة وهي 255 فان التايمر يعود الى القيمة (0) بعدها (وهذا يدعي بالطفحان عندما تعود قيمة المسجل من 255 الى صفر بسبب وصوله للقيمة العليا للسجل )، فعندما نقوم بتفعيل هذه المقاطعة بوضع القيمة (1) في هذا البيت فان المقاطعة ستحدث عندما تتغير قمية العدد في التايمر زيرو من 255 الى صفر، وطبعا فان الغائها يتم بوضع القمية (0) في هذا البيت.وهذه من اهم المقاطعات وسنذكر السبب لاحقا.

البيت رقم4: وهو بيت تفعيل المقاطعة على الطرف صفر في البورت B اي انه عنما يتغير الجهد على الطرف (RB0) من القيمة صفر الى 5 فولت او العكس تحدث عملية مقاطعة في المتحكم وعندها يمكننا ان نطلب من المتحكم ان ينفذ مجموعة تعليمات عند حدوث هذه المقاطعة،يتم تفعيل هذه المقاطعة بوضع القيمة (1) في هذا البيت والغائها يتم بوضع القيمة (0) في هذا البيت.

البيت رقم3: وهو بيت تفعيل المقاطعة عندما يتغير الجهد على واحد من الاطراف رقم 4 او 5 او 6 او 7 للبورت B اي عندما يتغير الجهد على واحد من الاطراف (RB4\RB5\RB6\RB7) على الاقل من القمية صفى الى 5 فولت او العكس، وتحدث هذه المقاطعة عندما يتغير واحد على الاقل من الاطراف السابقة ، يتم تفعيل هذه المقاطعة بوضع القيمة (1) في هذا البيت والغائها يتم بوضع القيمة (0) في هذا البيت.

البيت رقم 2: وهو علم حدوث طفحان في التايمر زيرو، ايضا نسال انفسنا ماذا يعني علم حدوث مقاطعة,الان كما نعرف في الرياضات بشكل عام مثل كرة القدم فانه عند خروج الكرة من الملعب فان الحكم برفع العلم ليدل على ان الكرة خرجت خارج الملعب.. وهذه وظيفة العلم هنا. فعندما يحدث طفحان وتغير في القيمة من 255 الى القمية صفر فان هذا البيت يتحول تلقائيا من القيمة صفر الى القيمة واحد دلالة على حدوث طفحان للتايمر..طبعا تتم تصفير هذا البيت في بداية البرنامج وذلك ليستطيع ان يتغير الى القيمة واحد عند حدوث الطفحان في التايمر.

البيت رقم1: وهو علم حدوث تغير في الطرف RB0 اي انه حدث هناك تغير للجهد على الطرف RB0 من القيمة صفر الى واحد او العكس .فعند حدوث تغيير للجهد على هذا الطرف تتحول قيمة هذا البيت من صفر الى واحد ، طبعا تتم تصفير هذا البيت في بداية البرنامج وذلك ليستطيع ان يتغير الى القيمة واحد عند حدوث تغيير للجهد على هذا الطرف.

البيت رقم0: وهو علم حدوث تغير في احد الاطراف (RB4\RB5\RB6\RB7) اي تغير احد هذه الاطراف على الاقل من القيمة صفر الى 5 فولت او العكس . فعند حدوث التغير لاحد الاطراف يتغير هذا البيت من القمية صفر الى واحد ، طبعا تتم تصفير هذا البيت في بداية البرنامج وذلك ليستطيع ان يتغير الى القيمة واحد عند حدوث تغيير للجهد على احد الاطراف السابقة ..

بالنسبه لريجيستر option_reg

http://upload.qariya.info/images/qar...86edee74db.png
http://upload.qariya.info/images/qar...48a87fffb6.png

فاننا نحتاج من هذا ريجيستر مجال تقسيم
ايضا في تايمر زيرو نحتاج
1- تفعيل انتربت لتمكين اي داله تعمل بانتربت ونكتب
;GIE_BIT=1
2-لتفعيل مقاطعه تايمرزيرو نكتب
;T0IE_BIT=1
3-نصفر طفحان تايمرزيرو لماذا نصفره انظر للملاحظه
كود:
1 = TMR0 register has overflowed (must be cleared in software)
ونكتب في برنامج ;T0IF_BIT=0
http://upload.qariya.info/images/qar...0b89edbf94.png
4- عامل تقسيم نحوله الى تايمر زيرو اي نكتب ;PSA_BIT=0
5- نختار نسبه تقسيم فاذا كتبت
;PS2_BIT=1 ;PS1_BIT=1;PS0_BIT=1
فان معامل تقسيم = 1/256
http://upload.qariya.info/images/qar...2be5398ecb.png
==========================================
اخي كريم اليك ملاحظه مهمه
بعض مايكروكنترولر لا يوجد فيها سجل option_reg وانت تريد مجال تقسيم اين يمكنك ايجاده اليك طريقه وهي سهله جدا
انت لابد من معرفه اسم بت ومجال التقسيم اسمه PSA حمل منول للبك الذي تتعامل معه ثم افتح منول من قائمه EDIT اختار find
http://upload.qariya.info/images/qar...172f492435.png
راح يطلعلك مستطيل صغير اكتب اي شي تريده اي تبحث عنه انا اريد الان مجال تقسيم ايضا اكتب في مربع PSA ثم اضغط على ENTER راح يقودني في كل صفحه موجود فيها كلمه PSA استمر اضغط على انتر راح يقود الى سجل المطلوب

لاحظ في البك 18F45K22 لايوجد اسم سجل option_reg وانما اسمه T0CON
اتبع ملاحظه اعلاه وان شالله يقودك الى سجل مطلوب
=========================================
ان شالله تكون الامور واضحه ناتي الان الى جزء العملي
لابد من وضع هذه الاوامر التي تم شرحها سابقا وبالصور نضعها في قائمه الرئيسيه
اي في void main
كود:
GIE_BIT=1;//Global Interrupt Enable bit
  T0IE_bit=1;//Timer0 Overflow Interrupt Enable bit
  T0IF_bit=0;// Timer0 Overflow Interrupt Flag bit
  T0CS_bit=0; // Internal instructioncycle clock (FOSC/4)
  PSA_bit=0; // Prescaler is assigned to the Timer0 module
   PS2_bit=1;PS1_bit=1;PS0_bit=1; //1 : 256

ونكتب داله الانتربت طبعا اسم داله ليس عشوائيا وانما هو اسم داله الانتربت ومتى حدث وجود اشاره الانتربت يترك مايكرو عمله وينتقل مباشره الى هذه داله
كود:
void interrupt()
واليك هذا مثال
كود:
void interrupt()
{
 if( T0IF_bit == 1) cont1++;
 if(cont1 =256){ cont1=0;cont++;}
  tmr0=0;
T0IF_bit=0;
}

طبعا اخي انتربت تعني مقاطعه اي ان مايكرو يقطع عمله لينفذ الاوامر التي كتبت في داله الانتربت وبعد الانتهاء يعود الى نفس مكان الي تمت فيها مقاطعه
اليك شرح مثال ( اقصد الاوامر التي وضعتها كأكواد وملونه بلون الازرق)
في بدايه برنامج فعلت الانتربت وبعدها تايمر زيرو وصفرت طفحان تايمرزيرو وجعلت نسبه تقسيم الى تايمرزيرو وجعلت نسبه تقسيم 1/256
طبعا انا اختاريت تردد كرستاله 4mhz وبما انه يتم تقسيم تردد على 4 ايضا يصبح 1mhz اي زمن تنفيذ كل الامر = 1us
مجال تقسيم =256 هذا يعني كل 256 نبضه يحدث طفحان ويحدث مقاطعه اي
راح يزيد متغير cont1 بمقدار 1 وهذا اصبح =256 يزداد cont بمقدار 1
يعني شنو صار
قلنا كل 256 يحدث طفحان وزمن تنفيذ =1 يعني لمايحدث طفحان زمن =
256x1us= 256us
وهكذا يجمع cont1 عدد طفحان وفي كل طفحان زمن =256 وعندما يصل cont1 الى 256 وهذه اقصى قيمه لماذا لان تايمر زيرو هو 8 بت اي اقصى قيمه له 256
عندها يصبح زمن 65536 مايكروثانيه هنا سيتم تصفير cont1 وزياده cont
تلاحظ انه كل مايحدث طفحان يتم تصفير اعلام خاص بالطفحان وكذلك تصفير تايمرزيرو
كود:
 T0IF_bit=0;
 tmr0=0;

فاذا كان مطلوب 5 ثواني كم اتوقع وصول عداد cont
cont=5000000/65536=77
اذن لما يصل cont الى 77 فانه وصل تقريبا الى 5 ثواني
اذن اخي عندما تحتاج زمن معين كا يحسب لك زمن ضغطه مفتاح او اي شي يجب بالبدايه تصفر متغيرات التي وضعتها في داله الانتربت والتي تحسب لك كم مره حدث طفحان وكذلك تصفر بت خاص باعلام طفحان وكذلك تايمرزيرو وهذه الامور تفعلها عند كل مره تحسب فيها زمن لماذا لان تايمر زيرو مستقل بعمله فهو يعد باستمرار اذا لم نصفره فاننا اكيد سنحصل على نتائج خاطئه


اتمنى لك كل توفيق واي استفسار انا حاضر ان شالله

إضافة رد

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

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

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


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

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