آموزش برنامه نویسی به زبان بیسیک برای میکروکنترلرهای avr
آموزش برنامه نويسي AVR به زيان Basic:
بدنه يک برنامه بيسيک درمحيط BASCOM شامل تعيين ميکرو مورد استفاده، کريستال و پايان و گزينه هاي اختياري ديگر است که در زير معرفي مي کنيم.
معرفي ميکرو
REGFILE= VAR$
براي شروع يک برنامه در محيط BASCOM ابتدا بايستي ميکرو مورد نظر تعريف
گردد. VAR نام چيپ مورد استفاده است که مي تواند يکي از موارد زير باشد.
REGFILE= "AT12DEF.DAT" 'ATTINY 12 MCU$
REGFILE= "AT15DEF.DAT" 'ATTINY15 MCU$
REGFILE= "2323DEF.DAT" 'AT90S2323 MCU$
REGFILE= "M16DEF.DAT" 'MEGA16 MCU$
کريستال
براي مشخص کردن کريستال استفاده شده بر حسب هرتز از دستور زير استفاده مي نماييم.
$CRYSTAL = X
X فرکانس کريستال استفاده شده بر حسب هرتز است .
اسمبلي و بيسيک
در صورت نياز براي نوشتن برنامه اسمبلي در بين برنامه بيسيک از دستور زير استفاده مي نماييم .
ASM$
ASSEMBLY PROGRAMME
ENDASM$
يادداشت (اختياري)
گاهي نياز است يادداشتهايي براي اطلاعات بيشتر در برنامه اضافه کنيد .
' يا REM
يادداشتها
و نوشته هاي بعد از اين دستور غير فعال بوده و در برنامه براي يادداشت به
کار مي رود و کامپايل نخواهند شد و همچنين به رنگ سبز در مي آيند.
آدرس شروع برنامه ريزي حافظه FLASH
گاهي نياز است که برنامه خود را از آدرسي دلخواه در حافظه ي FLASH ROM قرار دهيد.
ROMSTART=ADDRESS$
آدرس
مکاني از حافظه است که برنامه HEX از اين آدرس در حافظه ميکرو کنترولر،
شروع به نوشته شدن مي شود در صورتي که از اين دستور استفاده نشود COMPILER
به صورت خودکار آدرس &H0000 را در نظر مي گيرد.
تعيين کلاک
با اين دستور در ميکرو هاي سري ميکرو
MEGAAVR از جمله NEGA103 تا MEGA603 به صورت نرم افزاري ميتوان کلاک سيستم
را تغيير داد. تقسيم کلاک به طور مثال براي کاهش مصرف تغذيه استفاده مي
شود.
CLOCKDIVISON=VAR
VAR مقادير معتبر بين اعداد 2 تا 128 مي تواند باشد.
پايان برنامه
END
اين دستور در انتهاي برنامه
قرار مي گيرد و اجراي برنامه را متوقف مي کند. با دستور END تمام وقفه ها
غير فعال شده و يک حلقه بي نهايت توليد و برنامه خاتمه مي يابد.
دستور CONST
براي تعريف يک ثابت از اين دستور استفاده مي شود.
CONST SYMBOL=NUMCONST
CONST SYMBOL=STRINGCONST
CONST SYMBOL=EXPRESSION
دستور ALIAS
از اين دستور براي تغيير نام متغير استفاده مي شود.
DIRECTION ALIAS PORTB.1
حال شما مي توانيد به جاي PORTB.1 از متغير DIRECTION استفاده نماييد.
دستور CHR
از اين دستور براي تبديل متغير عددي يا
يک ثابت به کارکتر استفاده مي شود. زماني که شما قصد داريد يک کارکتر بر
روي LCD نمايش دهيد از اين دستور مي توانيد استفاده نماييد .
در صورتي که از اين دستور بدين صورت استفاده نماييد PRINT CHR (VAR) کاراکتر اسکي VAR به پورت سزيال فرستاده خواهد شد.
دستور INSTR
اين دستور محل و موقعيت يک زير رشته را در رشته ديگر مشخص مي کند .
VAR=INSTR (START,STRING,SUBSTR)
VAR=INSTR(STRING,SUBSTR)
VAR
عددي است که مشخص کننده محل SUBSTR در رشته اصلي STRING مي باشد و زماني
که زير رشته مشخص شده در رشته اصلي نباشد صفر برگردانده مي شود.
دستور INCR
INCR VAR
اين دستور يک واحد به متغير عددي مي افزليد.
دستور DECR
INCR VAR
اين دستور متغير VAR را يک واحد کم مي کند.
دستور CHECKSUM
اين دستور مجموع کد دسيمال اسکي
رشته VAR را برمي گرداند که البته اگر مجموع کد اسکي رشته از عدد255 بيشتر
شود مقدار 256 از مجموع کم مي شود.
دستور LOW
اين دستور LSB يک متغيير را برمي گرداند.
VAR = LOW (S)
LSB متغيير S در VAR قرار مي گيرد.
دستور HIGH
اين دستور پر ارزش ترين بايت (MSB) يک متغيير را برمي گرداند.
VAR = HIGH (S)
مقدار MSB متغيير S در VAR جاي مي گيرد.
دستور LCASE
اين دستور تمام حروف رشته مورد نظر را تبديل به حروف کوچک مي کند.
TARGET = LCASE (SOURCE)
تمام حروف رشته SOURCE کوچک شده و در رشته TARGET جاي داده مي شوند.
دستور UCASE
اين دستور تمام حروف رشته مورد نظر را تبديل به حروف بزرگ مي کند.
TARGET = UCASE (SOURCE)
تمام حروف رشته SOURCE بزرگ شده و در رشته TARGET جاي داده مي شود.
دستور RIGHT
با اين دستور قسمتي از يک رشته را جدا مي کنيم.
VAR = RIGHT (VAR1,n)
از سمت راست رشته VAR1 به تعداد کاراکتر n رشته اي جدا شده و در رشته VAR قرار مي گيرد.
دستور LEFT
اين دستور کاراکترهاي سمت چپ يک رشته را به تعداد تعيين شده جدا مي کند.
VAR = LEFT (VAR1,n)
رشته VAR1 از سمت چپ به تعداد کاراکتر n، رشته اي جدا شده و در رشته VAR قرار مي گيرد.
دستور LEN
اين دستور طول يا به عبارتي تعداد کاراکترهاي يک رشته را بر مي گرداند.
VAR = LEN (STRING)
دستور LTRIM
اين دستور فضاي خالي رشته را حذف مي کند.
VAR = LTRIM (ORG)
دستور SWAP
SWAP VAR1 , VAR2
با اجراي اين دستور محتواي متغيير VAR1 در متغيير VAR2 و محتواي متغيير VAR2 در متغيير VAR1 قرار مي گيرد.
دستور MID
با اين دستور مي توان قسمتي از يک رشته را برداشت. و يا قسمتي از يک رشته را با قسمتي از يک رشته ديگر عوض کرد.
1- VAR = MID (VAR1 , ST [,L])
2- MID(VAR , ST [,L]) = VAR1
1- قسمتي از رشته VAR1، با شروع از کاراکتر STام و طول L برداشته شده و در متغيير VAR قرار مي گيرد.
2- رشته VAR1 در رشته VAR با شروع از کاراکتر STام و وطول L قرار مي گيرد.
در صورت قيد نکردن گزينه اختياري L، بيشترين طول در نظرگرفته مي شود.
دستور ROTATE
دستور بيتها را به چپ يا راست منتقل مي کند ولي تمام بيتها محفوظ هستند و هيچ بيتي بيرون فرستاده نمي شود.
ROTATE VAR, LEFR/RIGHT [ ,SHIFTS]
SPACE دستور
براي ايجاد فضاي خالي از اين دستور استفاده مي شود.
VAR=SPACE(X)
FORMAT تابع
اين دستور يک رشته عددي را شکل دهي مي کند .
TARGET= FORMAT(SOURCE,"MASK")
رشته اي است که شکل دهي شود. SOURCE
قرار مي گيرد. TARGET نتايج در
نوع شکل دهي است.MASK
تابع FUSING
از اين دستور براي روند کردن رشته هاي عددي استفاده مي شود.
TARGET = FUSING ( SOURCE , "MASK")
SOURCE
رشته مورد نظر براي شکل دهي و MASK نوع شکل دهي است سپس نتايج اين شکل دهي
در TARGET قرار مي گيرد. عمل MASK حتما بايد با علامت # شروع شود و حد اقل
بايد يکي از علامت هاي # و & را بعد از مميز داشته باشد. علامت هاي #
و& با يکديگر بعد از مميز استفاده نمي شود. با استفاده از علامت # عدد
روند مي شود و در صورت استفاده از & روندي صورت نمي گيرد.
جدول LOOKUP
توسط اين جدول مي توان مقدار دلخواهي را از جدول برگرداند.
VAE = LOOKUP ( VALUE , LABEL )
LABELE
برچسب جدول و VALUE انديس داده دلخواه در جدول است. داده برگشتي از جدول
در متغير VAR قرار مي گيرد. VALUE = 0 اولين داده در جدول را برمي گرداند.
تعداد انديس ها و مقدار داده برگشتي به ترتيب نهايتا مي تواند 255 و 65535
باشند.
جدول LOOKUPSTR
توسط اين جدول مي توان رشته دلخواهي را از جدولي برگرداند.
VAR = LOOKUPSTR ( VALUE , LABEL )
LABLE
برچسب جدول و VALUE انديس رشته دلخواه در جدول است. رشته برگشتي از جدول
در متغيير رشته اي VAR قرار مي گيرد. VALUE = 0 اولين رشته در جدول را برمي
گرداند. تعداد انديس ها نهايتا مي تواند 255 باشد.
توابع رياضي و محاسباتي
عملگر هاي رياضي
از عملگرهاي رياضي زير مي توانيد در محيط BASCOM استفاده نماييد و عمليات رياضي خود را راحتر انجام دهيد.
علامت نماد
علامت ضرب ASTERISKS *
علامت جمع PLUS SIGN+
علامت تفريق MINUS SIGN -
علامت مميز PERIOD .
علامت تقسيم SLASH/
علامت کوچکتر از LESS THAN<
علامت تساوي EQUAL SIGN=
علامت بزرگتر از GREATER THAN>
علامت بتوان EXPONENT^
علامت کوچکتر يا مساوي با LESS THAN OR EQUAL TO <=
علامت بزرگتر يا مساوي با GREATER THAN OR EQUAL TO =<
علامت مخالف INEQUALITY<>
عملگر هاي منطقي
عملگر هاي منطقي در BASCOM به قرار زير است:
معرفي نماد عملگرهاي منطقي در BASCOM
CONJUNCTION AND
DISJUNCTION OR
EXCLUSIVE OR XOR
LOGICAL COMPLEMENT NOT
تابعABS
VAR = ABS ( VAR2 )
اين دستور به معناي رياضي VAR = |VAR2| (قدر مطلق) است.
تابع EXP
TARGET = EXP(SOURCE)
TARGET برابر با e به توان SOURCE است. TARGET مغييري از نوع داده SINGLE است.
تابع LOG10
لگاريتم پايه 10 متغيير يا ثابت SOURCE در متغيير TARGET قرار مي گيرد. TARGET و SOURCE هر دو داده نوع SINGLE هستند.
تابع LOG
اين دستور لگاريتم طبيعي يک داده از نوع SINGLE را برمي گرداند.
TARGET = LOG (SOURCE)
لگاريتم
متغيير يا ثابت SOURCE از نوع داده SINGLE گرفته مي شود و در متغيير
TARGET از نوع داده SINGLE قرار مي گيرد. اين تابع براي اجرا شدن وقت زيادي
مي برد مخصوصا زماني که اعداد بزرگ استفاده مي شود. همچنين با بزرگتر شدن
اعداد دقت نيز پايين خواهد آمد.
رجيستر ها و آدرس هاي حافظه
تمام ميکروهاي AVR داراي 32 رجيستر 8 بيتي (R0-R31) همه منظوره در CPU خود هستند. رجيسترهاي R31(MSB) با R30(LSB)، R29(MSB) و R27(MSB) با R26(LSB) تشکيل سه رجيستر 16 بيتي به ترتيب با نام هاي Z، Y و X را مي دهند.
دستور SET
توسط اين دستور مي توان يک بيت را يک کرد.
SET BIT/PIN
SET VAR.X
BIT
مي تواند يک بيت و يا يک SFR مانند PORB.1 باشد و VAR متغييري از نوع داده
BYTE، INTEGER، WORD يا LONG است. X براي BYTE مي تواند 0 تا 7، 0 تا 15
براي WORD و براي LONG مي تواند 0 تا 31 باشد.
دستور TOGGLE
اين دستور مقدار منطقي يک پايه يا يک بيت را معکوس مي کند.
TOGGLE PIN/BIT
PIN مي تواند يک SFR مانند PORTB.1 و يا يک بيت باشد.
دستور RESET
توسط اين دستور مي توان يک بيت را صفر کرد.
RESET BIT/PIN
RESET VAR.X
BIT
مي تواند يک بيت و يا يک SFR مانند PORTB.1 باشد و VAR مغييري از نوع داده
WORD, INTEGER, BYTE يا LONG است و X براي BYTE مي تواند 0 تا 7، 0 تا 15
براي WORD و براي LONG مي تواند 0 تا 31 باشد.
دستور BITWAIT
BITWAIT X, SET/RESET
توسط اين
دستور اجراي برنامه تا زماني که بيت SET ( =1 ) ,X يا RESET شود در خط جاري
متوقف مي ماند. در صورت TRUE شدن شرايط، اجراي برنامه از خط بعد ادامه مي
يابد. X مي تواند يک بيت رجيستر داخلي مانند PORTB.Y باشد که Y مي تواند
بين مي تواند بين اعداد 0 تا 7 تغيير کند.
دستور CPEEK
از اين دستور براي برگرداندن بايتي که
در آدرسي از حافظه کدي ذخيره شده است استفاده مي کنيم. با اين دستور مي
توانيد به رجيسترهاي داخلي نيز دسترسي پيدا کنيد. لازم به تذکر است که با
اين دستور شما نمي توانيد در حافظه داخلي بنويسيد.
دستور OUT
توسط اين دستور مي توان يک بايت به يک پورت سخت افزاري يا آدرس حافظه داخلي /خارجي ارسال کرد.
OUT ADDRESS , VALUE
VALUE
به آدرس ADDRESS که مي تواند بين 0H تا FFFFH باشد فرستاده مي شود. دستور
OUT مي تواند در تمام مکانهاي حافظه AVR بنويسيد.در ضمن براي نوشتن در مکان
حافظه خارجي (XRAM) بايد در محيط BASCOM و در منوي (OPTION?COMPILER ?
CHIP)، گزينه (EXTERNAL ACCESS ENABLE) را فعال کنيد.
دستور العمل هاي حلقه و پرش
دستور GOTO و JMP
GOTO LABEL
JMP LABLE
با اين دستورات مي توان به برچسب LABEL پرش
کرد. برچسب LABEL بايد با علامت: (COLLON) پايان يابد و مي تواند تا32
کاراکتر طول داشته باشد. به خاطر داشته باشيد زماني که از دو LABEL هم نام
استفاده شود کامپايلر به شما هشدار (WARNING) مي دهد. دستور RETURN براي
برگشت از برچسب وجود ندارد.
دستور العمل DO-LOOP
فرم کلي دستور DO…LOOP به صورت زير مي باشد.
DO
Statements
LOOP [UNTIL EXPRESSION]
دستورالعمل Statements تا زماني که EXPRESSION داراي ارزش TRUE يا غير صفر است تکرار خواهد شد بنابراين اين نوع حلقه، حداقل يکبار تکرار شود. DO-LOOP به تنهايي يک حلقه بينهايت ايت که با EXIT DO مي توان از درون حلقه خارج شد و اجراي برنامه در خط بعد از حلقه ادامه يابد.
دستورالعمل IF
در کليه حالتهاي زير عبارت Statements مي تواند يک دستورالعمل ساده يا چند دستورالعمل مرکب باشد.
حالت 0:
IF EXPRESSION THEN Statements
دستورالعمل Statements زماني اجرا مي شود که عبارت EXPRESSION داراي ارزش TRUE باشد.
حالت 1:
IF EXPRESSION THEN
Statements1
ELSE
Statements2
END IF
در
صورتي که عبارت EXPRESSION1 داراي ارزش TRUE باشد دستورالعمل Statements1
اجرا خواهد شد، در غير اين صورت دستورالعمل Statements2 اجرا مي شود.
IF EXPRESSION1 THEN
Statements1
ELSE IF [EXPRESSION2 THEN]
Statements2
ELSE
Statements3
ELSE IF
در
صورتي که عبارت EXPRESSION1 داراي ارزش TRUE باشد دستورالعمل Statements1
اجرا خواهد شد. در صورتي که عبارت EXPRESSION1 داراي ارزش FALSE ولي عبارت
اختياري EXPRESSION2 داراي ارزش TRUE باشد، دستورالعمل Statements2 اجرا
خواهد شد و در غير اين صورت يعني در حالتي که هر دو عبارت EXPRESSION2 و
EXPRESSION1 داراي ارزش FALSE باشند دستورالعمل Statements3 اجرا خواهد شد.
همچنين با دستور IF مي توان يک يا صفر بودن يک بيت از يک متغيير را امتحان کرد.
IF BIT = 1 THEN OR IF BIT = 0 THEN
مطالب مشابه :
ميكرو كنترلر ATMEGA 32
به سرعت در حال تبديل شدن به زبان برنامه نويسي استاندارد براي ميکرو کنترلرها درباره
میکرو کنترلر چیست؟
6- امکانات میکرو کنترلرها : چند کتاب درباره طراحي آموزش برنامه نويسي ميکروهاي pic
یکی از بهترین پروژه های عملی بچه های برق، الکترونیک
ميکرو کنترولر درباره ما. محسن رشته های دیگه، پروژه های الکترونیکی با استفاده از میکرو
Micro Controller ها
به قلم جمعی ازمهندسان برق شیراز شهر راز - Micro Controller ها -
آموزش برنامه نویسی به زبان بیسیک برای میکروکنترلرهای avr
با اين دستور در ميکرو هاي سري ميکرو megaavr از برچسبها: میکرو کنترلرها درباره وبلاگ. این
BMS چیست
سيستم های کنترل و ميکرو پردازشگرها و بين کنترلرها و نمایشگرها به درباره وبلاگ. آرشيو
کنترلر controller
همه چیز درباره کات اوت محوری ترین تجیهزات کنترلرها است که وظیفه کنترل ميکرو پرسوسور و
BMS چیست؟
های کنترل و ميکرو پردازشگرها و سيستمهای i/o ، کنترلرها و نرم افزارهای درباره
برچسب :
درباره ميکرو کنترلرها