Presentation is loading. Please wait.

Presentation is loading. Please wait.

Session 3,4.

Similar presentations


Presentation on theme: "Session 3,4."— Presentation transcript:

1 Session 3,4

2 مطالب این جلسه: 1-بررسی انواع زبان های برنامه نویسی و انواع کامپایلر های موجود برای میکرو کنترلر های AVR 2-اصول برنامه نویسی به زبان Cتوسط کامپایلر کدویژن 3- تنظیم درگاه های ورودی و خروجی و دسترسی به پورت ها 4-انجام عملیات بیتی بر روی ریجستر ها 5-نحوه خواندن کلید های متصل شده به یک میکرو کنترلر

3 انواع زبانهای برنامه نویسی
1- زبان ماشین (سطح پایین) 2- زبان اسمبلی 3- زبانهای سطح بالا

4 زبانهای سطح بالا - بیسیک (Basic): برای کاربردهای آموزشی - فرترن (Fortran) : برای کاربردهای علمی و مهندسی - پاسکال(Pascal) : برای کاربردهای آموزشی و علمی - زبان برنامه نویسی C که بحث ما در مورد آن خواهد بود. البته برنامه های نوشته شده به این زبانها ابتدا باید به زبان ماشین ترجمه شوند تا بر روی کامپیوتر یا میکرو قابل اجرا باشند. برای ترجمه این زبانها از کامپایلرها و یا مفسرها استفاده می شود.

5 انواع کامپایلر های معروف AVR
1-codevison avr 2-bascom avr 3-win avr 4-micro c 5-avr stdio 6-IAR

6 Programming With CodevisionAVR

7 مرور زبان c و توابع خواص codevisionAVR
قسمت تعاریف کلی شامل فایلهای سر آمد(Header file)،تعاریف متغیر های سراسری و ثابت ها است.

8 Libraries or Header file
math.h stdio.h delay.h Mega16.h And …

9 Prototype #include <mega32.h>
global definitionمتغیر ها و دادهای سراسری در این قسمت برنامه تعریف میشوند main() { local variable;متغییر های محلی در این قسمت تعریف می شوند statements;دستورات پیکره بندی یک میکرو کنترلر بیشتر در این قسمت قرار میگیرد } function1() توابع کمکی که عموما نقش زیر برنامه را دارند local variable; Statements; function2() وابع کمکی که عموما نقش زیر برنامه را دارند

10 Prototype چون میکرو همیشه باید در حال فعالیت باشد، درون تابع main یک حلقه دائم قرار داده می شود. #include <mega32.h> global definition main() { local variable; دستوراتی که باید یک بار اجرا می شوند While (1) دستورات و کدهای اصلی برنامه که دائما اجرا می شوند } While (1) { دستورات و کدهای اصلی برنامه که دائما اجرا می شوند }

11 نکاتی در مورد برنامه نویسی
خط اول همیشه دستور فراخوانی فایل های حاوی توابع header است در انتهای هر عبارت یک سمی کالن قرار داده می شود } و { در ابتدا و انتهای هر حلقه، عبارت شرطی و یا بلوک قرار داده می شود از // یا ( /* و */) برای نوشتن توضیح در برنامه استفاده می شود

12 کلمات رزرو شده زبان c

13 متغییر ها و ثوابت تعریف متغییر: یعنی نامی مستعار برای خانه های حافظه

14 متغیر ها و ثابت ها ابتدا باید معرفی شوند
نام متغیر نوع متغیر حافظه مورد نیاز برای متغیر eeprom int temp; flash int temp=10; eeprom char str; float a; int b=30; نام متغیر ها می تواند ترکیبی از حروف و اعداد باشد، فقط نام متغیر نباید با عدد شروع شود.

15 چیست؟Static متغیر دو نوع متغیر استاتیک داریم: محلی و عمومی
محلی:(local) 1: فقط داخل همون تابعی که تعریف میشوند قابل استفاده هستند 2: وقتی تابع را فراخوانی میکنیم ایجاد میشوند و وقتی از تابع خارج شدیم، اخرین مقدار خودشان را حفظ میکند 3: فقط و فقط یک بار مقدار اولیه میگیرد عمومیglobal)) 1:در خارج از توابع تعریف میشن ودر توابعی که بعد از اونها تعریف میشوند قابلیت استفاده دارند 2: بعد از هر بار استفاده ازآن،اخرین مقدار خودش را حفظ میکند 3: فقط و فقط یک بار مقدار اولیه میگیرد.

16 Constants ثابت ها flash int x=123; const char y=‘a’; #define C 100;
پس به طور کلی با دستورات flash ,const میتوان مقادیر بدون تغییر را تعریف کرد و با دستور define مقدار پیش پردازنده را برای ساده سازی برنامه به کار گرفت

17 آرایه ها int str[10]; int i[3]= {2,5,6}; رشته(string):
تعدادی متغیر دلخواه از یک نوع و یک نام که با اندیس های شماره دار از هم جدا هستند int str[10]; int i[3]= {2,5,6}; رشته(string): به آرایه هایی که حروف اسکی را درون خود نگه می دارند، رشته می گوییم. Char t[5]= “temp”;

18 یعنی آرایه ای از آرایه های یک بعدی
آرایه های دو بعدی: یعنی آرایه ای از آرایه های یک بعدی مثال: فرض کنید دو آرایه یک بعدی بشکل زیر داریم: Int a[3]={1,2,3} int b[3]={4,5,6} حال می خواهیم انها را بصورت یک آرایه دو بعدی نمایش دهیم: int c[2][3]={{1,2,3},{4,5,6}} C(0,0)=1 C(0,1)=2 C(0,2)=3 C(1.0)=4 C(1,1)=5 C(1,2)=6

19 روش تعریف آرایه های دو بعدی:
] تعداد ستون ][ تعداد سطر [ اسم آرایه نوع متغیرها

20

21 Operators عملگر ها + - * / % = == ~ ! != < > <= >= & && | || ^ ? << >> -= += /= %= &= *= ^= |= >>= <<=

22

23

24

25

26 دستورات شرطی و حلقه ها if –else while do-while for Switch - case

27

28 مثال:

29

30

31 حلقه های تکرار

32

33

34

35

36

37 توابع و فرم تابع نویسی (داده های ورودی) نام تابع نوع داده خروجی }
(داده های ورودی) نام تابع نوع داده خروجی } تعریف متغیر های محلی دستورات بازگرداندن مقدار خروجی در صورت وجود {

38 مثال: تابعی بنویسید که عدد ورودی را به توان 3 برساند
long int func( int x) { long int s; s=x*x*x; return s; }

39 جایگاه نوشتن توابع توابع را در دو جا می توان نوشت: 1- قبل از تابع main
2- در زیر کل برنامه ها #include<header> Void func(void) { دستورات Void main()

40 #include<header> Void func(void); Void main(void) { دستورات While(1) } Void func()

41 تنظیم درگاه های ورودی و خروجی

42 تنظیم درگاه های ورودی و خروجی

43 Direction این ریجستر برای تنظیم ورودی بودن یا خروجی بودن یک پورت میکرو کنترلر به کار میرود و به اختصار DDRXنامیده میشود که X نام پایه مورد نظر است تعریف ورودی=بیت مورد نظر 0 شود تعریف خروجی=بیت مورد نظر 1شود این ریجستر به صورت پیش فرض دارای مقدار صفر است لذا در هنگام روشن شدن میکرو اگر تنظیم نگردد آن پایه ها وردی خواهند بود مثال: DDRA.0=0; // PA.0 input DDRA.5=1; // PA.5 output DDRC=0xff ; // PORTC

44 Output Latch ریجستر لچ خروجی که در AVR با نام PORT شناخته میشود درواقع مقادیری را که کاربر بر روی درگاه خروجی قرار میدهد درون خود نگهداری میکند

45 Input register ریجستر لچ ورودی که در AVR با نام PIN شناخته میشود درواقع مقادیری را که کاربر بر روی درگاه ورودی قرار میدهد درون خود نگهداری میکند.تا بتوان با خواندن مقدار آن پی به ورودی ها برد نکته:در هنگام استفاده از این ریجستر باید پایه متناظر با آن توسط ریجستر DDRXورودی تعریف شده باشد

46 ریجستر PIN

47 Pull up &pull down برای اتصال کلید به یک پایه ورودی می توان از دو آرایش زیر استفاده کرد AVRنکته:آرایش شماره 2 برای میکرو کنترلر های مناسب تر است.

48 Pull Down Pull Up شايد مهمترين نكته اي که در رباتيک وجود دارد انجام پروژه به صورت تيمي و گروهي (Team Working)است. اين امر اهميت فوق العاده زيادي دارد که متا سفانه در ...، زياد به اين موضوع اهميت نمي‌دهند . چند تا از مهمترين فوايد کار تيمي رو به طور مثال بيان مي كنيم تا متوجه اهميت اين موضوع بشويم: 1_ کسب مهارت هاي لازم براي انجام پروژه‌هاي بزرگ که بايد با مشارکت چندين فرد اجرا شوند. 2_ استفاده از فکر و توانايي چند نفر به جاي يک نفر و در نتيجه اتخاذ تصميم مناسب تر. 3_ تقسيم وظايف بين افراد تيم و کاهش فشار کار بر روي فرد. 4_ تقسيم هزينه هاي پروژه بين افراد تيم . 5_افزايش انگيزه و روحيه افراد تيم . 6_ استفاده از ايده‌هاي بکري که هر يک از اعضا ممکنه در روند کار به ذهنشون برسه. وقتي يک مسئله مطرح مي شود، هر فرد از يک زاويه‌ي خاص به مسئله نگاه مي‌کند و همين امر موجب ارائه‌ي ايده‌هاي متفاوت براي حل مسئله خواهد شد!

49 PULL UP

50 PULL UP های داخلی 1-بیت های متناظر را در DDRX صفر میکنیم
2-بیت های متاظر را در PORTX یک میکنیم 3-مقادیر وردی را از روی ریجستر PINX میخوانیم

51 Example-1 برنامه ای بنویسد که بر روی پورت B مقدار 0x28 را بنویسد.
#include <mega32.h> void main(void) { DDRB=0xFF; while (1) PORTB=0x28; }; }

52 example2 برنامه اي بنويسيد كه پين پنجم پورت A را pull up كرده و ورودي آن را بخواند چنانچه ورودي صفر شد يك led را روشن نمايد. #include <mega32.h> void main(void) { bit x; DDRA.5=0; PORTA.5=1; DDRA.0=1; PORTA.0=0; SFIOR=0x00; while (1) x=PINA.5; if (x==0) PORTA.0=1; else }; }

53 سبز : PORTA.0 زرد: PORTA.1 قرمز : PORTA.2
Example-3 تابعي بنويسيد كه يك چراغ راهنمايي را بصورت زير پياده سازي كند: سبز : 15ثانيه زرد: 3ثانيه قرمز: 15ثانيه نام تابع : trafficsignal ورودي : ندارد خروجي : ندارد سبز : PORTA زرد: PORTA قرمز : PORTA.2

54 Example-3 void delay_us(unsigned int n);
Header file : delay.h void delay_us(unsigned int n); void delay_ms(unsigned int n); مثال : تاخير 100 ميكروثانيه ==< delay_us(100) مثال : تاخير 5 ثانيه == < delay_ms(5000)

55 Example-3 #include <mega32.h> #include <delay.h> void traficsignal(void); void main(void) { DDRA=0x07; while (1) traficsignal(); }; } void traficsignal(void) PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(15000); PORTA.0=0;PORTA.1=1;PORTA.2=0; delay_ms(3000); PORTA.0=0;PORTA.1=0;PORTA.2=1;

56 Practice -1 1- تابعي بنويسد كه يك چراغ راهنمايي را با دريافت تاخيرها توسط برنامه زير، راه اندازي كند. سبز : Gdelay ثانيه زرد: Ydelay ثانيه قرمز: Rdelay ثانيه

57 Exercise-1 #include <mega32.h> void traficsignal(int gdelay,int ydeay,int rdelay); void main(void) { DDRA=0x07; while (1) traficsignal(5,2,5); }; } void traficsignal(int gdelay, int ydelay, int rdelay) PORTA.0=1;PORTA.1=0;PORTA.2=0; delay_ms(gdelay); PORTA.0=0;PORTA.1=1;PORTA.2=0; delay_ms(ydelay); PORTA.0=0;PORTA.1=0;PORTA.2=1; delay_ms(rdelay);

58 Example-4 تابعی بنویسید که یک عدد بی علامت را از پورت A خوانده و بر روی پورت B نشان دهد. #include <mega32.h> void in_out_port(void); void main(void) { DDRA=0x00; DDRB=0xff; while (1) in_out_port(); }; } void in_out_port(void) unsigned char x; x=PINA; PORTB=x;

59 PORT ADDRESS


Download ppt "Session 3,4."

Similar presentations


Ads by Google