مدرس و مدیر گروه سابق دانشکده فنی و حرفه ای انقلاب اسلامی، طراح و مسئول برق در چندین شرکت تولیدی |
زبانهای سطح بالا یا همان HLL بسرعت در حال تبدیل شدن به زبان برنامه نویسی استاندارد
برای میکروکنترلرها حتی برای میکروهای هشت بیتی کوچک هستند . زبان برنامه نویسی
Basic و C بیشترین استفاده را در برنامه نویسی میکروها دارند ولی در اکثر کاربردها کدهای
بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید میکنند . ATMEL ایجاد تحولی در
معماری جهت کاهش کد به مقدار مینیمم را درک کرد که نتیجه این تحول میکروکنترلرهای AVR
هستند که علاوه بر کاهش و بهینه سازی مقدار کدها بطور واقع عملیات را تنها در یک سیکل
توسط معماری RISC انجام میدهند و از 32 رجیستر همه منظوره استفاده میکنند که باعث
شده 4 تا 12 بار سریعتر از میکروهای مورد استفاده کنونی باشند .
تکنولوژی حافظه های کم مصرف غیر فرار شرکت ATMEL برای برنامه ریزی AVR ها
مورد استفاده قرار گرفته است در نتیجه حافظه های FLASH و EEPROM در داخل مدار
قابل برنامه ریزی (ISP) هستند . میکروکنترلرهای اولیه AVR دارای 1, 2 و 8 کیلوبایت حافظه
FLASH و بصورت کلمات 16 بیتی سازماندهی شده بودند .
AVR ها بعنوان میکروهای RISC با دستورات فراوان طراحی شده اند که باعث میشود حجم کد
تولیدشده کم و سرعت بالاتری بدست آید .
شریح دستور العمل های برنامه نویسی
برای شروع برنامه نویسی با میکرو لازم است با دستورات پر کاربرد آن آشنا شویم . البته یک مرجع سریع دستورات زبان برنامه نویسی جزء ابزار های ضروری برای یک برنامه نویس است.اصولا برای یادگیری هر زبان برنامه نویسی علاوه بر آشنایی با دستورات زبان ، تمرین و نوشتن برنامه های گوناگون بسیار لازم است .
برای شروع برنامه نویسی با میکرو لازم است با دستورات پر کاربرد آن آشنا شویم . البته یک مرجع سریع دستورات زبان برنامه نویسی جزء ابزار های ضروری برای یک برنامه نویس است.اصولا برای یادگیری هر زبان برنامه نویسی علاوه بر آشنایی با دستورات زبان ، تمرین و نوشتن برنامه های گوناگون بسیار لازم است تا برنامه نویس ساختار صحیح دستورات برایش ملکه ذهن شود و از وقت بسیار ارزشمندی که باید به جای اینکه صرف نوشتن کد های جدیدتر شود صرف عمل طاقت فرصا و وقت گیر Debugging می شود کاست .پس بعد از آشنایی با هر دستور العملی انواع مودهای آدرس دهی آن را مورد بررسی قرار دهید و مثال های کوتاه اما پر ارزش با محتوا را تمرین کنید.
دستورالعمل های 8051 را بر اساس نوع عملکرد می توان به پنج گروه تقسیم کرد.
• دستورالعمل های محاسباتی
• دستورالعمل های منطقی
• دستور العمل های انتقال داده
• دستور العمل های بولی
• دستور العمل های انشعاب برنامه
نخست دستور العمل های محاسباتی :
این مجموعه دستورالعمل ها شامل دستورالعمل های جمع و تفریق و کاهش وافزایش و ضرب و تقسیم 8 بیتی می باشند.
دستور العمل ADD برای جمع کردن یک مقدار 8 بیتی با ثبات A مورد استفاده قرار می گیرد . عملوند اول این دستورالعمل ثبات A (انباره) می باشد . این دستورالعمل در 4 مود آدرس دهی مورد استفاده قرار می گیرد.
مودهای آدرس دهی را در مقاله قبلی بررسی کردیم حال خودتان باید بتوانید این مود های آدرس دهی را از همدیگر با استفاده از مشخصه های هر مود آدرس دهی از همدیگر تفکیک کنید.
ADD A,Rn |
در دستورالعمل های بالا عملوند های دوم (Rn,@Rn,#data,direct) سمبل هایی هستند که نشان دهنده نوع آدرس دهی می باشند .منظور از Rn هر کدام از ثبات های بانک ثبات است ،منظور از data هر عدد ثابت 8 بیتی می تواند باشدمنظور از diret عدد یا نامی است که نشان دهنده آدرس مکانی از حافظه باشد.
مثال:
ADD A,R0 |
دستور اول محتویات R0 را با ثبات A جمع و دوباره در A قرار می دهد دستور دوم محتویات آدرس90h حافظه (پورت یک) را با A جمع می کند و دوباره در A قرار می دهد .دستور سوم محتویات جایی که R0 به آن اشاره می کند را با A جمع کرده و در A قرار می دهد .و دستور چهارم آنچه را که در A قرار دارد با عدد 10 دهدهی جمع می کندو نتیجه باز هم در A قرار می گیرد.
حتما متوجه شده اید که نوع آدرس دهی در دستور اول ثبات ، دستور دوم مستقیم ، دستور سوم غیر مستقیم ، و در دستور چهارم فوری است.
دستور دیگری برای جمع وجود دارد با سمبل ADC که مخفف ADD with Carry می باشد و به معنای جمع با رقم نقلی است عملکرد آن بدین صورت است که ابتدا مقدار بیت C (نقلی) با ثبات A جمع شده و سپسعملوند دوم هم به ثبات A اضافه می شود . این دستور هم مانند دستور ADD در چهار مود آدرس دهی بالا مورد استفاده قرار می گیرد.
دستورالعمل تقسیم 8 بیتی :
DIV A |
این دستور العمل مقدار موجود در ثبات A را بر مقدار موجود در ثبات B تقسیم می کند . خارج قسمت در ثبات A و باقیمانده عمل تقسیم در ثبات B ذخیره خواهد شد.
فرض کنید که ثبات A حاوی مقدار 11 است و ثبات B حاوی مقدار 4 باشد پس از اجرای عمل تقسیم مقدار 2 در ثبات A و مقدار 3 در ثبات B ذخیره خواهد شد.
دستور العمل افزایش : |
یک دستور العمل تک عملوندی است این دستور عملوند خود را یک واحد افزایش می دهد .نکته ای که در مورداین دستور العمل باید به آن توجه کرد اینست که هیچ پرچمی بعد از اجرای دستور تغییر نخواهد کرد برای مثال اگر ثبات A حاوی مقدار #offh باشد بعد از اجرای این دستور مقدار A, 00 خواهد شد اما پرچم تغییر نخواهد کرد.
این دستور العمل در سه مود آدرس دهی ثبات ، مستقیم و غیر مستقیم عمل می کند.
|
دستورالعمل کاهش:
این دستور العمل یک عملوند دارد .پس از اجرای دستور از محتوای عملوند یک واحد کم می شود.
DEC A |
توجه :
دستور DEC DPTR وجود ندارد و باید برای کاهش DPTR دو ثبات DPLو DPH را جداگانه کاهش دهیم .
اگر ثبات A حاوی مقدار 10 باشد پس از اجرای DEC A ثبات A حاوی مقدار 9 خواهد بود .
دستور العمل ضرب :
|
این دستور العمل محتوای ثبات A را در ثبات B ضرب می کند نتیجه ضرب بدین گونه ذخیره می شود .بایت پایین حاصلضرب در ثبات A و بایت بالای حاصلضرب در ثبات B ذخیره می شود.
دستور العمل تفریق:
دستور SUBB برای ع تفریق یک مقدار 8 بیتی از ثبات A مورد استفاده قرار می گیرد.این دستور مخفف(Sub with Barrow) است و عملوند دوم را به اضافه ی Carry از ثبات A کم می کند اگر در جریان تفریق از بیت هشتم نیاز به رقم قرضی باشد Carry یک می شود و در غیر اینصورت صفر می شود.در زیر مود های آدرس دهی عمل تفریق آمده اند .
SUBB A,Rn |
مجموعه دستورالعمل های منطقی :
دستور العمل های منطقی بر روی تک تک بیت ها اعمال منطقی ANDو OR وXOR را انجام می دهند دستورات چرخش و شیفت بیتی هم در زمره این دستورات هستند.
در AND کردن ، نتیجه دو بیت زمانی یک است که هر دو بیت یک باشند.در OR کردن دو بیت نتیجه دو بیت زمانی صفر است که هر دو بیت صفر باشند در XOR کردن (یای انحصاری ) نتیجه هنگامی صفر است که هر دو بیت یا صفر باشند یا یک.
XOR برای مکمل کردن بیت ها هم به کار می رود .نتیجه XOR یک بیت با بیت 1 مکمل آن خواهد بود و نتیجه XOR یک بیت با بیت 0 خود آن بیت را نتیجه خواهد داد. این دستورات برای مکمل کردن بیتهای مشخصی از یک بایت حافظه ، که بیت آدرس پذیر نیستند مفیداست.
دستور اسمبلی که برای And کردن مورداستفاده قرار می گیرد ANL ( And Logic) است.
ANL A,direct |
دستور آخر یک دستور بیتی است یعنی بر روی یک بیت به تنهایی عمل می کند بقیه دستورات دستورات بایتی هستند.
مثال:
فرض کنید که پورت یک حاوی مقدار #01001111b است و همچنین در ثبات A هم مقدار باینری #00001010b را داشته باشیم
پس از اجرای دستور العمل ANL A,P1 نتیجه به صورت زیر خواهد بود :
01001111 |
و این مقدار در ثبات A قرار خواهد گرفت .
ميكروكنترلرهاي خانواده PIC از معماري هاردوارد استفاده ميكنند . اين بدان معنا است كه كل حافظه به دو قسمت تقسيم شده است . كه عبارتند از : حافظه داده و حافظه برنامه .
مزيت اين معماري آن است كه ميتوان به هر دو بخش حافظه در يك دستورالعمل دسترسي داشت .
اغلب PIC ها داراي سه بلاك حافظه داخلي ميباشند :
۱_ Data memory : كه اين حافظه به Bank0 و Bank1 و ... تقسيم ميشوند .هر بانك شامل حافظه
RAM معمولي (general purpose register) و ريجيستر هاي مخصوص (status,intcon,option,…)
مي باشد.
2_ Eeprom memory : يكي از تفاوت هاي اصلي ميكروهاي گذشته مثل سري 8051 با PIC و AVR ،
همين حافظه ميباشد. اين حافظه تقريبا بينابين RAM و ROM از نظر كاربرد ميباشد . اين حاظه به
صورتي است كه ميتوان در حين برنامه نويسي ، اطلاعات را در آن ذخيره يا پاك كرد (RAM) واطلاعات آن
در صورت قطعي برق نيز پاك نمي شود (ROM) . نسيت به RAM و ROM داراي سرعت به مراتب
پايين تر ميباشد .
3_Program memory : برنامه اي كه توسط كاربر نوشته ميشود . در اين حافظه LOAD ميشود . به
عنوان مثال PIC16F877 (40 پين) داراي پروگرام كانتر 13 بيتي براي آدرس دهي كردن Flash program
memory به حجم (8k*14bit) ميباشد .
PIC ها از لحاظ نوع Program memory به 4 دسته تقسيم ميشوند .
1) Flash Program Memory
مزيت اين گونه PIC ها سرعت نسبتا بالاي خواندن اطلاعات از ROM و درنتيجه سرعت بالاتر اجراي
عمليات ميباشد . حافظه هاي فلش موجب گرديده تا سرعت اجراي برنامه از 12 كلاك در 8051 به 4 كلاك
در PIC و 1 كلاك در AVR كاهش يابد .
خانواده هايي كه نام IC داراي F باشد داراي اين گونه حافظه ميباشند (مانند 16F84 , 16F877.....) .
2) Eprom program memory
خانواده هايي كه نام IC داراي C يا CE باشد.(16C84)
3)Rom Program Memory
خانواده هايي كه نام IC داراي CR باشد (16CR84)
4) Eeprom Program Memory
همچنين بعضي از PIC ها نيز داراي رنج ولتاژي گسترده ميباشند كه داراي مشخصه L
در نام IC مي باشد.(PIC16LF84)
PIC16F84
در اين قسمت به توضيح مشخصات ميكروكنترلر PIC16F84 ميپردازيم
اما قبل از آن به data sheet این میکرو مراجعه کنید و ویژگیهای آن را بخوانید .
(روی لینک زیر کلیک کنید )
اطلاعاتي كه Data Sheet دراختیار ما قرار ميدهد :
در ابتدا PIC هاي از اين خانواده كه داراي ويژگي هاي يكسان ميباشند معرفي شده است .
درقسمت بعد مشخصه هاي CPU كه در اين ميكرو از نوع RISC (Reduce Instruction Set Computer )ميباشد گفته شده:
داراي 32 دستور العمل يك كلمه اي ميباشد (تعداد دستورات نسبت به ميكرو هاي ديگر به مراتب كمتر)
همه دستورالعمل ها در يك سيكل ( 4 Clock) اجرا ميشود .(سرعت آن 1.5 برابر 8051 با كريستال
يكسان )
در قسمت بعد حداكثر فركانس كاري را 10MHz مشخص نموده است .
طبق جدول تراشه PIC16F84 داراي 1k كلمه (word) ( عرض هر كلمه برابر 14bit ) حافظه برنامه
Flash ، 68 bytes حافظه داده (RAM) و 64 bytes حافظه Eeprom ميباشد . (در مورد اين حافظه ها
ميتوانيد به قسمت قبل سر بزنيد ) .
پهناي هر دستورالعمل (flash program memory) 14 بيت و پهناي داده (data memory) 8 بيت
ميباشد.
15*8 bits به ثبات داخلي ميكرو براي انجام عمليات هاي خاص (SFR)مانند option و Statuse و
TMR0 و ..... تعبيه گرديده است و 8*8 bits جهت حافظه پشته (stack) (در قسمت بعد در مورد اين گونه حافظه ها توضيح داده خواهد شد ) .
داراي 4 منبع وقفه ميباشد (در اين مورد نيز در قسمت وقفه كامل توضيح داده خواهد شد ):
قابليت 1000 بار خواندن و نوشتن حافظه flash
قابليت 10.000.000 بار خواندن و نوشتن حافظه Eeprom
قابليت 40 سال نگهداري اطلاعات Eeprom
مشخصات جانبي :
داراي 13 پايه ورودي خروجي (دو درگاه ورودي- خروجي به نام A با 5 پايه و B با 8 پايه ) ، هر پين ورودي
خروجي داراي مدار Latch ميباشد ، يعني هر بيت اطلاعات كه از طريق ميكرو به عنوان خروجي به پورت
ريخته ميشود روي پورت باقي ميماند تا وقتي كه اطلاعات جديد روي آن ريخته شود . همچنين اگر هر بيت اطلاعات به عنوان ورودي روي پورت ها ريخته شود تا وقتي اطلاعات جديد وارد نگردد تغيير نميكند .
اغلب PIC ها در پورت B داراي pull up داخلي ضعيف ميباشند ( اين بدان معنا هست كه پايه ورودي با يك مقاومت پر اهم به Vcc متصل شده ) . بيت هفتم از رجيستر OPTION_REG مربوط به pull up ميباشد . اگر اين بيت صفر باشد pull up فعال ميشود و اگر يك باشد pull up غير فعال ميگردد. وقتي پايه اي به عنوان خروجي تعريف گردد pull up آن خود به خود غير فعال ميشود .
بيشترين جريان كه هر پايه ميتواند بدهد 20 mA است كه ميتواند يك LED را مستقيما روشن نمايد.
بيشترين جرياني كه ميتواند دريافت كند 25 mA ميباشد .
تايمر/كانتر 8 بيت.
در قسمت بعد از خصوصيات برتر اين ميكرو كنترلر توضيح داده شده كه مهمترين آن محدوده ولتاژ كار ميكرو را بين 2تا 6 ولت مشخص نموده است و توان مصرفي ميكرو را در حالت هاي مختلف بيان نموده كه به شرح زير است :
با ولتاژ 5 ولت و فركانس 4MHz ، 2 ميلي آمپر
با ولتاژ 2 ولت با فركانس 32kHz ، 15 ميكرو آمپر
و در حالت Standby و ولتاژ 2 ولت ، 1 ميكرو آمپر
اين اطلاعاتي بود كه از صفحه اول data sheet ميكرو استخراج شده است
پايه هاي PIC و رجيستر هاي آن
همانگونه كه ميدانيد ميكرو كنترلر يك تراشه ايست قابل برنامه ريزي كه تنها با تغيير دادن (صفر و يك منطقي ) تعدادي پايه ميتواند با عالم خارج و وسايل ديگر ارتباط برقرار كند و وسيله اي را كنترل كند.
تعريف : به مجموعه اي از چند پايه كه به رجيستر واحد اختصاص يافته درگاه يا پورت ميگويند .
PIC16F84 داراي 2 درگاه به نامهاي A با 5 پايه و B با 8 پايه ميباشد كه به هر پورت دو رجيستر اختصاص يافته است . يكي رجيستر TRIS و ديگري رجيستر آدرس پورت ميباشد .Tris يك رجيستر 8 بيتي است
قابل برنامه ريزي و پيكره بندي پايه هاي I/O را به عنوان خروجي يا ورودي كنترل ميكند . اگر يك بيت از اين رجيستر (TRISA/TRISB) مقدار صفر باينري قرار گرفته باشد پايه متناظر با آن رجيستر در پورت A يا
B به عنوان پايه خروجي خواهد بود و اگر يك باينري قرار گيرد پايه متناظر با آن به عنوان ورودي خواهد بود . البته به صورت پيش فرض تمام رجيستر يك ميباشد يعني تمام پايه ها به عنوان ورودي تعريف شده اند . و توصيه ميگردد در هنگام برنامه نويسي نيز دقت نماييد پايه هايي كه احتياجي به آنها نيست در همان حالت ورودي باقي بماند .
كاربر ميتواند پس از پيكربندي شدن پورت ها (ورودي خروجي شدن پورت ) با استفاده از رجيستر آدرس پورت ، اطلاعات را در آن پورت بنويسد يا از آن بخواند مثلا اگر بخاهيم RB0 تا RB3 را به عنوان خروجي و RB4 تا RB7 را به عنوان ورودي تعريف كنيم بايد عدد 11110000 را در رجيستر TRISB قرار دهيم.
رجيستر TRISB در آدرس 86H از حافظه قرار دارد كه PICbasic به صورت خودكار با نوشتن دستور زير اين رجستر را مقدار رهي ميكند :
Tris(port / pin) =
Example:
Trisb=%11110000 B تغيير دادن كل پايه هاي پورت
Trisb.5=0 به عنوان خروجي تعريف گرديده B پين پنجم از پورت
همچنين در صورتي كه احتياج به تغيير يك پين خاص از پورت داشته باشيم ميتوانيم از دستورات INPUT و OUTPUT به صورت زير استفاده كنيم :
Input pin or Output pin
Example : Output portb.5 ç == è Trisb.5=0
براي تغيير دادن مقدار منطقي پيني كه به عنوان خروجي تعريف گرديده ميتوان به صورت زير عمل نمود:
Portb.5 = 0 B صفر كردن پين 5 از پورت
Portb.0 = 1 B يك (منطقي) كردن پين 0 از پورت
يا ميتوان كل پايه هاي پورت را با هم تغيير كرد :
Portb=%11000001 پايه هاي 0 و 6 و 7 را يك و باقي پايه ها صفرمنطقي
تذكر :
دستورات Input و Output مربوط به رجيستر Tris ميباشد . در ضمن با Tris نميتوان مقدار
منطقي پين را تغيير داد . تنها ميتوان يك پين را به عنوان ورودي يا خروجي مشخص نمود .
تنها پيني ميتوان صفر يا يك منطقي كرد كه به عنوان خروجي مشخص گردد .
ميتوان مقدار منطقي پيني كه به عنوان ورودي مشخص گرديده نيز به صورت زير خواند :
Var = port / pin
Example : sw=portb.2
با اين دستور مقدار منطقي پين 2 از پورت B را در متغير sw قرار ميدهد .
Dipsw = portb
با اين دستور مقدار منطقي كل پين هاي پورت B را كه به عنوان ورودي تعريف گرديده در متغير Dipsw قرارميدهد
آشنایی با میکرو کنترلر
میکروکنترلرها یکی از قطعات پرکاربرد الکترونیکی در صنایع گوناگون و مصارف
شخصی می باشند که در بین علاقه مندان الکترونیک بسیار محبوب هستند.
در واقع یک میکروکنترلر یک CPU مانند CPU ی کامپیوتر شماست همراه با
مدارات و قطعاتی که برای کار آن ضروری است به اضافه مداراتی که امکاناتی
را به آن اضافه می کند و اینها همگی در کنار هم و در یک تراشه جمع شده اند.
در واقع میکروکنترلرها برنامه هایی را که برایشان نوشته شده و در داخل آنها
قرار داده شده را اجرا می کنند. این برنامه ها دقیقا شبیه برنامه هایی است
که در کامپیوترهای شخصی با زبانهایی مثل اسمبلی ، C ، بیسیک یا پاسکال
نوشته می شوند.
میکرو کنترلرها از ابتدا تا کنون پیشرفتهای زیادی داشته اند و هم اکنون تولید
کنندگان زیادی آنها را در مدلهای مختلف و با کارکردهای مختلف می سازند.
بعضی از مهمترین تولید کنندگان عباتند از Atmel و Microchip .
همانطور که ذکر شد در داخل میکرو کنترلرها علاوه بر CPU (که عموما دارای
گذرگاه داده 8 بیت است) مدارات دیگری نیز وجود دارند که بسته به تولید
کننده و مدل آن متفاوت است. این مدارات ممکن است شامل نوسان ساز
ساعت سیستم، حافظه Flash برای ذخیره برنامه، حافظه RAM ،
حافظه EEPROM / Flash برای داده، شمارنده / تایمر، پورت سریال،
مقایسه کننده آنالوگ، مبدل آنالوگ به دیجیتال / دیجیتال به آنالوگ، PWM ،
پورت USB و... باشد.
همانطور که گفته شد با وجود این مدارات در داخل تراشه، تقریبا برای کار
میکروکنترلربه هیچ مدار خارجی دیگری نیاز نیست ولی در CPU ها تمامی
این مدارات در خارج ازتراشه هستند. این برای میکروکنترلرها هم مزیت است
و هم عیب . طراحی سخت افزار و سیستم با میکروکنترلر ساده است ولی
بعنوان مثال نمی توان به آسانی فضای حافظه را افزایش داد.
از نظر پایه ها انواع آن از 8 پایه تا 40 پایه بصورت DIP و بالاتر ساخته می شود.
هر میکروکنترلر دارای یک سری دستورالعمل های نرم افزاری است که می تواند
آنهارا اجرا کند که به آن مجموعه دستورالعمل گفته می شود. این دستورات از یک
میکرو کنترلر به دیگری تفاوت هایی دارند و در بعضی از مدلها مثل PIC و AT89s51
اصلا به هم شباهتی ندارند. این یکی از نقاط ضعف میکرو هاست.
بعنون مثال برنامه ای که برای PIC16F84 نوشته شده بر روی ATMega8535 قابل
اجرا نیست. تفاوت چشمگیر بین دستور العمل های مربوط به سازندگان است.مثلا
میکروهای سری PIC بابقیه همخوانی ندارد. این سری ساخت شرکت Microchips
بوده و بقیه ساختشرکت Atmel هستند. حال آنکه دستورات و برنامه های At89s51
کاملا به درستی بر روی At89s52 اجرا می شود. همچنین مجموعه دستورالعملها
در سری 89s شبیه سری های tiny و Mega است.
برنامه ای که میکرو باید اجرا کند پس از نوشته شدن اسمبل یا کمپایل می شود تا
کد ماشین برای آن میکرو تولید شود (نوشتن برنامه و تبدیل آن عموما بر روی یک
PC صورت می گیرد.). پس از اینکار برنامه ترجمه شده باید به حافظه کدی که در
درون میکرو است انتقال یابد. این کار توسط یک دستگاه کمکی بنام پروگرامر انجام
می شود که در واقع یک مدار رابط بین کامپیوتر و میکروکنترلر است. پس از اینکار
برنامه در درون میکرو باقی می ماند و هنگامی که میکرو بر روی بورد دستگاه
موردنظر نصب شود شروع به اجرای برنامه می کند.در واقع چون سخت افزار
میکروها(مثل تعداد پایه ها و طریقه پروگرام کردن آنها) متفاوت است هر سری
از آنها پروگرامرمخصوص به خود را می خواهد.
پس برای اینکه بتوانیم از یک سری از میکروکنترلرها استفاده کنیم دو چیز لازم
است: یکی اسمبلر یا کمپایلر و دیگری پروگرامر. امروزه میکروها در دستگاه های
زیادی بکارمی روند مثل ضبط صوت، ماشین لباس شوئی، یخچال، اتومبیل،
رسیورهای ماهواره، شارژرهای باطری، تلوزیون، گوشی موبایل و ... در واقع
هرجا که طراحی مدار درحدی پیچیده باشد که نتوان آنرا با قطعات گسسته
اجرا کرد از میکروها استفاده می شود.
كمپاني هاي توليد كننده خانواده 8051
بعضي از كمپاني هاي توليد كننده اعضاي خانواده 8051
intel |
|
atmel |
|
philips/signetics |
|
siemens |
|
dallas semiconductor |
ميكرو كنترلر 8051 ابتدا به وسيله ي Intel ساخته شد،
بعد چندين كمپاني ديگر نيز شروع به توليد آن كردند از جمله:
Philips/signetics ، atmel ، amd ، simens ، matra
و dallas semiconductor بايد متذكر شد كه Motorola
و zilog و technology microchip تعداد زيادي شبعات را براي
اين منظور انتخاب كرده اند تا توليدات خود را به طور گسترده
و بموقع دردسترس قرار دهند زيرا توليدشان با ثبات ، در حد
كمال و قابليت دسترسي ، از يك مركز است.درسالهاي اخير
آنها نيز شروع به فروش سلول كتابخانه asic از ميكرو كنترلركرده اند.
آموزش میکروکنترلر 8051 (قسمت اول)
كامپيوتر ها وظيفه ي كنترل رو در ارتباط با دنياي واقعي بر عهده دارند.ميكرو كنترلر ها بر
خلاف ميكرو كامپيوتر ها و ريز پردازنده ها اغلب در چنين كاربرد ها يي يافت ميشن . همون
طور كه ميدونيد ، ميكرو كنترلر، قطعه اي شبيه به ريزپردازنده است. كافيه به داخل كيبورد
نگاه كنيد تا مثالي از يك ميكرو كنترلر رو در يك طراحي با كمترين اجزا ممكن ببينيد.
در سال 1971 ، اينتل ،8080 رو به عنوان اولين ريز پردازنده ي موفق و درسال 1976 ،
8748 رو به عنوان اولين قطعه ي خانواده ي ميكرو كنترلرهايMCS-8051 معرفي كرد.
8748 با 17000 ترانزيستور در يك مدار مجتمع، شامل يك CPU ، 1 كيلو بايت EPROM ،
64 بايت RAM ، 27 بايه يI/O و يك تايمر 8بيتي بود.
اما تفاوت ميكرو كنترلر ها و ريز پردازنده ها در معماري سخت افزار ، كاربرد ها و دستورالعمل
ها خلاصه ميشه ؛ در حالي كه ريز پردازنده يك CPU ي تك تراشه است ، ميكرو كنترلر در
يك تراشه ي واحد ،علاوه بر CPUشامل ROM ، RAM ، يك رابط سريال ،يك رابط موازي ،
تايمر و مدارات زمان بندي وقفه هم هست ؛
يك ويژگي مهم ميكرو كنترلر ها ، سيستم وقفه ي موجود در داخل اونهاست . ميكروكنترلر
ها به عنوان ابزار ها ي كنترل گرا ( control-oriented devices ) اغلب براي پاسخ بي درنگ
به محرك هاي خارجي ( وقفه ها ) مورد استفاده قرار ميگيرند .يعني بايد در پاسخ به يك
اتفاق ، سريعا يك فرايند رو معوق نگه داشته ، به فرايند ديگر بپردازند .
از نظر كاربرد ميكرو كنترلر ها برا ي كنترلر ابزار هاي I / O مناسبند ، اما ريز پردازنده ها براي
پردازش اطلاعات در سيستم هاي كامپيوتري .
از طرفي مجموعه دستورالعمل هاي ريز پردازنده ها بر عمل پردازش تمركز پيدا كردن و در
نتيجه داراي روش هاي آدرس دهي قدرتمند به همراه دستورالعمل هايي براي انجام
عمليات روي حجم زياد داده هستند . دستور العمل ها روي چهار بيت ها ( nibbles ) ، بايت
ها ، 16 بيت ها و حتي 32 بيت ها ( double words ) عمل ميكنند. در حالي كه ميكرو
كنترلر ها مجموعه دستورالعمل هايي مناسب براي كنترل ورودي ها و خروجي ها دارند.اين
كار تنها نيازمند يك بيت است .
ميكرو كنترلر ها دستورالعمل هايي براي 0 و 1 كردن بيت ها ي جداگانه دارن
( clear & set ) ، و عمليات ديگري رو هم روي بيت ها مثل and و or و xor كردن
منطقي بيت ها ، برش در صورت 1 يا پاك بودن يك بيت و مانند آنها انجام ميدن .اين
ويژگي مفيد بندرت در ريز پردازنده ها يافت ميشه چون اون ها معمولا براي كار روي
بايت ها يا واحد هاي بزرگ تر داده طراحي ميشن . با اين همه در قدرت پردازش
محض ، يه ميكروكنترلر هرگز به ريزپردازنده نميرسه .
و اما مزايا و معايب …
وظايفي كه ميكروكنترلر ها انجام ميدن وظايف تازه اي نيستن ؛ چيزي كه جديده اينه
كه طراحي ها با تعداد اجزاء كمتري از گذشته انجام ميشن . اعمال منطقي كه
نيازمند چندين IC هستند اغلب توسط يك ميكرو كنترلر با اضافه كردن يك برنامه ي
كنترلي انجام مي شن .
عيب كار در سرعت است . راه حل هاي ميكرو كنترلي هرگز دز سرعت به باي راه
حل هاي مشابه با اجزاي گسسته نميرسند .در موقعيت هايي كه نياز به پاسخ
هاي خيلي سريع وجود داره (كه البته به ندرت چنين كاربرد هايي پيدا ميشن ) ،
ميكرو ها عكس العمل ضعيفي از خودشون نشون ميدن…به عنوان يك مثال نمايش
ساده شده اي از انجام عمل nand با استفاده از ميكرو رو در نظر ميگيريم ؛به كار
بردن ميكرو براي چنين عملي چندان مرسوم نيست ، اما اين امكان وجود داره . نرم
افزار بايد عمليات منطقي اي رو انجام بده كه برنامه ي زبان اسمبلي 8051 براي اين
عمل منطقي به اين صورته :
loop
mov c,p1.4 ; read p1.4 bit in to carry flag
anl c.p1.5 ; and with p1.5
anl c,p1.6 ; and with p,1.6
cpl c ; convert to "nand" result
mov p1.7,c ; send to p1.7 output bit
sjmp loop ; repeat
اگه اين برنامه در يك ميكرو 8051 اجرا بشه ، تاخير انتشار از يك transition يا همون
گذار ، در ورودي تا استقرار سطح منطقي درست در خروجي دست كم در مقايسه با
معادل TTL آن ( transistor-transistor logic ) بسيار طولاني است . بسته به نسبت
زماني تغيير در ورودي و تشخيص اين تغيير توسط برنامه ، تاخير بين 3 تا 17 ميكرو
ثانيه خواهد بود .در حالي كه تاخير انتشار در معادل TTL از مرتبه ي 10 نانو ثانيه
است يعني حدود 1000 بار كمتر .پر واضحه كه در ايجاد توابع منطقي سرعت ميكرو
ها با مدار هاي TTL معادل ، قابل مقايسه نيست .
در بسياري كاربرد ها به ويژه اونهايي كه با عمل كرد انسان سر و كار دارن ،اين كه
تاخير ها به نانو ثانيه اندازه گيريي بشه يا ميكرو و ميلي اهميتي نداره . (وقتي كه
فشار روغن اتومبيل افت بيدا ميكنه يا سنسور ربات يه انحراف رو در مسير مي بينه
لزومي نداره ظرف چند نانو ثانيه مطلع شيم… ) مثال گيت منطقي nand نشون ميده
ميكرو ها مي تونن عمليات منطقي انجام بدن . از اين گذشته هر چي طراحي ها
پيچيده تر باشه مزاياي طراحي ميكرو كنترلري بيشتر خودش رو نشون ميده …
آموش میکروکنترلر 8051 (قسمت دوم)
در این قسمت معماري سخت افزار 8051 رو با نگاهي از بيرون به پايه هاي اون بررسي ميكنيم .
خلاصه ي مشخصات اين IC به اين ترتيبه :
1) 4 KB : ROM
2) 128 B : RAM
3) چهار I /O port هشت بيتي
4) رابط سريال يا serial interface
5)64 KB : فضاي حافظه ي خارجي براي كد
6) 64 KB : فضاي حافظه ي خارجي براي داده
7) دو تايمر/ شمارنده ي 16 بيتي ( timer / counter )
8) Boolean processor يا پردازنده ي بولي
9) 210 مكان بيتي آدرس پذير ( bit – addressable )
10) انجام عمليات ضرب و تقسيم در 4 ميكرو ثانيه .
و اما پايه ها :
جمعاً 32 پين يا همون پايه از 40 پين 8051 به عنوان خطوط I / O port ( درگاه ورودي
– خروجي ) عمل مي كنند ؛ علاوه بر اين 24 خط از اين خطوط دو منظوره هستند .
هر يك از اين خطوط مي تونن به عنوان I/O يا خط كنترل ويا بخشي از address bus
( گذرگاه آدرس ) و يا data bus ( گذرگاه داده ) به كار برن .
هر 8 خط يك port يا درگاه ، مي تونن به صورت يك واحد در ارتباط با وسايل موازي
مثل چاپگرها و مبدل هاي ديجيتال به آنالوگ بكار برن . و يا هر خط به تنهايي با
وسايل تك بيتي مثل سوئيچ ها ، LED ها ، ترانزيستورها ، سيم پيچ ها ، موتور ها و
بلند گو ها ارتباط برقرار كند .اما قبل از اين كه وارد جزئيات پايه ها بشيم بهتره در مورد
نحوه ي آدرس دهي اطلاعاتي داشته باشيم ؛يه حافظه رو با چهار خانه ي حافظه در
نظر بگيريد . خونه هاي اين حافظه رو به اين شكل آدرس دهي ميكنيم :
پس اين حافظه با دو تا خط آدرس ، آدرس دهي ميشه ؛ كه هر كدوم از اين خطوط
ميتونن مقادير 0 و 1 رو بپذيرند .
خطوط آدرس رو با Ai معرفي ميكنيم . پس A1 و A0 خطوط آدرس ما هستن . به
A1 بيت بالا و به A0 بيت پايين حافظه گفته ميشه .
اين يك نمونه ي ساده بود از حافظه ؛ به همين ترتيب مي شه خونه هاي حافظه هاي
بزرگ رو هم آدرس دهي كرد . در اين صورت ما به تعداد بيشتري خط آدرس نياز داريم
تا بتونيم خونه ها رو به صورت يكتا آدرس دهي كنيم . به طوري كه با n خط آدرس
2^n خانه ، قابل آدرس دهي هستند. از اون جايي كه 8051 داراي 210 مكان بيتي
آدرس پذير است ،براي آدرس دهي اين تعداد خانه ي حافظه به حداقل 8 خط آدرس
نياز داريم . و هر يك از اين خطوط به شكل يك پين در ميكرو در مي آن . اما اين 8 خط
فقط در مواقع استفاده از حافظه ي داخلي است كه كافي اند . وقتي لازمه از حافظه
ي خارجي هم استفاده كنيم به خطوط بيشتري براي آدرس دهي نياز داريم كه در
اين حالت از پورت مالتي پلكس شده استفاده مي كنيم ؛ در اين زمينه در توضيحات
پورت هاي 0 و 2 توضيحاتي داده شده .
Port يا درگاه 0:
پورت 0 يك پورت دو منظوره از پين 32 تا 39 تراشه 8051 است . اين پورت ، در
طراحي هايي با كمترين اجزاي ممكن به عنوان يه پورت I /O عمومي استفاده
ميشه . در طراحي هاي بزرگتر كه از حافظه ي خارجي استفاده مي كنيم ، اين
پورت يه address & data bus مالتي پلكس شده است . معني اين جمله اينه كه
گاهي لازمه براي جمع و جور كردن ميكرو ، از يه پين ، هم داده منتقل بشه هم
آدرس. از طرفي عمل انتقال داده و آدرس هرگز با هم صورت نمي گيرن ؛ به طوري
كه هميشه اول آدرس داده ي مورد نظر عبور ميكنه ، بعد اين آدرس ذخيره ميشه ، و
سپس ميكرو از روي اون آدرس داده رو انتقال مي ده ؛ پس ما ميتونيم از يه پورت هم
به عنوان گذرگاه داده استفاده كنيم و هم به عنوان گذرگاه آدرس . به اين جور
گذرگاهي ، گذرگاه مالتي پلكس شده مي گن .
پورت 1 :
اين درگاه ، پورت اختصاصي I/O روي پين هاي 1 تا 8 است . پين هاي p1.0 تا
p1.7 در صورت نياز براي ارتباط با وسايل خارجي به كار مي رن . وظيفه ي ديگه اي
براي اين پايه ها در نظر گرفته نشده . هر چند استثناءً در IC ها ي 8032 و 8052 از
p1.0 و p1.1 به عنوان خطوط I/O و يا ورودي تايمر سوم استفاده مي شه .
پورت 2 :
يه پورت دو منظوره كه به عنوان I / O عمومي و يا بايت بالاي address busدر
طراحي با حافظه ي كد خارجي external code memory به كار مي ره … اين پورت
همچنين در طراحي هايي كه به بيش از 256 بايت از حافظه ي داده ي خارجي
( external data memory ) نياز دارن هم استفاده مي شه .
توضيح : فرض كنيد در يك طراحي ، مي خواهيم از external memory استفاده
كنيم . گفتيم كه UC (مخفف ميكرو كنترولر ) علاوه بر داده بايد آدرس اون رو هم
داشته باشه . ما از پورت 2 به عنوان گذرگاه آدرس استفاده مي كنيم .
در واقع ما براي ارتباط ميكرو با هر IC ديگه اي هم به داده نياز داريم هم به آدرس ؛ و
البته آدرس ها يكتا هستند . همون طور كه قبلاً گفته شد در اين حالت به 16 خط
آدرس نياز داريم كه 8 خط (بايت بالا ) رو پورت 2 تاًمين ميكنه و 8 خط ديگه (بايت
پايين ) رو پورت 0 به شكل مالتي پلكس شده .
اگه اين خطوط آدرس رو به شكل زير در نظر بگيريم به خطوطA15 تا A8 بايت بالاي
آدرس و به خطوط A7 تا A0 بايت پايين گفته مي شه .
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
نتيجه اين كه خطوط آدرسي كه مربوط به بايت بالاي آدرس هستند از طريق پورت 2
مي تونن با خارج در ارتباط باشن .
پورت 3 :
روي پين هاي 10 تا 17 كه علاوه بر I /O عمومي ، هر يك از اين پايه ها وظايف
ديگه اي رو هم در ارتباط با امكانات خاص 8051 دارند .
تا اين جا وظبفه ي 32 پين مشخص شد . پين هاي 40 و 20 به ترتيب براي اتصال
به منبع تغذيه يا Vcc و زمين يا Vss به كار ميرن .
نوسان ساز ( oscillator) ميكرو به پايه هاي 18 و 19 وصل ميشه ؛ و نهايتاً
8051 چهار سيگنال اختصاصي براي كنترل گذرگاه داره كه روي پين هاي
9 , 29 , 30 , 31 قرار مي گيرن .
ساده ترين معماري ميكرو كنترلر، متشكل از يك ريز پردازنده، حافظه و درگاه ورودي/خروجي است. ريز پردازنده نيز متشكل از واحد پردازش مركز (CPU) و واحد كنترل (CU) است.
CPUدرواقع مغز يك ريز پردازنده است و محلي است كه در آنجا تمام عمليات رياضي و منطقي ،انجام مي شود. واحد كنترل ، عمليات داخلي ريز پردازنده را كنترل مي كند و سيگنال هاي كنترلي را به ساير بخشهاي ريز پردازنده ارسال مي كند تا دستورالعمل ها ي مورد نظر انجام شوند.
حافظه بخش خيلي مهم از يك سيستم ميكرو كامپيوتري است. ما مي توانيم بر اساس به كارگيري حافظه، آن را به دو گروه دسته بندي كنيم: حافظه برنامه و حافظه داده . حافظه برنامه ، تمام كد برنامه را ذخيره مي كند. اين حافظه معمولاً از نوع حافظه فقط خواندني (ROM) مي باشد. انواع ديگري از حافظه ها نظير EPROM و حافظه هاي فلش EEPROM براي كاربردهايي كه حجم توليد پاييني دارند و همچنين هنگام پياده سازي برنامه به كار مي روند . حافظه داده از نوع حافظه خواندن / نوشتن (RAM) مي باشد . در كاربردهاي پيچيده كه به حجم بالايي از حافظه RAM نياز داريم ، امكان اضافه كردن تراشه هاي حافظه بيروني به اغلب ميكرو كنترلر ها وجود دارد.
درگاهها ورودي / خروجي (I/O )به سيگنال هاي ديجيتال بيروني امكان مي دهند كه با ميكرو كنترلر ارتباط پيدا كند. درگاههاي I/O معمولاً به صورت گروههاي 8 بيتي دسته بندي مي شوند و به هر گروه نيز نام خاصي اطلاق مي شود. به عنوان مثال ، ميكروكنترلر 8051 داراي 4 درگاه ورودي / خروجي 8 بيت مي باشد كه P3, P2, P1, P0 ناميده مي شوند. در تعدادي از ميكرو كنترلر ها ، جهت خطوط درگاه I/O قابل برنامه ريزي مي باشد. لذا بيت هاي مختلف يك درگاه را مي توان به صورت ورودي يا خروجي برنامه ريزي نمود. در برخي ديگر از ميكروكنترلرها (از جمله ميكروكنترلرهاي 8051) درگاههاي I/O به صورت دو طرفه مي باشند. هر خط از درگاه I/O اين گونه ميكرو كنترلرها را مي توان به صورت ورودي و يا خروجي مورد استفاده قرار داد . معمولاً ، اين گونه خطوط خروجي ، به همراه مقاومتهاي بالا كش بيروني به كار برده مي شوند.
خانواده 851
خانواده 8051 يك خانواده ميكرو كامپيوتر (ميكرو كنترلر ) 8 بيتي تك تراشه اي استاندارد است كه بسيار محبوب و عامه پسند مي باشد و توسط سازندگان مختلف با قابليت هاي متفاوت توليد مي گردد. اين آي سي استاندارد اصلي كه اولين عضو اين خانواده مي باشد، 8051 است كه يك ميكرو كنترلر 40 پايه مي باشد.
هم اكنون اين آي سي با پيكربندي هاي مختلف موجود مي باشد. 80C51 نوع cmos و كم مصرف اين خانواده است. 8751 داراي حافظه برنامه از نوع EPROM است كه عمدتاً در هنگام پياده سازي به كار برده مي شود.
89c51 نيز داراي حافظه فلش قابل برنامه ريزي و پاك شدن (PEROM) است لذا بدون نياز به پاك كردن با اشعه ماورابنفش ، مي توان حافظه برنامه را برنامه ريزي كرد.8052 عضو بهينه شده اين خانواده مي باشد و حافظه RAM آن بيشتر بوده و تعداد تايمر/شمارنده آن نيز بيشتر است. انواع مختلفي از خانواده 40 پايه وجود دارد كه داراي مبدل هاي آنالوگ به ديجيتال ، مدولاتورهاي عرض پالس و نظاير آن هستند. در بخش پايين خانواده 8051 ، ميكرو كنترلر هاي 20 پايه قرار دارند كه از لحاظ كد ، سازگاري كاملي با انواع 40 پايه دارند و اين ادوات 20 پايه براي كاربردهايي با پيچيدگي كمتر كه نياز به خطوط I/O كمتري دارند و نيز براي كاربردهايي كه بايد مصرف توان كمتري داشته باشند (مثل سيستم هاي قابل حمل)،ساخته شده اند.
آي سي هاي AT89C2051 و AT89C1051 (ساخت شركت Atmel)چنين ميكرو كنترلرهايي هستند كه از لحاظ كد سازگاري كاملي با خانواده 8051 دارند و مصرف توان آنها نيز كمتر است.
میکرو کنترلر
کتاب میکرو کنترلر ۸۰۵۱ از جمله کتب مشهور درباره میکرو کنترلر ۸۰۵۱
و خانواده این میکرو کنترلر هاست . نگارش آن بسیار روان و شیوه ارائه
مطالب آن به گونه ای است که با دانستن مبانی دیجیتال و اطلاعاتی
درباره زبان برنامه نویسی فرد می تواند به خوبی از آن استفاده کند.
این کتاب نوشته جانیس گیلیسپی مزیدی و ترجمه های مختلفی دارد.
برگرفته از http://bia24me.blogfa.com/
![]() |
POWERED BY BLOGFA.COM |
![]() |