2010-08-29 8 views
5

हाय मुझे आश्चर्य है कि कोई मुझे उदाहरण दे सकता है कि TickGetDiv256(); फ़ंक्शन काम करता है। यह टिककटिकगेटडिव 256() कैसे काम करता है?

में माइक्रोचिप से आया था, यदि मैं एक इंजन को पूर्ण कर दूंगा, तो मैं 2 घंटे के लिए गिनने की कोशिश कर रहा हूं।

मैं "threshold = tick + TICKS_PER_SECOND * 60;" फ़ंक्शन का उपयोग कर सकता हूं। लेकिन मुझे नहीं पता कि यह इस समय के लिए उपयोग करना अच्छा होगा: threshold = tick + (TICKS_PER_SECOND * 60 * 60)*2;

सधन्यवाद

+0

क्या गति क्या घड़ी चल रही है? –

+0

क्लोकैक 48 मेगाहट्र्ज पर चल रहा है :) – Christian

+0

क्या घड़ी चक्र 'एक टिक' है? –

उत्तर

2

MPLAB C guide से परखने के बाद, सबसे बड़ा पूर्णांक डेटा सी संकलक द्वारा समर्थित प्रकार 32-बिट है। मैं कहीं और जहां से मिल सकता हूं, टिक काउंटर छह बाइट्स है - TickGetDiv256 इन बाइट्स के 'मध्य चार' को लौटाता है।

चूंकि टिक काउंटर के पूर्ण छह बाइट 32-बिट पूर्णांक में फिट नहीं हो सकते हैं, इसलिए आप मध्य बाइट निकालने के लिए TickGetDiv256 का उपयोग करेंगे और इस प्रकार से पारित होने वाले '256 टिक' अंतराल की संख्या की गणना होगी काउंटर शुरू किया गया था। बेशक, यह सख्ती से सच नहीं है क्योंकि यह टिक काउंटर के उच्चतम बाइट को अनदेखा कर रहा है। आप इस समारोह का उपयोग करेंगे टिक काउंटर के निचले चार बाइट्स द्वारा चुनी गई समयावधि में आपकी रुचि है एक सीमा के लिए पर्याप्त प्रदान नहीं करते हैं

0

हो सकता है कि मैं इस तरह कर सकते हैं:।

// if (Ts1/GTsy1) is under 40 and have'nt increased within 2h 
    if (AD0 < 40 && (TickGetDiv256() - (startingTick + (TICKS_PER_SECOND * 7200)/256)) >= 7200) 
    { 
     sip.PL = 0; 
     sip.PU = 0; 
     // Failure(code); 
    } 

    // if (Ts1/GTsy1) is under 40, start countdown 
    if (AD0 < 40) 
    { 
     if (!alflags.ColdTimer) 
      startingTick = TickGetDiv256(); //Start timer 
     alflags.ColdTimer = 1; 
    } 
    else 
     alflags.ColdTimer = 0; 
+0

टिकगेटडिव 64 के() आपको टिक काउंटर के ऊपरी चार बाइट्स देगा - यदि आप ऑपरेशन के दौरान टिक काउंटर को रीसेट नहीं कर रहे हैं तो यह थोड़ा सुरक्षित हो सकता है - आप इस फ़ंक्शन @ 32,768 टीपीएस के साथ 2 एस रिज़ॉल्यूशन करेंगे। –

संबंधित मुद्दे