خانه / آموزش میکروکنترلرهای ARM / کار با پورت ها در میکروکنترلرهای ARM

کار با پورت ها در میکروکنترلرهای ARM

کار با پورت ها در میکروکنترلرهای ARM

در تمامی میکروکنترلرها پایه ها یا ورودی هستند یا خروجی مثلا اگر بخواهیم به پایه x میکرو یک کلید یا… متصل کنیم (یک وضعیت منطقی را به میکرو وارد کنیم) باید آن را به عنوان ورودی تعریف نماییم یا اگر بخواهیم به پایه x یک led متصل کنیم (یک وضعیت منطقی را از میکرو خارج کنیم) پایه مورد نظر باید به عنوان خروجی تعریف شود.

تعریف پایه به عنوان خروجی :

AT91F-PIO-CfgOutput (AT91C-BASE- PIOx,AT91C-PIO-Pxy);

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

شما می توانیدبه جای AT91C-PIO-Pxy از آدرس پایه با پایه های مورد نظر استفاده کنید.

AT91F-PIO-CfgOutput (AT91C-BASE-PIOx,y);

در دستور بالا پایه های y از پورت x به عنوان خروجی تعریف می شوند (برای درک بهتر موضوع مثال را مشاهده کنید)

کار با پورت ها در میکروکنترلرهای ARM

مثال : پایه 12 از پورت b و پایه های  16,11,10,9 از پورت a میکرو کنترلر AT91SAM7X256 را به عنوان خروجی تعریف کنید.

روش اول :

پورت B

AT91F-PIO-CfgOutput (AT91C-BASE- PIOB,AT91C-PIO-PB12); //portb.12 is output.

پورت A

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA,AT91C-PIO-PA9); //porta.9 is output.

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA,AT91C-PIO-PA10); //porta.10 is output.

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA,AT91C-PIO-PA11); //porta.11 is output.

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA,AT91C-PIO-PA16); //porta.16 is output.

روش دوم :

پورت B: برای پیدا کردن آدرس به پایه هایی که قرار است خروجی شوند رقم 1 و به سایر پایه ها رقم صفر تعلق می گیرد:

پیدا کردن آدرس پایه های میکروکنترلر arm به روش باینری

در تصویر بالا هر led نشانگر یک پایه از میکرو می باشد، در صورتی که اولین led از سمت راست (d5) پایه b.0 باشد. سیزدهیمن led نشانگر پورت b.12 است (تنها 17 پایه اول پورت در اینجا رسم شده است)

به led های روشن (پایه های که قرار است به عنوان خروجی تعریف شوند) رقم 1 و به led های خاموش (پایه های عادی) رقم صفر تعلق می گیرد. عدد به دست آمده آدرس پایه های مورد نظر در مبنای باینری است با بردن این عدد در مبنای هگز, آدرس پورت به دست می آید (در نرم افزار keil , آدرس ها باید در مبنای هگز باشند)

1000000000000 >>> To Hex >>> 1000

AT91F-PIO-CfgOutput (AT91C-BASE- PIOB, 0x1000); //portb.12 is output.

0x نمیانگر مبنای هگز می باشد, 0x1000 یعنی 1000 در مبنای هگز.

پورت A : برای پورت A نیز مراحل بالا را تکرار می کنیم:

پیدا کردن آدرس پایه های میکروکنترلر arm به روش باینری

با تبدیل عدد  10000111000000000 (در مبنای باینری) به مبنای هگز آدرس مورد نیاز keil برای پیکر بندی پایه های مورد نظر خروجی به دست می آید:

1000011100000 >>> To Hex >>> 10E00

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA, 0x10E00); //portA.9, porta.10, porta.11, porta.16 are output.

نکته : برای تبدیل مبناها (از باینری به هگز یا بر عکس) می توانید از ماشین حساب ویندوز استفاده کنید!

در مثال های بالا به کشیدن 17 پایه اول از هر پورت اکتفا کرده ایم، در مثال ها بر روی پایه های 17 تا 31 عملیاتی انجام نشده است بنابراین به آن ها رقم صفر تعلق می گیرد.

خاموش کردن پایه (Reset Pin):

AT91F-PIO-ClearOutput (AT91C-BASE- PIOx,AT91C-PIO-Pxy);

دستور بالا پایه y از پورت x را صفر می کند.

شما می توانید به جای  AT91C-PIO-Pxy از ادرس پایه یا پایه های مورد نظر استفاده کنید.

AT91F-PIO-ClearOutput (AT91C-BASE-PIOx,y);

در دستور بالا پایه های y از پورت x صفر می شوند (برای درک بهتر موضوع مثال را مشاهده کنید).

روشن کردن پایه (Set Pin):

AT91F-PIO-SetOutput (AT91C-BASE- PIOx,AT91C-PIO-Pxy);

دستور بالا پایه y از پورت x را یک می کند.

شما می توانید به جای  AT91C-PIO-Pxy از ادرس پایه یا پایه های مورد نظر استفاده کنید.

AT91F-PIO-SetOutput (AT91C-BASE-PIOx,y);

در دستور بالا پایه های y از پورت x یک می شوند (برای درک بهتر موضوع مثال را مشاهده کنید).

مثال : برنامه ای بنویسید که پایه های B.15 , B.17 , B.18 , A.16 , A.11 را یک و پایه های  B.1 , B.2 , B.9 , A.5 , A.6 را صفر کند (میکرو کنترلر AT91SAM7X256).

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

اولین خطوط مربوط به فراخوانی هدرها (معرفی میکرو) می باشد:

# include <at91sam7x256.h>

# include <libe – at91sam7x256.h>

در ادامه باید یک حلقه ایجاد کنیم (تمامی برنامه در زبان c به یک حلقه اصلی نیاز دارند):

Int main (){

اکنون باید پایه های مورد نظر را به عنوان خروجی پیکر بندی کنیم:

AT91F-PIO-CfgOutput (AT91C-BASE- PIOB, 0x68206);

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA, 0x10860);

روشن کردن پایه های مورد نظر:

AT91F-PIO-SetOutput (AT91C-BASE- PIOA, 0X10800);

AT91F-PIO-SetOutput (AT91C-BASE- PIOB, 0X68000);

خاموش کردن پایه های مورد نظر:

AT91F-PIO-ClearOutput (AT91C-BASE- PIOA, 0X60);

AT91F-PIO-ClearOutput (AT91C-BASE- PIOB, 0X206);

پایان حلقه

}

توضیح تکمیلی :

شما می توانید مقدار یک متغیر را در پورت بریزید :

# include <at91sam7x256.h>

# include <libe – at91sam7x256.h>

Int main (){

int a;

a=1023

AT91F-PIO-CfgOutput (AT91C-BASE- PIOA,a);

AT91F-PIO-SetOutput (AT91C-BASE- PIOA,a);

}

در برنامه بالا مقدار 1024 (در مبنای دسیمال) در متغیر a قرار گرفته است، با دستور

AT91F-PIO-SetOutput (AT91C-BASE- PIOA,a);

عدد 1024 به هگز تبدیل شده و در پورت a ریخته می شود. با این عمل 10 پایه اول پورت a روشن خواهد شد.

پیکر بندی پایه به عنوان ورودی :

(AT91F-PIO-GetInput (AT91C-BASE- PIOx), AT91C-PIO-Pxy);

دستور بالا پایه Y از پورت x را به عنوان ورودی تعریف می کند.

شما می توانید به جای AT91C-PIO-Pxy از آدرس پایه یا پایه های مورد نظر استفاده کنید.

AT91F-PIO-GetInput (AT91C-BASE-PIOx,y);

در دستور بالا پایه های y از پورت x به عنوان ورودی تعریف می شوند (برای درک بهتر موضوع مثال را مشاهده کنید)

مثال : پایه های B4 تا B7 و A5 و A0 را به عنوان ورودی پیکر بندی کنید:

روش اول :

(AT91F-PIO-GetInput (AT91C-BASE- PIOB), AT91C-PIO-PB4);

(AT91F-PIO-GetInput (AT91C-BASE- PIOB), AT91C-PIO-PB5);

(AT91F-PIO-GetInput (AT91C-BASE- PIOB), AT91C-PIO-PB6);

(AT91F-PIO-GetInput (AT91C-BASE- PIOB), AT91C-PIO-PB7);

(AT91F-PIO-GetInput (AT91C-BASE- PIOA), AT91C-PIO-PA5);

(AT91F-PIO-GetInput (AT91C-BASE- PIOA), AT91C-PIO-PA0);

روش دوم:

(AT91F-PIO-GetInput (AT91C-BASE- PIOB), 0xF0);

(AT91F-PIO-GetInput (AT91C-BASE- PIOA), 0x21);

در روش دوم باید همانند پیکربندی به عنوان خروجی آدرس پایه های مورد نظر را به دست آورید (مانند مرحله قبل به پایه های ورودی رقم 1 و به سایر پایه ها رقم صفر تعلق می گیرد).

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

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

 نویسنده : electronics98

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

2 دیدگاه

  1.  آقا دمت گرم شما که زحمت رو میکشید حداقل یه کلیپ درست کنید و همین ها رو عملی با نرم افزار انجام دهید فکر کنم بهتر باشه با تشکر

  2. خیلی ممنون.امیدوارم این اموزش ها همینطور ادامه داشته باشد

پاسخ دهید

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

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

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

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