پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
با سلام.
اون مشکل قبلی برطرف شد.
فقط الان مشکل اینجاست که وقتی 2 تا کلمه میفرستم که با فاصله از هم جدا شده اولی میفرسته بعد 1 ثانیه 2حرف اول کلمه دوم رو میفرسته.مثلا اگر من salam chetori رو بفرستم روی lcd اول salam نشون داده میشه و بعد lcd پاک میشه و فقط ch نشون داده میشه.چرا اینجوریه؟انگار با فاصله مشکل داره.
به تابع scanf ربطی داره؟؟
از دوستانی که کدویژن کار میکنن خواهش میکنم منو راهنمایی کنن.
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
تاخیر یک ثانیه در گیرنده وجود داره که معلوم نیست چه تاثیری میزاره برای درست دریافت کردن کاراکترها از دستور getchar(); و از سه مرحله زیر استفاده بشه
1- چک کردن بیت مربوط به رجیستر مربوط به حضور کاراکتر دریافتی
2- اگر طبق بیت فوق کاراکتر دریافتی موجود بود در آرایه قرار بگیره
3- در صورتیکه کد کاراکتر دریافتی 10 دسیمال یا به عبارتی line feed باشه آرایه اماده نوشتن است. خروج از حلقه
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
میشه راجع به line feed یکم توضیح بدید؟ منظور همون enter هست؟؟ کی کدش تولید میشه؟؟
راستی توی دستور scanf وقتی از %s برای رشته استفاده میکنیم space رو تشخیص نمیده. باید چیکار کرد؟!
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
نوشته اصلی توسط gomato
میشه راجع به line feed یکم توضیح بدید؟ منظور همون enter هست؟؟ کی کدش تولید میشه؟؟
راستی توی دستور scanf وقتی از %s برای رشته استفاده میکنیم space رو تشخیص نمیده. باید چیکار کرد؟!
line feed یک کاراکتر با کد 10 است که هنگام دریافت ان می توان تشخیص داد که استرینگ دریافتی به پایان رسیده.(در ارتباط میکرو با میکرو اینطوریه و در حالت کامپیوتر بایستی ازمایش بشه اخرین کاراکتر همینه یا چیز دیگه) برای دریافت استرینگ بجای scanf از
DATA[ i ]=getchar();
که یک کاراکتر را دریافت میکند در یک حلقه استفاده بشه. (طبق الگوریتم پست قبلی )در ضمن در یک ثانیه تاخیر میکرو ،اطلاعات ارسالی از بین میره.
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
نوشته اصلی توسط gomato
چطوری میشه فهمید که آخرین کاراکتر دریافتی چی هست؟!
یک برنامه آزمایشی ساده بنویسید یک استرینگ ارسال کرده و به صورت کاراکتر به کاراکتر دریافت کنید کاراکتر دریافتی بعد از آخرین کاراکتر استرینگ ، آخرین کاراکتر خواهد بود.
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
من یه برنامه ساده نوشتم ولی فقط همون استرینگی که ارسال میکنم نشون میده کاراکتر اضافی نداره !!!
توی کامپوترم با #C برنامه نوشتم برای ارسال استرینگ.
دیگه نمیدونم چطوری باید فهمید اون کاراکتر آخری چیه؟
اینم برنامه من :
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
نوشته اصلی توسط gomato
من یه برنامه ساده نوشتم ولی فقط همون استرینگی که ارسال میکنم نشون میده کاراکتر اضافی نداره !!!
توی کامپوترم با #C برنامه نوشتم برای ارسال استرینگ.
دیگه نمیدونم چطوری باید فهمید اون کاراکتر آخری چیه؟
اینم برنامه من :
while(1)
{
loop:
if(UCSRA.7==0) goto loop;
DATA[0]=getchar();
lcd_puts(DATA);
}
خیلی از کاراکترها توسط ال سی دی قابل نمایش نیست پس باید کد کاراکتر مثلا از طریق برنامه زیر نمایش داده شود
در این مثال میکرو کاراکترهای دریافتی را دایما نمایش میده. در صورتیکه میکرو کار دیگری هم باید بکنه در قسمت نقطه چین دستورات اضافه خواهد شد. برای حالتیکه دستورات زیادی اضافه بشه و میکرو زمان کم بیاره بهتره از وقفه استفاده بشه.
پاسخ : ارتباط میکرو و کامپیوتر به صورت سریال RS485
سلام
در مورد پایه های RE و DE من مشکل دارم!
باید ارتباط میکرو و کامپیوتر دو طرفه و RealTime باشه.
پایه RE و DE رو به هم وصل کردم و بعد به 1 پایه میکرو که بتونم با برنامه کنترلش کنم.
ولی صفر و یک کردنش درست انجام نمیشه. دریافت داریم ولی وقتی پایه 1 میشه و باید ارسال انجام بشه گیر میکنه...
برای ارسال هم من از keypad استفاده میکنم.با فشار یک کلید یک کاراکتر ارسال میشه و بعد دیگه گیر میکنه و پایه به حالت اول (صفر) بر نمیگرده.
مشکلش از کجاست؟!
دیدگاه