| लेखक | संदेश |
|---|
अर्धचालक
शामिल: 04 अप्रैल 2003 डाक: 294 मदद: 3 स्थान: फ्रांस
| 27 अप्रैल 2005 18:02 89C51/89C52 में मध्यांतर | | |
|
| मैं एक व्यायाम सौंपा हूँ स्वत: दरवाजा परियोजना के लिए एक AT89C51 कार्यक्रम.
मैं एक समस्या का सामना करना पड़ रहा हूँ: मध्यांतर
यदि बाहर के संवेदक उपलब्ध लोगों का पता लगाता है, यह दरवाजा खुला और भीतर सेंसर इंतज़ार कर रहे होंगे उपलब्ध लोगों का पता लगाता है. 20 के बाद अगर कोई संकेत मिला है, यह स्वतः ही दरवाजा और कार्यक्रम की शुरुआत में लौटने बंद (बाहरी दरवाजे से संकेत के लिए प्रतीक्षा कर.
AT89C51 के साथ, मैं सी में प्रोग्रामिंग कर रहा हूँ लेकिन मैं नहीं जानता कि कैसे AT89C51 के साथ एल्गोरिथ्म आउटः डिजाइन (20 सेकंड).
मुझे कोई हल सुझा सकते हैं? |
|
| वापस शीर्ष पर | |
 |
IanP
शामिल: 05 Oct 2004 Posts: 6,490 मदद: 1542 स्थान: वेस्ट कोस्ट
| अप्रैल 28, 2005 1:25 पुन: 89C51/89C52 में मध्यांतर | | |
|
| का प्रयोग करें (16 बिट मोड 1 काउंटर में TIMER1) (Fclock/12): FFFFh गिनती के लिए. यदि क्रिस्टल 11.0952MHz हर 11095200/12 (घटित होगी, बीच में है) / 65536 = 14.108 .. प्रति दूसरी बार. चर TimeH और TimeL बनाएँ. TimeHTimeL बढ़ाएँ हर बाधा. से 20 सेकंड तुम ≈ 282 बीच में आता है की आवश्यकता होगी और उस तक पहुँच जाऊँगा TimeHTimeL = 01 1 ए (ज) 0,282 = (घ). अब तुम 20 काउंटर रीसेट (TimeHTimeL कर सकते हैं) और 20 के बाद जो भी लागू किया जाना चाहिए ..
गुड लक .. |
|
| वापस शीर्ष पर | |
 |
mrcube_ns
शामिल: 10 अप्रैल 2002 डाक: 429 मदद: 11 स्थान: चंद्रमा के अंधेरे पक्ष
| 28 अप्रैल 2005 21:17 पुन: 89C51/89C52 में मध्यांतर | | |
|
| IanP completly सही है,
लेकिन, मैं 12MHz क्रिस्टल, तो एक चक्र 1us है इस्तेमाल का सुझाव.
तो, आपको 16 बिट टाइमर के रूप में 1 टाइमर का इस्तेमाल किया और 50ms टाइमर (T1H = 0x3C T1L = 0xAF), तो तुम एक दूसरे => को अमीर 20sec आप वास्तव में 400 मामलों में 20 मामलों की जरूरत है.
सादर,
Mr.Cube |
|
| वापस शीर्ष पर | |
 |
Google ऐडसेंस

| 28 अप्रैल 2005 21:17 विज्ञापन | | |
|
|
|
|
| वापस शीर्ष पर | |
 |
नायक
में शामिल हो गए: Mar 06 2002 डाक: 145 मदद: 2
| अप्रैल 29, 2005 3:51 पुन: 89C51/89C52 में मध्यांतर | | |
|
| नमस्ते,
लंबे समय तक की अवधि के लिए तुम्हारी जरूरत है काउंटर sotware.
थोड़ा आवधिक intterupt पीढ़ी के लिए 16 का प्रयोग करें, हार्डवेयर काउंटर.
में सेवा नियमित CNT_FLAG चर सेट अंतरायन.
अहस्ताक्षरित चार CNT_FLAG; अहस्ताक्षरित लंबे cnt; अहस्ताक्षरित चार आउटः; अहस्ताक्षरित चार TIMEOUT_ENABLED;
# TIMEOUT_THRESHOLD 1024 परिभाषित
शून्य interrupt_routine () ( = 1 CNT_FLAG; )
शून्य मुख्य () ( init ();
समय (1) ( ... cnt_process (); नींद (); / / के लिए मोड सो जाओ ) )
शून्य cnt_process () ( अगर (CNT_FLAG) ( = 0 CNT_FLAG; अगर (TIMEOUT_ENABLED) ( अगर (cnt <TIMEOUT_THRESHOLD) cnt ; = (Cnt == TIMEOUT_THRESHOLD आउटः); ) ) )
जब cnt पहुँच TIMEOUT_THRESHOLD आउटः स्थापित किया जाएगा.
एक अन्य समाधान नियमित अंतरायन में वेतन वृद्धि cnt है
शून्य interrupt_routine () ( अगर (TIMEOUT_ENABLED) ( अगर (cnt <TIMEOUT_THRESHOLD) cnt ; = (Cnt == TIMEOUT_THRESHOLD आउटः); ) ) |
|
| वापस शीर्ष पर | |
 |