ब्राजील का अभिवादन!
सबसे पहले आपके उदाहरण के लिए जॉबी का धन्यवाद। दूसरे, उनके उदाहरण में सिर्फ एक छोटी सी त्रुटि है। 0x20 की संख्या सही नहीं है। यह 0x04 होना चाहिए। इसके अलावा, एक सुझाव के रूप में, मैं कोड में हेक्साडेसिमल संख्याओं जैसे 0xFB, 0x20, या 0x04 का उपयोग नहीं करूंगा। मैं io.h में पाई गई पिन पोर्ट परिभाषाओं और हेडर फ़ाइल द्वारा संदर्भित अन्य का उपयोग करने का सुझाव दूंगा। मैंने नीचे जॉबी का उदाहरण फिर से लिखा है, शुरुआती लोगों के लिए कुछ टिप्पणियों के साथ।
# include <avr/io.h>
int main (void)
{
// set all pins on PORTB for output
DDRB = 0xFF;
// set port pin PORTD2 as input and leave the others pins
// in their originally state (inputs or outputs, it doesn't matter)
DDRD &= ~(1 << PD2); // see comment #1
while (1)
{
if (PIND & (1<<PD2)) // see comment #2
PORTB |= (1<<PB2); // see comment #3
else
PORTB &= ~(1<<PB2); // see comment #4
}
return 0;
}
/ *
शुरुआती के लिए टिप्पणियाँ
टिप्पणी # 1: (1 << PD2) बाइनरी 00000100 उत्पन्न करता है। ऑपरेशन "~" सभी अंकों को फ़्लिप करता है, अर्थात, बाइनरी अब 11111011 है। अंत में DDRD और 111131 के बीच तर्क "और" लागू होता है और परिणाम फिर से रखा जाता है। DDRD मेमोरी में। नोट: DDRD मेमोरी में प्रत्येक बिट के लिए ऑपरेटर "AND" क्या करता है, यह ऊपर दिए गए बाइनरी नंबर से तुलना करता है। यदि डीडीआरडी में बिट 0 है और एक ही काटने की स्थिति में बाइनरी में बिट 1 है, तो परिणामी बिट 0 है, यदि डीडीआरडी 1 है और बाइनरी में बिट 1 है, तो परिणामी बिट 1 है, और यदि DDRD में बिट 1 या 0 है और बाइनरी में बिट 0 है तो परिणामी बिट हमेशा 0 है। सारांश में, कमांड DDRD & = ~ (1 << PD2) केवल बिट पीडी 2 को शून्य में बदलता है और अन्य (शून्य या लोगों) को छोड़ देता है। यह थोड़ा जटिल लगता है, लेकिन जब आपको इसकी आदत हो जाती है, तो दूसरे बिट्स को बदले बिना इसे काटने में थोड़ा बदलना सबसे अच्छा तरीका है।
टिप्पणी # 2 : (1 << PD2) बाइनरी 00000100 बाइनरी उत्पन्न करता है। उसी तर्क का उपयोग करके "और" टिप्पणी # 1 में वर्णित है, कमांड "PIND और 0000100" केवल तभी चेक करता है यदि PIND2 (हमारा इनपुट पिन जहां पुश बटन जुड़ा हुआ है ) उच्च या नहीं पर सेट है। बाइनरी बिट्स 0 पर सेट होने के बाद से सभी अन्य पिन FALSE होंगे, और जब से बाइनरी बिट # 2 1 पर सेट होता है, यदि PD2 इनपुट उच्च या FALSE के लिए सेट किया जाता है, तो IF कथन केवल TRUE होगा यदि PD2 इनपुट कम पर सेट करें।
टिप्पणी # 3 : टिप्पणी # 1 में बताए गए तर्क के बाद, यह कमांड पोर्ट PORTB में आउटपुट पिन PINB2 को हाई वोल्टेज में सेट करता है। यदि आपका एलईडी ~ 300 ओम के एक रोकनेवाला के साथ इस पिन पोर्ट से जुड़ा हुआ है, और यह अवरोध जमीन से जुड़ा हुआ है, तो एलईडी चालू होना चाहिए।
टिप्पणी # 4 : पिछली टिप्पणियों में बताए गए कारणों के लिए एलईडी को बंद कर देना चाहिए।
अंतिम विचार:
a) इनपुट पिन PD2 में वोल्टेज दोलन से बचने के लिए जब पुश बटन (ओपन सर्किट) नहीं दबाया जाता है, तो मैं एक पुल-डाउन रेसिस्टर (1 kOhm या उच्चतर) लगाने की मजबूत सलाह देता हूं, ताकि एलईडी गलती से प्रकाश न करे इस यादृच्छिक वोल्टेज दोलन के लिए।
बी) एक अस्वीकरण नोट: यहां वर्णित विचारों को केवल शैक्षिक के रूप में उपयोग किया जाना है और इलेक्ट्रॉनिक्स में किसी विशेषज्ञ से परामर्श करने से पहले उन्हें किसी भी वास्तविक प्रणाली में उपयोग नहीं किया जाना चाहिए।
* /