• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

mscomm کار با توابع

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
با سلام

کسی با توابع mscomm1 برای ارتباط با پورت سریال کامپیوتر کار کرده است؟
این تابع رشته های کاراکتری را ارسال می کند اما من نمی دونم چطور اعداد را ارسال کنم!
به نظر می رسد این تابع فقط string را ارسال می کند.
از دوستان کسی راهی سراغ دارد؟
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد
شما با تابع cstr ميتونيد اعداد تون را به استرينگ تبديل كنيد و با كمك دستور شم انها را دوباره به عدد تبديل كنيد

اميدوارم كمك كنه
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام سعید جان

روش شما قابل اجرا است اما مشکل من از آنجا شروع می شود که در ارسال string تعداد بیتهای بیشتری نسبت به روش اعداد ارسال می شود
به عنوان مثال اگر بخواهیم عدد 100 را ارسال کنیم چنانچه این عدد را به صورت رشته ای در آوریم وی بی 3 کاراکتر 1 و 0 و 0 را ارسال می کند اما چنانچه 100 را به صورت عدد ارسال کنیم فقط یک بار دیتا ارسال می شود نه سه بار!
( 100 به صورت باینری فقط 7 بیت است ! )
امیدوارم مشکل من هر چه زودتر حل شود
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد
نميدونم ايا روش ديگري براي ارسال اعداد وجود داره يا نه ؟
اما اگر بخواهيم اين محدوديت بايتي را حل كنيم فكر كنم استفاده از اين دوتا تابع كه يكي عدد رو به استرينگ و ديگري استرينگ رو به عدد تبديل ميكنه مفيد باشه . در واقعه تابع اوال اعداد را به مد 255 ميبره و كد هاي اسكي رو تبديل به بايت ميكنه و پشت سر هم ميچينه و ديگري اين بايت ها را به كد اسكي تبديل كرده و دوباره عداد را از مبناي 255 به مبناي 10 بر ميگردونه

کد:
Function cInt2Str(myNum As Double) As String
Dim r As Double
Dim i As Double
Dim j As Double
Dim TempStr As String
i = 1
r = Int(myNum / 256)
While r > 0
    i = i + 1
    DoEvents
    r = r / 256
Wend
TempStr = ""
For j = 1 To i
    TempStr = TempStr & Chr(myNum Mod 256)
    myNum = Int(myNum / 256)
Next
cInt2Str = TempStr
End Function
Function CStr2Int(TempStr As String) As Double
Dim r As Double
Dim i As Double
Dim j As Double
i = Len(TempStr)
If i = 0 Then Exit Function
r = 0
For j = i To 1 Step -1
    r = r * 256 + Asc(Mid(TempStr, j, 1))
Next
CStr2Int = r
End Function

ميتونيد از مثال زير براي چك كردن استفاده كنيد
عدداي كه 5 بايت جا ميگرفت را در 3 بايت جا داده است
و يا همين عدد 100 را در 8 بيت يا يك بايت جا ميدهد
کد:
Private Sub Command1_Click()
Dim myNum As Double
Dim mynum2 As Double
Dim myStr As String
Dim SendStr As String
myNum = 94562
SendStr = cInt2Str(myNum)
mynum2 = CStr2Int(SendStr)
MsgBox mynum2
End Sub

اميدوارم كمك كنه
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
با تشکر از راهنمایی دوست خوبم آقا سعید عزیز
امیدوارم که راه حل شما راه گشا باشد
اما من در تعجبم از اینکه چرا vb راه حلی برای یک چنین مشکل ساده ای ندارد!
آیا همه کسانی که با vb کار می کنند می بایست این چنین خود را به درد سر بیندازند؟!!!!
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام
خوب هستيد
تا جايي كه من ميدونم چون mscomm1 از پروتكلي مثل tcpip استفاده ميكنه و از همين دسته كلاس براي ارتباط استفاده ميكنه
و بر اساس قانون ارث بري تنها ميتونه از يك نوع داده پشتيباني كنه يعني بايت !!!
شما وقتي استرينگ رو به عنوان ورودي جهت ارسال به اين ابجكت ميدين وي بي اون را بايت به بايت ميفرسته
يعني 7 بيت به عنوان داده و يك بيت به عنوان سر شمار كه در حالتي كه كانكشن مثل udp باشه از هر 8 بيت استفاده ميكنه و سر شمار نداره ( منظور هم.ن پاكت ها هستند ).
پس مشكل از وي بي نيست . !!! نوع پروتكل مشخص كننده است

اميدوارم كمك كنه
 

shockley

Registered User
تاریخ عضویت
28 نوامبر 2005
نوشته‌ها
287
لایک‌ها
4
کنترل Mscomm از پروتکل RS-232c استفاده میکنه و نوع فریمی که در این استاندارد تعریف شده 5 تا 8 بیت دیتای باینری به اضافه ی یک بیت توان و یک بیت شروع و پایانه، پس Mscomm هم باید داده ی باینری رو پشتیبانی بکنه که میکنه!
اینجا رو مطالعه کنید: MSDN میگه که برای ارسال باینری یه بافر UART پورت سریال باید از آرایه ی بایتی استفاده کنید.
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
43
محل سکونت
یه خورده اونورتر
مطمئن نیستم ولی شاید با تنظیم خاصیت OutputBufferSize و فرستادن بصورت بایتها، بشه مشکل رو حل کرد:

کد:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Sub Form_Load()
Dim buffer(3) As Byte ' 4 bytes
Dim val As Long
val = 12345
' copy from val to buffer
CopyMemory buffer(0), val, 4&
MSComm1.OutBufferSize = 4 ' set output buffer size before opening port
MSComm1.PortOpen = True ' open port
MSComm1.Output = buffer ' send buffer (4 bytes)
End Sub
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
با سلام به همه دوستان عزیز
عید بر شما مبارک باد

مشکل رو دریافتم
می بایست خاصیت inputmode را به مقدار cominputmodebinary تغییر دهیم تا دیتا را به صورت باینری فرستاده شود

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

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
آقای shockley صحیح می فرمایند

می بایست آرایه بایتی را برای ارسال تعریف کرد اما این ارور توسط vb ارسال می شود

Run-time error "380
invalid property value

دستورات نوشته شده:

dim out(5 to 10) as byte
mscomm1.output=out(5)
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
43
محل سکونت
یه خورده اونورتر
آقای shockley صحیح می فرمایند

می بایست آرایه بایتی را برای ارسال تعریف کرد اما این ارور توسط vb ارسال می شود

Run-time error "380
invalid property value

دستورات نوشته شده:

dim out(5 to 10) as byte
mscomm1.output=out(5)
سعی کنید اندیس آرایه رو از 0 شروع کنید...البته فکر میکنم مشکل اصلی این باشه: آرایه رو بدون اندیس بعنوان خروجی ارسال کنید:
mscomm1.output=out
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام بلا جان مشتاق دیدار

بدون اندیس استفاده کردم فعلا که ارور نمی ده ( گوش شیطون کر ) اما من متعجبم چطور ممکنه بدون اندیس جواب بده؟!!!!!
مثلا out"(5)=10 باشه بعد برای ارسال اون بدون اندیس ( out ) استفاده شود!
باید بیشتر روش کار کنم انشاءالله که درست باشه
چیزی که برای من هم اکنون قطعی شده اینه که هم باید توی مد باینری ست شود و هم از آرایه بایتی استفاده شود

به هر حال از راهنماییهای شما و سایر اساتید بسیار سپاسگذارم
 

Xoex

Registered User
تاریخ عضویت
25 اکتبر 2006
نوشته‌ها
180
لایک‌ها
25
سلام بلا جان مشتاق دیدار

بدون اندیس استفاده کردم فعلا که ارور نمی ده ( گوش شیطون کر ) اما من متعجبم چطور ممکنه بدون اندیس جواب بده؟!!!!!
مثلا out"(5)=10 باشه بعد برای ارسال اون بدون اندیس ( out ) استفاده شود!
باید بیشتر روش کار کنم انشاءالله که درست باشه
چیزی که برای من هم اکنون قطعی شده اینه که هم باید توی مد باینری ست شود و هم از آرایه بایتی استفاده شود

به هر حال از راهنماییهای شما و سایر اساتید بسیار سپاسگذارم

سلام دوست عزیز. با این mscomm کار نکردم اما این چیزی که شما گفتید
به نظر میرسه پراپرتیه output در این حالت آرایه ای از بیتها رو دریافت می کنه. در اینصورت دادن ( out(5 درست نیست. این دستور فقط یک بایت میده. اما اگه طولشو 1 بگیرید مشکلی نیست. اما اگه بخواید یک بایت تکی بفرستین و فقط آرایه قبول کنه باید آدرس مثلا اندیس 6 رو بدین تا اون فکر کنه آرایه از اونجا شروع میشه.
اگه مشکل حل نشد بگین تا کمک کنم
 

balabala

کاربر قدیمی پرشین تولز
کاربر قدیمی پرشین تولز
تاریخ عضویت
22 می 2005
نوشته‌ها
8,362
لایک‌ها
5,745
سن
43
محل سکونت
یه خورده اونورتر
سلام دوست عزیز. با این mscomm کار نکردم اما این چیزی که شما گفتید
به نظر میرسه پراپرتیه output در این حالت آرایه ای از بیتها رو دریافت می کنه. در اینصورت دادن ( out(5 درست نیست. این دستور فقط یک بایت میده. اما اگه طولشو 1 بگیرید مشکلی نیست. اما اگه بخواید یک بایت تکی بفرستین و فقط آرایه قبول کنه باید آدرس مثلا اندیس 6 رو بدین تا اون فکر کنه آرایه از اونجا شروع میشه.
اگه مشکل حل نشد بگین تا کمک کنم
دقیقا توضیحات Xoex درسته کورش جان. برای فرستادن کل آرایه، فقط باید اسم آرایه رو داد. برای فرستادن یک باید از آرایه، باید اندیس هم گذاشت.
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام دوستان

روشهای بالا رو هم امتحان کردم متاسفانه جواب نداد
توی یه کتاب دیدم که می بایست آرایه بایتی رو در یک متغیر ذخیره کرد سپس آن را روی پورت فرستاد
کد آن به صورت زیر است:

dim bytestosend( o to 1) as byte
dim buffer as variant
butestosend(0)=&h4a
bytestosend(1)=&h23
buffer=bytestosend() w
mscomm1.output=buffer
خوب نظر دوستان چیه؟

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

Xoex

Registered User
تاریخ عضویت
25 اکتبر 2006
نوشته‌ها
180
لایک‌ها
25
سلام دوستان

روشهای بالا رو هم امتحان کردم متاسفانه جواب نداد
توی یه کتاب دیدم که می بایست آرایه بایتی رو در یک متغیر ذخیره کرد سپس آن را روی پورت فرستاد
کد آن به صورت زیر است:

dim bytestosend( o to 1) as byte
dim buffer as variant
butestosend(0)=&h4a
bytestosend(1)=&h23
buffer=bytestosend() w
mscomm1.output=buffer
خوب نظر دوستان چیه؟

این روش رو هم یه تست کردم ولی فکر کنم جواب نده.
باید بیشتر تست کنم
روز یک شنبه نتیجه رو به دوستان می گم
تست کن اگه درست شد که حرفی نیست
من یک نگاه سریع کردم ، output یک نو واریانت رو دریافت میکنه و تو توضیحش گفته یک رشته رو میفرسته
خوب این واضحه که فرستادن یک رشته چیه. فکر نمیکنم تو ارسال رشته مشکلی داشته باشی. حالا مشکل تو ارسال عدده.
اگه عددی که میخوای بفرستی حداکثر یک بایت باشه که کار خیلی راحته
کد:
mscomm1.output= chr$(1) & chr$(2)
مثلا کد بالا عدد 1 و بعد عدد 2 رو میفرسته. یعنی 2 تا عدد پشت هم. اگه بخوای دو بایت بفرستی باید بایت ها رو جدا کنی
کد:
i = 32540
mscomm1.output= chr$(i \256) & chr$(i mod 256)
البته این برای یک عدده. برای آرایه اگه از روش تبدیل آرایه به واریانت هم استفاده کنی همین میشه. اگه بخوای آرایه رو توی یک رشته هم با api کپی کنی باز هم همینه.
در هر صورت دیگه نباید مشکلی داشته باشی! بای
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
سلام خوب هستيد
korosh_majd عزيز
شما ايا از توابعي كه معرفي كردم استفاده كرديد .منظورم فانكشن هاي كه معرفي كردم ؟
بدون تغيير نوع ورودي فقط كافي از اين دستور استفاده كنيد
کد:
Private Sub Send_data()
	Dim myNum As Double
	myNum = 94562
	SendStr = cInt2Str(myNum)
	mscomm1.output=SendStr
End Sub
و براي دريافت هم از تابع زير
کد:
Private Sub MSComm1_OnComm()
	Dim sData As String  ' Holds our incoming data
	Dim myNum As Double  ' Holds our numbric data 
	If MSComm1.CommEvent = comEvReceive Then
	    sData = MSComm1.Input    
	    mynum = CStr2Int(sData)
	End If
End Sub
و توي قسمت لود فرم هم اين ها بايد ست بشن
کد:
Private Sub Form_Load()
	MSComm1.Settings = "2400,N,8,1"
	MSComm1.DTREnable = False
	MSComm1.CommPort = 1
	MSComm1.PortOpen = True
End Sub
همچنين دوتا تابعي كه قبلا نوشتم هم بايد به كدها اضافه بشن
يعني كل كد ميشه
کد:
Private Sub Form_Load()
	MSComm1.Settings = "2400,N,8,1"
	MSComm1.DTREnable = False
	MSComm1.CommPort = 1
	MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
	Dim sData As String  ' Holds our incoming data
	Dim myNum As Double  ' Holds our numbric data 
	If MSComm1.CommEvent = comEvReceive Then
	    sData = MSComm1.Input    
	    mynum = CStr2Int(sData)
	End If
End Sub
Private Sub Send_data()
	Dim myNum As Double
	myNum = 94562
	SendStr = cInt2Str(myNum)
	mscomm1.output=SendStr
End Sub
Function cInt2Str(myNum As Double) As String
	Dim r As Double
	Dim i As Double
	Dim j As Double
	Dim TempStr As String
	i = 1
	r = Int(myNum / 256)
	While r > 0
	    i = i + 1
	    DoEvents
	    r = r / 256
	Wend
	TempStr = ""
	For j = 1 To i
	    TempStr = TempStr & Chr(myNum Mod 256)
	    myNum = Int(myNum / 256)
	Next
	cInt2Str = TempStr
End Function
Function CStr2Int(TempStr As String) As Double
	Dim r As Double
	Dim i As Double
	Dim j As Double
	i = Len(TempStr)
	If i = 0 Then Exit Function
	r = 0
	For j = i To 1 Step -1
	    r = r * 256 + Asc(Mid(TempStr, j, 1))
	Next
	CStr2Int = r
End Function
از MSComm1_OnComm براي گرفتن اطلاعات و از Send_data هم براي فرستادن اطلاعات استفاده ميشه
--------------------------------
ببنيد استرينگ در واقعه خودش يك ارايه باينريه كه در انتها ان بيت 0 قرار داره
شما وقتي يك استرينگ رو به تابعي ارسال مي كنيد فقط اسم ارايه را ميدهيد و بقيه كار ها رو وي بي در پشت زمينه انجام ميدهد .
پس براي ارسال يك ارايه از هر چيز شما فقط بايداسم ارايه را ارسال كنيد . خود وي بي بقيه كارها را انجام ميدهد .
البته در بعضي از توابع شما بايد با اضافه كردن يك () به اخر اسم ارايه به وي بي بگيد كه اين ارايه است . مثل زمان كار كردن با بعضي از api ها

-----------------
از توضيحات shockley هم ممنون
کنترل Mscomm از پروتکل RS-232c استفاده میکنه و نوع فریمی که در این استاندارد تعریف شده 5 تا 8 بیت دیتای باینری به اضافه ی یک بیت توان و یک بیت شروع و پایانه، پس Mscomm هم باید داده ی باینری رو پشتیبانی بکنه که میکنه!
اینجا رو مطالعه کنید: MSDN میگه که برای ارسال باینری یه بافر UART پورت سریال باید از آرایه ی بایتی استفاده کنید.
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
سلام به آقا سعید عزیز
مدیر فعال بخش vb

دوست عزیز کدهای شما را دیدم اما تا آنجا که از گفته های شما فهمیدم این کدها برای حالتی است که vb کد اسکی رشته کاراکتری را ارسال می کند نه اعداد باینری بنابراین همان طور که قبلا گفتم می بایست خاصیت inputmode را به مقدار cominputmodebinary تغییر دهیم تا مقادیر ارسالی به صورت باینری ارسال شود
پس به نظر می رسد ساده تر نیز می توان نوشت

البته زحمات شما را ارج می گذارم و از شما سپاسگذارم
در ضمن کدهایی را که در پست قبلی گذاشتم دیتا ها را ارسال می کنند اما هنوز نتوانستم تست کنم این دیتا ها همانی است که مورد نظر من است یا نه چونکه میکرو دیتا ها رو می گیره و به صورت معادل اسکی آنها نشون می ده!!

از دوستان دو سئوال دارم
1- چگونه می توانم بفهمم که محتویات متغیر buffer به صورت باینری چی هست؟ به عبارت دیگر محتویات این متغیر را چگونه می توان به صورت باینری نشان داد؟
البته این روشی که من استفاده می کردم جواب نمی ده : text1.text=buffer ( فقط کاراکتر ؟ نشون می ده )

2- اگر بخواهیم یک عدد باینری را به یک متغیر مانند number نسبت بدیم چگونه می بایست به vb اعلام کنیم؟
 

korosh_majd

کاربر تازه وارد
تاریخ عضویت
23 آگوست 2006
نوشته‌ها
42
لایک‌ها
0
اگه عددی که میخوای بفرستی حداکثر یک بایت باشه که کار خیلی راحته
کد:
mscomm1.output= chr$(1) & chr$(2)
مثلا کد بالا عدد 1 و بعد عدد 2 رو میفرسته. یعنی 2 تا عدد پشت هم. اگه بخوای دو بایت بفرستی باید بایت ها رو جدا کنی
کد:
i = 32540
mscomm1.output= chr$(i \256) & chr$(i mod 256)
البته این برای یک عدده. برای آرایه اگه از روش تبدیل آرایه به واریانت هم استفاده کنی همین میشه. اگه بخوای آرایه رو توی یک رشته هم با api کپی کنی باز هم همینه.
در هر صورت دیگه نباید مشکلی داشته باشی! بای

سلام xoex جان
این دستوری که شما نوشتید کاراکتر معادل کد اسکی یک مقدار داده شده را بر می گرداند ولی برای ارسال آن قضیه فرق می کند! اگر پست آقای shockly را نگاه کنی بهتر متوجه می شوی
مرسی از لطف شما
خیلی مخلصیم!
 

shockley

Registered User
تاریخ عضویت
28 نوامبر 2005
نوشته‌ها
287
لایک‌ها
4
سلام،

این کد رو تست کنید:
کد:
Private Sub Form_Load()

MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0
MSComm1.PortOpen = True

End Sub

Private Sub Command1_Click()

Dim bytArray(7) As Byte
bytArray(0) = 200
bytArray(1) = 30
bytArray(2) = 0
bytArray(3) = 5
bytArray(4) = 1
bytArray(5) = 0
bytArray(6) = 0
bytArray(7) = 245
MSComm1.Output = bytArray

End Sub

شما یه راه دیگه هم دارید، اول عدد باینری رو که می خواهید ارسال کنید به صورت رشته هایی با طول 3 کاراکتر (چون ماکسیمم عددتون255است) در نظر بگیرید و هر 84 تا از آنها رو به هم الحاق کرده و یک رشته به طول 252 کاراکتر رو به پورت ارسال کنید، در اینحالت اگر کامپایلر میکروتون هم بیسیک باشه، رشته ای با طول بیشتر از 254 کاراکتر رو نمی تونید تعریف کنید، پس با قطعه برنامه ی زیر می تونید رشته رو دریافت کرده، رقم ها رو جدا و با در نهایت با یک روتین انتخاب عدد متناظر رو پیدا کنید:

کد:
[LEFT]Dim S As String * 254                                       'main string
Dim Ar(254) As Byte At S Overlay                   'pointer for s characters
Dim Temp(3) As Byte                                        'store digits
Dim Num As Byte
Dim Iloop As Byte
Dim _temp As Byte                                           'loop counter

Input S                                                               'receive from serial port

For Iloop = 1 To 252 Step 3
   Gosub 1st_digit
   Gosub 2nd_digit
   Gosub 3rd_digit
Next

Num = Temp(1) * 100
_temp = Temp(2) * 10
Num = Num + _temp
Num = Num + Temp(3)                                         'num contain first number

1st_digit:
Select Case Iloop
   Case 48 : Temp(1) = 0
   Case 49 : Temp(1) = 1
   Case 50 : Temp(1) = 2
   Case 51 : Temp(1) = 3
   Case 52 : Temp(1) = 4
   Case 53 : Temp(1) = 5
   Case 54 : Temp(1) = 6
   Case 55 : Temp(1) = 7
   Case 56 : Temp(1) = 8
   Case 57 : Temp(1) = 9
End Select
Return

2nd_digit:
Select Case Iloop
   Case 48 : Temp(2) = 0
   Case 49 : Temp(2) = 1
   Case 50 : Temp(2) = 2
   Case 51 : Temp(2) = 3
   Case 52 : Temp(2) = 4
   Case 53 : Temp(2) = 5
   Case 54 : Temp(2) = 6
   Case 55 : Temp(2) = 7
   Case 56 : Temp(2) = 8
   Case 57 : Temp(2) = 9
End Select
Return

3rd_digit:
Select Case Iloop
   Case 48 : Temp(3) = 0
   Case 49 : Temp(3) = 1
   Case 50 : Temp(3) = 2
   Case 51 : Temp(3) = 3
   Case 52 : Temp(3) = 4
   Case 53 : Temp(3) = 5
   Case 54 : Temp(3) = 6
   Case 55 : Temp(3) = 7
   Case 56 : Temp(3) = 8
   Case 57 : Temp(3) = 9
End Select
Return[/LEFT]
این روش تنها در صورتی قابل استفاده است که میکروکنترلر در فواصل دریافت فریم های 252 بایتی مشغول نباشه چون پس از اجرای برنامه متغیر num محتوی اولین عدد سه رقمی است و باید میکرو زمان کافی برای اجرای سابروتین و ذخیره ی آن در یک متغیر دائمی مثل EEPROM رو داشته باشه (با کلاک 8 مگاهرتز حدود صد میکرو ثانیه). در ضمن با محدودیت طول متغیر در BASCOM مجبور به قاب بندی اطلاعات ارسالی هستید، مگر اینکه از تابع waitkey() استفاده کنید که اون هم محدودیت خودشو داره و یا برنامه ی میکروتون رو با C نوشته باشید، چون در اون حالت هر کاراکتر دریافتی در بافر پورت سریال می تونه ایجاد یک وقفه کنه و عملا شما محدودیتی در طول ارقام ندارید. بازهم اگر دقیقا در مورد کاری که می خواهید انجام بدید و نوع اطلاعات ارسالی از PC به میکرو توضیح بدید شاید بیشتر بتونیم کمک کنیم.
 
بالا