سلام وخسته نباشید واسه سایت بسار مفیدتون
من واسه پروژم نیاز به ارتباط سریال دارم
من یه برنامه نوشتم که به نظرم مشکلی نداره انا موقع اجرا تو وقفه گیر میکنه و دوباره وارد برنامه اصلی نمیشه
کد:
$regfile = "m32def.dat"
$crystal = 1000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
$baud = 1200
Enable Interrupts
Enable Urxc
On Urxc Resive
Dim A As Long
Dim B As Byte
Cls
Home
B = 0
Main:
Do
Locate 1 , 1
Lcd B ; " mmmm "
Waitms 300
Print "hello"
Incr B
Loop
Resive:
Input A
Locate 2 , 2
Lcd A
Print "resive"
Return
ممنون میشم اگه راهنماییم کنین
سلام.
چطور تشخيص داديد كه تو وقفه گير كردهه ؟
چه زماني وقفه RX رخ مي دهد ؟ ( قبل از دريافت يا بعد از دريافت ؟! )
بعد اولین ارسالی که از کامپیوتر به میکرو میشه ، میکرو دیگه هیچ عملی انجام نمیده و فقط دریافت سریال داره
اگه تو برنامه ببینید یه کلمه ای رو هر لحظه به کامپیوتر ارسال کنه
اما بعد دریافت این کار انجام نمیشه
بعد از اينكه دريافت كامل انجام شد ، اون موقع تازه وقفه ي RX رخ مي دهه !!
شما در روال وقفه نبايد دوبارهه input كنيد.
اطلاعات گرفته شده و در رجيستر UDR ذخيره شده هست. الان بايد مقادير رو از اين رجيستر بخونيد تا پرچم وقفه ي Rx هم پاك بشه. اگر اين ريجستر خوانده نشه ، پس از پايان روال وقفه دوبارهه وقفه ي Rx رخ مي دهد.
اينا براي كدويژن بود.
براي بسكام امتحان نكردم، اما در روال وقفه از عبارت زير استفاده كنيد بايستي درست باشه ...
نقل قول: NUM=UDR
خبرش رو بدهه ...
موفق باشيد.
نقل قول: sharin
مدیر بخش الکترونیک و رباتیک
حل شد
داداش کارت خیلی درسته
سلام.من هم يك مشكل با ارتباط سريال دارم.
چطوري ميتونيم با برنامه نويسي (من با كدويژن كار ميكنم) در جايي از برنامه ارتباط سريال بين دو ميكرو را قطع كنيم؟
ممنون ميشم اگر كمكم كنيد.
یه مولفه ای بانام bud rate داریم مقدار این رو بهم بریزین
نقل قول: سلام.من هم يك مشكل با ارتباط سريال دارم.
چطوري ميتونيم با برنامه نويسي (من با كدويژن كار ميكنم) در جايي از برنامه ارتباط سريال بين دو ميكرو را قطع كنيم؟
ممنون ميشم اگر كمكم كنيد.
واضح تر لطفا ...
يعني اول ارتباط برقرارهه ، از يه جايي به بعد يكي سعي مي كنه اطلاعات رو از ديگري بگيرهه اما همچين اجازه اي بهش داده نمي شه !
درسته؟ منظورتون همينه؟
(۰۸-مرداد-۱۳۹۱, ۱۵:۱۱:۳۰)sharin نوشته است: [ -> ]نقل قول: سلام.من هم يك مشكل با ارتباط سريال دارم.
چطوري ميتونيم با برنامه نويسي (من با كدويژن كار ميكنم) در جايي از برنامه ارتباط سريال بين دو ميكرو را قطع كنيم؟
ممنون ميشم اگر كمكم كنيد.
واضح تر لطفا ...
يعني اول ارتباط برقرارهه ، از يه جايي به بعد يكي سعي مي كنه اطلاعات رو از ديگري بگيرهه اما همچين اجازه اي بهش داده نمي شه !
درسته؟ منظورتون همينه؟
ببينيد،به اين صورت هست كه از ابتداي برنامه ارتباط سريال برقراره و هر دو ميكرو هم فرستنده هستند و هم گيرنده.ولي در جايي از برنامه ميخواهيم ميكروها ديگر به هم ديتايي نفرستند و به صورت مستقل از هم كار كنند وكنترل شوند.
شما اگر اطلاعاتي كه بين فرستنده گيرنده رد و بدل مي شه رو كد كرديد. كافيه از يه جايي به بعد كدها رو عوض كنيد ، اينطوري مشكل حل مي شه.
كار ديگه كه مي تونيد انجام بديد. وقتي شرط برآورده شدن قطع ارتباط برقرار شد برن در يك DO-Loop ديگه ، مجزا از اون DO-Loop اي كه توش اطلاعات رد و بدل مي كردن.
روش ديگه اينه كه تمام شرط هايي كه براي فرستادن و گرفتن اطلاعات گذاشتين رو در يه شرط ديگه بذاريد ، كه اين شرط اگر برقرار نباشه ، ديگه كدهاي ارسال و دريافت اجرا نمي شه.
روش ديگه اينكه در ريجستر هاي USART كمي بگرديد و يكي از بيت هاش كه براي فعال كردن اين واحد هست رو تغيير بديد كه واحد غير فعال بشه و طبيعتا اون كدهاي ارسال و دريافت هم از اين به بعد نبايد اجرا بشه كه به يكي از روش هاي بالا مي تونيد عمل كنيد ...
فعلا همينا به ذهنم مي رسيد.
موفق باشيد.
(۰۹-مرداد-۱۳۹۱, ۱۲:۳۵:۳۷)sharin نوشته است: [ -> ]شما اگر اطلاعاتي كه بين فرستنده گيرنده رد و بدل مي شه رو كد كرديد. كافيه از يه جايي به بعد كدها رو عوض كنيد ، اينطوري مشكل حل مي شه.
كار ديگه كه مي تونيد انجام بديد. وقتي شرط برآورده شدن قطع ارتباط برقرار شد برن در يك DO-Loop ديگه ، مجزا از اون DO-Loop اي كه توش اطلاعات رد و بدل مي كردن.
روش ديگه اينه كه تمام شرط هايي كه براي فرستادن و گرفتن اطلاعات گذاشتين رو در يه شرط ديگه بذاريد ، كه اين شرط اگر برقرار نباشه ، ديگه كدهاي ارسال و دريافت اجرا نمي شه.
روش ديگه اينكه در ريجستر هاي USART كمي بگرديد و يكي از بيت هاش كه براي فعال كردن اين واحد هست رو تغيير بديد كه واحد غير فعال بشه و طبيعتا اون كدهاي ارسال و دريافت هم از اين به بعد نبايد اجرا بشه كه به يكي از روش هاي بالا مي تونيد عمل كنيد ...
فعلا همينا به ذهنم مي رسيد.
موفق باشيد.
خيلي از پاسخ هاتون ممنونم.ولي دقيقا متوجه نميشم بايد چيكار كنم!اگر يك مثال واسم بزنيد خيلي ازتون ممنون ميشم.