اطلاعیه

Collapse
No announcement yet.

2 تا سوال در مورد UART ??????????

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

    2 تا سوال در مورد UART ??????????

    سلام خدمت دوستان

    سوال1) مثلا من دیتا رو با وقفه USART_RXC به صورت زیر دریافت میکنم.....ببینید درست فهمیدم(آخه یکم قاطی کردم ) :
    *) وقتی دیتا از سمت فرستنده ارسال میشه این وقفه رخ میده و دیتا رو بیت بیت در آرایه str ذخیره میکنه.....درست گفتم؟؟؟؟؟
    **)یا این که کدهای داخل وقفه USART_RXC رو باید داخل تابع main بنویسم و این وقفه هم کارش اینه که وقتی هر بیت از دیتا دریافت بشه..این وقه رخ میده....
    کدوم یکی از این 2 تا موردی که گفتم درسته؟؟؟؟؟

    [code=c]char str[10];
    char data;
    unsigned int i=0;

    interrupt[USART_RXC] void USART_RX_Complete(void)
    {
    data=UDR;
    str[i]=data;

    i++;
    if(i>8)i=0;
    }[/code]


    سوال2) حالا تو وقفه برا ارسال کننده....من کد زیر رو در حلقه while گزاشتم تا هر موقع خواستم دیتا رو بفرستم.....کارم درسته؟؟؟؟؟
    [code=c]for(i=0;i<=7;i++){UDR=a[i];delay_ms(100);}[/code]

    و وقفه ارسال کننده رو هم به صورت زیر نوشتم....
    ببینید درست میگم یا نه : هر موقع هر بیت از دیتامون ارسال میشه وقفه USART_TXC رخ میده....درست گفتم؟؟؟؟؟
    [code=c]interrupt[USART_TXC] void USART_TX_Complete(void)
    {
    PORTB.2=!PORTB.2;
    }[/code]
    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.

    #2
    پاسخ : 2 تا سوال در مورد UART ??????????

    سلام
    سوال اول:
    نوشته اصلی توسط md3848
    مثلا من دیتا رو با وقفه USART_RXC به صورت زیر دریافت میکنم.....ببینید درست فهمیدم(آخه یکم قاطی کردم
    ) وقتی دیتا از سمت فرستنده ارسال میشه این وقفه رخ میده و دیتا رو[glow=red,2,300] بیت بیت[/glow] در آرایه str ذخیره میکنه.....درست گفتم؟؟؟؟؟
    درسته ولی بایت به بایت هستش یعنی با هر بار وقفه که رخ میده یعنی یه بایت از طرف فرستنده رسیده.
    برنامتون در برای دریافت در وقفه درست هستش به جز if که باید 10 باشه چون طول ارایه 10 هستش(البته کمتر یا بیشتر در c مشکلی نداره)
    سوال دوم:
    ارسال با اینتراپت به این صورت هستش که با هر بار مقدار دهی به UDR میکرو شروع به ارسال اطلاعات(1بایت) میکنه و با به پایان رسوندن ارسال وقفه ارسال رخ میده

    دیدگاه


      #3
      پاسخ : 2 تا سوال در مورد UART ??????????

      ممنون از راهنمیت داش
      فقط اگه میگی درسته پس چرا میگی بایت بایت؟؟؟
      من تو وقفه دریافتم بیت بیت دارم دریافت میکنم که!!!!!!!!!!
      ==================================
      میگم uart یه وقفه دیگه هم غیر از این 2 تا داره....اون کارش چیه و برا چیه؟؟؟؟؟؟؟؟؟؟
      اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

      اگه دوس دارید سریع به جواب برسید :
      1) قبل از پرسیدن سوال، بسرچید.
      2) سوالاتون رو با جزئیات کامل مطرح کنید.

      دیدگاه


        #4
        پاسخ : 2 تا سوال در مورد UART ??????????

        کسی نیستتتتتتتتتتتتتتتتتتتتت؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
        ==================================
        میگم این وقفه Data Register Empty کجا دقیقا کاربرد داره....این طور که معلومه ...این وقفه...خالی بودن ریجستر UDR رو نشون میده......ولی سوال من اینه که میگم تو چه پروژه هایی کاربرد داره.....

        مثلا شما یه پروژه بگید که این وقفه کاربرد داشته باشه......تا من برم انجامش بدم
        اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

        اگه دوس دارید سریع به جواب برسید :
        1) قبل از پرسیدن سوال، بسرچید.
        2) سوالاتون رو با جزئیات کامل مطرح کنید.

        دیدگاه


          #5
          پاسخ : 2 تا سوال در مورد UART ??????????

          نوشته اصلی توسط md3848
          کسی نیستتتتتتتتتتتتتتتتتتتتت؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
          ==================================
          میگم این وقفه Data Register Empty کجا دقیقا کاربرد داره....این طور که معلومه ...این وقفه...خالی بودن ریجستر UDR رو نشون میده......ولی سوال من اینه که میگم تو چه پروژه هایی کاربرد داره.....

          مثلا شما یه پروژه بگید که این وقفه کاربرد داشته باشه......تا من برم انجامش بدم
          موقعی که دیتا دریافت میکنی و همون موقع میخوای ارسال هم بکنی کاربرد داره
          باید چک کنی رجیستر خالی باشه بعد دیتا توش بریزی
          نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

          دیدگاه


            #6
            پاسخ : 2 تا سوال در مورد UART ??????????

            نوشته اصلی توسط مجتبی جباری
            موقعی که دیتا دریافت میکنی و همون موقع میخوای ارسال هم بکنی کاربرد داره
            باید چک کنی رجیستر خالی باشه بعد دیتا توش بریزی
            چجوری خالی میشه این UDR؟
            مگه فقط روش over write نمیشه؟

            دیدگاه


              #7
              پاسخ : 2 تا سوال در مورد UART ??????????

              16 بیت هستش....8 تا واس ارسال و 8 تا واس دریافت
              اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

              اگه دوس دارید سریع به جواب برسید :
              1) قبل از پرسیدن سوال، بسرچید.
              2) سوالاتون رو با جزئیات کامل مطرح کنید.

              دیدگاه


                #8
                پاسخ : 2 تا سوال در مورد UART ??????????

                واییییییی دوباره قاط زدم
                وقتی UDR 16 بیت هستش....8 تا واس ارسال و 8 تا واس دریافت.....دیگه این که شما کفتی دیگه واس چیه؟؟؟؟؟؟؟

                یعنی شما میخوای بگی همزمان نمیشه از UDR هم به عنوان ارسال کننده و دریافت کننده استفاده کرد....درست میگم؟؟؟
                اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                اگه دوس دارید سریع به جواب برسید :
                1) قبل از پرسیدن سوال، بسرچید.
                2) سوالاتون رو با جزئیات کامل مطرح کنید.

                دیدگاه


                  #9
                  پاسخ : 2 تا سوال در مورد UART ??????????

                  نوشته اصلی توسط md3848
                  16 بیت هستش....8 تا واس ارسال و 8 تا واس دریافت
                  این چه حرفیه ؟
                  میکروهای AVR (به جز یک سری از Xmega) همه 8 بیتی هستند. پس UDR نمی تونه 16 بیتی باشه.
                  ---------
                  .
                  .
                  ...........

                  دیدگاه


                    #10
                    پاسخ : 2 تا سوال در مورد UART ??????????

                    والا ن کتاب رو دیدم این طور بود...شاید من اشتباه متوجه شدم.....راسم میگی ها....aVR رو چه به 16 بیتی بودن ^_^
                    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                    اگه دوس دارید سریع به جواب برسید :
                    1) قبل از پرسیدن سوال، بسرچید.
                    2) سوالاتون رو با جزئیات کامل مطرح کنید.

                    دیدگاه


                      #11
                      پاسخ : 2 تا سوال در مورد UART ??????????

                      سلام
                      نوشته اصلی توسط md3848
                      16 بیت هستش....8 تا واس ارسال و 8 تا واس دریافت
                      بله درست هستش 16 بیت هستش که یکش فقط خواندنی و دیگری فقط نوشتنی
                      نوشته اصلی توسط ajapyy
                      این چه حرفیه ؟
                      میکروهای AVR (به جز یک سری از Xmega) همه 8 بیتی هستند. پس UDR نمی تونه 16 بیتی باشه.
                      دلیل نمیشه که!!میکرو کنترلر 8 بیتی یعنی ALU اون میتونه عملیات رو روی 8 بیت انجام بده
                      تایمر 1 میکرو کنترلر mega8,16,32... چند بیتیه؟

                      دیدگاه


                        #12
                        پاسخ : 2 تا سوال در مورد UART ??????????

                        دلیل نمیشه که!!میکرو کنترلر 8 بیتی یعنی ALU اون میتونه عملیات رو روی 8 بیت انجام بده
                        تایمر 1 میکرو کنترلر mega8,16,32... چند بیتیه؟
                        یعنی شما میخوای بگی چون تایمر یک، 16 بیتی هستش. پس یک رجیستر 16 بیتی برای اون داریم که میکروی AVR میاد و 8 بیت 8بیت باهاش کار می کنه ؟
                        اون که شما میگید مربوط به معرفی اون قابلیت هستش و نه رجیستراهای داخلی اون.
                        همون تایمر یک به خاطر 16 بیتی بودن به دو رجیستر 8 بیتی تقسیم میشه که پسوند H و L دارند.
                        در مورد رجیستر UDR هم باید بگم که طبق دیتاشیت :
                        یک رجیستر با نام UDR وجود داره که 8 بیتی هستش و اگر روش نوشته بشه انگار به آدرس رجیستر RXB دیتا نوشتی و اگر ازش دیتا بخونی انگار داری با رجیستر TXB کار می کنی و این به خاطر آدرس مشترک بین این رجیستراست.
                        ---------
                        .
                        .
                        ...........

                        دیدگاه


                          #13
                          پاسخ : 2 تا سوال در مورد UART ??????????

                          نوشته اصلی توسط mostafa moradmoghadam
                          بله درست هستش 16 بیت هستش ...
                          مگه میشه توی میکروی 8 بیتی رجیستر 16 بیتی داشته باشیم ؟؟؟؟ :eek:

                          [quote author=AVR Datasheet]
                          The fast-access Register File contains 32 × 8-bit general purpose working registers with a single clock cycle access time.
                          [/quote]

                          موفق باشید
                          امام علي (عليه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

                          دیدگاه


                            #14
                            پاسخ : 2 تا سوال در مورد UART ??????????

                            وقتی همچین وقفه ای داریم....پس فک کنم باس 8 بیتی باشه....که ما میایم و خالی بودنش رو چک میکنیم...

                            آقا نتیجه بحث چی شد؟
                            هر کسی یه چیزی گفت که....نتیچه؟
                            اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

                            اگه دوس دارید سریع به جواب برسید :
                            1) قبل از پرسیدن سوال، بسرچید.
                            2) سوالاتون رو با جزئیات کامل مطرح کنید.

                            دیدگاه


                              #15
                              پاسخ : 2 تا سوال در مورد UART ??????????

                              نوشته اصلی توسط ajapyy
                              یعنی شما میخوای بگی چون تایمر یک، 16 بیتی هستش. پس یک رجیستر 16 بیتی برای اون داریم که میکروی AVR میاد و 8 بیت 8بیت باهاش کار می کنه ؟
                              اون که شما میگید مربوط به معرفی اون قابلیت هستش و نه رجیستراهای داخلی اون.
                              همون تایمر یک به خاطر 16 بیتی بودن به دو رجیستر 8 بیتی تقسیم میشه که پسوند H و L دارند.
                              در مورد رجیستر UDR هم باید بگم که طبق دیتاشیت :
                              یک رجیستر با نام UDR وجود داره که 8 بیتی هستش و اگر روش نوشته بشه انگار به آدرس رجیستر RXB دیتا نوشتی و اگر ازش دیتا بخونی انگار داری با رجیستر TXB کار می کنی و این به خاطر آدرس مشترک بین این رجیستراست.
                              این شد نتیجه.
                              همه رجیسترای AVR به خاطر 8 بیتی بودن پردازنده اون، 8 بیتی هستند. مطمئن باش.
                              حالا این قصه UDR کمی فرق داره. وقتی توش بنویسی در حقیقت داری داخل TXB می نویسی.
                              وقتی ازش می خونی در حقیقت داری محتوای رجیستر RXB رو می خونی.
                              اینها به خاطر یکسان بودن اینه که یک آدرس مشترک دارند.
                              ---------
                              .
                              .
                              ...........

                              دیدگاه

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