امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 2
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل وقفه سریال
نویسنده پیام
lilbibi آفلاین
تازه وارد

ارسال‌ها: 10
موضوع‌ها: 5
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
مشکل وقفه سریال
با عرض سلام خدمت دوستان با فعال کردن وقفه URXC یه مشکلی پیش میاد و اونم اینه که وقتی مثالا از دستور print استفاده میشه برنامه به سراغ label مربوط به دریافت میره و اون جا گیر میکنه سواله من اینه که چرا وقتی یه رشته رو با دستور print ارسال میکنم وقفه درسافت داده فعال میشه.
برای حل این مشکل اومدم وقفه سریال رو در هنگام ارسال خاموش کردم و بعد از دستور print دوباره فعال کردم ولی باز بعد فعال کردن سراغ دریافت داده میره و اونجا گیر میکنه.به نظر شما چطوری میشه این مشکل رو حل کرد من توی پروتوس شبیه سازی میکنم و از بسکام برای کد نوشتن مگا8 استفاده میکنم.
یه سواله دیگه هم دارم اینه که بافر ارسال و دریافت سریال جدا از همه یا اینکه یه بافره که برای هر دو استفاده میشه و بعد اینکه برای دسترسی به این بافر میشه توضیح بدیم با udr کار کردم ولی جواب مناسب رو نگرفتم
۰۶-شهریور-۱۳۹۲, ۲۰:۲۲:۱۱
ارسال‌ها
پاسخ
kimiafars آفلاین
کاربر با تجربه
****

ارسال‌ها: 819
موضوع‌ها: 71
تاریخ عضویت: فروردین ۱۳۸۶

تشکرها : 663
( 1139 تشکر در 512 ارسال )
ارسال: #2
RE: مشکل وقفه سریال
لطفا کد بذارید

تولید دیمر قناری و دستگاههای کنترل سالن هیدروپونیک و اکواپونیک(انبردست)anbordast.ir[url=anbordast.ir][/url]
۰۶-شهریور-۱۳۹۲, ۲۰:۴۱:۴۳
ارسال‌ها
پاسخ
تشکر شده توسط : behzady
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #3
RE: مشکل وقفه سریال
بدون کد که نمی شه ولی ...
(۰۶-شهریور-۱۳۹۲, ۲۰:۲۲:۱۱)lilbibi نوشته است: برای حل این مشکل اومدم وقفه سریال رو در هنگام ارسال خاموش کردم و بعد از دستور print دوباره فعال کردم ولی باز بعد فعال کردن سراغ دریافت داده میره و اونجا گیر میکنه.
برای اینکه وقتی ارسال تموم میشه آخرین داده هنوز مونده و سرعت میکرو بیشتر از ارسال داده هست پس شما میای و وقفه رو فعال می کنی بعد تازه آخرین ارسال انجام میشه و وقفه روی میده.
نقل قول: به نظر شما چطوری میشه این مشکل رو حل کرد من توی پروتوس شبیه سازی میکنم و از بسکام برای کد نوشتن مگا8 استفاده میکنم.
به سختیBiggrin
باید کد برنامه رو بزارید
نقل قول: یه سواله دیگه هم دارم اینه که بافر ارسال و دریافت سریال جدا از همه یا اینکه یه بافره که برای هر دو استفاده میشه و بعد اینکه برای دسترسی به این بافر میشه توضیح بدیم با udr کار کردم ولی جواب مناسب رو نگرفتم
بله یکی هست و همون UDR هست.
جواب مناسب هم نگرفتید چون باید دقیقا طرز کار serial رو باید مشاهده کنید تا بتونید به درستی باهاش کار کنید
پیش نهاد من به شما مطالعه ی دیتاشیت و مشاهده ی مثال هاش هست که البته به زبون C نوشته شده ولی گویای همه چی هست اگه باز هم مشکلی بود کدی که خودتون نوشتید رو باید بازید تا مشکلش رو براتون دوستان توضیح بدن

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

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
۰۷-شهریور-۱۳۹۲, ۰۰:۱۸:۳۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : babyy, omid_phoenix, Ambassador
lilbibi آفلاین
تازه وارد

ارسال‌ها: 10
موضوع‌ها: 5
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #4
RE: مشکل وقفه سریال
با تشکر از جواباتون
ببنید این برنامه به این صورته که یه میکرو یه بسته اطلاعاتی رو یه میکرو دیگه میفرسته(باید به صورت بیسیم باشه که فعلا با سیم دارم امتحان میکنم) بعداون طرف بسترو نگاه میکنه و بنا به اون درخواستی که شده یه کاری رو انجام میده حالا من اومدم اینو تست میکنم که اگه بسته دریافتی مشکلی داشت یه به فرستنده اطلاع بده اسنم کد فرستنده:
کد:
$regfile = "m8def.dat"
$crystal = 1200000
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1
Config Portc.0 = Output
Enable Urxc
On Urxc Data_received
Enable Interrupts
$hwstack = 128
$swstack = 128
$framesize = 128


Dim Trs As Bit
Trs = 0
Cls
Dim Portdata As String * 13
Dim Portdata1 As String * 13
Do

Main:
Portdata = "*ttt*rrr145"
Reset Portc.0
Wait 1
Set Portc.0
Wait 1
Print Portdata
Wait 1
Loop
End


Data_received:
  If Ischarwaiting() = 1 Then
   Portdata1 = ""
   Input Portdata1
  Lcd Portdata1
  End If
Return
و اینم کد سمت گیرنده البته هر دو طرف باید به یه صورت کار کنن و کداشون یکی باشه ولی من این کد ها به صورت آزمایشی نوشتم که ببینم جواب میگیرم یا نه
کد:
$regfile = "m8def.dat"
$crystal = 1200000
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , Rs = Portb.0 , E = Portb.1
Config Portc.0 = Output
'Config Portc.1 = Input
Enable Urxc
On Urxc Data_received
Enable Interrupts
$hwstack = 128
$swstack = 128
$framesize = 128

Cls
Cursor Off
Dim Portdata As String * 12
Dim Portdata1 As String * 12
Dim Error As Byte
Error = 0
Main:
Do
Reset Portc.0
Wait 1
Loop
End




Data_received:
Input Portdata1
  Lcd Len(portdata1)
If Len(portdata1) = 12 Or Len(portdata1) = 11 Then
Set Portc.0
'Lcd Portdata1
Dim Pstring As String * 3
Dim Index As String * 1
Dim Sval As Integer
Dim Nval As Integer
Dim I As Integer
Dim J As Integer
Dim Count As Integer
Sval = 1
Nval = 3
Count = 0
'Lcd Len(portdata1)
For I = 1 To Len(portdata1)
Index = Mid(portdata1 , I , 1)
'Lcd Index
If Index = "*"then
Count = Count + 1
J = I + 1
Pstring = Mid(portdata1 , J , 3)
Lcd Pstring
Lcd "."
I = I + 3
End If
Next
If Count <> 3 Then
Print "*err*100*100"

End If
End If

Return

شکل واقعیه بسته باید به صورت "*123*145*999*" باشه تو بالا توی کد فرستنده نگاه کنید عمدا بسترو دستکاری کردم و یکی از اون جدا کنند ها رو ورداشتم وقتی که برنامه در هر دو طرف اجرا میشه فرستنده چون میره تو کما و توی input گیر میکنه یعنی با وحود اینکه هیچ داده ای دریافت نشده وقفه دریافت داده فعال میشه
راستی یه چیز درباره اون رشته ارسالی بگم که قسمت اول آدرس فرستنده دومی آدرس گیرنده سومی داده هستش البته میخوام طول اون رو افزایش بدم یه سری داده های کنترلی هم بزارم به نظر شما کاره درستیه که داده هایی که قراره به صورت یکجا ارسال بشرو به صورت string در بیاد؟فکر کنید داده ارسالی یه پکت tcp/ip هستش چون توی uart داده های رو به صورت 8 بیتی فرستاده میشه من این مشکلو پیدا کردم وقتی من نیاز دارم 8 بایت داده یا بهتر بگم یک آرایه از داده ها رو به صورت بسته با هم بفرستم مجبور شدم به صورت string استفاده کنم که ماشالا طولش زیاد شد.با تشکر از شما
(آخرین ویرایش در این ارسال: ۰۷-شهریور-۱۳۹۲, ۱۵:۱۹:۵۸، توسط lilbibi.)
۰۷-شهریور-۱۳۹۲, ۱۰:۱۸:۱۷
ارسال‌ها
پاسخ
lilbibi آفلاین
تازه وارد

ارسال‌ها: 10
موضوع‌ها: 5
تاریخ عضویت: آبان ۱۳۸۶

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #5
RE: مشکل وقفه سریال
کسی نیست جواب بده از دوستان؟؟؟
۱۱-شهریور-۱۳۹۲, ۱۴:۰۹:۳۱
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #6
RE: مشکل وقفه سریال
نکته ای که هست ، وقتی وقفه دریافت رخ می دهه ، شما بایستی از ریجستر UDR اطلاعات رو بخونید تا پرچم مربوطه پاک بشه و دوبارهه وقفه رخ ندهه.

سعی کنید روال وقفه رو سبک بنویسید. مثلا i=1 می شه و تمام ، بعد بر می گرده توی main و check می کنه که i==1 هست یا نه و ...

الان هم برنامه رو خیلی بد و تو هم توهم نوشتید ، نمی صرفه چک بشه ... .
از if , else if هم بجا استفاده کنید برای بهینه تر بودن کدها. کلا یه مقدار به کدهاتون نظم بدید.

گفتید فرستنده وقتی print می کنه ، وقفه ی دریافت خودش فعال می شه.
از ریجستر UDR بخونید ببینید چی دریافت می کنه.

موفق باشید.

۱۱-شهریور-۱۳۹۲, ۱۶:۲۴:۳۶
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, babyy


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  [مقاله] پروگرام میکرو با پورت سریال behzady 5 11,384 ۱۵-دى-۱۳۹۸, ۲۳:۱۹:۰۹
آخرین ارسال: 1نفر
  مشکل دریافت متن از پورت سریال میکرو sajadcut 1 3,260 ۱۲-آبان-۱۳۹۵, ۲۲:۱۰:۲۳
آخرین ارسال: behzady
  هنگ کردن میکرو در ارتباط سریال nex 1 2,890 ۰۴-آبان-۱۳۹۵, ۲۰:۵۶:۵۹
آخرین ارسال: علی محد شریفی
  مبدل-وایفای-به-سریال-wifi-esp8266 kimiafars 15 10,216 ۰۳-مهر-۱۳۹۵, ۰۳:۲۴:۳۲
آخرین ارسال: jalil2008
  وقفه adc محمد حسینی 6 6,855 ۰۱-تير-۱۳۹۵, ۱۸:۳۸:۳۴
آخرین ارسال: mfazl22
  [آموزشی] مشکل در ارتباط سریال mohamadgmail 5 3,484 ۲۷-آذر-۱۳۹۴, ۰۲:۴۹:۳۱
آخرین ارسال: omid_phoenix
Exclamation مشکل با eeprom های سریال bigbig 4 5,340 ۲۸-آبان-۱۳۹۴, ۰۱:۱۸:۰۰
آخرین ارسال: gray
  [سوال] خواندن از پورت سریال و نوشتن روی mmc index 0 2,246 ۲۷-مهر-۱۳۹۴, ۱۱:۵۹:۰۰
آخرین ارسال: index
  [سوال] وقفه کانتر amir4 1 2,300 ۳۰-مرداد-۱۳۹۴, ۱۰:۰۹:۱۱
آخرین ارسال: sharin
Sad [سوال] اتصال کامپیوتر به میکرو از طریق پورت سریال Monje 11 11,438 ۱۱-خرداد-۱۳۹۴, ۱۶:۲۷:۰۷
آخرین ارسال: alira725

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS