سجاد صادقی

اموزشی

سجاد صادقی

اموزشی

VC++ و VB ارتباط سریال کامپیوتر و میکروکنترلر با استفاده

عنوان مقاله :

VC++ و VB ارتباط سریال کامپیوتر و میکروکنترلر با استفاده از

ارائه دهنده :سجاد صادقی

دانشجوی برق دانشگاه آزاد سبزوار

مقدمه :

در این مقاله سعی در تشریح چگونگی کار با پورت سریال و ایجاد ارتباط بین دو

کامپیوتر و یا کامپیوتر و میکروکنترلر را داریم.

همچنین چگونگی ارتباط با مودم و انتقال اطلالالالاعات از طریق آن بررسی شده است . در

استفاده ACTIVEX و یا کنترل های API برای ارتباط با روالهای VB اینجا ما از

نیز صادق VC++ کرده ایم که البته توضیحات ذکر شده در زبانهای دیگری مانند

میباشد .که به تشریح آن خواهیم پرداخت

-------------------------------------

در این مقاله سعی در تشریح چگونگی کار با پورت سریال کامپیوتر و ارتباط آن با کامپیوترهای دیگر و یا با

میکروکنترلر را داریم.

برای ارتباط با روالهای VB همچنین چگونگی ارتباط با مودم و انتقال اطلاعات از طریق آن بررسی شده است . در اینجا ما از

VC++ استفاده کرده ایم که البته اکثر توضیحات ذکر شده در زبانهای دیگری مانند ACTIVEX و یا کنترل های API

نیز صادق میباشد .که به تشریح آن خواهیم پرداخت .

نامیده میشوند . و هر Com١,Com٢,Com هر کامپیوتر دارای تعدادی پورت سریال میباشد که به ت رتیب به نامهای ,, ٣

و اسکنر به COM کدام ممکن است که برای ارتباط با وسیله خاصی در نظر گرفته شود . مثلاممکن است موش به ١

متصل شود . پورت PC و هر دستگاه سریال دیگری نیز به همین صورت بروی یکی از پورتهای سریال نصب شده در COM٢

به روش سریال نمونه ای از نحوه ارتباط I/O. سریال کانالی برای انتقال اطلاعات و دریافت آن به صورت بیت به بیت است

بین دو وسیله استفاده می شود این روش (ONE TO ONE) حمایت شده توسط ویندوز است این روش هنگام ارتباط

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

بسیار شبیه کار با فایلها میباشد . همچنین ویندوز دارای توابعی برای باز یا بسته کردن و دستکاری مشخصات API روالهای

را به زبان پورت ترجمه نمود و آنرا به فرم CPU پورت میباشد . برای کار با پورت سریال توابعی موجود است تا بتوان اطلاعات

بیت به بیت درآورد تا برای ارسال آماده شوند همچنین در حالت دریافت اطلاعات نیز با کنار هم قرار گرفتن این بیتها یک

برای پردازش فرستاده میشود . البته این فرایند توسط لایه های مختلفی صورت میگیر د ویندوز CPU بایت ایجاد شده و به

دیگر API استفاده میکند. البته با وجود روالهای COMM.DRV برای کار با پورت سریال از یک درایور انتقال سریال بنام

نیازی به چنین ارتباطهای سطح پائینی برای برنامه نویس احساس نمیشود . به عنوان یک برنامه نویس بسته به نیاز خود

مهم و API استفاده نمائید . در این مقاله ما به ذکر برخی از روالهای ACTIVEX و یا از یکسری API میتوانید از روالهای

خواهیم پرداخت درانتها COMM بنام ٣٢ VISUAL STADIO PRO ارئه شده همراه با ACTIVEX توضیح یک

نیز به طریقهارتباط با میکروکنترلر خواهیم پرداخت .

. COMM قدم اول : ایجاد ارتباط با پورت سریال توسط ٣٢

کردن آنها set گنجانده شده است که با property یکسری COMM برای شروع به کار و دسترسی به پورت توسط ٣٢

ها میپردازیم. property میتوان پورت را آماده دسترسی نمود . در زیر به توضیح این

mscomm١.Comport=[value] کردن شمارهپورت Set - ١

١٦ باشد. اگر پورتی با شمارهمورد - مینماید. این مقدار میتواند بین ٠ SET شماره پورت مورد نظر را property این

نظر شما موجود نباشد یک خطا رخ میدهد که میتوان از آن برای اطمینان از انجام کار سود برد.

mscomm١.setting = [string value] کردن مشخصات پورت set - ٢

امکان تعریف مشخصات پورت را میدهد .این مشخصات بایستی به صورت یک رشته تعریف شود.این رشته property این

میباشد boud rate , parity bit , data bit ,stop bit شامل تعریف

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

Boud rate

110 –300 –600 –1200 – 2400 – 4800 – 9600( defult ) –14400- 19200 – 28800

38400 – 56000 – 57600 - 115200 - 128000 - 256000

Parity bit M ( mark) – E ( even ) – N ( none( defult ) ) – O ( odd ) - S ( space )

Data bit 4 – 5 – 6 – 7 – 8 ( defult )

Stop bit 1( defult ) 1.5 2

portopen = [value bolean] - ٣

FALS پورت مورد نظر باز شده و در اختیار ما قرار می گیرد .برای قطع ارتباط این خاصیت را TRUE کردن آن به set با

نشود ( موجود نبودن پورت ) با باز کردن پورت یک خطا رخ میدهد set درست comport میکنیم . اگر شماره پورت در

که میتوان با چک کردن آن درستی عمل را تست نمود.

‘ Open the serial port

MSComm1.CommPort = 2

MSComm1.Settings = “9600,N,8,1”

MSComm1.PortOpen = True

قدم دوم : سازماندهی و تنظیمات مورد نیاز .

تنظیم بافرهای ورودی وخروجی : وقتی که شما یک پورت را باز میکنید دو بافر ورودی و خروجی ایجاد میشود این

وجود دارد . property بافرها نگهدارنده اطلاعات ورودی وخروجی میباشند .برای سازماندهی این بافرها تعدادی

برای تعیین مقدار حافظه بافر برای ورودی و خروجی میباشد . افزایش مقدار Inbuffersize و Outbuffersize

این حافظه ها باعث احتمال کاهش حافظه برای برنامه میشود البته با وجود کامپیوترهای امروزی نیازی به نگرانی نیست

استفاده نمایید . hand shaiking میشود مگر اینکه از over flow .کاهش این مقدار نیز باعث بروز

-----------------------------------------------------------------------------------------

Rthershold , Sthershold

oncomm کردن و برگرداندن حداقل تعداد کاراکترهای قابل قبول در بافر خروجی قبل از رویداد set ’ وظیفه Sthershold

در oncomm را دارد مثلا ٠ کردن آن باعث غیر فعال شدن رویداد commevsend به مقدار commevnt و تغییر مقدار

برابر این مورد میشود و ١ کردن آن باعث رویدادن آن در زمان خالی شدن بافر میشود .برای توضیحات بیشتر به توضیحات

مراجعه نمائید . oncomm رویداد

و oncomm کردن و برگرداندن تعداد کاراکترهای موجود در بافر ورودی قبل از ایجاد رویداد set ’ وظیفه Rthershold

را دارد . commevrecive به مقدار commevnt تغییر مقدار

-----------------------------------------------------------------------------------------

Inputlen

میباشد. قرار دادن ٠ در آن باعث خواندن تمام محتویات بافر input کننده و برگرداننده طول رشتهخوانده شده توسط Set

گیرنده میشود.

Eofenable

یک رویداد eof میباشد و با ١ کردن آن با رسیدن به (^Z - str$(٢٦)) end of file نشانگررسیدن به یک رشته

رخ خواهد داد. oncomm

اداره کردن بافرهای ورودی و خروجی

میتوانید بر property همانطور که گفته شد بافرهای ورودی و خروجی هنگام ایجاد یک پورت ایجاد میشود. شما با یکسری

دریافت کنید. text با binary رفتار این بافرها کنترل داشته باشید. شما میتوانید اطلاعات را به صورت

Input

این خاصیت برای ذخیره کردن و بازیابی اطلاعات درون بافر ورودی بکار میرود. مثلا اگر میخواهید اطلاعات رسیده را در یک

text١.text = mscomm١.input : نشان دهید text box

معین کنید . inputlen نکته : ابتدا بایستی طول رشتهمورد نظر را با

Inputmode

دریافت کنید این کار را با استفاده از text با binary برای تعین فرمت ورودی بکار میرود شما میتوانید اطلاعات را به صورت

انجام پذیر است . در این صورت comminputmodebinary یا comminputmodetext به نامهای vb ثابتهای

و یا باینری در یک آرایهباینری ذخیره میشود . text اطلاعات به صورت

Inbuffercount

بیانگر تعداد بایتهای رسیده می باشد همچنین با صفر کردن آن بافر ورودی پاک میشود

بافر فرستنده ----------------------------

Output

را ارسال text با binary شما میتوانید input از این خاصیت برای ارسال اطلاعات یا دستورات استفاده نمود .مانند خاصیت

انجام دهید . text با binary کنید این کار را میتوانید با استفاده از تعریف مقادیر به صورت

مثال:

MSComm1.Output = "ATDT 111-111111" Send an AT command

MsComm1.Output = "This is a text string" Send a text string

MSComm1.Output = Out Send Byte array data

به بخش ارتباط با مودم مراجعه کنید . AT نکته : برای آشنائی با دستورات

Outbuffercount

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

-----------------------------------------------------------------------------------------

Hand Shaiking دستدهی

یک بخش مهم در سازماندهی بافرهای ورودی وخروجی اطمینان از صحت اطلاعات رسیده و اطلاعات ارسالی است و اطمینان

با استفاده ار بروتکل ارتباطی Hand Shaiking . نشده است (over flow) از اینکه سرعت در اطلاعات رسیده باعث سرریز

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

(comnone) شما بایستی که پروتکل مورد نیاز را تعیین کنید. این پروتکل در حالت عادی غیر فعال است

Setting Value Description

ComNone 0 No handshaking (Default).

ComXOnXOff 1 XOn/XOff handshaking.

ComRTS 2 RTS/CTS (Request To Send/Clear To Send)

handshaking.

ComRTSXOnXOff 3 Both Request To Send and XOn/XOff handshaking.

هردو comRTSXOnXOff انتخاب پروتکلها بستگی زیادی به دستگاهی که میخواهید ب ه آن متصل شوید دارد با انتخاب

پروتکل حمایت میشوند

کنید وکر نه شما true را rtsenable کنید باید که خاصیت set نکته : اگر شما این خاصیت را به هر کدام از مقادیر ١ و ٢

قادر به دریافت اطلاعات نخواهید بود .

Rtsenable = [bolean]

استفاده شده و وجود این خاصیت به شما rtc/cts در دستدهی rtsمیگردد پایه rtsشدن پایه high این خاصیت باعث

اجازه میدهد که به صورت دستی این کار را انجام دهید

Dsrholding .

است این سیگنال از طرف فرستنده برای اعلام آمادگی خود فرستاده میشود . dsr تشخیص دهندهوضعیت پایه

Dtrenable

میشود low و با بسته شدن آن high با باز شدن پورت Dtr خط true کردن آن به set با

Setting Description

True Enable the Data Terminal Ready line.

False (Default) Disable the Data Terminal Ready line.

مودم میشویم . hangup نکته: در اکثر مواقع با ٠ کردن این خاصیت باعث

Ctsholding

این کار را انجام میدهد. این cts این خاصیت تشخبص دهندهآمادگی برای ارسال اطلاعات میباشد که با چک کردن پایه

پایه ورودی است و ار طرف فرستنده ارسال میشود

Setting Description

True Clear To Send line high.

False Clear To Send line low.

Parityreplace ----------------------------------------------------

است. این کاراکتر در حالت معمول parity کننده و برگردانندهکاراکتر جایگزین در هنگام رخداد خطای set این خلصیت

کنید ویا با مقدار دهی "" آنرا غیر فعال کنید . set برابر ؟ است ولی شما میتوانید به هر کاراکتر دیگر آنرا

Commevent و خاصیت Oncomm رخداد

و خاصیت Oncomm در هنگام اجرای برنامه شما بایستی به رویدادهای مختلف یا خطاهای ایجاد شده ت وجه نمایید رخداد

به شما اجازه بدام انداختن و چک کردن رخدادها و خطاهای گوناگون را میدهد . در هنگام رخ دادن خطا Commevent

تغییر میکند. بنابراین شما میتوانید با تست این خاصیت commevent اجرا شده و مقدار خاصیت oncomm یک رویداد

متوجه عملکرد برنامه شوید

نشان میدهد . commevent . جدول زیر مقادیر خطاها در

Constant Value Description

ComEventBreak 1001 A Break signal was received.

ComEventFrame 1004 Framing Error. The hardware detected a framing error.

ComEventOverrun 1006 Port Overrun. A character was not read from the hardware

before the next character arrived and was lost.

ComEventRxOver 1008 Receive Buffer Overflow. There is no room in the receive

buffer.

ComEventRxParity 1009 Parity Error. The hardware detected a parity error.

ComEventTxFull 1010 Transmit Buffer Full. The transmit buffer was full while

trying to queue a character.

ComEventDCB 1011 Unexpected error retrieving Device Control Block (DCB)

for the port.

نشان میدهد . commevent جدول زیر مقادیر رویدادها را در

Constant Value Description

ComEvSend 1 There are fewer than Sthreshold number of characters in the

transmit buffer.

ComEvReceive 2 Received Rthreshold number of characters. This event is

generated continuously until you use the Input property to

remove the data from the receive buffer.

ComEvCTS 3 Change in Clear To Send line.

ComEvDSR 4 Change in Data Set Ready line. This event is only fired

when DSR changes from 1 to 0.

ComEvCD 5 Change in Carrier Detect line.

ComEvRing 6 Ring detected. Some UARTs (universal asynchronous

receiver-transmitters) may not support this event.

ComEvEOF 7 End Of File (ASCII character 26) character received.

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

ارتباط با مودم -------------------------

یکی از کاربردهای جالب پورت سریال استفاده از آن برای ارتباط با مودم میباشد مثلا میتوانید با آن شماره گیری کنید و یا

اطلاعات را از طریق خط تلفن ارسال و یا دریافت نمایید. مثلا برای شماره گیری با آن میتوانید از این دستور استفاده کرد.

MSComm1.Output = "ATDT 0571-2642332" & vbcr

شماره گیری به روش تن است . در حالت ارتبا ط با با یک T و dialingنشاندهنده D اغازگر ارتباط است AT در این مثال

است. okشبکه بایستی از یک کاراکتر برگشتی نیز استفاده نمود .اگر شماره گیری درست انجام شود برگشتی تابع

به صورت زیر است . AT دیگر دستورات همراه

D ( dialing ) شماره گیری

T استفاده از سیستم تن

P استفاده از سیستم پالس

وقفه در شماره گیری ,

وقفه در شماره گیری به مقدار ٥. ثانیه !

H مودم میشود Hang up باعث

مثال : ارسال و دریافت یک فایل از طریق مودم

Dim Offset As Long : بخش فرستنده

Dim FileData As Byte

Dim FileName As String

Private Sub Form_Load()

MSComm1.Settings = "28800,N,8,1"

MSComm1.InputLen = 1

MSComm1.CommPort = 2

MSComm1.PortOpen = True

Offset = 1

Open FileName For Binary Access Read As #1

End Sub

Private Sub MSComm1_OnComm()

If MSComm1.CommEvent = 2 Then

temp = MSComm1.Input

If Offset <= FileLen(FileName) Then

Get #1, Offset, FileData

q = FileData

MSComm1.Output = Format(q, "000")

Offset = Offset + 1

End If

End If

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close #1

End Sub

Dim ByteCount As Long : بخش گیرنده

Dim FileData As Byte

Private Sub Form_Load()

MSComm1.Settings = "28800,N,8,1"

MSComm1.InputLen = 3

MSComm1.CommPort = 1

MSComm1.PortOpen = True

Open "c:\sample.txt" For Binary Access Write As #1

End Sub

Private Sub MSComm1_OnComm()

If MSComm1.CommEvent = 2 And MSComm1.InBufferCount > 0 Then

FileData = CInt(MSComm1.Input)

ByteCount = ByteCount + 1

Put #1, ByteCount, FileData

MSComm1.Output = Chr$(26)

End If

End Sub

Private Sub Command1_Click()

MSComm1.Output = Chr$(26)

End Sub

Private Sub Form_Unload(Cancel As Integer)

Close #1

End Sub

توضیح پایه های پورت سریال

9-pin 25-pin توضیح پایه نام پایه

3 2 TD

Transmit data ارسال کنندهاطلالالالاعات

2 3 RD

Receive data گیرندهاطلالالالاعات

7 4 RTS

Request to send آماده برای ارسال

8 5 CTS

Clear to send آمادهدریافت اطلالالالاعات

6 6 DSR

Data set ready گیرنده متصل شده و آماده است

5 7 GND

Signal ground زمین

4 20 DTR

Data terminal ready فرستنده آماده است

ارتباط میکروکنترلر و کامپیوتر از طریق پورت سریال .

با RS بایستی از یک رابط سخت افزاری برای تطابق سطح سیگنال ٢٣٢ RS برای ار تباط با میکرو از طریق پورت سریال ٢٣٢

استفاده DS و ی ا ٢٧٥ MAX یا ٢٣٣ MAX استفاده نمود برای این کار می توان از تراشه هایی مانند ٢٣٢ TTL سطح

بکار برد . RS نمود طرح ارائه شده در زیر را میتوان برای ارتباط میکرو با ٢٣٢

نمود DS مدار ارائه شده در زیر را نیز میتوان به راحتی جایگزین تراشه٢٧٥

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

و دیگر تنظیمات لازم داریم که توسط میکرو و کامپیوتر حمایت شده باشد BOUD RATE تنظیم

.برای تنظیم این مقدار در کامپیوتر با توجه به توضیحات قبلی بایستی :

MSComm1.Settings = "9600,N,8,1"

نمود.. set را به مقدار دلخواه در میکرو و کامپیوتر Parity bit - Data bit - Stop bit البته میتوان مقادیر

برای تنظیمات لازم در میکرو کنترلر به مثال زیر توجه نمائید .

ORG 00

DB 1, 2 , 3, 4, 5, 0

ORG 100

MOV TMOD,#20H timer1 , mode 2 ( auto reload )

MOV TH1,#0FAH 4800 baud rate ( with xtall = 11.0592 mhz )

MOV SCON,#50H 8 bit , 1 stop , ren enable

SETB TR1 run timer 1

MOV DPTR,#00H load data pointer to transfer data

LL1:

CLR A

MOVC A,@A+DPTR load ACC with data

JZ LL2 test for 0 data ( end data )

CALL SEND call sender data function

INC DPTR inc data poniter

JMP LL1

SEND:

MOV SBUF,A load SBUF with data and send it

LL3:

JNB T1,LL3 wait for end send

RET

LL2:

END

--------------------------------------------------

مثال ارائه شده در بالا طرح ساده ای از ارسال چند عدد به کامپیوتر می باشد . همچنین شما میتوانید اطلاعات را به همین

صورت به میکرو منتقل نما ئید .

برای آشنا ئی بیشتر با ارتباط سریال در میکرو کنترلر می توانید به کتابهای موجود در این زمینه و یا أدرس اینجانب مراجعه

نمائید .

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

سجاد صادقی 

E_MAIL > sajad1995si@yahoo.com

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد