آموزش رباتیک برای همه به زبان ساده
- آموزش پروژه های AVR
درس
اول
در بسکام اولین و مهم
ترین دستور تعریف میکروکنترلر است برای این کار از دستور
استفاده می
شود که microcode کدی است که به جای نام میکروکنترلر می
نویسیم به طور مثال m8def.dat برای آی سی Atmega8 استفاده
می شود و m16def.dat برای Atmega16 وm32def.dat برای آی سی
Atmega32 استفاده می شود (در پیوست می توانید کد های تمامی
میکروکنترلر را مشاهده کنید)
در خط دوم باید فرکانس کاری میکروکنترلر را مشخص کنیم که
از دستور
استفاده می شود که x
برحسب Hz است بطور مثال برای استفاده از فرکانس 4MHz باید x را مساوی
4000000 قرار داد. در اکثر میکروکنترلر های AVR به صورت پيش فرض نوسان
ساز داخلي1MHz تنظیم شده است . در صورتی که بخواهیم فرکانس را تغییر
دهیم باید فیوز بیت ها را نیز تغییر دهیم که در قسمت های آینده کامل
توضیح می دهیم نکته اصلی این است که تعیین فرکانس لازم است چون بیشتر
دستور ها از این فرکانس استفاده می کنند (مانند wait ).
در صورت تعریف اشتباه کریستال زمان بندی های میکرو تاخیر ها و ...
اشتباه می شوند .توجه شود که اکثر دستورات ( همچون پورت سریال و
ارتباطات دیگر - LCD و ... ) زمان پارمتر مهمی محسوب می شود و بسکام با
توجه به کریستال زمان مورد نظر را ایجاد می کند و در صورت تعریف اشتباه،
دستور مورد نظر اجرا نشده و یا دیتای اشتباه ارسال می کند .
یادداشت نویسی:
گاهی وقت ها نیاز به نوشتن تعدادی یادداشت داریم که در برنامه نوشته می
شوند و فقط جهت راهنمایی استفاده می شوند و در برنامه اصلی کامپایل نمی
شوند. برای این کار 2 راه وجود دارد 1- استفاده از دستورrem و2-استفاده
از علامت ‘
پایان برنامه:
برای پایان دادن به برنامه شما باید از دستور end استفاده کنید که این
دستور باید در پایان برنامه قرار گیرد و اگر نباشد کامپایلر خطا می
گیرد
$Romstart=address
با این
دستور مشخص می کنیم که پروگرام کردن حافظه فلش از چه مکانی
شروع شود اگر این دستور را استفاده نکنید کامپایلر به طور
خود کار آدرس H0000& را استفاده می کند (این دستور اختیاری
است)
Config
از این دستور برای استفاده از امکانات میکروکنترلر استفاده
می شود که در جای مربوطه توضیحات کامل داده می شود
بدنه ی یک برنامه در بسکام به صورت زیر می باشد :
1-معرفي ميکروکنترلر
2-تعيين مقدار کريستال
3-پيکربندي امکانات جانبي(اختیاری)
4-معرفي متغير ها (اختیاری)
5-شروع حلقه (اختیاری)
6-برنامه اصلي (اختیاری)
7-پايان حلقه (اختیاری)
8-پايان برنامه
9-زير برنامه ها (اختیاری)
جای موارد 8 و 9 را می توان جابجا کرد
متغیر ها:
از این دستور برای
تعریف یک متغیر استفاده می شود var نام متغیر است و data type نوع
متغییر است که می توان با توجه به جدول زیر تعریف کرد
مثال
1-Dim a as bit
2-Dim a as byte
3-Dim a as integer
4-Dim a as word
5-Dim a as long
6-Dim a as single
7-Dim a as string*10
1-متغیر a می تواند
مقدار 0 یا 1 را داشته باشد
2-متغیر a می تواند مقدار 0-255 را داشته باشد
3-متغیر a می تواند مقدار32767- تا 32767 را داشته باشد
4-متغیر a می تواند مقدار 0-65535 را داشته باشد
5-متغیر a می تواند مقدار -2147483648 تا 214783647 را داشته باشد
6-متغیر a می تواند مقدار 1.5*10^-45 تا 3.4*10^38 را داشته باشد
7-یعنی یک متغیر string به طول نهایت 10 کارکتر
کار روی متغیرها
در جدول زیر تمامی عملگر های ریاضی را می بیند
مثال:
A=b+c
A=b-c
A=b/c
A=b*c
a=b^c
دستورincr با این دستور
می توان یک واحد به متغیر اضافه کرد
مثال:
Incr a
البته برای اضافه کردن یک واحد می توان از این روش نیز استفاده کرد
a=a+1
دستورdecr با این دستور می توان یک واحد از متغیر کم کرد
مثال:
decr a
البته برای کم کردن یک واحد می توان از این روش نیز استفاده کرد a=a-1
البته این روش(a=a+1) قابل تعمیم است یعنی به جای 1 می توان هر عدد
دیگری نیز قرار داد
Alias
از دستور برای تغییر نام یک متغیر استفاده می شود( برای پورت ها نیز
استفاده می شود)
مثال:
حالا در هرجای برنامه
ab نوشته شود مقدار 10 استفاده می شود
ورودي وخروجي :
مرحله ی اول مشخص کردن نوع پورت است که با این دستور انجام می شود
Portx پورت استفاده شده
و state می تواند input و output باشد اگر ورودی بخواهیم باید از input
و اگر خروجی موردنیاز باشد ازoutput استفاده می کنیم
مثال:
که porta را به عنوان
خروجی استفاده می کنیم
Porta به عنوان ورودی
تعریف می شود
همچنين شما با این دستور مي توانيد يک پايه از پورت را به عنوان ورودي
يا خروجي معرفي کنيد .
مثال :
پايه شماره 0 از پورت a
به عنوان ورودي تعريف شده است.
پايه شماره 0 از پورت a
به عنوان خروجي تعريف شده است .
نکته:در صورتی که یک پورت تعریف نشود توسط کامپایلر به طور خودکار
ورودی تعریف می شود
نکته:در برنامه نویسی برای خروجی باید از PORTX استفاده کرد و برای
ورودی باید از دستور PINX استفاده کرد
چند دستور کاربردی برای پورت ها:
Toggle
اين دستور يک بايت يا بيت را برعکس ميکند، بايت ميتواند يک پورت یا یک
پین از پورت باشد
Set
اين دستور يک بيت يا بايت را يک ميکند، بيت ميتواند يک پين از پورت
باشد.
Reset
اين دستور يک بيت يا بايت را صفر ميکند، بيت ميتواند يک پين از پورت
باشد.
Alias
اين دستور قبلا توضیح داده شده است که در اینجا برای تغییر نام یک پورت
استفاده می شود
مثال:
1-Toggle porta.0
2-toggle porta
3-Set porta.0
4-Reset porta.0
5-Led alias porta.0
1-پایه a.0 برعکس می
شود
2-تمام پورت a یرعکس می شود
3-پایه a.0 یک می شود می توان از این دستور نیز استفاده کردporta.0=1
4-پایه a.0 صفر می شود می توان از این دستور نیز استفاده کردporta.0=0
5-در بزنامه می توان از کلمه led به جای porta.0 استفاده کرد
در لحظه ای که
میکروکنترلر به این دستور می رسد اجرای برنامه ها را متوقف می کند و تا
وقتی که شرط برقرار نشود بقیه ی برنامه ها اجرا نمی شوند
pinx نام پایه ای است که مدام در حال چک شدن است،SET/RESET شرط دستور
است وقتی set است ،یعنی زمانی که پایه یک شد ادامه ی برنامه ها اجرا می
شود زمانی که reset باشد تا پایه صفر نشود میکروکنترلر به خط بعدی نمی
رود
مثال
میکروکنترولر منتظر می
ماند تا پایه a.0 یک شود و هنگامي که پایه A.0 يک شد ،بقیه ی دستورات
اجرا مي شود
دستورات حلقه :
زمانی که بخواهیم یک برنامه مداوم اجرا شود از دستورات حلقه استفاده می
شود
نکته:برنامه اصلی باید در یک حلقه باشد وگر نه برنامه یک بار اجرا می
شود و دیگر اجرا نمی شود
حلقه do-loop :
شروع اين حلقه با Do و پايان آن با Loop است :
این حلقه را می توان به
صورت شرطی نیز استفاده کرد که شرط با دستور Loop Until مشخص می شود
Do
برنامه
Loop until a=10
با این دستور هنگامی که
شرط برقرار شود از حلقه خارج شده و برنامه از خط بعداز loop اجرا می
شود
مثال
Dim a as byte
Do
a=a+1
Loop until a=50
این دستور وقتی که
مقدار a به 50 برسید میکر کنترلر را از برنامه حلقه خارج می کند
مثالی دیگر:
Do
porta.0=1
Loop until Pinb.2=1
Do
porta.0=0
Loop until pinb.2=0
با این برنامه وقتی که
پایه b.2 صفر باشد پایه a.0 یک است و وقتی پایه b.2 یک شود پایه a.0
صفر می شود
حلقهfor-next :
فرم کلی این دستور به این صورت می باشد
For var=start to end
برنامه
Next var
Var یک متغییر است که از مقدار start شروع می شود و به end پایان می
رسد
مثال:
Dim a as byte
For a=0 to 10
A=a+1
Next a
حلقه while-wend :
فرم کلی این دستور به این صورت می باشد
While condition
برنامه
Wend
این حلقه تا زمانی که مقدار condition نقض نشود اجرا می شود
مثال:
Dim a as byte
While a<10
A=a+1
Wend
پرش:
براي پرش از يک قسمت برنامه به قسمت ديگر مي توان از دستور Jmp يا Goto
استفاده کرد (از دستورات فوق به عنوان حلقه نيز مي توان استفاده کرد) .
مثال(استفاده به جای حلقه) :
Hadi:
برنامه نوشته شده
Jmp Hadi
مثال (استفاده به عنوان حلقه) :
Hadi:
برنامه نوشته شده
Goto Hadi
مثال(استفاده برای پرش)
hadi:
حال در هر جای برنامه بنویسیم jmp hadi و یا بنویسیم goti hadi برنامه
به lable hadi پرش می کند
دستورات تاخير :
براي ايجاد تاخير در برنامه از دستور wait استفاده مي شود.
این دستور 3 بازه زمانی دارد
Waitus X :اين دستور براي ايجاد تاخير ميکرو ثانيه اي مي باشد. X مقدار
تاخير است که بين 1تا 65535 ميکرو ثانيه مي باشد.
Waitms X :اين دستور براي ايجاد تاخير ميلي ثانيه اي مي باشد X مقدار
تاخير است که بين 1تا 65535 ميلي ثانيه مي باشد.
Wait X :اين دستور براي ايجاد تاخير ثانيه اي مي باشد .X مقدار تاخير
است که عددي بيشتر از يک ثانيه مي باشد.
Delay : اين دستور يک تاخير 1000 میکرو ثانيه ايجاد مي کند .
نکته 1:توجه کنيد که هر جا دستور wait X به کار رود برنامه در آن مکان
به اندازه X ثانیه متوقف مي شود
نکته 2: دستورات تاخيري دقيق نبوده برای ایجاد تاخیر دقیق باید از
تایمر ها استفاده کرد
نکته 3: در صورت استفاده از وقفه ها و فعال شدن وقفه در زمان تاخير مدت
زمان اجراي برنامه وقفه هم به زمان تاخير اضافه مي شود .
نکته 4: در استفاده از تاخیر میکرو ثانیه نمی توان متغیری در نظر گرفت
و فقط باید عدد وارد کرد
دستو شرطی If :
حالت 0:
فرم کلی این حالت بدین صورت است
If expression then statement
Expression شرط انجام
دستور است وstatement برنامه ای که باید اجرا شود این فرم زمانی جواب
می دهد که تصمیم دارید یک کار انجام دهید ولی زمانی که خواستید چند کار
پیاپی انجام دهید از این فرم استفاده کنید
If expression then
برنامه ها
End if
حالت1 :
If expression then
برنامه 1
Else
برنامه 2
End if
اگر شرط برقرار باشد
برنامه 1 اجرا می شود در غیر اینصورت برنامه 2 اجرا می شود
حالت2:
If expression then
برنامه 1
Elseif[expression2 then]
برنامه 2
Else
برنامه3
End if
اگر شرط اول برقرار
باشد برنامه 1 و اگر شرط 1 برقرار نباشد وشرط2 برقرار باشد
برنامه2 اجرا می شود و اگر هیچکدام برقرار نباشد برنامه 3 اجرا می شود
مثال:
If pina.0=1 then
Portb.0=1
Elseif pina.1=1 then
Portb.1=1
Else
Portb.2=1
End if