• ¡Welcome to Square Theme!
  • This news are in header template.
  • Please ignore this message.
مهمان عزیز خوش‌آمدید. ورود عضــویت


امتیاز موضوع:
  • 17 رای - 2.12 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
Title: آموزش کامل بسکام به همراه مثال
حالت خطی
#3
سلام
-----------
دستورات حلقه وپرش :
گاهي اوقات نياز است برنامه مدام اجرا شود يا در هنگام اجراي برنامه از يک خط به خط ديگري پرش شود.
براي اين کار از حلقه ها و دستورات پرش استفاده مي شود ، دراينجا به معرفي حلقه Do – Loop را پرداخته و بقيه حلقه ها در بخش بعدي موجود است .
شروع اين حلقه با Do و پايان آن با Loop است :
Do
برنامه
Loop
در اين حلقه ، هنگامي که CPU به دستور Loop مي رسد ، به ابتداي حلقه يا دستور DO پرش مي کند .
براي پرش از يک قسمت برنامه به قسمت ديگر مي توان از دستور Jmp يا Goto استفاده کرد (از دستورات فوق به عنوان حلقه نيز مي توان استفاده کرد) .
مانند :
Q:
برنامه نوشته شده
Jmp Q
مثال دوم :
W:
برنامه نوشته شده
Goto W
حال با توجه به توضيحات بالا برنامه يک مدار چشمک زن را با هم مي نويسيم :
(ميکرو مورد استفاده مگا 16 (ATmega16 ) و کريستال 8 مگا هرتز است و 8 عدد LED با مقاومت 330 اهم به پورت (PORTA) A متصل است)
مر حله اول معرفي ميکرو مي باشد
$regfile = "m16def.dat"
مرحله بعد معرفي کريستال مي باشد
$crystal = 1000000
(دو مرحله بالا در همه برنامه ها ثابت مي باشد(وجود دارد))
مرحله بعد قرار دادن پورت A به عنوان خروجي مي باشد (چون ما ميخواهيم از آن ولتاژ بگيريم بايد آن را به عنوان خروجي قرار دهيم)
Config PORTA = Output
مرحله بعد ايجاد يک حلقه مي باشد (در اينجا براي ايجاد حلقه مي توانيد ، از تمام موارد گفته شده در بالا استفاده کنيد)
Do
مرحله بعد روشن کردن Led ها مي باشد(ما در اينجا آنها را يک در ميان روشن ميکنيم)
Set PORTA.0
(روشن کردن LED متصل شده به پايه 40 ميکرو (PORTA.0))
Reset PORTA.1
(خاموش کردن LED متصل شده به پايه 39 ميکرو (PORTA.1))
Set PORTA.2
(روشن کردن LED متصل شده به پايه 38 ميکرو (PORTA.2))
Reset PORTA.3
(خاموش کردن LED متصل شده به پايه 37 ميکرو (PORTA.3))
Set PORTA.4
(روشن کردن LED متصل شده به پايه 36 ميکرو (PORTA.4))
Reset PORTA.5
(خاموش کردن LED متصل شده به پايه 35 ميکرو (PORTA.5))
Set PORTA.6
(روشن کردن LEDمتصل شده به پايه 34 ميکرو (PORTA.6))
Reset PORTA.7
(خاموش کردن LED متصل شده به پايه 33 ميکرو (PORTA.7))
مرحله بعد ايجاد يک تاخير زماني است
Waitms 300
(تاخير به مدت 300 ميلي ثانيه (براي اينکه روشن بودن LED ها ديده شود))
مرحله بعد برعکس کردن وضعيت پايه هاي موجود است (براي اينکه LED هاي روشن ، خاموش شود و LED هاي خا موش ، روشن شود) .
Toggle PORTA
(اين دستور همانگونه که قبلا گفته شد يک بايت را برعکس ميکند که در اينجا بايت مورد نظر 8 پايه پورت A است) .
مرحله بعد ايجاد تاخير زماني است :
Waitms 300
مرحله بعد نوشتن پايان حلقه مي باشد :
Loop
(هنگامي که ميکرو اين خط را ميخواند به خط Do پرش ميکند)
و در نهايت برنامه با دستور زير پايان مي يابد :
End
چون برنامه هیچگاه پایان نمی یاد و پیوسته دستورات موجود در حلقه تکرار می شود پس می توان از دستور فوق چشم پوشی کرد !
برنامه بالا را به دو شکل زير مي توان نوشت :
برنامه اول : (در مسير Example\2 - Flasher موجود است .)
$regfile = "m16def.dat"
$crystal = 1000000
Config PORTA = Output
Do
Set PORTA.0
Reset PORTA.1
Set PORTA.2
Reset PORTA.3
Set PORTA.4
Reset PORTA.5
Set PORTA.6
Reset PORTA.7
Waitms 300
Toggle PORTA
Waitms 300
Loop
End
برنامه دوم : ( در مسير Example\2 - Flasher موجود است )
$regfile = "m16def.dat"
$crystal = 1000000
Config PORTA = Output
Do
Set PORTA.1
Reset PORTA.0
Set PORTA.3
Reset PORTA.2
Set PORTA.5
Reset PORTA.4
Set PORTA.7
Reset PORTA.6
Waitms 300
Set PORTA.0
Reset PORTA.1
Set PORTA.2
Reset PORTA.3
Set PORTA.4
Reset PORTA.5
Set PORTA.6
Reset PORTA.7
Waitms 300
Loop
End
مدار به کار رفته اين برنامه در شکل مقابل مشاهده مي شود :
روش هاي ديگر هم براي نوشتن برنامه بالا وجود دارد که به عهده شما گذاشته مي شود .




LCD کاراکتري :
اين نوع LCD در چندين نوع ساخته ميشوند و داراي چند سطر و ستون مي باشند که نام گذاري آنها برمبناي سطر وستون مي باشد .
در زير نام اين LCD آورده شده است :
16*1: که داراي يک سطر و 16 ستون مي باشد.
16*1a: که داراي يک سطر و 16 ستون مي باشد و مي توان ستون هشتم به بعد آن را در خط دوم آدرس دهي کرد .
16*2: که داراي 2 سطر و 16 ستون مي باشد.
16*4 : که داراي 4 سطر و 16 ستون مي باشد .
20*2 : که داراي 2 سطر و 20 ستون مي باشد.
20*4 : که داراي 4 سطر و 20 ستون مي باشد.
40*2 : که داراي 2 سطر و 40 ستون مي باشد.
40*4: که داراي 4 سطر و40 ستون مي باشد.
تمام LCD هاي کاراکتري داراي 16 پايه مي باشد که در زير آورده شده است :
پايه شماره 1 : Vss ، اين پايه ،پايه گراند LCD است و بايد به زمين مدار وصل شود.
پايه شماره 2 : VDD اين پايه VCC، LCD است که بايد به 5 ولت وصل شود.
پايه شماره 3 : VEE اين پايه روشنايي کنتراست پيکسل هاي LCD را تعيين ميکند واتصال آن طبق مدار روبرو است :
پايه شماره 4 : Rs در LCD دو رجيستر به نام دستورالعمل وداده وجود دارد اگر RS=0 باشد LCD براي گرفتن دستورالعمل اماده مي شود در غير اين صورت براي داده . مثلا دستور CLS يک دستورالعمل است و "ANT" که بايد روي LCD نوشته شود يک داده است .
پايه شماره 5 : RW اين پايه دو وضعيت دارد ، RW=1 براي خواندن از LCD و RW=0 براي نوشتن در LCD .
پايه شماره 6 : E با اين پايه مي توان LCD را انتخاب کرد.
پايه شماره 7 : DB0 اين پايه براي گرفتن ديتا (اطلا عات) از LCD ميباشد (پايه ديتا ي صفر) .
پايه شماره 8 : DB1 اين پايه براي گرفتن ديتا (اطلا عات) از LCD ميباشد (پايه ديتا ي يک).
پايه شماره 9 : DB2 اين پايه براي گرفتن ديتا (اطلا عات) از LCD ميباشد (پايه ديتا ي دو).
پايه شماره 10 : DB3 اين پايه براي گرفتن ديتا (اطلا عات) از LCD ميباشد (پايه ديتا ي سه).
پايه شماره 11 : DB4 اين پايه براي ارسال ديتا (اطلا عات) به LCD ميباشد (پايه ديتا ي چهار).
پايه شماره 12 : DB5 اين پايه براي ارسال ديتا (اطلا عات) به LCD ميباشد (پايه ديتا ي پنج).
پايه شماره 13 : DB6 اين پايه براي ارسال ديتا (اطلا عات) به LCD ميباشد (پايه ديتا ي شش).
پايه شماره 14 : DB7 اين پايه براي ارسال ديتا (اطلا عات) به LCD ميباشد (پايه ديتا ي هفت).
پايه شماره 15 : اين پايه و پايه شماره 16 تغذيه LED پشت LCD مي باشد که به 5 ولت متصل مي شود.
پايه شماره 16 : اين پايه و پايه شماره 15 تغذيه LED پشت LCD مي باشد که به زمين متصل مي شود.
راه اندازي LCD :

LCD مي تواند از دو طريق 8 سيمه و 4 سيمه به ميکرو متصل شود.
Config Lcdbus = Constant
Constant مي تواند 4 به معناي استفاده از مد 4 سيمه يا 8 به معناي مد هشت سيمه باشد (در صورتي که اين دستور نوشته نشود ، مد 4 سيمه در نظر گرفته مي شود .)
در مد چهار سيمه فقط ميتوان روي LCD نوشت ولي در مد هشت سيمه ميتوان اطلاعاتي را که قبلا روي LCD نوشته شده است را خواند و به ميکرو ارسال کرد . به طور کلي از خطوط ديتاي 0 تا 3 براي خوانده از LCD و از خطوط 4 تا 7 براي نوشتن در LCD نوشته مي شود .
در حالت نوشتن در LCD بايد پايه RW (پايه 5) پايين نگه داشته شود (صفر شود) ودر حالت خواندن از LCD بايد پايه RW يک شود ) 5 ولت وصل شود) .
از آنجا که با وجود حافظه ميکرو و راحت شدن کار برنامه نويسي نيازي به خواندن از LCD نمي باشد ، از پايه DB0 تا DB3 استفاده نمي شود و پايه RW نيز به GND (صفر ولت) متصل مي شود .
دومين مرحله براي راه اندازي LCD معرفي کردن نام آن است :
براي اين کار بعد از معرفي ميکرو وکريستال با استفاده از دستور زير مي توان LCD را معرفي کرد:
Config Lcd = Lcdname
که Lcdname يکي از نام هاي بالا ميباشد. مثلا معرفي LCD 2*16 :
Config Lcd = 16 * 2
مرحله بعد معرفي پايه هاي از ميکرو است که LCD به آنها وصل مي شود .

مد 4 سيمه :
Config Lcdpin = Pin , Db4 = Pinx.y , Db5 = Pinx.y , Db6 = Pinx.y , Db7 = Pinx.y , Rs = Pinx.y , E = Pinx.y
x نام پورت است که يکي از پورت هاي A يا B يا C يا D يا ... مي باشد و y شماره پايه هست که از 0 تا 7 مي باشد . ( دقت شود دستور فوق در يک خط نوشه شود يا براي خط دوم از _ استفاده شود ).
براي مثال در زير LCD کاراکتري 16*2 به پورت C ((PORTC متصل است .
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PINC.0 , Db5 = PINC.1 , Db6 = PINC.2 _
, Db7 = PINC.3 , Rs = PINC.4 , E = PINC.5
در اين مثال که از ميکرو مگا16 (ATmega16) استفاده شده ، اتصال ميکرو وLCD به قرار زير است :
پايه شماره 1 : VSS اين پايه بايد به زمين مدار وصل شود .
پايه شماره 2 : VDDاين پايه بايد به 5 ولت وصل شود .
پايه شماره 3 : VEE اين پايه با يک مقاومت ( مقدار مقاومت بستگي به روشنايي مورد نظر شما دارد) به زمين وصل مي شود.
پايه شماره 4 : RS اين پايه به پورت C پين شماره 4 يا پين C.4 متصل مي شود (پايه 26) .
پايه شماره 5 :RW اين پايه به GND یا زمین متصل مي شود .
پايه شماره 6 : E اين پايه به پورت C پين شماره 5 يا پين C.5 متصل مي شود (پايه 27) .
پايه شماره 7 : DB0 اين پايه به جايي متصل نمي شود. ( مي توان آن را به زمين وصل کرد ) .
پايه شماره 8 : DB1 اين پايه به جايي متصل نمي شود. ( مي توان آن را به زمين وصل کرد ) .
پايه شماره 9 : DB2 اين پايه به جايي متصل نمي شود. ( مي توان آن را به زمين وصل کرد ) .
پايه شماره 10 : DB3 اين پايه به جايي متصل نمي شود. ( مي توان آن را به زمين وصل کرد ) .
پايه شماره 11 : DB4 اين پايه به پورت C پين شماره 0 يا پين C.0 متصل مي شود (پايه 22) .
پايه شماره 12 : DB5 اين پايه به پورت C پين شماره 1 يا پين C.1 متصل مي شود (پايه 23) .
پايه شماره 13 : DB6 اين پايه به پورت C پين شماره 2 يا پين C.2 متصل مي شود (پايه 24) .
پايه شماره 14 : DB7 اين پايه به پورت C پين شماره 3 يا پين C.3 متصل مي شود (پايه 25) .
پايه شماره 15 : اين پايه تغذيه مثبت LED پشت LCD مي باشد که به 5 ولت متصل مي شود .
پايه شماره 16 : اين پايه تغذيه زمين LED پشت LCD مي باشد که به زمين متصل مي شود .
توجه کنيد که اگر پايه VEE به زمين متصل شود پيکسل هاي LCD داراي بيشترين کنتراست و اگر به 5 ولت وصل شود داراي کمترين کنتراست مي باشند .
اتصال پايه هاي 15 و16 اختياري است . ( در پروتئوس اين پايه ها وجود ندارند )

مد 8 سيمه :
در مثال زیر پايه DB0 به پورت D.0 و پايه DB1 به پورت D.1 و ... پايه DB7 به پايه D.7 و پايه Rs به پايه C.5 و پايه E به پايه C.6 و پايه Rw به پايه C.7 متصل مي گردد ، در اين حالت يازده پايه از LCD اشغال مي شود .
Config Lcdpin = PORTD , Rs = PINC.5 , E = PINC.6 , Rw = PINC.7

دستورات LCD :
بعد از راه اندازي LCD نوبت کار کردن با آن است .
براي نوشتن روي LCD از دستور زير استفاده مي شود :
Lcd "x"
که X مي تواند هر چيز ي باشد (البته در محدوده کارکتر هاي اسکي ) .
مانند:
Lcd "A.N.T"
Lcd "1nafar"
براي پاک کردن LCD از دستور Cls استفاده مي شود .
مانند :
Lcd "DSA@GJK!?"
Wait 1
Cls
Lcd "asdfgfghk"
با دستور زير مي توان در سطرها و ستون هاي ديگر LCD نوشت.
Locate x,y
که x آدرس سطر و y آدرس ستون مي باشد .
مثال :
Locate 1 , 2
Lcd "qwert"
Locate 2 , 8
Lcd "mnbv"
توجه کنيد براي يک LCD ، مثلا 16*2 حداکثر x برابر2 و حداکثرy برابر 16 است .
البته این مدل LCD دارای حافظه 40*2 می باشد که فقط 16*2 تای اول آن نمایش داده می شود و می توان در بقیه حافظه نوشت و با دستورات انتقال متن فوق را نمایش داد .
با دستورات زير ميتوان به سطر هاي مختلف LCD پرش کرد و در آنجا متن را نوشت :
Upperline
با اين دستور به خط بالاي پرش مي شود
Lowerline
با اين دستور به خط پاييني پرش مي شود
Home
با اين دستور به سطر اول ، ستون اول پرش مي شود
Thirdline
Fourthline
با دو دستور بالا مي توان به ترتيب به خط سوم و چهارم پرش کرد (اين دستور براي LCD هاي است که 4 سطر دارند) .
مانند :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = PINC.0 , Db5 = PINC.1 , Db6 = PINC.2 , Db7 = PINC.3 , Rs = PINC.4 , E = PINC.5
Lowerline
Lcd "qwert"
Thirdline
Lcd "vcxz"
Fourthline
Lcd "erff"
Wait 2
Home
Lcd "123654"
End
متن نمایش داده شده بر روی LCD در شکل بالا مشاهده می شود :
با دستور زير مي توان تعداد فضاي خالي دلخواه را بر روي LCD ايجاد کرد :
Lcd Spc(X)
تعداد X ستون خالي بوده ، و بعد از ستون X نوشتن ادامه مي یابد.
با استفاده از دستور زير ميتوانيد LCD را روشن يا خاموش کنيد:
Display On / Off
On : LCD روشن مي شود
Off : LCD خاموش مي شود.
با استفاده از دستور زير ميتوانيد کنتراست (ميزان نور (کم رنگي وپر رنگي) متن ) متن را تغيير دهيد :
Lcdcontrast x
X ميزان کنتراست است که ميتوانيد بين 0 تا 3 باشد ، به ازاي 0 کمترين کنتراست و به ازاي 3 بيشترين کنتراست مشاهده مي شود. (توجه شود فقط بعضي از LCD ها داراي قابليت فوق مي باشند)
LCD داراي يک مکان نما مي باشد که با دستور زير ميتوان آن را روشن يا خاموش يا چشمک زن يا ثابت قرارداد .
Cursor On
با اين دستور مکان نما روشن مي شود (در حالت عادي مکان نما روشن است ).
Cursor Off
با اين دستور مکان نما خاموش مي شود.
Cursor Blink
با اين دستور مکان نما چشمک مي زند .
Cursor Noblink
با اين دستور مکان نما ديگر چشمک نمي زند .
با دستور زير مي توانيد کاراکتر هاي روي lcd را به چپ يا راست شيفت دهيد.
Shiftlcd Left
اين دستور کارکترها را به اندازه يک ستون به چپ منتقل ميکند.
Shiftlcd Right
اين دستور کارکترها را به اندازه يک ستون به راست منتقل ميکند .
با دستور زير ميتوانيد مکان نما را به راست يا چپ منتقل کنيد:
Shiftcursor Left | Right
Left اين دستور مکان نما را به اندازه يک ستون به چپ منتقل مي کند .
Right اين دستور مکان نما را به اندازه يک ستون به راست منتقل مي کند.
مثال :
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = PIND.2 , Db5 = PIND.3 , Db6 = PIND.4 , _
Db7 = PIND.3 , Rs = PIND.0 , E = PIND.1
Lcdcontrast 1
Locate 2 , 1
Lcd "12356"
Shiftcursor Right
Wait 1
Display Off
Wait 1
Display On
Lcdcontrast 2
Locate 4 , 1
Lcd Spc(5)
Lcd "qwer"
Shiftcursor Left
End

نمایش کارکتر دلخواه روي LCD :
Lcd هاي کاراکتري داراي يک حافظه دائم مي باشد که درون آن فقط کد ، کارکترهاي اسکي وجود دارد (کد کارکترهاي فارسي در آن وجود ندارد) . در LCD حافظه موقتي وجود دارد که در آن مي توان تا 8 کاراکتر دلخواه را قرار داد .
براي ساخت کاراکتر دلخواه مراحل زير را دنبال کنيد:
از منوي Tools گزينه Lcd Designer را انتخاب کنيد ، پنجره جديدي باز مي شود که شما مي توانيد در آن کاراکتر دلخوا ه خود را ايجاد کنيد.
بعد از ايجاد کاراکتر دلخواه روي Ok کليک کنيد ،پنجره بسته مي شود و يک خط به برنامه شما اضافه مي شود. مانند زير :
Deflcdchar ?,32,32,7,5,31,16,16,16
به جاي علامت سوال ؟ بايد يکي از اعداد 0 تا 7 گذاشته شود .
بعد از ساخت کاراکتر جديد بادستور زير مي توانيد آن را روي LCD نشان دهيد:
Lcd chr(?)
به جاي علامت سوال بايد شماره کاراکتر که يکي از اعداد 0تا 7 مي باشد گذاشته شود .
مانند:
$regfile = "m16def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = PIND.2 , Db5 = PIND.3 , Db6 = PIND.4 , _
Db7 = PIND.3 , Rs = PIND.0 , E = PIND.1
Deflcdchar 0 , 32 , 32 , 7 , 5 , 31 , 16 , 16 , 16
Lcd Chr(0)
End
[عکس: bnk.png]

برای ورود بر روی تصویر کلیک کنید.
www.avrprj.ir
 
پاسخ
  


پیام‌های این موضوع
RE: آموزش کامل بسکام به همراه مثال - توسط a.mehran - 09-26-2014، 04:13 PM

موضوعات مشابه ...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش اصطلاحات میکرو AVR a.mehran 1 4,820 09-26-2014، 04:45 PM
آخرین ارسال: a.mehran
  مدار فاصله سنج اولتراسونیک با بسکام a.mehran 2 4,075 09-02-2014، 07:56 AM
آخرین ارسال: a.mehran
  pwm با بسکام a.mehran 0 2,707 09-01-2014، 10:02 PM
آخرین ارسال: a.mehran
  راه اندازی سون سگمنت با بسکام a.mehran 0 2,781 09-01-2014، 09:56 PM
آخرین ارسال: a.mehran

پرش به انجمن:


Browsing: 1 مهمان