الکترونیک برنامه نويسی به زبان Basic برای ميکروکنترلرهای PIC

اطلاعات موضوع

درباره موضوع در تاریخ, در دسته آموزشی ایجاد شده و آغاز کننده آن Aliمی باشد و موضوع آن: برنامه نويسی به زبان Basic برای ميکروکنترلرهای PIC است. این موضوع تا کنون 144 بازدید کننده و, 0 پاسخ داشته و 0 بار پسندیده شده...
نام دسته آموزشی
نام موضوع برنامه نويسی به زبان Basic برای ميکروکنترلرهای PIC
آغاز کننده موضوع Ali
تاریخ شروع
پاسخ‌ها
بازدیدها
پسندها
آخرین ارسال توسط Ali

Ali

مسئول نظارت بر محتوا
پرسنل مدیریت
ناظم انجمن
Jun 7, 2020
921
1,219
برنامه نويسی به زبان Basic برای ميکروکنترلرهای PIC
قسمت اول
ميتوان برنامه ميکروکنترلر ها را با زبان های مختلف چون زبان اسمبلی , basic و c نوشت.
برنامه نويسی به زبان Basic برای ميکروکنترلرهای PIC ساده تر از برنامه نويسی به زبان اسمبلی است اگرچه
تعداد دستورات زبان اسمبلی ميکروکنترلر PIC کمتر از بيسيک است.

کامپايلر های مختلفی را برای اين منظور می توان يافت. اين کامپايلر ها تنها در چند دستور با هم متفاوتند لذا بهتر
است که فقط با يک نوع از آنها کار کرد.

کامپايلری که پيشنهاد می کنم و درباره آن توضيح می دهم، کامپايلر و شبيه ساز ميکروکنترلر PIC يعنی
IDE Simulator PIC می باشد که می توان جديد ترين نسخه آن را از وب سايت oshonsoft
دانلود کرد (نسخه رجيسترشده اين نرم افزار در بیشتر سايت ها موجود می باشد.).

در 3 قسمت دستورات اين کامپايلر شرح داده می شود. هيچ فرقی نمی کند که دستورات را با حروف کوچک
بنويسيد يا بزرگ . کامپايلر اين نرم افزار دستورات را تشخيص می دهد و آن ها را به رنگ آبی نمايش می دهد.

برای اينکه بتوانيد در اين نرم افزار به زبان بيسيک برنامه نويسی نمائيد ابتدا برنامه را باز کنيد و روی منوی
TOOLS رفته و سپس Compiler Basic را انتخاب نمائيد.

دستورات:

DIM
از اين دستور برای اعلام متغير ها استفاده می شود. متغيرها (ديتا) می توانند WORD , BYTE , BIT باشند.
يک بيت يا صفر است يا يک ، يک بايت byte از 8 بيت تشکيل می شود و يک word) کلمه) از 2 بايت تشکيل
می شود.

اين دستور را می توان در هر جای برنامه استفاده نمود منتها قبل از استفاده از متغير.
تعداد متغيرهايی که می توان به عنوان word,byte,bit در برنامه تعريف نمود بستگی به حافظه RAM
ميکروکنترلر دارد.

به عنوان مثال در ميکروکنترلر 16, PIC F8416متغيربيت , 52 متغير بايت و 25 متغير کلمه می توان به
طور مجزا تعريف کرد.

شايد ندانيد که ميکروی PIC شما چند متغير بايت يا کلمه دارد . می توانيد به ديتا شيت آن مراجعه کنيد . البته بايد
بدانيد که دانستن اين موضوع چندان اهميتی ندارد و در برنامه نويسی به مشکلی بر نخواهيد خورد.
فرم کلی دستور DIM به صورت زير است:


DIM varname(array) datatype
که datatype می تواند bit , byte و يا word باشد. مثال:

DIM A AS BIT

DIM B AS BYTE

DIM X AS WORD
اگر بخواهيم از array استفاده کنيم مطابق مثال زير اين کار را انجام می دهيم:

DIM A(10) AS BYTE
با اين دستور 10 متغير از نوع بايت با نام های A0 تا A9 تعريف می شود.

Varname.BIT
اگر متغيری به صورت بايت تعريف شده باشد می توان با استفاده از دستور فوق به تک تک بيت های آن متغير
دسترسی داشت. که BIT شماره بيت مورد نظر است که می تواند از 0 تا 7 باشد.
مثال:

Dim name As Byte
name.3 = 0
دستور فوق عدد صفر را به چهارمين بيت از متغير name اختصاص می دهد.

SFRname.BITname
با استفاده از دستور بالا می توان به بيت های ثبات های با منظور خاص (SFRs (دست يافت.
مثلا با دستور (1.PORTA (می توان به دومين بيت پورت A دست يافت و يا با دستور (INTF.INTCON (
می توان به بيت INTF ثبات INTCON دست يافت.

Varname.HB

Varname.LB
اگر متغيری به صورت کلمه تعريف شده باشد با دستورات بالا می توان به کم ارزش ترين و با ارزش ترين بايت
آن دسترسی داشت.
که HB با ارزشترين بايت است و LB کم ارزش ترين بايت.

DIM A AS BYTE

DIM C AS BYTE

DIM B AS WORD

A = B.HB

B.LB = C

=
با استفاده از علامت تساوی می توان محتويات يک متغير يا ثبات را تغيير داد. فرم کلی ای دستور به صورت زير
است:

Dataname = statement
که statement می تواند يک عدد و يا نام يک متغير باشد:

PORTA.1 = 1

B = A

SYMBOL
با استفاده از اين دستور می توان به متغير ها , بيت های ثبات های با منظور خاص و يا خود ثبات های با منظور
خاص , نام های ديگری که در برنامه معنی دار تر هستند اطلاق کردوسپس به جای نام آن متغير , از نام
سمبوليک آن استفاده می شود.
فرم کلی اين دستور به صورت زير است:

SYMBOL name = Dataname
مثال:

SYMBOL LED1 = PORTB.0
اختصاص می دهد و سپس با دستور زير مقدار يک را LED1 نام B پورت (دستور بالا به بيت صفر (اولين بيت
.را در آن ذخيره می سازد

LED1 = 1

HIGH
از اين دستور نيز برای تغيير مقدار يک بيت استفاده می شود و مقدار آن را يک می کند. همچنين اين دستور می
تواند پايه خاصی را تبديل به خروجی می کند و آن را در حال 1 منطقی قرار می دهد. فرم کلی اين دستور به
صورت زير است:

HIGH Pinname
مثال:

HIGH PortB.0

LOW
از اين دستور نيز برای تغيير مقدار يک بيت استفاده می شود و مقدار آن را صفر می کند.همچنين اين دستور می
تواند پايه خاصی را تبديل به خروجی می کند و آن را در حالت 0 منطقی قرار می دهد. فرم کلی اين دستور به
صورت زير است:

LOW Pinname
مثال:

LOW ADCON0.ADON
.را صفر می کند ADCON0 از ثبات ADON دستور فوق بيت

TOGGLE
از اين دستور نيز برای تغيير مقدار يک بيت استفاده می شود و مقدار آن را معکوس می سازد يعنی اگر آن بيت 0
بوده آن را 1 می کند و بالعکس. همچنين اين دستور می توانداين دستور پايه خاصی را معکوس می سازد ( 1 را
به 0 و 0 را به 1 تبديل می کند) پايه مشخص شده به طور خودکار به يک پايه خروجی تبديل می شود. فرم کلی
اين دستور به صورت زير است:

TOGGLE Pinname
مثال:

TOGGLE PORTA.1
نکته:
اگر بخواهيم عددی را در مبنای هگز نشان دهيم ، يا در سمت راست عدد ، علامت H قرار می دهيم و يا در سمت
چپ آن 0x قرار می دهيم مانند (0x55 (يا ( 55H , (يعنی عدد 55 در مبنای هگز.
اگر بخواهيم عددی را در مبنای دو (باينری) نشان دهيم يا در سمت راست آن عدد علامت B قرار می دهيم و يا
در سمت چپ آن علامت % قرار می دهيم مانند (00011011 %)يا (000110011B) .

GOTO
اين دستور باعث می شود که برنامه به برچسب مشخص شده پرش کند و اجرای برنامه از آن برچسب ادامه می
يابد:

GOTO Label
در انتهای يک برچسب بايد علامت " : " قرار گيرد. مثال:

DIM A AS WORD

A = 0

loop:

A = A + 1

GOTO loop

WAITMS delay

WAITUS delay
WAITMS تاخيری بر حسب ميلی ثانيه ايجاد می کند و WAITUS تاخيری بر حسب ميکر ثانيه ايجاد می کند.
مثال:

WAITMS 10

WAITUS 50
اما دستورات read و write که به EEPROM مربوط می شوند.

READ
فرم کلی دستور :

READ Address,Var
با اين فرمان می توان محتويات حافظه EEPROM ( حافظه EEPROM داده نه برنامه) داخلی تراشه را که
آدرس آن در متغير Address ذخيره شده است را خواند. اطلاعات موجود در اين آدرس در متغير Var که از
نوع بايت است کپی می شود.
مقدار حافظه داده EEPROM تراشه 256 ، 16F876 PIC بايت است که از آدرس 00H شروع می شود و به
0FFH ختم می شود.
می توان آدرس حافظه EEPROM را در دستور فوق در مبنای هگز و يا دسيمال و يا باينری نوشت و يا به طور
غير مستقيم اين آدرس را با استفاده از يک متغير مشخص نمود:

DIM A AS BYTE

DIM B AS BYTE

DIM C AS BYTE

A = 10

READ A, B

READ 5, C
مجموعه دستورات فوق اطلاعات آدرس های 10 هگز و 5 هگز از حافظه داده EEPROM تراشه PIC را به
ترتيب درون متغيرهای C ,B می ريزد.

WRITE
فرم کلی اين دستور به صورت زير است :

WRITE Address,Value
اين دستور مقدار Value را در حافظه EEPROM داخلی تراشه که آدرس آن توسط متغير Address مشخص
شده است, می نويسد:

DIM A AS BYTE

DIM B AS BYTE

A = 10

B = 14

WRITE A, B

WRITE 11, B
داخلی تراشه مجموعه دستورات فوق عدد 14 را در آدرس های 10 هگز و 11 EEPROM هگز از حافظه
.می ريزد PIC

GOSUB
فرم کلی اين دستور : Label GOSUB
با اين دستور برنامه به برچسب Label پرش می کند. اين برچسب در واقع يک زير برنامه ( سابروتين) است. در
انتهای زير برنامه بايد دستور RETURN باشد تا برنامه به عبارتی که بعد از GOSUB قرار دارد برگردد.
مثالی از اين دستور در انتهای اين قسمت آورده شده.

IF … THEN…ELSE…END IF
اين فرمان يک آزمون مقايسه ای را انجام می دهد. اگر شرط مورد نظر برقرار بود برنامه به عبارت بعد از
THEN می رود در غير اينصورت به عبارت بعد از ELSE می رود و سپس دستور شرطی با IF END به
اتمام می رسد.مثال:

THEN 0 = IF PORTA.0

PORTB.0 = 1

ELSE

PORTB.0 = 0

ENDIF

IF……THEN
فرم کلی اين دستور به صورت زير است:

GOTO label THEN statement IF
اين فرمان نيز يک آزمون مقايسه ای انجام می دهد. اگر شرط مورنظر برقرار بود برنامه به برچسب label پرش
می کند در غير ايصورت برنامه به عبارت بعد از اين دستور می رود. اين دستور نيازی به IF END ندارد.
نکته:
اگر تمام بيت های ثبات های TRISD,TRISC,TRISB,TRISA صفرباشند پورت مربوط به آن ثبات به
عنوان خروجی انتخاب می شود و اگر مقدار آنها 1 باشد پورت مربوط به آن ثبات به عنوان ورودی شناخته می
شود.
به عبارت ديگر با مقدار دهی بيت های ثبات های ياد شده می توان پين مربوط به آن بيت را به عنوان خروجی يا
ورودی مشخص نمود. مثلا با دستور15=TRISB چهار بيت کم ارزش تر پورت B به عنوان ورودی شناخته می
شود و 4 بيت با ارزش تر به عنوان خروجی.
اما نکته ديگری که بايد رعايت شود اين است که ميکروکنترلرهای PIC که دارای 28 يا 40 پين هستند دارای
مبدل آنالوگ به ديجيتال داخلی هستند (می توانيد به ديتا شيت آن ها مراجعه کنيد) اين مبدل معمولا روی پورت A
ميکروکنترلر قرار دارد بنابراين قبل از اينکه از اين پورت استفاده کنيد بايد مشخص سازيد که اين پورت به
صورت آنالوگ است يا ديجيتال برای اين کار بايد ثبات ADCON1 مقدار دهی شود. ما در اين قسمت درباره
مبدل آنالوگ به ديجيتال داخلی اين ميکروها صحبت نمی کنيم لذا در اينجا فقط متذکر می شوم که هرگاه بخواهيم
تمام پين های پورت A به صورت ديجيتالی کار کنند بايد مقدار 7 دسيمال را درون ثبات ADCON1 ريخت.:

ADCON1 = 7
مقدار دهی به ثبات های ADCON و TRIS را در ابتدای برنامه انجام دهيد.
نکته:
اگر يک کاراکتر حرف يا عدد ميان دو گيومه قرار گيرد و به داخل متغيری ريخته شود ,در واقع کد اسکی آن
کاراکتر ريخته شده است مثلا دستور "F = "A کد اسکی حرف F را در متغير A قرار می دهد و يا دستور
"O = "PORTB کد اسکی حرف O را به پورت B ارسال می کتد.

END
اين دستور اجرای برنامه را خاتمه می دهد و باعث می شود که ميکرو کنترلر در حالت کاهش توان قرار گيرد.
ممکن است که در برنامه از کدهای اسمبلی استفاده شود که در اينصورت قبل از استفاده از آنها بايد از دستورزير
استفاده نمود:

ASM
مثال:

ASM: NOP

ASM:LABEL1: MOVLW 0xFF
دستورات منطقی و حسابی:

NOR AND + جمع

XOR OR - تفريق

XNOR NAND * ضرب

تقسيم / معکوس (مکمل) NOT

جذر ( ) SQR
مثال:

X = NOT A

X = A AND B

X = A OR B

X = A XOR B

X = A NAND B

X = A NOR B

X = A NXOR B

DIM A AS WORD

A = 3600

A = SQR(A)

A = A OR B

PORTB = PORTC AND %11110000
نکته:
1 -تمامی زير روال ها (زير برنامه ها) را بايد پس از دستور END وارد نمود.
" استفاده نمود . 2 -برای توضيحات برنامه بايد از کاراکتر ' "
:در انتها يک مثال از زيربرنامه می زنم
SYMBOL DISPLAY = PORTB.0
HIGH DISPLAY
GOSUB getadresult
END
getadresult:
LOW DISPLAY
RETURN
 
آخرین ویرایش:
عقب
بالا