১২. মাইক্রোকন্ট্রোলারে প্রোগ্রাম করার কৌশল



আজকের পোস্টে আমরা মাইক্রোকন্ট্রোলারে প্রোগ্রামিং কৌশল সম্পর্কে শিখব। আমাদের কম্পিউটারকে চালানোর জন্যে যেমন বিভিন্ন ধরনের সফটওয়্যার লাগে তেমনি মাইক্রোকন্ট্রোলারকে দিয়ে কাজ করাতে গেলেও আমাদেরকে কোড লিখতে হয়। এই কোড আমরা এসেম্বলি ল্যাংগুয়েজ বা সি ল্যাংগুয়েজ যেকোনটি ব্যবহার করে করতে পারি। এসেম্বলি হল লো লেভেল ল্যাংগুয়েজ এবং সি হল একটু হাই লেভেল ল্যাংগুয়েজ। আমরা মাইক্রোকন্ট্রোলারে যে হেক্স কোড আপলোড করি তার ঠিক আগের ধাপই হল এসেম্বলি ল্যাংগুয়েজ। এসেম্বলি দিয়ে মাইক্রোকন্ট্রোলারের সব বিট এবং রেজিস্টারে ডিরেক্ট প্রবেশ করা যায়। আমরা এর আগের পোস্টগুলোয় যে ইন্সট্রাকশনের কথা শুনেছিলাম সেই ইন্সট্রাকশন বলতে মূলত এসেম্বলি ল্যাংগুয়েজের এক একটি কম্যান্ড কে বোঝায়। যেমন কোন একটি বিট কে সেট করার জন্যে এসেম্বলির যে কম্যান্ড সেটাই একটি ইন্সট্রাকশন। এটা শুধু 8051 মাইক্রোকন্ট্রোলারের ক্ষেত্রেই নয় বরং সব মাইক্রোকন্ট্রোলার এবং মাইক্রপ্রসেসরের ক্ষেত্রেই প্রযোজ্য। 

সি কে হাই লেভেল ল্যাঙ্গুয়েজ বলা হয় তার কারন হল সি দিয়ে প্রোগ্রামিং করা হয় একটি IDE (Integrated Development Environment) তে। সেই IDE তে করা প্রোগ্রামটিকে কম্পাইলার কম্পাইল করেও কিন্তু এসেম্বলিতেই কনভার্ট করে। এবং সেই এসেম্বলি থেকে এসেম্বালার এটিকে মেশিনকোডে রূপান্তর করে। এই মেশিন কোডই আমরা মাইক্রোকন্ট্রোলারে আপলোড করে থাকি। অর্থাৎ সি দিয়ে প্রোগ্রাম করলে কিন্তু প্রোগ্রামার কে এসেম্বলি সম্পর্কে জানতে হবেনা। এমনকি এসেম্বলি সম্পর্কে একদম জ্ঞ্যান-শূন্য ভাবেও কিন্তু সি ল্যাংগুয়েজ দিয়ে মাইক্রোকন্ট্রোলারে প্রোগ্রাম করা যায়। কেননা আমাদের লেখা সি কোডকে এসেম্বলি কোডে রূপান্তর করা তখন কম্পাইলারের দায়িত্ব। কম্পাইলার এক্ষেত্রে অনেকটা ট্রান্সেলেটর হিসেবে কাজ করে। এক ভাষা থেকে অন্য ভাষায় রূপান্তর করতে গেলে কিন্তু কিছুটা হলেও ভাবার্থ পরিবর্তন হয়ে যায়। ঠিক এই ঘটনাটি সি থেকে এসেম্বলিতে পরিবর্তনের ক্ষেত্রেও কম্পাইলার ঘটিয়ে থাকে। একেক কম্পাইলার একেক রকম ভাবে সি কে এসেম্বলিতে পরিবর্তন করে থাকে বিধায় মাইক্রোকন্ট্রোলারের ইন্সট্রাকশনে কিছুটা হলেও পরিবর্তন হয়। কথার কথা কোন একটি স্পেসিফিক কাজ করাতে গেলে হয়ত এসেম্বলিতে পাঁচটি ইন্সট্রাকশন প্রয়োজন হত এবং প্রত্যেকটি ইন্সট্রাকশন এক মেশিন সাইকেল হলে পাঁচটি মেশিন সাইকেলে সেই কাজ টি কমপ্লিট হয়ে যেত। ঠিক একই কাজটি যখন সি দিয়ে করা হবে তখন দেখা যাচ্ছে কম্পাইলার সেটাকে এসেম্বলিতে কনভার্ট করতে যেয়ে ছয়টি ইন্সট্রাকশনে কনভার্ট করে ফেলেছে। সেই কাজটির সম্পূর্ণ হতে কিন্তু ছয় মেশিন সাইকেল সময় লাগবে। আবার সব কম্পাইলার যে একই ভাবে কনভার্ট করবে এমনটিও কিন্তু নয়। এতে করে, এসেম্বলিতে প্রোগ্রাম করা কোডের এক্সিকিউশন টাইম, সি দিয়ে প্রোগ্রাম করা কোডের এক্সিকিউশন টাইমের চেয়ে দ্রুত হবে। 

এসেম্বলির আরও একটি সুবিধা হল এটা ব্যবহার করে মাইক্রোকন্ট্রোলার বা মাইক্রোপ্রসেসরের সব রেজিস্টারে ডিরেক্ট প্রবেশ করা যায়। সি দিয়ে কিন্তু এইরুপ সুবিধা পাওয়া যায় না। যেমন 8051 মাইক্রোকন্ট্রোলারের ক্ষেত্রে জেনারেল পারপোজ রেজিস্টার যেমন R0, R1, R2, R3, R4, R5, R6, R7 এসবে কিন্তু এসেম্বলি দিয়ে ডিরেক্ট প্রবেশ করা যায়। কিন্তু সি দিয়ে এসব রেজিস্টারে ডিরেক্ট প্রবেশ করা যায়না। শুধুমাত্র স্পেশাল ফাংশন রেজিস্টারই (80H থেকে FFH) সি দিয়ে ডিরেক্ট প্রবেশ করা যায়। সুতরাং দেখা যাচ্ছে যে, এসেম্বলিতে মাইক্রোকন্ট্রোলার বা মাইক্রোপ্রসেসরকে প্রোগ্রাম করতে হলে প্রোগ্রামারকে মাইক্রোকন্ট্রোলার বা মাইক্রোপ্রসেসরের সব রেজিস্টার,বিট, এদের এড্রেস সর্বোপরি টোটাল আর্কিটেকচার সম্পর্কে ধারনা থাকতে হবে। নাহলে কোনভাবেই এসেম্বলিতে প্রোগ্রাম করা সম্ভব হবে না। অপরদিকে সি দিয়ে প্রোগ্রাম করার জন্যে মাইক্রোকন্ট্রোলারের আর্কিটেকচার সম্পর্কে ধারনা না থাকলেও চলবে। 

সি এবং এসেম্বলি প্রত্যেকরই নিজস্ব সুবিধা এবং অসুবিধা আছে। যে যেই ল্যাঙ্গুয়েজ প্রিফার করে সেটা দিয়ে প্রোগ্রাম করে থাকে, তবে কিছু কিছু ক্ষেত্রে মাইক্রোকন্ট্রোলারের অপারেশনের দ্রুততার জন্যে এবং কম মেমোরি ব্যবহার করার জন্যে সর্বোপরি কোড ইফিসিয়েন্ট করার জন্যে এসেম্বলিই প্রিফারাবেল।




কম বেশি সব মাইক্রোকন্ট্রোলারেই প্রোগ্রাম করার কৌশল একই রকমের হয় থাকে। এইজন্যে একটি মাইক্রোকন্ট্রোলারের প্রোগ্রাম করার কৌশল জানলেই আমরা অন্য যেকোন কন্ট্রোলারে প্রোগ্রাম করতে পারবো। যেহেতু  8051 মাইক্রোকন্ট্রোলারে পেরিফেরাল্‌স, রেজিস্টার , বিট অনেক কম সংখ্যক তাই এটায় প্রোগ্রাম করা অন্যসব মাইক্রোকন্ট্রোলার অপেক্ষা তুলনামূলক ভাবে সহজ। মাইক্রোকন্ট্রোলারের প্রোগ্রাম করা হয় রেজিস্টার রিড এবং রাইট করার মাধ্যমে। এছাড়া আর কোনই কাজ নেই। বিলিভ ইট অর নট রেজিস্টারের বিট রিড এবং রাইট করাই একামাত্র কাজ। কখন কোন বিট সেট করতে হবে, কোন বিট ক্লিয়ার করতে হবে, কোন রেজিস্টারের ভ্যালু রিড করতে হবে এসব ঠিকঠাক মত শিখতে পারলেই মাইক্রোকন্ট্রোলারের প্রোগ্রাম যে কেউ করতে পারবে। যেহেতু মাইক্রোকন্ট্রোলারে অনেক ধরনের পেরিফেরাল্‌স যুক্ত থাকে এবং সব সময় সব পেরিফেরাল্‌স আমাদের দরকার ও হয়না, তাই কখন আমাদের কোন পেরেফেরাল্‌স অন করতে হবে, কোন পেরিফেরাল্‌স অফ করতে হবে সব কিছুই বিট হাই এবং লো করার মাধ্যমে মাইক্রোকন্ট্রোলারকে বলে দিতে হয়।
ধরা যাক, আমরা মাইক্রোকন্ট্রোলার দিয়ে একটি LED বাল্ব অন অফ করতে চাই। তাহলে এটার কানেকশন অবশ্যই মাইক্রোকন্ট্রোলারের কোন একটি পিনের সাথে দিতে হবে। ঐ পিনটি অন এবং অফ করার জন্যেও জাস্ট কোন একটি রেজিস্টারের একটি বিট হাই অথবা লো করতে হবে। এছাড়া আর কোনই কাজ নেই।
আবার ধরা যাক, সময় গণনার কাজ করতে হবে, এজন্যে আমাদের টাইমার পেরিফেরাল্‌সটি জাস্ট অন করে দিতে হবে। এরজন্যেও কোন একটি রেজিস্টারের কোন একটি বিট সেট করে দিতে হবে। আমরা যে সময় পর্যন্ত কাউন্ট করতে চাই সেই সময় পর্যন্ত কাউন্ট হল কিনা, সেটা বোঝার জন্যেও আমাদের কোন একটি রেজিস্টারের কোন একটি বিট রিড করতে হবে।
এভাবে শুধু রেজিস্টারের বিট রিড অথবা রাইটের মাধ্যমেই আমরা মাইক্রোকন্ট্রোলারকে প্রোগ্রাম করতে পারি। আর দরকার হয় ডেটা প্রসেস করার জন্যে বা আমাদের স্পেসিফিক কোন কাজ করার জন্যে অ্যালগোরিদম এবং গানিতিক হিসাব-নিকাশ। এটুকু প্রোগ্রামিংএর জ্ঞান কাজে লাগিয়ে করতেই পারবো।

এখন কথা হল, এই যে বিট রিড এবং রাইটের মাধ্যমে প্রোগ্রাম করতে হবে মাইক্রোকন্ট্রোলারে তো কোন ল্যাংগুয়েজ দিয়ে এই বিট গুলোকে রিড এবং রাইট করবো? এসেম্বলি বা সি যেকোন একটি দিয়েই এই কাজ করা যায়। যে আসলে যে ল্যাংগুয়েজ প্রিফার করে। আমি পার্সোনাল ই সি ল্যাংগুয়েজ প্রিফার করি কারন ঐ যে গানিতিক হিসাব-নিকাশ আর অ্যালগোরিদমের কথা বলা হল, সি দিয়ে এগুলো ইমপ্লিমেন্ট করা অনেক সহজ। আর কম বেশি আমরা সবাই সি এর সাথে পরিচিত থাকিই কেননা বেসিক কোর্স হিসেবে এটা আমাদের সবারই সিলেবাসের অন্তর্গত।

এরপরের পোস্টে আমরা আমরা 8051 মাইক্রোকন্ট্রোলারের কোড করা এবং সিমুলেশন করা শিখব।

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি