Session 3,4.

Slides:



Advertisements
Similar presentations
3-1 Peripherals & I/O lines All the on-chip peripherals are configured and controlled through Special Function Registers (SFR) Many of the SFR’s are bit.
Advertisements

Templated Functions. Overloading vs Templating  Overloaded functions allow multiple functions with the same name.
Introduction to C# Erick Pranata © Sekolah Tinggi Teknik Surabaya 1.
MICRO-CONTROLLER: A microcontroller is the brain of the robot: These are: 1. Integrated Circuits (ICs) 2. Programmable.
 | bit OR & bit AND ~ bit NOT ^ bit EXLUSIVE OR (XOR) > bit RIGHT SHIFT.
Programming the ATmega16
Structure of a C program
An Embedded C Program 1 Mainly from textbook: Embedded C Programming and the Atmel AVR 2 nd Edition Barnett, Cox and O’Cull.
Dr. Amr Talaat. #include ; /* this makes the header file for the PIC16f877 ready to be used in the C-class */ #define LED PORTC ; /* defines.
Robotics Research Laboratory Louisiana State University.
ATmega 2560 Datasheet Main features are listed
 C is general-purpose structured programming language or high level language.  It was developed by Dennis Ritchie in 1970s at Bell laboratories. 
Functions in C. Function Terminology Identifier scope Function declaration, definition, and use Parameters and arguments Parameter order, number, and.
Introduction to Computer Algorithmics and Programming Ceng 113 Variables and Operators in C.
I/O Ports CS-280 Dr. Mark L. Hornick 1. CS-280 Dr. Mark L. Hornick 2 Ports are channels from the CPU to external hardware and software Atmega32 has: 4.
© AJH 2013, V2.0 Computer Programming Embedded Systems Programming Stand-alone code, system initialisation, operating systems. Low-level operations; port.
ROBONICS’ 15 Powered By:. An embedded system is some combination of computer hardware and software, either fixed in capability or programmable, that is.
M. Taimoor Khan #include void main() { //This is my first C++ Program /* This program will display a string message on.
Robotics Research Laboratory Louisiana State University.
C Programming Laboratory I. Introduction to C Language /* the first program for user */ #include int a=0; int main(void) { printf(“Hello World\n”); return.
M.T.Stanhope Oct Title : C++ Basics Bolton Institute - Faculty of Technology (Engineering) 1 C++ Basics u Data types. u Variables and Constants.
CECS 121 Test 1. Functions allow you to group program statements under one name C and C++ are case-sensitive so main(), MAIN(), and Main() are all different.
Dennis Ritchie 1972 AT & T Bell laboratories (American Telephone and Telegraph) USA 1www.gowreeswar.com.
Chapter 8 Scope of variables Name reuse. Scope The region of program code where it is legal to reference (use) a variable The scope of a variable depends.
Slides created by: Professor Ian G. Harris Typical Embedded C Program #include main() { // initialization code while (1) { // main code }  #include is.
AVR Programming: Digital I/O September 10, What is Digital I/O? Digital – A 1 or 0 Input – Data (a voltage) that the microcontroller is reading.
CECS 130 EXAM 1. To declare a constant (read only) value: const int x = 20; const float PI = 3.14; Can we do this? const int x;
1 Functions  A function is a named, independent section of C++ code that performs a specific task and optionally returns a value to the calling program.
Khalid Rasheed Shaikh Computer Programming Theory 1.
Slides created by: Professor Ian G. Harris Hello World #include main() { printf(“Hello, world.\n”); }  #include is a compiler directive to include (concatenate)
Robotics Research Laboratory Louisiana State University.
Instructor - C. BoyleFall Semester
Gator Engineering 1 Chapter 2 C Fundamentals (Continued) Copyright © 2008 W. W. Norton & Company. All rights reserved.
Programming Microcontrollers in C Lecture L7.1. C Data Types TypeSizeRange char1 byte-128 – 127 unsigned char1 byte0 – 255 Int2 bytes – unsigned.
April 11, 2005 More about Functions. 1.Is the following a function call or a function header? calcTotal(); 2.Is the following a function call or a function.
Arduino Mega Arduino Mega 2560 Arduino Mega 2560.
1 TOPICS TO DISCUSS : FUNCTIONS TYPES OF FUNCTIONS HEADER FILES PRESENTED BY : AVISHEK MAJUMDAR(837837) GUNJAN AGARWAL(856587) SATYAPRIYA DEY(856624)
Introduction to AVR Name : 1) Abhishek Yadav ) Prakash Giri ) Kheni Niral ) Bhadresh Langadiya Branch.
Vishwakarma government engineering college Prepare by. Hardik Jolapara( ) LCD Interfacing with ATmega16.
Introduction to C Programming I Subject: T0016 – ALGORITHM AND PROGRAMMING Year: 2013.
충북인력개발원 전자과 공학박사 강원찬 2. Interrupt & LCD. uP AVR (Atmega128) - 2 -
INTERFACING HARDWARE WITH MICROCONTROLLER GUIDED BY: Prof. ASIF SIR 1. AKSHAY KIRAN 2. DEEP PARIKH 3. JIGAR PATEL 4. TILAK PATEL ,05,D2D06,09.
Introduction of Embedded C and demo programs
Test 2 Review Outline.
Functions (Methods) Pascal C, C++ Java Scripting Languages
AVR ATMEGA 8 MICRO-CONTROLLER
Functions, Part 2 of 2 Topics Functions That Return a Value
C Programming Tutorial – Part I
COMP2121: Microprocessors and Interfacing
C++, OBJECT ORIENTED PROGRAMMING
The Arduino Microcontroller: Atmel AVR Atmega 328
2008/11/10: Lecture 16 CMSC 104, Section 0101 John Y. Park
Data Type.
جامعة البحر الاحمر كلية العلوم التطبيقية قسم الفيزياء التطبيقية الفصل الداسي الثاني IIالمقرر: حاسوب د. خالد عثمان العالم.
Example 6 Hex Keypad Lecture L3.2.
Data Type.
פרטים נוספים בסילבוס של הקורס
פרטים נוספים בסילבוס של הקורס
جامعة البحر الاحمر كلية العلوم التطبيقية قسمي الحاسوب وتقنية المعلومات الفصل الداسي الثاني المقرر: اساليب برمجة 1 محاضرة رقم 1 د. خالد عثمان العالم.
AVR Programming in C Chapter 7
Functions, Part 2 of 3 Topics Functions That Return a Value
AVR Programming in C Chapter 7
Govt. Polytechnic,Dhangar
CS150 Introduction to Computer Science 1
ECE 103 Engineering Programming Chapter 51 Random Numbers
CS150 Introduction to Computer Science 1
Programming Language C Language.
Fundamental Programming
Functions, Part 2 of 3 Topics Functions That Return a Value
Functions, Part 2 of 3 Topics Functions That Return a Value
Presentation transcript:

Session 3,4

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

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

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

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

Programming With CodevisionAVR

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

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

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

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

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

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

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

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

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

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

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

یعنی آرایه ای از آرایه های یک بعدی آرایه های دو بعدی: یعنی آرایه ای از آرایه های یک بعدی مثال: فرض کنید دو آرایه یک بعدی بشکل زیر داریم: 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

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

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

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

مثال:

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

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

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

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

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

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

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

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

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

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

ریجستر PIN

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

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

PULL UP

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

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

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 }; }

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

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)

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;

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

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);

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;

PORT ADDRESS