پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
احتمالا 1155 رو اشتباه نوشتید با برنامه ای که شما نوشتید 1125 باید بنویسیه.بعدم قرار بود از هر متغیر 48 تا کم کنین.تازه خودتون تو این دستور جای متغییر های 5و 6و7 بذارید ببینید اصلا 567 ساخته میشه؟
d = a * 10 + b * 10 + c;
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
سلام
*** در ابتدا اعلام کنم که در کل برنامه از متغیر Long Int استفاده شده است
به نتایج خیلی عجیبی رسیدم
من با 3 دستور getkey داده ها رو دریافت کردم و یکی یکی روی LCD نمایش دادم و متوجه شدم که اگر با دستور Printf داده رو ارسال کنم ، 3 متغیر که با getkey دریافت کرده ام ، (همیشه) به ترتیب اعداد 55 و 53 و 54 هستند !!!!!!!!!!!!!!!!!!!
ولی اگر با دستور sendChar ارسال کنم ، اگر عدد ارسالی از 255 کمتر باشد هر 3 متغیر همان عدد می شوند یعنی عدد رو به صورت یکجا ارسال می کند به طور مثال اگر عدد 123 رو ازسال کنم هر 3 متغیری که با Getkey دریافت کردم 123 می شوند !!!!!!!!!!!!!!!!!!!!!
ولی اگر عدد 256 باشد ، انگار هیچی دریافت نمیکند !!!!!!!!!!!!!!!!
ولی اگر عدد از 256 بیشتر باشد ، خوب حالا دیگه رسیدیم به نقات رمز دار ( ارسال با دستور SendChar می باشد ) !!!!!!!!!!!!
خوب حالا من جیکار کردم ، رفتم و متغیر هارو 8 تا کردم و همه اش رو روی LCD نشان دادم ، ماژول هم نامردی نکردو همه ی متغیر ها رو پر کرد یعنی اگر عدد 567 و ارسال می کردم 8 تا متغیر می شدند عدد 25 یعنی 8 تا عدد 25 روی LCD نشان داده می شد !!!!!!
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
من که نفهمیدم آخرش با چی مشکل داری؟
در ضمن ورودی تابع sendchar حتما باید char باشه نه long int عدد 567 هم توی char جا نمیشه
256 سر ریز میشه از اونور میشه 0
بقیش هم ...
حتما متغیری که ارسال میکنی باید char باشه
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
با سلام .همینطور که اقای رجب زاده گفتن مقدار کاراکتری بیشتر از 255 نباید باشه.چرا؟
چون مقدار کاراکتری از 48 شروع میشه و سپس حروف بزرگ و حروف کوچک تا تقریبا 120 و بقیه کاراکتر ها و سمبل ها تا 256 و چیز دیگه ای نمیمونه که بخواد بیشتر باشه.اگه شما از ان مقدار بیشتر بدید یه جوره دوره میزنه ولی قابل تشخیص برای شما نیست.من پیشنهاد میکنم شما که میخواستید عدد adc رو بفرستید اونو تو مد 8 بیتی قرار بدید تا حداکثر عددش برابر 256 بشه و حالا که تست هم کردید جواب داده با همین دستور بفرستید
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
سلام
خیلی ممنون
پس من تا عدد 255 بیشتر نمیتونم بفرستم ، خوب این چه ارتباطیه که اینقدر محدودیت داره ، آخه ارتباط سریال که نباید اینطوری باشه که !
××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه
××× یا که ، نمیشه که یک دستور خودمون بسازیم مثلا sendint که متغیر های int یا دیگر متغیر ها رو هم بفرسته ، چون به نظر من که چیز سختی نباید بشه چون خود دستور sendchar هم توی هدر چندتا خط بیشتر نیست.
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
متن رو به صورت کد اسکی میفرستید اونور هم به صورت کد اسکی میخونید مشکلی که اول کار داشتید دیگه اینجا مشکل نیست و مفیده
راستی ایتقدر پیام ندید من اینجارو هر روز میبینم فقط شما یکم کند جواب میدید
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
البته خود ارتباط سریال هم حداکثر دیتا بیتش 8 میتونه باشه و بیشتر از 256 نمیونه بفرسته مشکل این جاست که حتی متن تکه تکه میاد.من پیشنهاد میکنم اول طول رشترو اندازه بگیر و بفرست و اونور توی فرستنده بیا با یک حلقه for و عددی که دریافت کردی به ترتیب متن رو روی lcd نشون بده
در ضمن به نظرم تغییر هیدر ها هم فکر خوبیه و کارتو راحت تر کنه برای اینکار متنو داخل یک استرینگ بریز و توسط
strlen طولشو اندازه بگیر.
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
سلام
اگر لطف کنید و با برنامه توضیح بدهید خیلی خیلی ممنون می شوم تا من داخل هدر این برنامه رو اضافه کنم و با یک دستور در فرستنده و یک دستور در گیرنده بتوانم نوشته رو ارسال و دریافت کنم
راستی من برای اعداد بزرگتر از 255 روش زیر رو پیشنهاد می دهم و اگر لطف کنید و من رو در برنامه نویسی این قسمت راهنمایی کنید ممنون می شوم تا این قسمت رو هم در هدر اضافه کنم
××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
نوشته اصلی توسط Soodi
سلام
اگر لطف کنید و با برنامه توضیح بدهید خیلی خیلی ممنون می شوم تا من داخل هدر این برنامه رو اضافه کنم و با یک دستور در فرستنده و یک دستور در گیرنده بتوانم نوشته رو ارسال و دریافت کنم
راستی من برای اعداد بزرگتر از 255 روش زیر رو پیشنهاد می دهم و اگر لطف کنید و من رو در برنامه نویسی این قسمت راهنمایی کنید ممنون می شوم تا این قسمت رو هم در هدر اضافه کنم
××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
سلام.فرضا میخوایم یک دستو sendint اضافه کنه باید یک تابع براش درست کنیم که یک مقدار int رو بگیره برای مثال
void delay_s(unsigned long c)
اینو از تابع delay برداشتم.کاری که میکنه میاد مقداری رو که ما دادیم توی متغییر c که از نوع unsigned long هست میریزه و توی طول برنامش ازش استفاده میکنه
شما هم همینجری یک int تعریف کن
چون int در ارم فکر میکنم 32 بیتی هست بهتره به 4 بخش 8 بیتی تقسیم به .برای این کار از روالی مثل زیر استفاده کن
a[0]=(b&0xff) ;
a[1]=((b&0xff00)>>8);
a[2]=((b&0xff0000)>>16);
a[3]=((b&0xff000000)>>24);
البته خودم هم باید امتحان بکنم
از اون ور هم متغییر ها رو بگی و به اندازه مورد نیاز شیفت بده و با هم or کن
پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR
با سلام
اگر لطف کنید و برنامه گیرنده رو هم مثال بزنید خیلی خیلی ممنون می شوم که چگونه متغیر های ارسالی رو در گیرنده دریافت و به صورت یک متغیر تبدیل کنم
حالا که مشکل ارسال اعداد حل شد
برای ارسال متن از کد اسکی استفاده کنم
خوب اگر بخواهم از کد اسکی استفاده کنم باید یک تابع درست کنم که چیزی که من تایپ می کنم رو به کد اسکی تبدیل و ارسال کند و در گیرنده هم این کد اسکی رو کنار هم بچیند و کلمه رو روی ال سی دی نشان بدهد ( توی وب گشتم یک چیزایی در مورد تبدیل کاراکتر به اسکی بود )
دیدگاه