6A. 8051 টাইমার (8051 Timer)


6.1 আমরা এখন 8051 টাইমারের সাহায্যে delay ফাঙশান তৈরি করব। লুপের সাহায্যে আমরা যে delay তৈরি করি তা কোন নির্দিষ্ট সময়ের জন্য তৈরি করা যায় না। 8051 টাইমারের সাহায্যে যে delay প্রোগ্রাম আমরা লিখতে পারি তাতে নির্ভুলতার পরিমাণ বহুলাংশে বেশি থাকে। লুপের সাহায্যে ফাংশান তৈরি করলে তা প্রোগ্রাম নির্বাহে বাধা সৃষ্টি করে।

6.1.1 8051 টাইমার পরিচিতি (Introducing 8051 Timer)

8051 মাইক্রোকন্ট্রোলারে দুইটি Timer Register আছে। প্রতিটি টাইমারের ব্যপ্তি 16 বিট। যেহেতু 8051 হল একটি 8 বিট মাইক্রোকন্ট্রোলার সেহেতু প্রতিটি Timer দুইটি 8 বিট রেজিষ্টার নিয়ে গঠিত। 8051 এর টাইমার দুটিকে যথাক্রমে T0(Timer0) এবং T1(Timer1) দ্বারা অভিহিত করা হয়। প্রতিটি টাইমার যে দুটি রেজিষ্টার নিয়ে গঠিত তাদের যথাক্রমে TH0, TL0 এবং  TH1, TL1 বলা হয়। TH হল হাই বাইট এবং  TL হল লো বাইট।

অর্থাৎ T0 টাইমার আট বিটের দুইটি রেজিস্টার TH0 এবং TL0 নিয়ে গঠিত।অনুরূপ ভাবে T1 টাইমার TH1 এবং TL1 এই দুইটি রেজিস্টার দ্বারা গঠিত।উপরোক্ত টাইমার দুটি কাউন্টার রূপেও কাজ করতে পারে।কাউন্টার/টাইমার ক্রিয়া শুরু করার পর এর মান এক এক করে (প্রতি ক্লক পাল্সের সাথে) বাড়তে শুরু করে।যখন কাউন্টারের প্রতিটি বিট ভ্যালু 1 দ্বারা পূর্ণ হয়ে যায় অর্থাৎ TH0 এর মান FF হয় এবং TL0 এর মানও FF হয় (টাইমার 0 এর ক্ষেত্রে) এবং TH1 ও TL1 উভয়ের মান FF হয় (টাইমার 1 এর ক্ষেত্রে) তখন এই বৃদ্ধি বন্ধ হয় এবং টাইমার ওভারফ্লো ফ্ল্যাগটি সেট হয় অর্থাৎ TF0==1 হয়(টাইমার 0র ক্ষেত্রে)।

দুইটি টাইমার/কাউন্টারই নিয়ন্ত্রিত হয় পৃথক একটি রেজিস্টার TMOD দ্বারা। TMOD হল পৃথক একটি ৮ বিট রেজিস্টার যার বাম দিকের প্রথম চারটি বিট তথা মোস্ট সিগনিফিক্যান্ট বিট(MSB) টাইমার 1 কে নিয়ন্ত্রণ করে। অনুরূপ ভাবে পরের চারিটি বিট তথা Least Significant Bit(LSB) টাইমার 0 কে নিয়ন্ত্রণ করে। টাইমার 1 এর ক্ষেত্রে TMOD এর প্রথম চারিটি বিটের প্রথম বিটটি টাইমার/ কাউন্টার এর GATE বিট। এই GATE বিট ভ্যালু 1 হলে মাইক্রোকন্ট্রোলারের টাইমার/কাউন্টারটি বহিরাগত বিঘ্ন বা interrupt দ্বারা শুরু হবে। টাইমার/কাউন্টারটিকে সফ্টওয়ার দ্বারা শুরু করতে গেলে GATE বিটের মান 0 হতে হবে। দ্বিতীয় বিটটি C/T. এটি 1 হলে টাইমারটি একটি কাউন্টার হিসাবে কাজ করবে।এক্ষেত্রে বাইরের কোন ঘটনার দ্বারা টাইমার/কাউন্টারটির TH বা TL মান এক এক করে বৃদ্ধি প্রাপ্ত হয়। অর্থাৎ টাইমার/কাউন্টারের মান বৃদ্ধির জন্য কোন Oscillator ক্লক পাল্সের (XTAL) প্রয়োজন হয় না। TMOD এর প্রথম চারিটি বিটের শেষ দুটি বিট টাইমার 1 এর সক্রিয়তার মোড নির্ধারণ করে।

6.1.2 TMOD রেজিষ্টারঃ

প্রতিটি টাইমার চারিটি মোডে কাজ করতে পারেঃ

Figure 46

6.1.3 টাইমার/কাউন্টারে Mode এর গুরুত্ত্বঃ (Importance of Mode in 8051 Timer)::

টাইমার/কাউন্টার প্রোগ্রামিং এ সাধারণ ভাবে মোড 1 এবং মোড 2 ব্যবহৃত হয়। মোড 1 অর্থ TMOD রেজিস্টারের M1–>0 এবং M0–>1 আর মোড 2 এর অর্থ M1–>1 এবং M0–>0 ।

আমরা সাধারন ভাবে টাইমার 0 এবং টাইমার 1 (8051 timer0 & 8051 timer1) এর ক্ষেত্রে মোড 1 এবং মোড 2 ই ব্যবহার করব। উপরের টেবিল অনুযায়ী মোড 1 হল 16 বিট টাইমার মোড। এই মোডে টাইমারকে 0x0000 থেকে 0xFFFF পর্যন্ত পরিবর্তীত করা যায়। অর্থাৎ TL0 কে (টাইমার 0 র ক্ষেত্রে, টাইমার 1 এর ক্ষেত্রে TL1 কে) 0x00 থেকে 0xFF পর্যন্ত এবং TH0 কে (টাইমার 0 র ক্ষেত্রে, টাইমার 1 এর ক্ষেত্রে TH1 কে) 0x00 থেকে 0xFF পর্যন্ত পরিবর্তীত করা যায়।

অনুরূপে, টাইমার মোড 2 হল 8 বিট অটো রিলোড টাইমার মোড। এই ক্ষেত্রে শুধুমাত্র TLএর মান পরিবর্তীত হয়। TLএর মান ওভারফ্লো করলে TH0 বা TH1 (যথাক্রমে টাইমার 0 এবং টাইমার 1 এর ক্ষেত্রে) এ সঞ্চিত প্রাথমিক মান TL0 বা TL1 (যথাক্রমে টাইমার 0 এবং টাইমার 1 এর ক্ষেত্রে) এ রিলোড হয়।

  • TMOD রেজিস্টারের অপর দুটি বিট ‘GATE’ এবং ‘C/T’ বিট নিয়ে আমরা পরে আলোচনা করেছি।

6.1.4 অপর একটি SFR রেজিস্টার টাইমারকে (8051 Timer) নিয়ন্ত্রণ করে।এটি হল TCON রেজিস্টার।

  • TF এর মাধ্যমে টাইমার ওভারফ্লো চেক করা হয় এবং TR এর মাধ্যমে টাইমারকে শুরু ও বন্ধ করা হয়।

6.1.5 নির্দিষ্ট টাইম ডিলে তৈরির জন্য প্রয়োজনীয় ধাপ গুলি (Steps to create definite time delay with 8051 timer):

  1. TMOD এ নির্দিষ্ট ভ্যালু লোড করা। TMOD এর ভ্যালুই নির্ণয় করে কোন টাইমারটি ব্যবহৃত হবে। আবার টাইমারটি কোন মোডে কাজ করবে তাও নির্দেশ করে TMOD এর ভ্যালু।
  2. TH ও TL এ একটি প্রাথমিক ভ্যালু লোড করা হয়। টাইমার স্টার্ট করার পর থেকে টাইমারটির মান এক এক করে বৃদ্ধি পাবে। TH ও TL এর মান উভয়েই সর্বোচ্চ FF পর্যন্ত বৃদ্ধি পেতে পারে। সুতরাং TL ও TH এর মিলিত মান 0000 থেকে FFFF পর্যন্ত বৃদ্ধি পেতে পারে। TH ও TL এর মান সর্বোচ্চ মানে উপনীত হলে টাইমারটি রিসেট করার প্রয়োজন হয়।
  3.    [এখানে প্রতিটি হেক্সাডেসিমাল ডিজিট হল বাইনারি কোডেড হেক্সাডেসিমাল। তাই প্রতিটি ডিজিট          এক একটি      নিবল অর্থাৎ চারিটি বিট দ্বারা গঠিত। সুতরাং প্রতিটি টাইমারের ব্যপ্তি চারিটি          নিবল বা 16 বিট]
  4. এবার টাইমারটি শুরু বা start করতে হবে।এর জন্য TR0 = 1 (টাইমার 0 এর ক্ষেত্রে) এবং TR1 = 1 (টাইমার 1 এর ক্ষেত্রে) করতে হবে।
  5. নিরবচ্ছিন্ন রূপে পরীক্ষা করতে হবে যে TF এর মান 1 এ উন্নীত হয়েছে কিনা।  TF হল টাইমার ওভারফ্লো ফ্ল্যাগ। টাইমার ভ্যালু TH এবং TL সর্বোচ্চ মানে পৌছলে TF এর মান 1এ উন্নীত হয়। সুতরাং TF1 ==0। ( টাইমার 1 এর ক্ষেত্রে) চেক করে টাইমার ওভারফ্লো চেক করা হয়। টাইমার ওভারফ্লো করলে TF রেজিস্টারটি সেট (অর্থাৎ TF এর মান 1 হয়) হয়। TF রেজিস্টারকে রিসেট (অর্থাৎ TF এর মান 0 করে) করে টাইমারটি রিসেট করা হয়।
  6. এবার টাইমারটিকে বন্ধ করা হয়।
  7. এবার ডিলে ফাংশানের পুণরাবৃত্তির জন্য 2 নং এবং তৎপরবর্তী ধাপ গুলির সম্পাদন করা হয়।

NOTE

8051টাইমারের (8051 Timer) সাহায্যে নির্দিষ্ট delay তৈরি করতে গেলে প্রথমে আমাদের চয়ন করতে হবে যে আমরা কোন টাইমার গ্রহণ করব। টাইমারটি কোন মোডে কাজ করবে। সেই টাইমারের TH ও TL মান কত  হবে। এরপর উপরে বর্ণিত ধাপ অনুযায়ী টাইমারকে চালু, টাইমার ওভার ফ্লো ফ্ল্যাগ চেক ও টাইমারকে ব্যবহারের শেষে বন্ধ করতে হবে।
টাইমার চয়ন ( Timer0/Timer1), টাইমার মোড নির্ণয়ের জন্য আমাদের সঠিক TMOD ভ্যালু চয়ন করতে হবে। Timer0 ও মোড 1 ব্যবহারের জন্য TMOD ভ্যালু হল 0x01। 
50ms ডিলে তৈরি করার জন্য আমাদের প্রয়োজনীয় মেশিন পাল্স n = 50*10-3/1.085*10-6 = 46083(approx)

এখন, 65536-46083 = 19453 = 4BFDh

অর্থাৎ Timer0 তে এক্ষেত্রে 19453 তথা 4BFDh(হেক্স ভ্যালু) লোড করতে হবে। তাহলেই 46083 টি মেশিন পাল্‌স কাউন্ট/বৃদ্ধি করার পর Timer0 ওভারফ্লো করবে।
সুতরাং TH0 = 0x4B এবং TL0 = 0xFD করতে হবে।
(এখানে হরে 1.085 দিয়ে ভাগ করার কারণ আমরা যে Xtal ক্রিষ্টাল অস্সিলেটরটি ব্যবহার করেছি তার ফ্রিকোয়েন্সি 11.0592 MHz. এখন প্রতি সেকেণ্ডে মেশিন পাল্সের সংখ্যা হল 11.0592*106/12 = 921600 ( এখানে ফ্রিকোয়েন্সিকে 12 দিয়ে ভাগ করার কারণ 12 টি ক্লক পাল্স নিয়ে 8051 এর একটি মেসিন সাইকেল তৈরি হয়। ) সুতরাং 11.0592 MHz ক্রিস্টাল ব্যবহার করা হলে একটি মেশিন সাইকেলের ব্যাপ্তি হবে 1/921600 = 1.085 us)। যেহেতু প্রতিটি টাইমার রেজিস্টার একটি করে 8 বিট রেজিস্টার এবং 4 টি করে বিট নিয়ে এক একটি  নিবল সেহেতু প্রতিটি টাইমারের TH ও TL ভ্যালু মিলিত ভাবে 65536 (0xFFFF = 15 x 163 + 15 x 162 + 15 x 161 + 15 x 160 + 1) মান পর্যন্ত ধারণ করতে পারে। অর্থাৎ কোন টাইমার সর্বোচ্চ 65536 মান পর্যন্ত কাউন্ট করতে পারে। এখন 50ms সময়ের ডিলে তৈরি করার জন্য আমাদের 46083টি মেশিন পাল্সের প্রয়োজন। একারণেই আমরা 65536 – 46083 = 19453 বা 4BFD(হেক্স) মানটিকে আমাদের TH ও TL নিবলে(nibble) নির্ধারিত করেছি। 

6.1.6 উদাহরণ

8051 Timer এর সাহায্যে 50ms ডিলে তৈরি। নির্দেশঃ টাইমার 0, মোড 1 এর ব্যবহারঃ

প্রোগ্রাম কোডঃ

Figure 47a
এক্ষেত্রে আমরা TMOD = 0x01 করেছি। অর্থাৎ TMOD = 0b00000001 করেছি। সুতরাং 8 বিট TMOD রেজিস্টারের লোয়ার নিবলের শেষ বিটটি 1 করেছি। লোয়ার নিবল সিলেক্ট করার জন্য টাইমার 0 সিলেক্ট হয়েছে। এবং শেষ বিটটিকে 1 করার জন্য অর্থাৎ M0 কে 1 করার জন্য মোড 1 সিলেক্ট হয়েছে।
আবার, TL0 = 0xFD ও TH0 = 0x4B হওয়ায় টাইমার কাউন্টার 4BFDH থেকে FFFFH পর্যন্ত বৃদ্ধি পাবে। সুতরাং,  FFFFH – 4BFDH = B402H = 46082 + 1 = 46083 টি মেশিন সাইকেল তৈরি হবে।
যেহেতু প্রতিটি মেশিন সাইকেল 1.085us সেহেতু মোট টাইম ডিলে 46083 x 1.085us = 50ms
অনুরূপে, টাইমার 1 মোড 1 ব্যবহার করে 500ms ডিলে তৈরি করতেঃ
Figure 47b

এক্ষেত্রে আমরা TMOD = 0x10 করেছি। অর্থাৎ TMOD = 0b00010000 করেছি। সুতরাং 8 বিট TMOD রেজিস্টারের হাইয়ার (Higher) নিবলের শেষ বিটটি 1 করেছি। হাইয়ার নিবল সিলেক্ট করার জন্য টাইমার 1 সিলেক্ট হয়েছে। এবং শেষ বিটটিকে 1 করার জন্য অর্থাৎ M0 কে 1 (হাইয়ার নিবলের) করার জন্য মোড 1 সিলেক্ট হয়েছে।

আবার, TL1 = 0xFE ও TH1 = 0xA5 হওয়ায় টাইমার কাউন্টার A5FEH থেকে FFFFH পর্যন্ত বৃদ্ধি পাবে। সুতরাং,  FFFFH – A5FEH = 5A01H = 23041 + 1 = 23042 টি মেশিন সাইকেল তৈরি হবে।

যেহেতু প্রতিটি মেশিন সাইকেল 1.085us হেহেতু মোট টাইম ডিলে  23042 x 1.085us = 25 ms(app.)

এখন, DelayT1M1(void) ফাংশন কে 20 বার লুপে ঘোরালে আমরা 20 x 25 = 500ms টাইম ডিলে তৈরি করতে পারব।

6.1.7 Sample Delay Program with 8051 Timer(  দৃষ্টান্ত: ডিলে প্রোগ্রাম)ঃ

/*1ms ডিলের জন্য। 1 সেকেন্ড ডিলের জন্য ফাঙশানটিকে লুপে 1000 বার কল করতে হবে।*/

Figure 47c

উপরের কোডটি প্রথমে Keil uVision সফটওয়ার কর্তৃক কমপাইল করার পর .hex তৈরি করে পূর্ব বর্ণিত পদ্ধতিতে MCU তে আপলোড করতে হবে। এরপর নীচের সার্কিট অনুযায়ী ব্রেডবোর্ডে কম্পোনেন্টস গুলি যুক্ত করতে হবে। তারপর 5 ভোল্ট পাওয়ার সাপ্লাইয়ের সাথে যুক্ত করতে হবে। 5 ভোল্ট পাওয়ার সাপ্লাই করতে আমরা সাধারণ 5 ভোল্ট মোবাইল চার্জারের সাহায্য নিতে পারি।

6.1.8 প্রয়োজনীয় উপকরণ/কম্পোনেন্টসঃ

  1. AT89S51
  2. 10uF Capacitor
  3. 33pF Capacitor (2 pieces)
  4. 10K Resistance
  5. LED
  6. 11.0592 MHz Crystal Oscillator
  7. 5V DC Power Source
  8. Bread Board
  9. Connecting Wire

6.1.9 সার্কিটঃ

Figure 48

.hex ফাইল আপলোড করার পর সার্কিটে পাওয়ার অন করলে D1 লেডটি 1 সেকেণ্ড অন্তর ব্লিঙ্ক করবে।