جلسه سوم
مقدمه
پس از آمادهسازی سختافزاری که در جلسات قبل بررسی شد، در این جلسه وارد دنیای برنامهنویسی و کنترل عملیاتی میکروکنترلر میشویم. برای آنکه یک برنامه به درستی روی پردازنده اجرا شود، باید تنظیمات اولیه نرمافزاری انجام گیرد و روشهای تعامل با دنیای بیرون (درگاههای ورودی/خروجی) و مدیریت زمان به درستی درک شوند.
۱) وقفه بازنشانی (Reset Interrupt) و شروع برنامه
هر میکروکنترلر پس از روشن شدن یا فشرده شدن دکمه ریست، به یک نقطه مشخص در حافظه (معمولاً آدرس صفر) مراجعه میکند. این نقطه «بردار بازنشانی» نامیده میشود.
- نقش وقفه بازنشانی: این وقفه اولین دستوری است که پردازنده اجرا میکند و وظیفه دارد کنترل سیستم را به بدنه اصلی برنامه منتقل کند.
- اهمیت: بدون تنظیم صحیح این بخش، پردازنده نمیداند اجرای کد را از کجا شروع کند و سیستم در وضعیت نامشخصی باقی میماند.
۲) مقداردهی اشارهگر پشته (Stack Pointer)
پشته (Stack) بخشی از حافظه است که برای ذخیرهسازی موقت دادهها، آدرسهای بازگشت از توابع و وضعیت پردازنده در هنگام وقوع وقفهها استفاده میشود.
- چرا مقداردهی اولیه لازم است؟ در ابتدای برنامه، باید به پردازنده بگوییم که پشته از کدام نقطه حافظه شروع شود. اگر این مقداردهی انجام نشود، با اولین فراخوانی تابع یا وقوع وقفه، برنامه دچار خطا شده و سیستم اصطلاحاً «هنگ» میکند.
- عملکرد: اشارهگر پشته به آخرین خانه استفاده شده یا اولین خانه خالی اشاره میکند و با هر بار ذخیره یا بازیابی داده، تغییر میکند.
۳) کار با درگاههای ورودی و خروجی (I/O Ports)
درگاهها تنها راه ارتباطی میکروکنترلر با محیط اطراف (مانند سنسورها، کلیدها، LEDها و نمایشگرها) هستند.
برای کار با درگاهها، سه مفهوم اصلی وجود دارد:
- تعیین جهت (Data Direction): مشخص میکنیم که هر پایه «ورودی» (دریافت داده) باشد یا «خروجی» (ارسال فرمان).
- ارسال داده (Output): نوشتن مقدار روی درگاه برای روشن کردن یک وسیله یا ارسال سیگنال.
- دریافت داده (Input): خواندن وضعیت فعلی پایهها.
۴) سرکشی به وضعیت یک پایه (Polling)
روش «سرکشی» یا Polling یکی از سادهترین روشها برای نظارت بر محیط است. در این روش، پردازنده بهصورت مداوم و در یک حلقه تکرار، وضعیت یک پایه خاص (مثلاً وضعیت یک کلید) را چک میکند.
- نحوه عملکرد: پردازنده منتظر میماند تا تغییری در وضعیت پایه (مثلاً از صفر به یک) رخ دهد و سپس واکنش نشان میدهد.
- کاربرد: این روش برای کاربردهای ساده که سرعت پاسخگویی خیلی بحرانی نیست، بسیار موثر است.
۵) تولید تأخیر نرمافزاری (Software Delay)
گاهی نیاز است که بین دو دستور یا دو عمل، مدتی صبر کنیم (مثلاً برای چشمکزن کردن یک LED). تأخیر نرمافزاری با استفاده از حلقههای تکرار بیهوده ایجاد میشود.
- مزیت: سادگی در پیادهسازی و عدم نیاز به سختافزار جانبی.
- عیب: در حین اجرای این تأخیر، پردازنده کاملاً مشغول است و نمیتواند کار دیگری انجام دهد، که باعث هدر رفتن توان پردازشی میشود.
۶) کار با زمانسنج (Timer)
برای حل مشکلات تأخیر نرمافزاری و رسیدن به دقت بالاتر، از واحد سختافزاری «زمانسنج» یا تایمر استفاده میشود.
- تفاوت با تأخیر نرمافزاری: تایمر بهصورت مستقل از پردازنده کار میکند. ما زمان مشخصی را تنظیم میکنیم و پردازنده به کارهای دیگر خود میرسد؛ هر زمان که وقت تمام شد، تایمر به پردازنده اطلاع میدهد.
- کاربردها: ایجاد زمانبندیهای دقیق، اندازهگیری فواصل زمانی و تولید سیگنالهای کنترلی منظم.
جمعبندی جلسه
در این جلسه، زیرساختهای نرمافزاری لازم برای اجرای یک پروژه واقعی را بررسی کردیم. از تنظیم پشته و مدیریت ریست گرفته تا کنترل درگاهها و مدیریت زمان (به دو روش نرمافزاری و سختافزاری). این مفاهیم سنگبنای تمام پروژههای پیچیدهتری هستند که در جلسات آینده انجام خواهیم داد.