امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
ارتباط سریال دومیکرو با وقفه
نویسنده پیام
taranom1 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 39
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 25
( 7 تشکر در 7 ارسال )
ارسال: #1
Question  ارتباط سریال دومیکرو با وقفه
سلام
من میخوام وقتی کلید1 فشرده شدبره تو روتین وقفه0 و یه string به میکرو2 بفرسته و تو lcd2 نشون بده و همینطور از میکرو2 دریافت داشته باشه بازدن کلید2 تو lcd1 نشون بده...
ولی وقتی مثلا "mega32" میفرستم فقط m نشون میده فکر میکنم شاید از بافر فرستنده و گیرنده باشه البته من tx,rx interrupt رو فعال نکردم فقط int0 رو فعال کردم
تو پروتئوس هم وقتی چند بار متوالی دکمه رو فشار میدم همین اتفاق میفته لطفا بگید از چی میتونه باشه؟؟؟Sad

کد php:
interrupt [EXT_INT0void ext_int0_isr(void)
{
   
putsf(" mega32 ");
   
delay_ms(400);

   


کد php:
while (1)
      {
      
lcd_clear();
      
lcd_gotoxy(0,0);    
      
gets(a,8);
      
lcd_puts(a); 
      
delay_ms(500); 
        

      };

(آخرین ویرایش در این ارسال: ۰۶-آذر-۱۳۸۹, ۲۳:۵۸:۲۲، توسط taranom1.)
۰۶-آذر-۱۳۸۹, ۲۳:۵۵:۵۹
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
taranom1 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 39
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 25
( 7 تشکر در 7 ارسال )
ارسال: #2
RE: ارتباط سریال دومیکرو با وقفه
lcd رو امتحان کردم ،مشکل فقط تو دریافته که کامل انجام نمیشه یا اینکه فقط یه لحظه نشون میده...لطفا کمک کنید چی کار کنم یه string رو کامل نشون بده با get_char هم یکی یکی گرفتم ریختم تو آرایه بازم نشد!!
۰۸-آذر-۱۳۸۹, ۱۲:۲۶:۲۴
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
mahdi20 آفلاین
کاربر با تجربه
****

ارسال‌ها: 518
موضوع‌ها: 35
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 5261
( 1763 تشکر در 452 ارسال )
ارسال: #3
RE: ارتباط سریال دومیکرو با وقفه
منم همین مشکل را به شدت دارم.

کسی نیست؟؟؟

[تصویر:  iran2.png]
۰۸-آذر-۱۳۸۹, ۱۲:۵۹:۵۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #4
RE: ارتباط سریال دومیکرو با وقفه
من کدویژن کار نکردم ولی به نظر میاد دستورات شما فقط یه بایت رو ارسال می کنه !


پیشنهاد می کنم با بسکام کار کنین تا از این مشکلات نداشته باشین !!!

تو پست بعدیم دستورات پورت سریال بسکام رو می ذارم !
۰۸-آذر-۱۳۸۹, ۱۴:۱۰:۵۷
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #5
RE: ارتباط سریال دومیکرو با وقفه



ارتباط سریال rs232 :



در این ارتباط از دوسیم به نام های rxd و txd استفاده میشود که خط txd وسیله اول دیتا را از ان به بیرون منتقل میکندو خط خروجی دیتا است و به ورودی دیتا دستگاه دوم ( rxd ) متصل میشود و خط rxd ورودی دیتا است که به خروجی دیتای دستگاه دیگر (txd ) متصل میشود.


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

این پروتکل برای ارتباط میکرو با میکرو ، میکرو با کامپیوتر و کامپیوتر با کامپیوتر استفاده میشود ، برای ارتباط میکرو با میکرو شما نیاز به دو برنامه برای دو میکرو دارید ، برای ارتباط میکرو با کامپیوتر شما باید علاوه بر نوشتن برنامه برای میکرو یک برنامه نیز برای کامپیوتر بنویسید و در نهایت برای ارتباط دو کامپیوتر با هم شما باید با یکی از زبان های برنامه نویسی برای هر دو کامپیوتر برناه بنویسید که این موضوع از بحث ما خارج است.(برای راه اندازی این پروتکل از کریستال خارجی استفاده کنید) 11.592

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

تعیین نرخ انتقال دیتا:
کد php:
$BAUD=VAR 
این دستور میزان انتقال دیتا در ثانیه را مشخص میکند وباید در هر دو وسیله ای که به هم متصل میشوند یکی باشد (در غیر این صورت ارتباط کار نمیکند) بهتر است نرخ انتقال دیتا در مناطق دارای نویز کمتر انتخاب شود.

دستور PRINT :
کد php:
PRINT  VAR 
توسط این دستور میتوان داده یا متغیری را به پورت سریال ارسال کرد. VAR یم متغیر از جنس متغیرهای گفته شده میباشد.

دستور PRINTBIN :
کد php:
PRINTBIN VAR 
توسط این دستور متغیر VAR به باینر تبدیل شده سپس به پورت سریال ارسال میشود.

دستور WAITKEY :
کد php:
VAR=WAITKEY() 
این دستور تا زمانی که متغییر توسط دستگاه دیگر به پورت سریال ارسال شود منتظر میماند و پس از دریافت متغیر برنامه از خط بعد ادامه می یابد.

دستور INKEY :
کد php:
VAR=INKEY() 
این دستور مقدار اسکی کاراکتر دریافت شده از پورت سریال را برمیگرداند.

دستور INPUTBIN :
کد php:
INPUTBIN  VAR 
این دستور داده باینری را از پورت سریال میگیرد و در متغیر VAR قرار میدهد.

دستور INPUTHEX :
کد php:
INPUTHEX  VAR 
این دستور داده هگز رااز پورت سریال دریافت میکند و در متغیر VAR قرارمیدهد. مانند:

در مثال زیر با استفاده از ارتباط سریال ، یک ارتباط دوطرفه بین دو میکرو برقرار کرده ایم ،

کد php:
$regfile "m32def.dat" $crystal 1000000
$baud 
9600
Config Portb 
Input Config Porta Output
Dim A 
As Byte As Byte
W
:
Pinb Printbin Q
Inkey() : Porta A
Goto W
End
میکرو 2
:
$regfile "m32def.dat" $crystal 1000000
$baud 
9600
Config Portb 
Input Config Porta Output
Dim A 
As Byte Dim Q As Byte
W
:
Pinb Printbin Q
Inkey() : Porta A
Goto W
End 

از انجا که ارتباط دو طرفه میباشد ( هر دو میکرو دقیقا مانند هم هستند ) برنامه دو میکرو مشابه است ،

درخط اول میکرو و کریستال معرفی شده است که میکرو مگا 32 و کریستال مورد استفاده 10 مگا هرتز میباشد .

در خط دوم نرخ انتقال دیتا مشخص گردیده است ، مقدار ان 9600 است . نرخ انتقال دیتا باید در هر دو میکرو یکسان باشد .

در خط سوم پورت b به عنوان ورودی ( برای اتصال کلید ) و پورت a به عنوان خروجی (برای اتصال led) معرفی شده اند .

در خط چهارم دو متغیر از جنس بایت برای ذخیره مقادیر معرفی شده است .

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

در خط ششم مقدار موجود بر روی پورت b در متغیر q ریخته میشود و سپس با دستور Printbin Q به پورت سریال فرستاده میشود.

در خط هفتم مقدار گرفته شده از پروت سریال در متغیر a ریخته میشود و بعد متغیر a بر روی پورت a ریخته میشود.

خط هفتم پایان حلقه میباشد ، هنگامی که cpu میکرو به این خط رسید به برچسب w پرش میکند.

خط هشتم پایان برنامه است.


در حالتی که هیچ یک از کلید ها یک نشده اند ، مقدار q صفر دسیمال و &b00000000 باینری است ، حال اگر هر یک از کلید ها فشرده شود مقدار q تغیر میکند.

دو پایه txd و rxd میکرو نقش دریافت و ارسال داده را در حالت پیشفرض برعهده دارند ، با دستور زیر شما میتوانید این دو پایه را به پایه های دلخواه تغییر دهید:

کد php:
Open "comx.y:$baud,8,n,1" For Output/input As #q 

comx.y : نام پورت و پایه ای است که باید به عنوان txd یا rxd جدید عمل کند.

:$baud نرخ داده عبوری از پایه را نشان میدهد ، این مقدار باید با نرخ انتقال دیتا ی اصلی برابر باشد.

Output/input : پایه میتواند وردی داده( rxd) یا خروجی داده( txd ) باشد.

Q : شماره کانال را مشخص میکند.
مانند:

کد php:
Open "comd.1:19200,8,n,1" For Output As #1
Open "comd.0:19200,8,n,1" For Input As #2 

در مورد بالا portd.1 به عنوان txd و portd.0 به عنوان rxd در نظر گرفته شده است ، همچنین نرخ انتقال داده برابر با 19200 است.
۰۸-آذر-۱۳۸۹, ۱۴:۱۶:۴۹
ارسال‌ها
پاسخ
تشکر شده توسط : taranom1, WhiteNoise
mahdi20 آفلاین
کاربر با تجربه
****

ارسال‌ها: 518
موضوع‌ها: 35
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 5261
( 1763 تشکر در 452 ارسال )
ارسال: #6
RE: ارتباط سریال دومیکرو با وقفه
مرسی

ولی کدویژن می خوام

[تصویر:  iran2.png]
۰۸-آذر-۱۳۸۹, ۱۶:۱۱:۰۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
taranom1 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 39
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 25
( 7 تشکر در 7 ارسال )
ارسال: #7
RE: ارتباط سریال دومیکرو با وقفه
من باودش رو کم میکنم میذارم رو کریستال خارجی ببینم چی میشه..
۰۹-آذر-۱۳۸۹, ۲۱:۰۵:۴۲
ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise
mahdi20 آفلاین
کاربر با تجربه
****

ارسال‌ها: 518
موضوع‌ها: 35
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 5261
( 1763 تشکر در 452 ارسال )
ارسال: #8
RE: ارتباط سریال دومیکرو با وقفه
روی کریستال خارجی که حتما باید بذاری. با کریستال داخلی اصلا جواب نمیده.

اگه جواب گرفتی نتیجه را بگو تا منم یاد بگیرم.

مرسی

[تصویر:  iran2.png]
۱۱-آذر-۱۳۸۹, ۱۰:۴۷:۴۳
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : WhiteNoise, t3r!p3000
iman-63 آفلاین
کاربر فعال بخش الکترونیک
***

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

تشکرها : 62
( 332 تشکر در 148 ارسال )
ارسال: #9
RE: ارتباط سریال دومیکرو با وقفه
سلام.
مشکل در گیرنده است. به فرستنده های خود دست نزنید!!!
در گیرنده حتماً از وقفه سریال استفاده کن. کافیه توی کد ویزارد وقفه رو فعال کنی.
خودش یه متغیر میسازه بنام rx_buffer که دیتاها توی اون ریخته میشه.

تشکر لازم نیست !!!
۱۷-آذر-۱۳۸۹, ۲۰:۲۷:۳۲
ارسال‌ها
پاسخ
تشکر شده توسط : mahdi20
mahdi20 آفلاین
کاربر با تجربه
****

ارسال‌ها: 518
موضوع‌ها: 35
تاریخ عضویت: آذر ۱۳۸۶

تشکرها : 5261
( 1763 تشکر در 452 ارسال )
ارسال: #10
RE: ارتباط سریال دومیکرو با وقفه
میشه یه نمونه کد برای مثال بزارید؟؟؟


تشکر

[تصویر:  iran2.png]
۱۷-آذر-۱۳۸۹, ۲۰:۴۴:۲۳
وب سایت ارسال‌ها
پاسخ
taranom1 آفلاین
كاربر تک ستاره
*

ارسال‌ها: 39
موضوع‌ها: 12
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 25
( 7 تشکر در 7 ارسال )
ارسال: #11
RE: ارتباط سریال دومیکرو با وقفه
سلام
من mega ها رو عوض كردم با همون سورس رو كريستال داخلي گذاشتم جواب داد!فقط وقتي پشت سرهم كليد رو فشار ميدم قاطي ميكنه...
يه سوال ديگه دارم اگه بخوام با يه ميكروي ديگه يا pc شبكه شون كنم با همين پروتكل rs232 ميشه انجامش داد؟
ممنون
۲۸-آذر-۱۳۸۹, ۱۲:۳۳:۲۲
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  ارتباط میکرو با plc از طریق شبکه profibus nex2004 11 14,656 ۰۱-بهمن-۱۳۹۸, ۱۱:۰۰:۱۹
آخرین ارسال: d.hamidi2535
  [مقاله] پروگرام میکرو با پورت سریال behzady 5 11,384 ۱۵-دى-۱۳۹۸, ۲۳:۱۹:۰۹
آخرین ارسال: 1نفر
Exclamation ارتباط سريال بين دو ميكرو و نمايش روي lcd با codevision ali313 13 28,959 ۰۱-شهریور-۱۳۹۷, ۱۱:۰۸:۴۳
آخرین ارسال: farhadtavakkol
  مشکل دریافت متن از پورت سریال میکرو sajadcut 1 3,260 ۱۲-آبان-۱۳۹۵, ۲۲:۱۰:۲۳
آخرین ارسال: behzady
  مشکل در ارتباط بیسیم با پروتکل USART cortex-m3 5 6,012 ۰۷-آبان-۱۳۹۵, ۰۰:۱۷:۳۶
آخرین ارسال: milad15m
  هنگ کردن میکرو در ارتباط سریال nex 1 2,890 ۰۴-آبان-۱۳۹۵, ۲۰:۵۶:۵۹
آخرین ارسال: علی محد شریفی
  مبدل-وایفای-به-سریال-wifi-esp8266 kimiafars 15 10,216 ۰۳-مهر-۱۳۹۵, ۰۳:۲۴:۳۲
آخرین ارسال: jalil2008
  ارتباط avr با plc از طریق profibus nex2004 5 7,429 ۰۳-مهر-۱۳۹۵, ۰۳:۱۶:۰۸
آخرین ارسال: jalil2008
  ارتباط دو طرفه با فرستنده nrf24 sniper-70 0 2,426 ۰۹-شهریور-۱۳۹۵, ۲۲:۱۶:۴۸
آخرین ارسال: sniper-70
Question مشکل با ارتباط spi miladd72 1 2,510 ۱۸-مرداد-۱۳۹۵, ۲۱:۱۷:۵۳
آخرین ارسال: sharin

پرش به انجمن:


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

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