اطلاعیه

Collapse
No announcement yet.

یک سوال کوچیک از (فوری) usart

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    یک سوال کوچیک از (فوری) usart

    سلام من می خواهم داده ای از نوع int را با استفاده از usartاز یک میکرو به یک میکرو دیگه بنویسم من از تابع printf وscanf استفاده کردم اما برنامه ای که نوشتم به صورت زیر است لطفا راهنمایی کنید وبگویید چه کنم
    ---------------------------------
    transmitter
    --------------------------------
    int a -1
    a=PORTA-2
    printf("a=%i",a)-3
    ----------------------------------
    reciever
    ---------------------------------
    int a -1
    scanf("a=%i",a)-2
    3-PORTA=a

    #2
    پاسخ : یک سوال کوچیک از (فوری) usart

    سلام دوست عزیز

    یک نکته که باید در نظر بگیری اینه که در ارتباط USART مهم نیست که متغیرهای تعریف شده در دو طرف از یک نوع باشن یا نه

    می تونی در فرستنده اعداد را به عنوان کارکتر بفرستی ولی در گیرنده آنها را به صورت int در نظر بگیری

    دوم اینکه من به شخصه توابع putchar و getchar را بیشتر میپسندم
    مخصوصا هنگامی که از وقفه های ارسال و دریافت استفاده میشود. زیرا در این شرایط code vision این توابع را برای ارتباط Usart بازتعریف میکند

    اما اصل مطلب:
    ارتباط USART آن هم در حالت آسنکرون بسیار ساده و بی دردسر است و مشکل خاصی ندارد

    مخصوصا اگر از code vision استفاده کنید. اگه از کدویژن استفاده میکنید برای راحتی کار، وقفه های ارسال و دریافت را فعال کنید و از توابع putchar & getchar استفاده کنید
    هر آنچه که میفرستید(putchar) پس از آنکه عمل ارسال تمام شد در گیرنده ایجاد وقفه میکند و با چک کردن بیت وقفه می توانید با getchar آن را بخوانید

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

    همچنین از Baud Rate پایین استفاده کنید

    در صورتی که به یک مرجع کمکی مکتوب با مثال در این زمینه نیاز دارید، من کتاب میکروکنترلرهای AVR ، نوشته مهندس رهآ‌افروز از انتشارات نص را پیشنهاد میکنم

    دیدگاه


      #3
      پاسخ : یک سوال کوچیک از (فوری) usart

      بهتره متغیر int رو با d% بفرستی در گیرنده هم همینطور و یه چیز کوچیک باید در گیرنده وقتی از دستور scanf استفاده میکنی باید دستورت اینطوری باشه: scanf("a=%d,&a)"
      اگر ندانی کجا میروی هر راهی تو را باخود خواهد برد.

      دیدگاه


        #4
        پاسخ : یک سوال کوچیک از (فوری) usart

        سلام:
        شما که نگفتین مشکلتون کجاست. اما توی این خط از برنامه(قسمت رسیور):
        PORTA=a
        بجای PORTA باید بنویسین PINA (البته اگه میخواین از روی پورت بخونین)

        دیدگاه


          #5
          پاسخ : یک سوال کوچیک از (فوری) usart

          نوشته اصلی توسط میثاق
          سلام:
          شما که نگفتین مشکلتون کجاست. اما توی این خط از برنامه(قسمت رسیور):
          PORTA=a
          بجای PORTA باید بنویسین PINA (البته اگه میخواین از روی پورت بخونین)
          با تشکر از جوابتون مشکل بنده اینه که برنامم کار نمیکنه یعنی همون برنامه ی بالا درست کار نمی کنه

          دیدگاه


            #6
            پاسخ : یک سوال کوچیک از (فوری) usart

            نوشته اصلی توسط ourman
            بهتره متغیر int رو با d% بفرستی در گیرنده هم همینطور و یه چیز کوچیک باید در گیرنده وقتی از دستور scanf استفاده میکنی باید دستورت اینطوری باشه: scanf("a=%d,&a)"
            ممنوم

            دیدگاه


              #7
              پاسخ : یک سوال کوچیک از (فوری) usart

              نوشته اصلی توسط ehsan_akbari
              سلام دوست عزیز

              یک نکته که باید در نظر بگیری اینه که در ارتباط USART مهم نیست که متغیرهای تعریف شده در دو طرف از یک نوع باشن یا نه

              می تونی در فرستنده اعداد را به عنوان کارکتر بفرستی ولی در گیرنده آنها را به صورت int در نظر بگیری

              دوم اینکه من به شخصه توابع putchar و getchar را بیشتر میپسندم
              مخصوصا هنگامی که از وقفه های ارسال و دریافت استفاده میشود. زیرا در این شرایط code vision این توابع را برای ارتباط Usart بازتعریف میکند

              اما اصل مطلب:
              ارتباط USART آن هم در حالت آسنکرون بسیار ساده و بی دردسر است و مشکل خاصی ندارد

              مخصوصا اگر از code vision استفاده کنید. اگه از کدویژن استفاده میکنید برای راحتی کار، وقفه های ارسال و دریافت را فعال کنید و از توابع putchar & getchar استفاده کنید
              هر آنچه که میفرستید(putchar) پس از آنکه عمل ارسال تمام شد در گیرنده ایجاد وقفه میکند و با چک کردن بیت وقفه می توانید با getchar آن را بخوانید

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

              همچنین از Baud Rate پایین استفاده کنید

              در صورتی که به یک مرجع کمکی مکتوب با مثال در این زمینه نیاز دارید، من کتاب میکروکنترلرهای AVR ، نوشته مهندس رهآ‌افروز از انتشارات نص را پیشنهاد میکنم
              از جوابتون ممنون ولی من می خواهم از 2 تا پورت وروذی بگیرم با هم بفرستمشون خوب 2 تا پورت یعنی 2تا 8 بیت و برای اینکه بتونم تو گیرنده اطلاعات تشخیص بدم این کارو کردم
              a=PORTA
              b=PORTB
              t=a*256+b
              خوب با توجه به توضیحات بالا نمیتونم داده رو از نوعchar بزارم چون جا نمیشه

              دیدگاه


                #8
                کمک کمک

                سلام مجدد از دوستان تمنا می کنم هر کی هر چی می دونه بگه واقعا کار فوری دارم تا پنج شنبه باید برنامه را آماده کنم تو را به خدا ما را از جواب های زیباتون محروم نکنید

                دیدگاه


                  #9
                  پاسخ : یک سوال کوچیک از (فوری) usart

                  سلام
                  چون خودم به این مشکل بر خورده بودم میگم
                  اگه شبیه سازی تو پروتئوس میکنی حتما یادت باشه که کلاک میکرو رو تو پروتئوس هم تغییر بدی این مشکل یه روز کامل وقت منو گرفت البته شاید مشکل شما نباشه .......................

                  دیدگاه

                  لطفا صبر کنید...
                  X