خانه / آموزش میکروکنترلرهای AVR / آموزش برنامه نویسی پیشرفته BASIC – پورت سریال UART

آموزش برنامه نویسی پیشرفته BASIC – پورت سریال UART

آموزش برنامه نویسی پیشرفته BASIC – پورت سریال UART

ارتباطی سریال و قابل برنامه ریزی که در دو حالت نرم افزاری و سخت افزاری قابل تغییر است. این ارتباط بیشتر برای ارتباط با کامپیوتر طراحی شده اما منطق کار این ارتباط TTL است.

نکته : سطح ولتاژ در منطق TTL بین 0 تا 5 ولت بوده و در پروتکل RS-232 بین منفی 15 تا مثبت 15 ولت می باشد.

نکته : پایه های مورد استفاده در این ارتباط در میکروکنترلر AVR به نام TXD و RXD می باشد. در صورت استفاده از UART نرم افزاری, این پایه ها را می توان تغییر داد.

ارتباط بین میکرو کنترلر و استاندارد RS232

در صورت استفاده از ارتباط سریال uart بین میکرو کنترلر و استانداد RS232 باید از تراشه های تبدیل سطح ولتاژ استفاده کرد.

تراشه MAX232 و MAX233 : این تراشه ها برای انتقال اطلاعات بین استاندارد RS232 (کامپیوتر) و میکرو کنترلر AVR به کار می رود. لازم به ذکر است تنها تفاوت بین این دو نوع تراشه در این می باشد که برای راه اندازی تراشه MAX232 شما احتیاج به استفاده از چندین خازن دارید, اما در تراشه MAX233 احتیاج به استفاده از هیچ خازنی ندارید.

تراشه MAX235 : این تراشه برای میکروکنترلرهایی قابل استفاده هستند که دارای دو UART بوده با اینکه هم از UART سخت افزاری و هم نرم افزاری استفاده شده است.

آموزش برنامه نویسی پیشرفته BASIC – پورت سریال UART

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX232 به میکروکنترلر AVR:

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX232 به میکروکنترلر AVR

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX233 به میکروکنترلر AVR:

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX233 به میکروکنترلر AVR

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX235 به میکروکنترلر AVR:

نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX235 به میکروکنترلر AVR

UART سخت افزاری

در این حالت از پایه هایی استفاده می شود که در کاتالوگ میکروکنترلرها با نام RXD و TXD است. قبل از پیکر بندی و معرفی این ارتباط سریال باید سرعت و نرخ ارسال دیتا بین میکروکنترلر و هر سیستم دیگری برابر باشد تا دیتاهای صحیح بین آنها تبادل شود. به این نرخ باود  (Baud) گفته می شود که تعیین کننده سرعت بین دو سیستم است. نرخ باود همیشه تقسیمی از فرکانس میکرو تنظیم شود چون باعث کاهش خطای میکرو می شود.

:: تعیین نرخ باود

$ baud = x

در اول برنامه باید این نرخ تعیین شود.

X : مقادیر استاندارد مانند :1200-2400-4800-9600-19200-28800-38400-57600-115200

:: تعیین نرخ باود دوم

$baud1=x

در میکروهایی که دارای دو ارتباط سریال Uart هستند برای تعیین نرخ باود دوم استفاده می شود.

:: تغییر نرخ باود در برنامه

Baud = x

Baud1 = x

در صورتی که بخواهید با یک Uart میکرو با سیستم های مختلف ارتباط برقرار کنید و هر سیستم سرعت خاص خود را داشته باشد این دستورات کاربرد دارند. این دستورات برای دو Uart در هر جای برنامه سرعت نرخ را تغییر دهید.

نکته : سرعت Baud سیستم دریافت کننده و ارسال کننده باید برابر باشد.

:: پیکر بندی بافر Uart سخت افزاری برای ارسال دیتا

Config Serialout = Buffered , Size = x

این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های ارسالی از طریق این بافر به خروجی ارسال شود.

نکته : در صورت استفاده از Terminal Emulator می توان داده های ارسالی از میکرو را مشاهده کنید.

:: دستور ارسال دیتا به پورت سریال

Print var

Print “www.electronics98.com”

Print var ; “الکترونیک 98″

با این دستور شما می توانید به پورت سریال داده رشته یا عددی و یا هر دو را انتقال دهید.

:: دستور ارسال دیتا به پورت سریال به صورت باینری

Printbin var

این دستور متغیر var را به صورت باینری به پورت سریال ارسال می کند.

:: پیکر بندی بافر Uart سخت افزاری برای دریافت دیتا

Config Serialin = Buffered , Size = x

این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های دریافتی از طریق این بافر به میکرو وارد می شود.

:: دستور دریافت دیتا از پورت سریال

Var = waitkey()

با این دستور شما می توانید از پورت سریال داده رشته یا عددی دریافت کنید و در متغیر var قرار می دهد. اما این دستور تا کارکتری را دریافت نکند برنامه را متوقف می کند.

:: دریافت داده از پورت سریال

Var = inkey()

این دستور برنامه را متوقف نمی کند و اولین کارکتر دریافت شده از پورت سریال را به کد اسکی تبدیل کرده و در متغیر var می ریزد. در صورتی که داده ای برای دریافت وجود نداشته باشد عدد صفر را در var قرار می دهد.

نکته : متغیر var نمی تواند Bit و یا String باشد.

:: دریافت داده از terminal emulator

Input [ “data” ] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.

Input “لطفا رمز ورود خود را وارد نمائید : “, Pass

:: دریافت داده باینری از Terminal Emulator

Inputbin [ “data” ] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.

:: دریافت داده هگزاد سیمال از Terminal Emulator

Inputhex [ “data” ] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.

نکته : هر بایت مشخص کننده یک کارکتر است. پس زمانی که شما یک متغیر از نوع Byte را می خواهید ارسال یا دریافت کنید سیستم به تعداد کارکترها منتظر می ماند. برای مثال اگر از دستور input استفاده کرده اید و متغیر شما از نوع Integer می باشد در محیط Terminal Emulator تا دو کارکتر را تایپ نکنید داده ها ارسال و در میکرو دریافت نمی شوند.

$regfile = “m88def.dat”

$crystal = 8000000

$baud = 19200

Dim akey as byte

Print “hello , hit any alphanumerical key…”

Akey = waitkey()

Print akey

Wait 1

Print “but not the key you pressed.”

Dim inputstring as string * 12

Do

Akey = inkey()

Koop

End

UART نرم افزاری

در این حالت از پایه هایی استفاده می شود که شما به میکرو معرفی خواهید کرد. برای Uart نرم افزاری باید تمامی اطلاعات پایه های ارتباطی را شرح داد. از قابلیت های این ارتباط, استفاده از چندین کانال برای ارتباط سریال با سیستم های مختلف می باشد.

:: پیکر بندی Uart نرم افزاری

Open “compin : speed , data , parity , stopbits [ , inverted ]” for mode as # channel

Pin : نام پایه پورت.

Speed : سرعت نرخ ارسال دیتا.

Data : مشخص کننده تعداد بیت ارسال یا دریافتی با این پایه (7 یا 8 بیتی).

Parity : مشخص کننده خصوصیت دیتای ارسال یا دریافتی با این پایه (0 برای فرد – e برای زوج – n برای هر دو).

Stopbits : مشخصه ای که میزان فاصله بین دو داده ارسالی یا دریافتی را مشخص میکند (1 یا 2 بیت).

Inverted : این گزینه منطق ولتاژ ارتباط RS232 را معکوس می کند (در صورتی که در خروجی از بافر Not استفاده شده باشد کاربرد دارد).

Mode : ورودی یا خروجی بودن پایه را تعیین می کند. Input برای ورودی (RXD) و گزینه Output برای خرجی (Txd).

Channel : مشخص کننده عدد کانال.

:: تعیین نرخ باود در Uart نرم افزاری

$baud # channel , x

در اول برنامه این نرخ تعیین می شود.

X : مقادیر استاندارد مانند: 1200-2400-4800-9600-19200-28800-38400-57600-115200

:: تعیین نرخ باود دوم در Uart نرم افزاری

$baud1 # channel , x

در میکروهایی که دارای دو ارتباط سریال Uart هستند برای تعیین نرخ باود دوم استفاده می شود.

تغییر نرخ باود در برنامه برای Uart نرم افزاری

Baud # channel , x

Baud1 # channel , x

 در صورتی که بخواهید با یک Uart میکرو با سیستم های مختلف ارتباط برقرار کنید و هر سیستم سرعت خاص خود را داشته باشد این دستورات کاربرد دارند. این دستورات برای دو UART , در هر جای برنامه سرعت نرخ را تغییر دهید.

نکته : سرعت BAUD سیستم دریافت کننده و ارسال کننده باید برابر باشد.

:: خروج از کانال UART  نرم افزاری

CLOSE # CHANNEL

:: دستورات ارسال دیتا به پورت سریال نرم افزاری

PRINT # CHANNEL , VAR

Print # channel , “www.electronics98.com”

Print # channel , var; “الکترونیک 98″

با این دستور شما می توانید به پورت سریال داده شده رشته یا عددی و یا هر دو را انتقال دهید.

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

Printbin # channel , var

این دستور متغیر var را به صورت باینری به پورت سریال ارسال می کند.

:: دستور دریافت دیتا از پورت سریال نرم افزاری

Var = waitkey(# channel)

با این دستور شما می توانید از پورت سریال داده رشته یا عددی دریافت کنید و در متغیر var قرار می دهد. اما این دستور تا کارکتری را دریافت نکند, برنامه را متوقف می کند.

:: دریافت داده از پورت سریال نرم افزاری

Var = inkey(# channel)

این دستور برنامه را متوقف نمی کند و اولین کارکتر دریافت شده از پورت سریال را به کد اسکی تبدیل کرده و در متغیر var می ریزد. در صورتی که داده ای برای دریافت وجود نداشته باشد عدد صفر را در war قرار می دهد.

نکته : متغیر var نمی تواند Bit و یا String باشد.

:: دریافت داده از Terminal Emulator

Input # channel , [ “data” ] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار  Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه , با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.

:: دریافت داده باینری از Terminal Emulator

Inputbin # channel , [ “data” ] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator , مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه, با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط  Terminal Emulator نمایش دهید.

:: دریافت داده هگزاد سیمال از Terminal Emulator

Inputhex # channel , [ “data”] , var [ noecho ]

با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.

Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.

Data : متنی که می توانید قبل از دریافت داده در محیط Rerminal Emulator نمایش دهید.

نکته : هر بایت مشخص کننده یک کارکتر است پس زمانی که شما یک متغیر از نوع Byte را می خواهید ارسال یا دریافت کنید سیستم به تعداد کارکترها منظر می ماند. برای مثال اگر از دستور Input استفاده کرده اید و متغیر شما از نوع Integer می باشد در محیط Terminal Emulator تا دو کارکتر را تایپ نکنید داده ها ارسال و  در میکرو یافت نمی شوند.

$regfile = “m88def.dat”

$crystal = 8000000

$baud = 19200

Dim b as byte

Waitms 100

Open “comc.a:19200,8,n1″for output as # 1

Print#1 , “serial output”

Open “comc.2:19200,8,n,1” for input as # 2

Print # 1 , “press any alpha numerical key”

Do

B = inkey(#2)

If b > 0 then

Print #1, chr (b)

End lf

Loop

Close #2

Close #1

End

 موسسه خیریه حمایت از کودکان مبتلا به سرطان

 دسته اصلی : زبان برنامه نویسی BASIC

 نویسنده : electronics98

 تاریخ انتشار :

یک دیدگاه

  1. مطالب شما کاربردی قابل فهم و به انسان جرات فراگیری رو میده ممنون زحمت کشیدید

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *




مطلب پیشنهادی

I2C-AVR

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C

آموزش برنامه نویسی پیشرفته BASIC – ارتباط سریال I2C پایه های مورد استفاده پروتکل I2C …