كيفية حساب الوقت

G

Guest

Guest
مرحبا ، أنا أفعل ذلك للعد التنازلي على PIC16F877.....هل لي أن أعرف كيف يمكنني احتساب كم من الوقت تحتاج إلى تعليمات..... مثل "مذكرة movwf" أنا باستخدام 20MHz الموافقة المسبقة عن علم....
شكرا للمساعدة..

 
مرحبا ،

يمكنك استخدام أحد أجهزة توقيت لوقف هذا البرنامج كل 1ms.ثم استخدام عدادات بسيطة لمعرفة الثانية ، دقيقة ، ساعة وهلم جرا.وبالتالي يمكن تشغيل البرنامج frely لك دون الحاجة للقلق happans متى somehting.
حظ سعيد.

 
هنا هو الرابط :
http://ww1.microchip.com/downloads/en/DeviceDoc/31029a.pdf
يبدأ من الصفحة 8.إيلاء اهتمام لعدد من التعليمات لكل دورة.
آلة دورة = sysclk / 4
على سبيل المثال :
sysclk = 4MHz => دورة آلة = 1US
ويساعد هذا الأمل.وأضاف بعد 14 دقيقة :هنا هو أفضل واحد :
http://ww1.microchip.com/downloads/en/DeviceDoc/33023a.pdf
تبدأ من 530 صفحة

 
المواصفات للتعليم سوف تصف هذه الفترة.

 
مرحبا ،
من أوراق بيانات الموافقة المسبقة عن علم لاور ، فإنهم في الواقع تشير الى متى يتم تدريس دورة واحدة.وعادة ما للموافقة المسبقة عن علم 16 سلسلة سيتم 200ns..
حتى اذا دعونا نقول ش تستخدم timer1 أن يكون لها المقاطعة عندما تجاوز.
timer1 لديها 16 بت لذلك سوف يكون له عدد من يصل إلى 65535
ثم أدناه وسيكون الوقت الذي استغرقته كل المقاطعة.
"200ns العاشر عدد من الاعتماد على تكلفة المقاطعة خ prescalar.."
عادة للبدء ، يمكن اختبار مع prescalar 1:1
ثم..التي سيتم ركاز 13.1ms
ل1s المقاطعة ، ش الحاجة 1s ، يو الحاجة إلى وجود 76 من يقاطع مثل هذه القضية من جانب المقاطعات.
كل خير.
راجع للشغل ، وهذا هو لالكريستال 20MHz

 
مرحبا...شكرا للجميع على اقتراح معين.... ولكن يمكن أن أحاول ذلك مع العد التنازلي لحلقات بدلا من استخدام المقاطعة؟لأن بعض أصدقائي قال لي thatinterrupt قد يسبب بعض المشاكل.هل هناك أي نحذر من أن الحاجة إلى توخي الحذر عند استخدام المقاطعة؟

 
نعم ، ش الحاجة للتأكد من أن جولة أوروغواي روتين خدمة المقاطعة يجب أن تكون قصيرة قدر الإمكان..هممم..لا بأس به مع العد التنازلي لحلقة بدلا من المقاطعة أشعر.
أنا فعلا نعمل على ذلك الآن أيضا..اعتقد ش أول ما زال أمامنا الكثير لجعل توقيت يكون ن مكافحة ثم السماح لها تجاوز.عندما تجاوز ، سوف يكون العلم تجاوز logic1.ش حتى يمكن الاستفادة من هذا أن يكون حلقة العد أسفل..الخ ، وكلما تجاوز العلم هو واحد ، ثم إنقاص عدد اور حلقة..
تربية الصحية والبدنية وتساعد.

 
مرحبا ،

Idont ربط استخدام الحلقات ، لأن مكو توقف عن القيام بأشياء أخرى.يمكنك مقارنتها لتعدد المهام غير لمكو تعدد المهام.إذا كنت فقط بناء على مدار الساعة ، ثم موافق هذا routin ستعمل.ولكن إذا كنت في أي وقت بناء somehitng التي هي أكثر ثم ذلك ، ثم سيكون لديك مشكلة.
هنا هو رمز التي استعملتها لمعظم هذه الطلبات.يمكنك أن ترى أن المقاطعة هي قصيرة جدا ، وجميع بقية ايم به في البرنامج نفسه.
هيا نبدأ :
1.لديك لتعيين veribales العالمية.أنا استخدم globael لأن أركض بين عدد قليل من الوظائف
، وأنا لا أميل بلادي على مدار الساعة للحصول على كل worng...
2.ستجد المقاطعة الحفر.يمكنك أن ترى أنه قصير جدا وبسيطة.ستحصل في العلم من تجاوز الموقت ، في إشارة واضحة وإعادة الموقت.
3.لديك لimplament الإعدادات لتجاوز الموقت.كما explaind scdoro ، تكتب 0xFFFF -- في الوقت الذي تحتاج إليه.
على سبيل المثال.10ms في 4MHz :
4MHz / 4 = = 0.000001 ثانية 1MHz
10ms = 0.01Sec.
10ms/1MHz = 0.01/0.000001 = 10،000 = 0x2710
لTMR1 = 0xFFFF -- 0x2710 = 0xD8EF
4.باستخدام حلقة في حين ، فإنك تدخل كل وظيفة في الوقت الصحيح عند تغيير العلم.
رمز :Flag_10mS بت = 0 ، Flag_100mS = 0 ، Flag_1Sec = 0 ؛ / / أعلام الموقت

غير الموقعة Count100mS تشار = 0 ، Count1Sec = 0 ، Count1Min = 0 ؛ / / عدادات الوقت/************************************************* **

* المقاطعة روتين خدمة *

************************************************** * /باطل المقاطعة طلب الميزانية الإضافية (الفراغ)

(إذا كان (TMR1IF & & TMR1IE) / / Timer1 فيضان وقع الحدث ، لتعيين 1mSec؟

(

Flag_10mS = 1 ؛

TMR1L = 0xEF ؛ / / تهيئة Timer1 منخفضة بايت

TMR1H = 0xD8 ؛ / / تهيئة Timer1 عالية 1mSec بايت

TMR1IF = 0 ؛ / / TMR1 المقاطعة بدون علم

Count100mS ؛ / / لمكافحة 100ms

إذا كان (Count100mS> = 10) / / لمكافحة 100ms

(

Flag_100mS = 1 ؛

Count100mS = 0 ؛ / / إعادة تعيين العداد

Count1Sec ؛

)

إذا كان (Count1Sec> = 10) / / لمكافحة الإرهاب 1 ثانية

(

Flag_1Sec = 1 ؛

Count1Sec = 0 ؛ / / إعادة تعيين العداد

)

)

)

/******************************

* Timer1 رمز التهيئة *

******************************/Init_Timer1 باطلة (الفراغ)

(

T1CON = 0x00 ؛ / / T1CON سجل الإعداد

TMR1L = 0xEF ؛ / / تهيئة Timer1 منخفضة بايت

TMR1H = 0xD8 ؛ / / تهيئة Timer1 عالية 10mSec بايت

TMR1IF = 0 ؛ / / إعادة تعيين Timer1 تجاوز ح / ث العلم

TMR1IE = 1 ؛ / / تمكين Timer1 تجاوز المقاطعة

TMR1ON = 1 ؛ / / ابدأ مكافحة Timer1

)/***********************************************

* تهيئة النظام *

***********************************************/باطلة الرئيسي (الفراغ)

(

Init_Timer1 () ؛ / / تهيئة Timer1

PEIE = 1 ؛ / / تمكين المقاطعات المحيطية

منطقة غزة الصناعية = 1 ؛ / / تمكين المقاطعات العالميةفي حين (1)

(

/ / ************** 10mSec الدالة *****************

إذا كان (Flag_10mS) / / وظائف لتشغيل في 10mSec

(

Flag_10mS = 0 ؛

....

) / / نهاية 10mSec/ / ************** 100mSec الدالة *****************

إذا كان (Flag_100mS) / / وظائف لتشغيل في 10mSec

(

Flag_100mS = 0 ؛

....

)/ / ************** 1sec الدالة *****************

إذا كان (Flag_1Sec) / / وظائف لتشغيل في 1sec

(

Count1Min ؛

Flag_1Sec = 0 ؛

...

) / / نهاية 1sec/ / ************** 1min الدالة *****************

إذا كان (Count1Min> = 60) / / 1 دقيقة مرت)

(

Count1Min = 0 ؛

...

) / / نهاية 1 دقيقة

) / / نهاية الوقت

) / / نهاية الرئيسية
 
مرحبا ،

لدي هذا البرنامج (أنا لا أعرف من أين أحصل على هذا ، وأنا حاولت ذلك أبدا) ، ولكن يحسب للتأخير ، ومحاولة تحميل.
آسف ، ولكن تحتاج إلى تسجيل الدخول لمشاهدة هذه الضميمة

 

Welcome to EDABoard.com

Sponsor

Back
Top