فصل اول : میکروکنترلر 8051
1-1 دراین بخش اتبدا به اعضای مختلف خانواده میکروکنترلر 8051 و ویژگی های آنها نگاه می کنیم .
به علاوه خواهیم دید که سازندگان 8051 چه کسانی هستندوچه نوع محصولی ارائه می دهند .
تاریخچه مختصری از 8051
درسال 1981 شرکت Intel میکروکنترلربه نام 8051 را معرفی کرد .
این میکروکنترلردارای 128 بایت 4k , RAM بایت ROM دو تایمر ، یک پورت سریال وچهار پورت موازی ( هریک 8 بیت ) بود که همه آنها دریک تراشه تعبیه شده بودند . زمانی به آن سیستم در یک تراشه می گفتند .
8051 یک پروسسور 8 بیت است ، یعنی CPU هر بار می تواند فقط روی 8بیت داده کار کند .
داده های بزرگتر از 8 بیت باید به قطعات 8 بیت بشکنند وسپس بوسیلهCPU پردازش شوند .
8051 کلا دارای چهار پورت I/O با عرض 8 بیت است .
شکل 2-1 را ملاحظه کنید گرچه 8051 می تواندحداکثر 64K حافظه ROM درتراشه داشته باشد ، بسیاری از سازندگان فقط 4K بایت را درتراشه کار گذاشته اند .این مطلب بعدا بطور مفصل بحث شده است .
پس از آنکه Intel بشرط حفظ سازگاری با 8051 اجازه تولید را به دیگر سازندگان داد تراشه مذکور بسیار مورد توجه قرار گرفت .این توافق منجر به تولید انواع 8051 با سرعت های متفاوت مقداری ROM در تراشه بوسیله نیم دو جین سازنده شد .
ما بعضی از آنها را بعدا بررسی خواهیم کرد .
آنچه اهمیت دارداین است که گرچه انواع مختلف 8051 با سرعت ومقدار ROM متفاوت در تراشه موجودند ولی همه آنها با 8051 اصلی از نظر دستورات سازگارند .
این بدان معنی است که اگرشما برنامه ای برای یکی بنویسید ، مستقل از سازنده روی دیگری هم قابل اجرا ست .
میکروکنترلر 8051
8051 عضواصلی خانواده 8051 است Intel آن را MCS-51 می نامد .
جدول 1-1 امکانات اصلی 8051 را نشان می دهد .
دیگر اعضای خانواده 8051
دو عضو دیگر از میکروکنترلهای خانواده 8051 با نام 8052 و 8031 نیز وجود دارند .
میکروکنترلر 8052
8052 عضوی دیگر از خانواده 8051 است این کنترلر همه امکانات 8051 بعلاوه 128 بایت RAM ویک تایمر اضافی را دارد به بیان دیگر ، 8052 دارای 256 بایت RAM و 3تایمر است این کنترلر بجای 8K,4K حافظه ROM را در تراشه داراست .جدول 2-1 ملاحظه شود .
میکروکنترلرها و پردازنده های درونی
همانطور که از جدول 4-1 ملاحظه می شود ، 8051 زیر مجموعه ای از 8052 است بنابراین همه برنامه های نوشته شده برای 8051 قابل اجرا بر روی 8052 نیز هستند ولی عکس آن صحیح نیست .
میکروکنترلر 8053
دیگر عضو خانواده 8051 تراشه 8053 است .این تراشه اغلب بنام 8051 بی ROM خوانده می شود زیرا دارای OK بایت حافظه ROM است .برای استفاده از این تراشه باید یک ROM خارجی به آن اضافه کرد این ROM خارجی حاوی برنامه ای است که باید برداشته شده واجرا شود .این تراشه را با 8051 مقایسه کنید که در آن ROM درونی حاوی برنامه مشابهی برای برداشت و اجرا می تواند باشد ولی به 4K بایت کد محدود است .
ROM متصل به 8031 می تواند تا 64K باید باشد .درروند افزایش ROM خارجی به 8031 دو پورت را از دست می دهید .بنابراین دو پورت I/O برای کاربر باقی می ماند .
برای حل این مشکل ، می توان دو I/Oخارجی به 8031 اضافه کرد .
اتصال 8031 به حافظه وپورت های I/O همچون تراشه 8255 در فصل 14 بحث شده است .همچنین انواع 8031 با سرعت های مختلف بوسیله کمپانی های متفاوت در دسترسند .
فصل اول :میکروکنترلرهای 8051
انواع میکروکنترلر 8051
گرچه 8051 رایج ترین عضو خانواده 8051 است ، ولی شما قادر نخواهید بود شماره قطعه ای بصورت 8051 ملاحظه کنید .
دلیل این است که 8051 با حافظه های متفاوتی چون ROM UV-EPحافظه سریع ، NV-RAM در دسترس است که هر یک شماره قطعه متفاوتی دارد . نوع ROM UV-EP خانواده 8051 تراشه 8751 است نوع ROM سریع بوسیله کمپانی های متعدد از جمله Atmel راهی بازار شده است .
8051 نوع سریع از Atmel است که AT89C51 خوانده می شود .
نوع NV-RAM از 8051 بوسیلهDallas semiconductor بنام DS500 شناخته می شود .همچنین نوع OTP ( یکبار قابل برنامه ریزی ) خانواده 8051 بوسیله سازندگان متعددی تولید شده است اکنون هر یک از تراشه های فوق را بطور خلاصه توصیف و کاربرد آنها را بیان می کنیم .
میکرو کنترلر 8751
تراشه 8751 فقط بایت حافظه ROM UV- EPدرونی است .هنگام استفاده از این تراشه در طراحی و پیاده سازی به دستگاه برنامه نویسی ROM Pو پاک کننده برای پاک کردن ROM UV-EPدردرون 8751 قبل از برنامه نویسی نیاز است .باتوجه به این نکته که ROM درون این تراشه از نوع ROM UV-EPاست ،حدود 20 دقیقه برای پاک کردن آن وقت لازم است تا بتوان بعد از آن عمل برنامه نویسی را انجام داد ، این مسئله موجب شد تا بسیاری از تولید کنندگان انواع سریع و NV-RAM نوع 8751 را که در زیر بحث شده بکار ببرند .همچنین نوع سریع 8751 نیز توسط تعدادی از تولید کنندگان ساخته شده است .
AT89C51 از شرکت Atmel
این تراشه 8051 رایج دارای ROM سریع می باشد ، در طراحی های سریع این نوع حافظه ایده ال است زیرا حافظه سریع می تواند طی چند ثانیه ،درمقایسه 20 دقیقه لازم برای 8751 پاک شود .با این دلیل AT89C51 بجای 8751 بکار برده شده است .تا هنگام پاک کردن تراشه وقتی تلف نشود وبدینوسیله ساخت سیستم سریع گردد هنگام استفاده از AT89C51 برای سخت سیستم های مبتنی بر میکروکنترلر به سوزاننده یا برنامه ریز ROM سریع نیاز داریم ، بااین وجود به پاک کننده ROM نیاز نیست .توجه داشته باشید که در حافظه سریع باید تمام حافظه پاک شود تا بتواند مجددا آن را برنامه نویسی کرد .پاک کردن حافظه سریع با خود سوزاننده صورت میگیرد و با این دلیل پاک کننده جداگانه ای لازم نمی باشد .برای حذف سوزاننده ROM P Atmelروی نوعی از AT89C51 کار می کند که می تواند از طریق پورت سریال COM یک IBM PC برنامه ریزی شود .
توجه : C درشماره قطعه بمعنی CMOS است .
محصولات مختلفی از نظرسرعت و بسته بندی تولید شده است .
جدول 4-1 را ببینید مثلا به AT89C51-12PCتوجه کنید که در آن C قبل از 51 به معنی CMOS است بنابراین توان مصرفی کمی دارد .
12 به معنی P.12MHz برای پلاستیکی بودن بسته C,DIP بمعنی تجاری است که د رمقابل M به معنی نظامی بکار می رود-12PC AT89C51 برای پروژه های دانشجویی مناب است .
DS5000از Dollas Semiconductor
نوع رایج دیگر از 8051 تراشه DS5000از Dollas Semiconductor است .
ROM در DS5000 از نوعNV - RAM است قابلیت نوشتن / خواندن NV-RAM اجازه می دهد تا برنامه در ROM در حالی که روی سیستم نصب است بار شود .
این کار راحتی می توان ازطریق IBM PC انجام داد .
به این نوع برنامه نویسی ، بار کردن برنامه در سیستم DS5000 می گویند .
که انجام آن ا زطریق پورت سریال PC آن را برای ساخت سیستم ها درخانه ایده ال می کند .
مزیت دیگر NV- RAM قابلیت تغییر یک بایت در هر بار است .
این قابلیت با ROM UV- EPو حافظه سریع کار می کند ومی تواند از طریق پورت سریال COMیک IBM PC برنامه ریزی شود .
نوع رایج دیگر از 8051 تراشه DS5000از Dollas Semiconductor است .
ROM در DS5000 از نوعNV - RAM است قابلیت نوشتن / خواندن NV-RAM اجازه می دهد تا برنامه در ROM در حالی که روی سیستم نصب است بار شود .
این کار راحتی می توان ازطریق IBM PC انجام داد .
که انجام آن ا زطریق پورت سریال PC آن را برای ساخت سیستم ها درخانه ایده ال می کند .
این قابلیت با ROM UV- EPو حافظه سریع کار می کند ومی تواند از طریق پورت سریال COMیک IBM PC برنامه ریزی شود .
جدول 5-1 انواع 8051 از Dallas توجه کنید که ساعت زمان واقعی با تایمر تفاوت دارد ساعت زمان واقعی ، زمان شبانه روز ( ساعت ، دقیقه ، ثانیه ،) و تاریخ ( سال ،ماه ، روز) را حتی اگر منبع تغذیه قطع شود تولید می کند .
انواع مختلفی DS5000 از نظر سرعت و بسته بندی وجوددارد که در جدول 8-1 نشان داده شده است .
مثلا DS5000-8-8 دارای 8K NV -RAM با سرعت 8 MHz است .اغلب DS50008-12 یا -8-12 DS5000 برای پروژه های دانشجویی مناسب است .
جدول 6-1 انواع 8051 از Dallas نوع OTPاز 8051 انواع OTP از از8051 منابع مختلف در دسترس قرار دارد .
انواع سریع و NV- RAM معمولا برای توسعه تولید بکار برده می شود .
وقتی که محصولی طراحی شد وبغایت اصلاح گردید ، نوع OTP از 8051 برای تولید انبوه بکار برده می شود زیرا از لحاظ قیمت بسیار ارزانتر است .
خانواده 8051 از Philips محصول مهم دیگری از خانواده 8051 بوسیله شرکت Philips ارائه شده است این شرکت از نظر نوع ، بیشترین تولید میکروکنترلر را دارد .
بسیاری از محصولات آن شامل امکاناتی مثل تبدیل I/O , D-A ,A-D توسعه یافته وهر دونوع OTP و حافظه سریع است .
این فصل پایه های 8051 را توصیف کرده وسپس برنامه نویسی پورتI/O را همراه با مثال هایی ، در 8051 نشان می دهد .
2-1 توصیف پایه های 8051 گرچه اعضاء خانواده 8051 ( مثل DS5000,89C51) دربسته های متفاوتی مثلLCC , QFP ,DIP عرضه شده اند ، همه آنها برای انواع توابع مانند WR, RD , I/O آدرس داده ووقفه تدارک دیده شده اند .
باید متذکر شد که بعضی کمپانی ها نوع 20 پایه 8051 راباکاهش پورت های I/O دررابطه باکاربردها کم تقاضا ، تولید کرده اند با این وجود ، چون عمده0 تولید کنندگان از تراشه های DIP با 40 پایه استفاده می کنند ، مابر آنها تاکید خواهیم کرد .
با بررسی شکل 1-1- دیده می شود که از 40 پایه جمعا 32 پایه چهارپورت P3,P2,P1,P0 کنار گذاشته شده اند .بقیه پایه ها به PSEN, EA, RST , XTAL2 , XTAL1 , GND , Vcc اختصاص یافته اند .
شش پایه ( EA , RST , XTAL2, XTAL1, GND , Vcc ازهشت پایه فوق بوسیله همه اعضاء خانواده 8031,8051 بکار رفته اند .
به بیان دیگر ، بدون توجه به اینکه از خانواده 8051 یا 8031 هستند ، آنها باید برای بکار اندازی سیستم وصل شوند دو پایه دیگر ALE, PSENدراصل در سیستم های مبتنی بر 8031 بکار می روند .
ابتدا وظیفه هرپایه را توصیف می کنیم .پورت ها بطور جداگانه مورد بحث قرار گرفته اند .
Vcc پایه 40 ولتاژ تغذیه را برای تراشه فراهم می کند ولتاژ منبع SV است .
GND پایه 20 زمین است .
XTAL2,XTAL1 8051 دارای یک اسیلاتور ( نوسان ساز ) درون تراشه ای است ولی برا ی راندن آن به یک ساعت کریستال نیاز است .
اغلب یک اسیلاتور کریستال کوارتز به ورودی های XTAL1 ( پایه 19( و XTAL2 ( پایه 18) وصل است .
اسلاتور کریستال کوارتز متصل و XTAL2,XTAL1 به دو خازن 30PF وصل می باشد .
یک طرف هر یک از خازن ها مثل شکل 2-1 ( الف ) به زمین وصل است .
باید توجه کرد که سرعت های مختلفی در خانواده 8051 وجود دارد .
غرض از سرعت حداکثر ، فرکانس متصل به XTALاست .مثلا یک تراشه 12MHz باید به فرکانس 12MHz یا کمتر وصل شود.
بهمین ترتیب یک میکروکنترلر 20MHz نباید به فرکانسی بیش از 20MHz وصل شود .
وقتی که 8051 به اسیلاتور کریستال وصل می شود ومنبع تغذیه روشن می گردد ،می توانیم با استفاده از اسیلو سکپ فرکانس را روی XTAL2 ملاحظه کنیم .
اگر می خواهید از منبع فرکانسی بجز اسیلاتور کریستال ، مثل اسیلاتور TTL استفاده نمایید ، باید آن را به XTAL1وصل کنید ودر این حال 2 XTALطبق شکل 2-1 (ب) رها می شود .
RST پایه 9 پایه RESET( باز نشانی ) است .این پایه یک ورودی فعال بالاست .
بعد از اعمال یک پالس بالا به این پایه ، میکرو کنترلر باز نشانده شده وهمه فعالیت ها را رها می کند اغلب به این حالت ،باز نشانی به هنگام روشن شدن می گویند .
فعال کردن یک باز نشانی به هنگام روشن شدن ، موجب از دست رفتن همه مقادیر در ثبات ها می شود جدول 7-1 لیست غیر کاملی از ثبات های 8051 و مقادیر آن ها را پس از باز نشانی به هنگام روشن شدن نشان می دهد .
جدول 7-1 مقدار RESET بعضی از ثبات های 8051 در ROM واداشته می شود .
این بدان معنی است که ما باید اولین خط که مبدا را درمکان 0 از ROM قرار می دهیم زیر آنجا مکانی است که CPU در آن بیدار می شود وانتظار دارد تا اولین دستور را بیابد .
به منظور کاراتر کردن ورودیRESET باید دارای حداقل دوره 2 سیکل ماشینی باشد .
به بیان دیگر ، پالس باید برای حداقل 2 سیکل ماشین قبل از پائین رفتن ، در سطح بالا بماند .
در 8051 بک سیکل ماشین با 12 پریود اسیلاتور تعریف می شود .
EA اعضاء خانواده 8051 مانند 8751 89C51 یا DS5000 همگی با ROM درتراشه برای ذخیره برنامه ارائه می شوند.در این حالت ، پایه EA به Vcc وصل گردد .
برای خانواده 8032,8031 که درآنها ROM وجود ندارد ، کد در ROM بیرونی ذخیره می شود وسپس بوسیله 8031/32 بداخل کشیده خواهد شد .
بنابراین برای 8031 پایهEA باید به GND متصل گردد تا ذخیره شدن کد درخارج تراشه مشخص شود .
EA که به معنی دستیابی بیرونی است ، پایه شماره 31 دربسته DIPمیباشد .
این یک پایه ورودی است و باید به Vcc یا GND وصل گردد .به بیان دیگر ، نمی توان آن را آزاد رها کرد .
درفصل 14 خواهیم دید که 8031 این پایه را به همراه PSEN برای دستیابی به برنامه های ذخیره شده در حافظه ROM واقع در خارج 8031 بکار می برد .
در 8051 با ROM درتراشه مانند 89C51,8751 یا DS5000 EAبه Vcc وصل شده که ما آن را در بخش بعد خواهیم دید .
پایه هایی که تاکنون بحث شدند بدون توجه به نوع خانواده ، باید متصل شوند دو پایه بعد عمدتا در سیستم های مبتنی بر خانواده 8031 بکار می روند .
PSEN این یک پایه خروجی است PSEN به معنی فعال کردن برنامه ذخیره است .دریک سیستم مبتنی بر 8031 که در آن ROM بیرونی کد برنامه را نگه دارد ، این پایه متصل به پایه OE از ROM است فصل 14را ملاحظه کنید .
ALE ALE ( فعال ساز لچ آدرس ) یک پایه خروجی فعال بالاست .
وقتی که 8031 به یک حافظه بیرونی وصل می شود ، پورت 0 هر دو مقدار داده و آدرس را تهیه می کند به بیان دیگر ، 8031 آدرس و داده را از طریق پورت 0 مولتی پلکس می نماید تا بدین ترتیب در مصرف پایه ها صرفه جویی شود پایه ALE برای دی مولتی پلکس کردن آدرس و داده بکار می رود ودر آن پایه G از ترا شه74LS373 به ALE وصل می گردد .این مطلب در فصل 14 تشریح شده است .
پایه های پورت I/O وعملکرد آن ها چهار پورت P3,P2,P1,P0 هر کدام 8 پایه را بکار می برند تا پورت ها را 8 بیتی سازند .
همه پورت ها پس از RESET بصورت خروجی در می آیند و آماده استفاده به عنوان خروجی هستند .برای استفاده از هر یک از این پورت ها به عنوان ورودی ، باید آنها را برنامه ریزی کرد این عمل در طول این بخش توضیح داده خواهد شد .
ابتدا هر پورت را تشریح می کنیم .
پورت 0 پورت 0 جمعا 8 پایه ( 32-39) را اشغال می کند .
می توان از آن به عنوان ورودی یاخروجی استفاده کرد .
برای استفاده از پایه های پورت 0 به عنوان ورودی وخروجی ، هر پایه باید از بیرون به یک مقاومت بالا کش وصل شود .دلیل این است که پورت P0 برخلاف پورت های P3,P2,P1 یک درین باز است دراین باز جمله ای است که برای تراشه های MOS بکار برده می شود وشبیه کلکتور باز در تراشه های TTL است .
در هر سیستم هنگام استفاده از89C51 , 8751 یا DS5000 معمولا P0 را به مقاومت های بالاکش وصل می کنیم .
باین ترتیب از مزیت پورت 0 برای هر دو نوع ارتباط ورودی و خروجی استفاده می شود .با مقاومت های بالاکش بیرونی متصل ، بهنگام باز نشانی ، پورت 0 به عنوان پورت خروجی آرایش می یابد .
پورت 0 به عنوان ورودی با مقاومت های متصل به پورت 0 برای اینکه آن را به ورودی تبدیل کنیم ، پورت باید با نوشتن تمام 1 برنامه ریزی شود .در کد زیر پورت 0 ابتدا با نوشتن 1 ها بصورت ورودی آرایش می یابد و سپس داده از آن پورت دریافت وبه P1 ارسال گردد .
MOV A#OFFH .A= FF hex MOV P0.A .Make p0 an input port By writing all ls to it BACK : MOV A.
P0 get data from p0 MOV P1 a send it to port 1 SJMP BACK keep doing it نقش دوگانه پورت 0 همانطور که در شکل 1-1- دیده شد ، پورت 0 بصورت AD0-AD7 نشان داده شده و با این معنی است که قابل استفاده به عنوان ورودی و خروجی است وقتی که 8051/31 به یک حافظه بیرونی متصل می شود .پورت 0 هردو مقدار آدرس وداده را فراهم می کند 8051 داده و آدرس را از طریق پورت 0 مولتی پلکسی می نماید تا در پایه ها صرفه جویی شود ALEداده یا آدرس بدون اطلاعات درP0 را مشخص می نماید ، وقتی ALE=0 باشد D0-D7 داده را فراهم می کند ،ولی اگرALE=1 باشد ، آدرس A0-A7 در دسترس است .
بنابراین ALE به کمک لچ 74ls373 آدرس و داده را دی مولتی پلکس می نماید .
پورت 1 پورت 1 جمعا 8 پایه ( پایه های 1 تا 8) رااشغال می کندمی توان از آن به عنوان ورودی یاخروجی استفاده کرد .
برخلاف پورت 0 این پورت نیازی به مقاومت های بالاکش ندارد زیرا دارای مقاومت بالاکش درونی است .
پورت 1 به عنوان ورودی برای اینکه 1 ورودی شود ، بایددرهمه بیت های آن تمام 1 نوشت .
پورت 2 پورت 2 جمعا 8 پایه ( از پایه 21 تا 29 ) را اشغال کرده است می توان آن را به عنوان ورودی یا خروجی برنامه ریزی کرد .
همچون p2,p1 هم به مقاومت های بالاکش نیازی ندارند زیرا دارای مقاومت های بالاکش درونی اند بعد از بازنشانی ، پورت 2 بصورت پورت خروجی در می آید .
پورت 2 به عنوان ورودی برای ورودی ساختن پورت 2 باید در آن تمام 1 نوشته شود .
نقش دوگانه پورت 2 درسیستم های مبتنی بر p2,DS5000,89C51, 8751 به عنوان یکI/O ساده بکار رفته است با این وجود در سیستم های مبتنی بر 8031 پورت 2 باید همراه با P0 مورد استفاده قرا رمی گیرد تا آدرسی 16 بیتی را برای حافظه بیرونی فراهم سازد .پورت 2 به عنوان A8-A15 نیز به درنظر گرفته می شود .
با این ترتیب این پورت نقشی دوگانه دارد .
چون 8031 قادراست تا 64K بایت از حافظه بیرونی را آدرس دهی کند ، مسیری برای 6 بیت آدرس نیاز دارد .
درحالی که P0 هشت بیت پائین ربته را از طریق A0-A7 تهیه می کند ، فراهم نمودن آدرس های A8-A15 بعهده P2 است .به بیان دیگر ، وقتی 8031 به حافظه بیرونی وصل است ،P2 برای 8 بیت بالاتر آدرس 16 بیتی بکار رفته است .ونمی تواند برای I/Oبکار رود .
از بحث فوق ،نتیجه می گیریم که در سیستم های مبتنی بر89C51 یا DS5000 سه پورت P2,P1,P0 را برای عملیات I/O در اختیار داریم .این مقدار ورودی - خروجی برای بسیاری از میکروکنترلرها کفایت می کند همانطور که در زیر خواهیم دید پورت 3 برای وقفه ها ودیگر سیگنال ها کنا رگذاشته شده است.
پورت 3 پورت 3 هم 8 پایه ، از پایه 10 الی 17 را اشغال می کند .می توان آن را به عنوان ورودی وخروجی بکار برد .P3 همچون P2,P1 نیازی به مقاومت های بالاکش را ندارد .گرچه پورت 3 پس از باز نشانی بصورت پورت خروجی درمی آید ، ولی این ، یک طریق معمولی در استفاده از آن نیست .پورت دارای توانمندی اضافی دیگری در تهیه بعضی از سیگنال های مهم خارجی مثل وقفه هاست .
این اطلاعات به هر دو تراشه 8031,8051 اختصاص دارد .
پایه P3.1,P3.0 برای تبادل سیگنال اطلاعات TxD , RxD بکار می رود .
بیت P3.3, P3.2 برای وقفه های خارجی کنار گذاشته شده اند .بیت P3.5, P3.4 برای تایمرهای 1,0 درنظر گرفته شده اند نهایتا P3.7, P3.6 برای تهیه سیگنال های RD,WR از حافظه خارجی د ر سیستم های مبتنی 8031 کنار گذاشته شده اند .
در سیستم های مبتنی بر 89C51,8751 یا DS5000 پایه های P3.7,P3.6, برای I/O بکار رفته اند و بقیه پایه ها در پورت 3 برای نقش دیگرشان در نظر گرفته شده اند .
برنامه ریزی I/O دستکاری بیتی در این بخش ما دستورات I/O را در 8051 مورد بررسی بیشتر قرار می دهیم .همچنین به دستکاری I/O بیتی توجه خاصی خواهد شد .
زیرا این از امکانات بالقوه ومورد توجه 8051 است بحث مفصلی از پورت های I/O در 8051 در پیوست 2- ( پ ) آمده است .
روش های مختلف دستیابی به تمام 8 بیت در کد زیر ، همچون مثال های قبلی ، I/O همه هشت بیت پورت 1 دستیابی می شود .
BACK: MOV A.# 55H MOV P1.
A ACALL DELAY MOV A.# 0AAH MOV P1.
A ACALL DELAY SJMP BACK کد فوق هر بیت P1 را مرتبا خاموش وروشن می کند .
ما بنوعی برنامه فوق را قبلا دیده ایم اکنون می توانیم کد فوق را بصورت کاراتر نوشته و با دستیابی مستقیم پورت از مراجعه به انباره خودداری نمائیم .
این نکته در زیر نشان داده شده است .
BACK: MOV P1.# 55H ACALL DELAY MOV P1.# 0AAH ACALL DELAY SJMP BACK می توانیم کد فوق را باتکنیکی بنام خواندن –اصلاح – نوشتن بنوعی دیگر بنویسیم این روش در زیر آمده است .
ویژگی خواندن – اصلاح – نوشتن در 8051 پورت ها با روشی بنام خواندن – اصلاح – نوشتن قابل دستیابی اند .این ویژگی در بسیاری از خطوط کد ، صرفه جویی می کند با این ترتیب که یک دستور سه عمل ( 1) خواندن پورت ( 2) اصلاح آن ، و ( 3) نوشتن در پورت را انجام می دهد کد زیر ابتدا 01010101 (دو دویی ) را در پورت 1 قرار می دهد .
سپس ، دستور XLP P1,0FFH یک عمل XOR منطقی را روی P1 با 11111111 انجام داده و سپس نتیجه را به P1 باز می گرداند .
MOV A.# 55H .P1=01010101 AGAIN XLR P1#0FFH .EX-OR P1witr ACALL DELAY SJMP BACK توجه کنید که XORعدد 55H مقدار AAH را می دهد .بهمین ترتیب XOR عدد AAH مقدار 55H را تولید می کند .
قابلیت آدرس دهی تک بیتی پورت ها مواردی وجود دارد که لازم است در عوض همه 8 بیت ،1 یا 2 بیت دستیابی شوند .یک توانمندی ویژه برای پورتهای در 8051 قابلیت دستیابی تک تک بیت ها بدون تغییر بقیه بیتها در آن پورت است .
مثلا کد زیر بیت p1.2 را مرتبا تغییر وضعیت می دهد .
BACK: CPL P1.2 .complement p1.2 only ACALL DELAY SJMP BACK .another variation of the above program follows AGAIN:" SETB P1.2 .CHANGE ONLY P1.2= HIGH ACALL DELAY CIR P1.2 CHANGE ONLY P1.2= low ACALL DELAY SJMP AGAIN توجه کنید که P1.2 پایه سوم است ، زیرا اولین پایه P1.0 میباشد و دومین پایه هم است جدول 8-1 بیت های پورت I/O را در 8051 نشان می دهد .
این قابلیت آدرس دهی تک بیتی پورت های I/O یکی ازویژگیهای مهم میکروکنترلر 8051 است .
جدول 8-1 قابلیت آدرس دهی تک بیتی پورت ها 8051 دارای دو شمارنده تایمر است .آنهامی توانند به عنوان تایمر ( زمان سنج ) برای تولید یک تاخیر زمانی باشمارنده برای شمارش وقایع رخداد ه درخارج میکروکنترلر بکار روند .در این فصل نشان میدهم که آنها چگونه برنامه ریزی شده و مورداستفاده قرار می گیرند .
4-1 برنامه نویسی تایمرهای 8051 8051 دارای دو تایمر است تایمر 0 وتایمر 1 این تایمرها می توانند به عنوان تایمر یا پدیده شمار بکار روند .در این بخش ما ابتدا ثبات های تایمر را بحث کرده وسپس چگونگی برنامه نویسی تایمرها رابرای تولید تاخیرهای زمانی نشان خواهیم داد .
ثبات های اساسی تایمر هر دو تایمر 1,0 شانزده بیت عرض دارند چون 8051 ساختار 8 بیتی دارد ، هر تایمر شانزده بیتی با دو ثبات مختلف با یت پایین و بایت بالا دستیابی می شود هر تایمر بطور جداگانه بحث شده است .
ثبات های تایمر 0 ثبات 16 بیتی تایمر0 بصورت بایت بالا وبایت پایین دستیابی می شوند .ثبات بایت پایین را TL0 ( بایت پایین تایمر 0) وثبات بایت بالا را TH0 ( بایت بالا تایمر 0) می خوانند .این ثبات ها مثل هرثبات دیگری مانند R2,R1,R0,B,A وغیره قابل دسترسی هستند مثلا دستور MOV TL0#4FH مقدار4FH را بهTL0 منتقل می سازد ، که بایت پایین تایمر 0 است .
این ثبات ها مانند دیگر ثبات ها قابل خواندن هم هستند .مثلا TH0, MOV R5 , TH0 رادر R5 ذخیره می کند .
ثبات های تایمر 1 تایمر 1 هم 16 بیتی ا ست و 16 بیت آن به صورت دو بایت به دو نیم شده است که هر یک را TL1(بایت پایین تایمر 1) وth1 ( بایت بالای تایمر 1) می نامند .این ثبات ها به روشی مشابه با ثبات های تایمر 0 قابل دستیابی اند .
ثبات TMOD ( مد تایمر ) هر دو تایمر 1,0 از یک ثبات به نام TMOD برای تنظیم انواع مدهای عملیاتی تایمر استفاده می کنند .
TMOD یک ثبات 8 بیت است که در آن 4 بیت پایین تر برای تایمر 4,0 بیت بالاتر برای تایمر 1 کنار نهاده شده است .
در هر حال دو بیت پایین تر برای تنظیم تایمر ودوبیت بالاتر برای مشخص کردن عملیات بکار می روند .
این انتخاب ها در زیر بحث شده اند : M1,M0 M1,M0 برای انتخاب مد تایمراست .همانطور که در شکل 3-1 دیده می شود سه مد 2,1,0 وجود دارد .مد 0 یک تایمر13 بیت ، مد1 یک تایمر 16 بیت و مد 2یک تایمر 8 بیت است .
ما عمدتا بر مدهای 2,1تاکید خواهیم کردزیرا بیشتراز دیگری مورد استفاده اند .بزودی مشخصه این مدها را بیان خواهیم کرداین کار بعد از توصیف بقیه ثبات TMOD خواهد بود C/T ( تایمر / ساعت ) این بیت درثبات TMOD برای تصمیم گیری انتخاب تایمر به عنوان مولد تاخیر ویا شمارنده وقایع بکار می رود .اگر C/T=0 باشد از آن به عنوان تایمر برای تولید زمان تاخیر استفاده می شود منبع ساعت برای تاخیر فرکانس کریستال 8051 است .
این بخش با این انتخاب به بحث ادامه خواهد داد .
گرچه انواع سیستم مبتنی بر 8051 دارای فرکانس XTAL از10MHz تا 40MHz میباشند .
ما بر روی فرکانس 11.592 MHz تاکید خواهیم داشت .
دلیل پشت پرده چنین عدم ناهنجاری ، محاسبه میزان باود تبادل سریال 8051 است XTAL=11.592MHz اجازه می دهد تا سیستم 8051 با IBM PC بدون خطا تبادل اطلاعات کند .
GATE بیت دیگر ثبات TMOD بیت GATE است .
هر تایمری آغاز و توقفی دارد .بعضی آن رانرم افزاری برخی سخت افزاری و بعضی دیگر با هر دوکنترل سخت افزاری ،نرم افزاری انجام می دهند .تایمرهای 8051 هر دو نوع را دارا هستند .شروع وتوقف تایمر به صورت نرم افزاری بوسیله بیت های TR,TR1,TR0انجام می شود این کا ربوسیله دستورات CLR TR1,SETB TR1 برای تایمرCLR TR0 ,SETB TR0,1 برای تایمر0 صورت می گیرد .دستورSETB آن را شروع می کند ولی بوسیله دستورCLR متوقف می گردد .
این دستورات مادامی در ثبات TMOD GATE=0 است این کار را نجام می دهند .
راه سخت افزاری شروع و توقف تایمرها ، بوسیله یک منبع بیرونی است که با GATE=1 در ثبات TMOD امکان پذیر است .با این وجود برای پرهیز از تداخل ذهنی ما GATE=0 را انتخاب می کنیم وبدان معنی است که هیچ سخت افزار بیرونی برای شروع وتوقف تایمر لازم نیست .
در استفاده از نرم افزار برای شروع و توقف تایمر در حالت GATE=0 انچه لازم داریم دستورات CLR TRX , SETB TRXاست .
اکنون که این درک پایه را از نقش ثبات TMOD دارا شدیم ، به مدها ی تایمرها و چگونگی برنامه نویسی آنها برای ایجاد یک تاخیر زمانی توجه می کنیم با توجه به این واقعیت مدهای 2,1 نیز خیلی استفاده می شوند ، هر یک از آنها را بطور مشروح بیان می نماییم .
برنامه نویسی مد 1 آنچه در زیر آمده مشخصه ها وعملیات مد 1 است .
1- یک تایمر 16 بیتی است .بنابراین اجازه می دهدتا اعداد از0000 تا FFFFH درثبات های TH,TLتایمر بار شوند .
2- پس از بار شدن TL,TH با مقدار اولیه 16 بیتی ، تایمر باید شروع شود .این کار به کمک SETB TR0برای تایمر SETB TR1, 0 برای تایمر 1 انجام می گیرد.
3- پس از شروع تایمر ، شمارش روبه بالا آغاز می شود شمارش روبه بالا تا رسیدن به FFFFH ادامه می یابد .
وقتی که از FFFFH به 0000 می رود ، بیت پرچمی به نام TF ( پرچم تایمر ) را بالا می برد .
این پرچم تایمر قابل رد یابی است هر وقت این پرچم بالا برود ، یک انتخاب ، توقف بوسیله دستورات CLR TR1, CLR TR0 برای تایمر 1,0 خواهد بود .
مجددا باید توجه داشت که هر تایمر پرچم تایمر خاص خود را داردTF0 برای تایمر TF1,0 برای تایمر1.
4- پس از رسیدن تایمر به حد خود وبازگشت به آغاز شمارش ، اگر بخواهیم فرایند تکرار شود بایدثبات های TH,TL با مقدار اولیه بار شده و TF هم0 شود .
توقف درمد 1 برای تولید یک تاخیر زمانی ، با استفاده از مد 1 تایمر ، مراحل زیر باید طی شود .
مقدارثبات TMOD را بار کنید تامشخص شود کدام تایمر0 یا 1 ) بکار می رود و کدام مد تایمر انتخاب (0 یا 1) می گردد .
ثبات های TH,TL را با مقادیر شمارش اولیه باز کنید .
تایمر را شروع کنید .
پرچم تایمر TF را با دستور JND TFX target ردیابی کنید تا ببینید آیا بالا رفته است یا خیر هنگامی کهTF بالا می رود از حلقه خارج شوید .
تایمر را متوقف کنید .
پرچم TF را برای دور بعد پاک کنید .
به مرحله 2 برای بار کردن محدود TL,TH باز گردید .
ماشین حساب علمی ، در دایرکتوری ویندوز ماکروسافت می تواند شما را در یافتن مقادیر TL,THیاری کند این ماشین حساب محاسبات دو دویی ، دهد هی و شانزده شانزدهی را پشتیبانی می کند .
یافتن اعدادی که باید در حلقه بار شوند فرض کنید که مقدار تاخیر زمانی را می دانیم سوال این است که چگونه مقادیر لازم برای ثبات های TL,TH محاسبه می شوند .برای محاسبه مقادیری که باید در TL,TH بار شوند ، به مثال زیر که در آن فرکانس کریستال سیستم 8051 برابر11.0592 MHz است توجه کنید .
فرض کنید XTAL = 11.592 MHz را داریم می توانیم برای یافتن مقادیر ثبات های TL,TH از مثال 10-9 استفاده نموده ومراحل زیر را طی کنیم .