وقفه ها Interrupts در زبان بیسیک BASIC

وقفه ها Interrupts

وقفه ها Interrupts در زبان بیسیک BASIC

در میکرو کنترولرهای VAR دو دسته وقفه طراحی شده است.

وقفه های داخلی

وقفه های خارجی

فعال سازی کلی وقفه ها در زبان بیسیک BASIC

برای فعال سازی هر یک از وقفه ها باید وقفه سراسری را فعال نمود. برای این کار از دستور زیر استفاده می شود.

فعال سازی وقفه مورد نظر در زبان بیسیک BASIC

بعد از فعال سازی کلی هر وقفه را باید با ذکر نام وقفه جداگانه فعال کرد.

INTERRUPT : نام وقفه مورد نظر

غیر فعال سازی وقفه مورد نظر در زبان بیسیک BASIC

برای غیر فعال کردن وقفه به کار می رود.

Interrupt : نام وقفه مورد نظر

پرش به وقفه در زبان بیسیک BASIC

ما وقفه را لازم داریم تا در زمان اجرای برنامه اصلی, یک برنامه فرعی اجرا شود. برای این کار باید در زمان وجود وقفه به یک زیر برنامه پرش کنیم. این کار با دستور زیر در برنامه نویسی انجام می شود.

Interrupt : نام وقفه مورد نظر

Lable : نام بر چسب زیر برنامه وقفه

Nosave : در حالت پیش فرض تمامی رجیسترهای میکرو ذخیره شده تا در زمان برگشت از وقفه میکرو بتواند برنامه اصلی خود را بدون تغییر ادامه دهد. وجود این گزینه باعث تغییر رجیسترها و اشکال در برنامه می شود.

نکته : برای برگشت از برچسب و زیر برنامه وقفه باید از دستور return استفاده کرد.

وقفه های داخلی در زبان بیسیک BASIC

وقفه های داخلی برای اکثر امکانات و خصوصیات یک میکروکنترلر طراحی شده و برای هر یک بیت پرچمی که به آن بیت وقفه گفته می شود تعبیه شده تا یک شدن آن بیت نشان دهنده وقوع وقفه برای خصوصیت مورد نظر باشد. در اینجا نام تمامی بیت های پرچم که برای نمایش پایان کار بک خصوصیت یک می شوند را آورده ایم.

1- ovf0 : وقفه سریزی تایمر – کانتر 0

2- ovf1 : وقفه سریزی تایمر – کانتر 1

3- ovf2 : وقفه سریزی تایمر – کانتر 2

4- ovf3 : وقفه سریزی تایمر – کانتر 3

5- oc1a : وقفه ورودی تایمر – کانتر 1 در مد coppare a

6- oc1b : وقفه ورودی تایمر – کانتر 1 در مد coppare b

7- oc2 : وقفه ورودی تایمر – کانتر 2 در مد capture

8- oc3a : وقفه ورودی تایمر – کانتر 3 در مد coppare a

9- oc3b : وقفه ورودی تایمر – کانتر 3 در مد coppare b

10- (icp1) capture1 : وقفه ورودی تایمر – کانتر 1 در مد capture

11- (icp2) capture2 : وقفه ورودی تایمر – کانتر 2 در مد capture

12- (icp3) capture3 : وقفه ورودی تایمر – کانتر 3 در مد capture

13- adc : وقفه پایان عمل تبدیل آنالوگ به دیجیتال

14- aci : وقفه پایان عمل مقایسه کننده آنالوگ

15- twsi : وقفه ارتباط سریال 12c

16- erdy : وقفه آمادگی خواندن eeprom

17- urxc : وقفه پایان دریافت داده از ارتباط سریال uart

18- udre : وقفه خالی بودن رجیستر داده ارتباط سریال uart

19- utxc : وقفه پایان ارسال داده به ارتباط سریال uart

20- serial : وقفه فعال و غیر فعال بودن ارتباط سریال uart

21- spi : وقفه ارتباط spi

وقفه های خارجی در زبان بیسیک BASIC

تعدادی از پایه های میکروکنترلرهای avr را می توان به عنوان یک عمل دهنده وقفه پیکر بندی نمود. این پایه ها در هر میکرو با کلمه intx مشخص شده که در آن x ععد وقفه خارجی را نشان می دهد مانند into که وقفه خارجی 0 می باشد.

دستور پیکر بندی وقفه خارجی در زبان بیسیک BASIC

برای راه اندازی یک پایه با مشخصه int به عنوان وقفه خارجی باید به روش بالا عمل کرد.

X : عدد وقفه نسبت به نوع میکرو

State : حالت حساسیت ورودی اعمالی به پایه وقفه که به سه حالت زیر بوده و در هر نوع میکرو تنها یکی از این حالت ها و در بعضی تمامی حالت ها ساپورت می شود.

حالت اول: گزینه low level که در این حالت ورودی به سطح صفر حساس است.

حالت دوم: گزینه rising که در این حالت ورودی به لبه بالا رونده ولتاژ حساس است.

حالت سوم: گزینه falling که در این حالت ورودی به لبه پایین رونده ولتاژ حساس است.

 اطلاعات پروژه

 رمز فایل : www.electronics98.com (این مطلب فاقد فایل جهت دانلود است)

 نویسنده : فرهاد اکبری

 تاریخ انتشار : 16 سپتامبر 2014

4 دیدگاه

  1. سلام،در حالت وقفه ی خارجی در مد rising میشه بفرمایید مینیمم ولتاژ لازم روی INTx برای تریگر کردن در مورد AVR َ چقدر باید باشه؟ممنون از شما.

  2. سلام دوست عزیز
    در حالت rising شما باید یک ولتاژ مثبت به پایه های مربوطه میکروکنترلر متصل کنید، مقدار مینیمم این ولتاژ برای هر میکروکنترلر کمی متفاوت است، بهتر است برای یافتن پاسخ دقیق سوال خود به دیتاشیت میکروکنترلر مورد نظر خود مراجعه کنید. اما در حالت معمولی مقدار مینیمم ولتاژ تحریک برای سطح منطقی مثبت 2.3 ولت است.

  3. سلام.من یک برنامه دارم که تاریخ و ساعت همزمان با سنسور pir باید کار کنه.ولی متاسفانه فقط برنامه تاریخ و ساعت اجرا میشود و دستور سنسور را اجرا نمیکند.میخواستم راهنماییم کنید که چگونه از interrupts استفاده کنم تا وقفه ایجاد کنم برای اجرای همزمان دوتا دستور باهم.ممنون از مطالب مفیدتون.

  4. سلام دوست عزیز
    شما می توانید برای محاسبه ساعت از تایمر دو میکروکنترلر و برای وقفه از تایمر یک در برنامه نویسی خود استفاده کنید. همچنین می توانید برنامه خود را طوری بنویسید که از طریق تایمر 2 ساعت محاسبه شود و در حلقه Do و Loop وضعیت پایه متصل شده به سنسور PIR به صورت مداوم بررسی شود.

 شرایط و قوانین ثبت دیدگاه

 فارسی بنویسید و از کیبورد فارسی استفاده کنید.

 لطفاً بیش‌از‌حدِ معمول، شکلک یا ایموجی استفاده نکنید و از کشیدن حروف یا کلمات با صفحه‌کلید بپرهیزید.

 به کاربران و سایر اشخاص احترام بگذارید. پیام‌هایی که شامل محتوای توهین‌آمیز و کلمات نامناسب باشند، حذف می‌شوند.

 از ارسال لینک‌های سایت‌های دیگر و ارایه‌ی اطلاعات شخصی خودتان مثل شماره تماس، ایمیل و آی‌دی شبکه‌های اجتماعی پرهیز کنید.