ব্রাজিলের শুভেচ্ছা!
সবার আগে জবিকে আপনার উদাহরণের জন্য ধন্যবাদ। দ্বিতীয়ত, তার উদাহরণটিতে কেবল একটি ছোট্ট ত্রুটি রয়েছে। 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 << পিডি 2) বাইনারি তৈরি করে 00000100. অপারেশন "~" সমস্ত অঙ্ক উল্টে দেয়, বাইনারি এখন 11111011. অবশেষে & = DDRD এবং 11111011 এর মধ্যে "AND" যুক্তি প্রয়োগ করে এবং ফলাফলটি আবার স্থাপন করা হয়েছে ডিডিআরডি স্মৃতিতে। দ্রষ্টব্য: অপারেটর "এবং" যা করে তা ডিডিআরডি মেমরির প্রতিটি বিটের জন্য, এটি উপরের বাইনারি সংখ্যার সাথে তুলনা করে। ডিডিআরডি-তে বিট যদি 0 হয় এবং একই কামড়ের স্থানে বাইনারিতে বিট 1 হয়, তবে ফলস্বরূপ বিট 0 হয়, যদি ডিডিআরডি 1 হয় এবং বাইনারিটিতে বিট 1 হয়, ফলাফল বিট 1 হয়, এবং যদি ডিডিআরডির বিটটি 1 বা 0 এবং বাইনারিতে বিট 0 হয় তবে ফলস্বরূপ বিট সর্বদা 0 হয়। সংক্ষেপে, DDRD & = ~ (1 << PD2) কমান্ডটি কেবলমাত্র PD2 বিটকে শূন্যে পরিবর্তিত করে এবং অন্যগুলি (শূন্য বা এক) কে ছোঁয়াচে রেখে দেয়। এটি কিছুটা জটিল বলে মনে হচ্ছে, তবে আপনি অভ্যস্ত হয়ে যাওয়ার পরে, অন্য বিটগুলি পরিবর্তন না করেই কামড়ায় কিছুটা পরিবর্তন করার সেরা উপায়।
মন্তব্য # 2 : (1 << PD2) বাইনারি তৈরি করে 00000100. মন্তব্য # 1 তে বর্ণিত একই যুক্তি "এবং" ব্যবহার করে, "PIND & 0000100" কমান্ডটি কেবলমাত্র PIND2 (আমাদের ইনপুট পিন যেখানে পুশ বোতামটি সংযুক্ত আছে তা পরীক্ষা করে থাকে) থেকে) উচ্চে সেট করা আছে বা না। অন্যান্য সমস্ত পিনগুলি মিথ্যা হবে যেহেতু বাইনারি বিটগুলি 0 তে সেট করা আছে, এবং যেহেতু বাইনারি বিট # 2 সেট করা হয়েছে, পিডি 2 ইনপুট উচ্চ বা সেট করতে হবে যদি পিডি 2 ইনপুট হয় তবেই যদি বিবৃতিটি সত্য হয় কম সেট।
মন্তব্য # 3 : # 1 মন্তব্যে যুক্তিটি ব্যাখ্যা করার পরে, এই কমান্ডটি পোর্ট পোর্টে আউটপুট পিন PINB2 হাই ভোল্টেজ সেট করে sets যদি আপনার এলইডি সঠিকভাবে এই পিন পোর্টের সাথে ~ 300 ওহমের প্রতিরোধকের সাথে সংযুক্ত থাকে, এবং যে রেজিস্টরটি জমির সাথে সংযুক্ত থাকে, তবে LED চালু করা উচিত turn
মন্তব্য # 4 : পূর্ববর্তী মন্তব্যে বর্ণিত একই কারণে এলইডি বন্ধ করা উচিত।
চূড়ান্ত বিবেচনা:
ক) ইনপুট পিন PD2 এ ভোল্টেজ দোলন এড়াতে যখন পুশ বোতামটি টিপানো হয় না (ওপেন সার্কিট), আমি দৃ strong়ভাবে একটি পুল-ডাউন রোধ (1 কোহম বা উচ্চতর) রাখার পরামর্শ দিই, যাতে দুর্ঘটনাক্রমে এলইডি জ্বলতে না পারে LED এই এলোমেলো ভোল্টেজ দোলায়।
খ) একটি অস্বীকৃতি নোট: এখানে বর্ণিত ধারণাগুলি কেবল শিক্ষামূলক হিসাবে ব্যবহার করা উচিত এবং ইলেকট্রনিক্সের বিশেষজ্ঞের সাথে পরামর্শের আগে এগুলি কোনও বাস্তব ব্যবস্থায় ব্যবহার করা উচিত নয়।
* /