خانه / آموزش میکروکنترلرهای ARM / دستورات تاخیری و تعریف زیر برنامه به زبان C در میکرو ARM

دستورات تاخیری و تعریف زیر برنامه به زبان C در میکرو ARM

دستورات تاخیری و تعریف زیر برنامه به زبان C در میکرو ARM

گاهی موقع لازم است برنامه برای مدت زمانی اجرا نشود، برای این کار از دستورات تاخیر استفاده می شود. در Keil تابع برای تاخیر (در برنامه) وجود ندارد. و شما باید برای انجام تاخیر CPU را به کار دیگری مشغول کنید.  یکی از این کارها شمردن اعداد می باشد! پس با ما همراه باشید تا نحوه ایجاد زمان های دلخواه برای تاخیر و چگونگی ایجاد زیر برنامه و نحوه پرش به آن ها را به زبان C در میکروکنترلرهای ARM را به صورت کامل فراگیرید.

دستورات تاخیری و تعریف زیر برنامه به زبان C در میکرو ARM

ابتدا طبق آموزش های قبلی برنامه زیر را توسط نرم افزار Keil شبیه سازی کنید

# include <at91sam7x256.h>

# include <libe – at91sam7x256.h>

Void wait (void) ;

Int n ;

Int main (void) {

AT91F-PIO-CfgOutput (AT91C-BASE- PIOBx,AT91C-PIO-PB 19);

AT91F-PIO-ClearOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

Wait ( );

AT91F-PIO-SetOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

Wait ( );

}

Void wait (void) {

For ( n =0 ; n < 1843200 ; n++);

}

مشاهده می کنید که در هر نیم میلی ثانیه پایه b19 روشن و خاموش می شود. در این برنامه برای ایجاد تاخیر از فراخوانی تابع استفاده شده است.

تحلیل برنامه

توسط دستور زیر در اولین خط برنامه میکروکنترلر معرفی شده است. میکرو مورد استفاده ما at91sam7x256 می باشد که قبلا در مورد نحوه ی انتخاب میکرو توضیح داده شد.

# include <at91sam7x256.h>

در خط بعدی توسط دستور زیر، فایل هدر (کتابخانه) فراخوانی می شود.

# include <libe – at91sam7x256.h>

در خط سوم با استفاده از دستور زیر مقداری از فضای حافظه برای توابع فراخوانی رزرو شده است.

Void wait (void) ;

با استفاده از دستور زیر در خط چهارم برنامه یک متغیر از نوع int معرفی شده است. (متغیر n می تواند از 0 تا 2 بتوان 32 یعنی 4294967296 تغییر کند.)

Int n ;

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

Int main (void) {

در خط ششم به کمک دستور زیر پایه شماره 19 از پورت B میکروکنترلر at91sam7x256 از خانواده میکروکنترلرهای ARM را به عنوان خروجی پیکربندی می کنیم.

AT91F-PIO-CfgOutput (AT91C-BASE- PIOBx,AT91C-PIO-PB 19);

در خط هفتم به کمک دستور زیر پایه شماره 19 از پورت B میکروکنترلر at91sam7x256 از خانواده میکروکنترلرهای ARM را در سطح منطقی صفر 0 قرار می دهیم.

AT91F-PIO-ClearOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

در خط هشتم تابع تاخیر wait فراخوانی می شود با رسیدن CPU به این خط به میکروکنترلر at91sam7x256 به تابع زیر در خط دوازدهم برنامه پرش می کند.

Void wait (void) {

در زیر برنامه wait یک حلقه for وجود دارد در این حلقه مقدار اولیه متغیر n برابر 0 در نظر گرفته شده است. با دستور ++n مدام به متغیر n یک واحد اضافه می شود. هنگامی که n به 1843200 رسید CPU به خط بعد از شرط پرش می کند در آنجا یک آکولاد وجود دارد که CPU را به حلقه اصلی بر می گرداند و CPU برنامه را از خط بعد از wait ادامه می دهد.

سپس میکروکنترلر در خط نهم برنامه توسط دستور زیر پایه شماره 19 از پورت B میکروکنترلر at91sam7x256 از خانواده میکروکنترلرهای ARM را در سطح منطقی یک 1 قرار می دهد.

AT91F-PIO-SetOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

در خط نهم دوباره تابع تاخیر wait فراخوانی می شود با رسیدن CPU به این خط به میکروکنترلر at91sam7x256 به تابع زیر در خط دوازدهم برنامه پرش می کند.

Void wait (void) {

همانند دفعه قبل مقدار اولیه متغیر n برابر 0 در نظر می شود. با دستور ++n مدام به متغیر n یک واحد اضافه می شود. هنگامی که n به 1843200 رسید CPU به خط بعد از شرط پرش می کند در آنجا یک آکولاد وجود دارد که CPU را به حلقه اصلی بر می گرداند و CPU برنامه را از خط بعد از wait ادامه می دهد.

با رسیدن CPU به آکولاد { در خظ آخر برنامه، مجدادا برنامه دوباره از اول اجرا می شود و کلیه اعمال بالا از ابتدا انجام می شود.

نتیجه گیری

برای ایجاد تاخیر در برنامه شما باید یک تابع ایجاد کنید تا در هنگام تاخیر فراخوانی شود. برای ایجاد تابع باید ایتدا آن را توسط دستور زیر معرفی کنید:

Void wait (void) ;

wait (نام تابع) : در قسمت نام تابع شما باید یک نام مناسب بنویسید که در برنامه تابع با همین نام فراخوانی می شود. مثلا در این برنامه ما نام تابع زیر برنامه رو wait در نظر گرفته ایم در نتیجه هر گاه بخواهیم زیر برنامه wait را فراخوانی کنیم از نام wait استفاده می کنیم.

(void) یا نوع فضا : در قسمت نوع فضا، نوع ذخیره سازی تابع مشخص می شود شما می توانید از عناوین void (فضای خالی) یا جای خالی استفاده کنید.

با این حساب می توان گفت قالب کلی یک برنامه در زبان C به شکل زیر خواهد بود.

:: معرفی چیپ

:: فراخوانی فایل های هدر یا کتابخانه

:: معرفی متغیرها

:: معرفی زیر برنامه (توابعی که قرار است در برنامه فراخوانی شوند)

:: تابع اصلی برنامه

:: ورودی یا خروجی قرار دادن پورت ها

:: شروع حلقه اصلی

:: برنامه اصلی

:: فراخوانی توابع یا همان زیر برنامه

:: پایان حلقه

:: پایان تابع اصلی برنامه

:: نام تابعی که قرار است فراخوانی شود

:: شروع حلقه ی تابع فراخوانی شده

:: برنامه ای که فراخوانی می شود

:: پایان حلقه ی فراخوانی شده (با رسیدن برنامه به این خط به برنامه اصلی پرش می شود)

نکته : مقدار زمانی که می خواهید توسط شمارش ایجاد می شود از رابطه ی زیر به دست می آید:

زمان = (x*5)/(f)

X مقدار رقمی است که در حلقه ی for شمرده می شود و f مقدار فرکانس کریستال بر حسب هرتز می باشد.

مثال :

برنامه ای بنویسید که پایه b.19 میکروکنترلر at91sam7x256 از خانواده میکروکنترلرهای ARM را به مدت 20 ثانیه 0 کند. بعد به مدت 1/5 ثانیه 1 کند و سپس به مدت 2/5 ثانیه 0 کند و این حلقه مدام تکرار شود.

# include <at91sam7x256.h>

# include <libe – at91sam7x256.h>

Void wait (void) ;

Int n ;

Int main (void) {

AT91F-PIO-CfgOutput (AT91C-BASE- PIOBx,AT91C-PIO-PB 19);

AT91F-PIO-ClearOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

Wait( );

Wait ( );

Wait ( );

Wait ( );

AT91F-PIO-SetOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

Wait( );

Wait ( );

Wait ( );

AT91F-PIO-ClearOutput (AT91C-BASE- PIOB,AT91C-PIO-PB 19);

Wait( );

Wait ( );

Wait ( );

Wait ( );

Wait ( );

}

Void wait (void) {

For ( n =0 ; n < 1843200 ; n++);

}

برنامه بالا شاید ساده ترین برنامه برای سوال ذکر شده باشد در این برنامه ما زمان اصلی 500 میلی ثانیه را به وجود آورده ایم و در مکان مناسب به تعداد دفعات مناسب آن را فراخوانی کرده ایم.

چند نکته

واسط SAM-BA فقط از میکروکنترلرهای ARM زیر پشتیبانی می کند:

at91sam7s321

at91sam7s64

at91sam7s128

at91sam7s256

at91sam7s512

at91sam7x128 and at91sam7xc128

at91sam7x256 and at91sam7xc256

at91sam7x512 and at91sam7xc512

at91sam7se256

at91sam7se512

at91sam7a3

برای استفاده از واسط SAM-BA برای میکرو کنترلرهای at91sam7s مراحل زیرا انجام دهید:

1) Power Off The Board.

2) Set TST Pin To High Level.

3) Power On The Board.

4) Wait About 10 Seconds.

5) Power Off The Board.

6) Set TST Pin To Ground.

7) Power On The Board.

 موسسه خیریه حمایت از کودکان مبتلا به سرطان

 دسته اصلی : زبان برنامه نویسی C

 نویسنده : electronics98

 تاریخ انتشار :

یک دیدگاه

  1. ممنونم از همه کسانیکه که برای تهیه این مطالب تلاش می کنند

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مطلب پیشنهادی

Education-ARM-C-Small-s

دستورات حلقه و پرش به زبان C در میکروکنترلرهای ARM

دستورات حلقه و پرش به زبان C در میکروکنترلرهای ARM گاهی مواقع برنامه باید چندین …