اطلاعیه

Collapse
No announcement yet.

UART در CCS+در خواست کمک

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

    UART در CCS+در خواست کمک

    سلام
    من برای میخوام یه داده 8 بیتی رو با BUAD ریت 1000 بیت در ثانیه با یک سیم بفرستم روی میکرو مقصد و ..........واسه همین باید از پروتکل ارتباطیUART استفاده کنم.اما نمیدونم کدوم دستورات رو باید بکار ببرم و چه جوری؟
    من این دستورات روپیدا کردم .اگه می شه یکم راهنمائی کنید نمیدونم چه جوری ازشون استفاده میشه کرد. (راستی کامپایلرم CCS)
    #use rs232 (options)
    Options are : STREAM=id,BUAD=x,XMIT=pin,RCV=pin,…… …
    =============================================
    setup_uart(baud, stream)
    setup_uart(baud)
    setup_uart(baud, stream, clock)
    set_uart_speed (baud, [stream, clock])
    این دستور #USE rs232 رو واسه استفاده از UART باید فعال کرد؟
    یه سوال دیگه اینکه این UART هم مثلSPI سخت افزاری و نرم افزاری داره؟


    #2
    پاسخ : UART در CCS+در خواست کمک

    سلام .
    باود ریت 1000 که نداریم! مقدار های استاندارد عبارتند از 300 ، 1200 ، 2400 ، 4800 ، 9600 ، 19200 و ...
    اول باید توسط دستور #use rs232 باید سیستم uart رو پیکربندی کنید . یکسری پشن داره که تو help کامپایلر توضیح داده شده . شما اگه یخورده با دقت بخونید راحت متوجه میشید . هرموردش رو که مشکل داشتید اینجا مطرح کنید .
    دستور setup_uart هم برای تنظیم باود ریته . (نیازی به این دستور نیست . زیرا تنظیم باود ریت در دستور #use rs232 نیز می تواند صورت بگیره .)
    بله . uart هم نرم افزاری و سخت افزاری داره . اگه تو دستور #use rs232 عبارت FORCE_SW رو بنویسید ، به صورت نرم افزاری کار ارسال و دریافت رو انجام میده .

    دیدگاه


      #3
      پاسخ : UART در CCS+در خواست کمک

      سلام من این برنامه رو نوشتم ولی کار نمی کنه نظر شما چیه اشکال از کجاست؟؟
      //////////////////////MASTER\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      [left]#include <16F877A.h>
      #use delay(clock=20000000)
      #include <K4X4.c>
      #include <LCD.c>
      #use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
      //to in barnameba keyboard 1 adad be micro ye aval midim va badaz
      //ersal ba protocol UART roye microye dovom namayesh dade mishe
      void main(){
      lcd_init();
      kbd_init();
      unsigned int8 result,i,t;
      while(true){
      do {
      i=kbd_getc();
      } while(i=='\0'
      do {
      t=kbd_getc();
      }while(t=='\0'
      result=((i*10)+t)-16;
      putc(result);
      printf(lcd_putc,"%d",result);
      }}
      \\\\\\\\\\\\\\/////////////////////
      #include <16F877A.h>
      #use delay(clock=20000000)
      #include <LCD.c>
      #use rs232(baud=1200,xmit=PIN_C6,rcv=PIN_C7)
      //to in barnameba keyboard 1 adad be micro ye aval midim va badaz
      //ersal ba protocol UART roye microye dovom namayesh dade mishe
      void main(){
      lcd_init();
      unsigned int8 result=0;
      while(true){
      if(kbhit()){
      result=getc();
      printf(lcd_putc,"%u",result);
      }
      }
      }
      تو پروتوس اصلا پورت خروجی C6 یا C7 فعال نمی شه.
      یه سوال اینکه میکرو از کجا می فهمه USART بصورت UART پیکربندی شده یا USRT??

      دیدگاه


        #4
        پاسخ : UART در CCS+در خواست کمک

        با سلام
        دوست عزیز شما باید به صورت نرم افزاری پایه های مربوط به UART رو با استفاده از دستور TRIS پیکربندی کنید. درضمن دو تا برنامه واسه این ماژول نوشتم که میتونید از لینکهای زیر دانلود کنید:

        1. میکروی MASTER از صفر شروع به شمارش میکنه و میکروی SLAVE عدد رو دریافت میکنه و بر روی LCD نمایش میده
        http://www.4shared.com/file/TY1ZbBvS/USART.html

        2. میکروی MASTER عدد رو از KEYPAD میگیره و اون رو به میکروی SLAVE میفرسته و این میکرو نیز عدد رو روی LCD نمایش میده
        http://www.4shared.com/file/XIszkYUE/USARTKEYPAD.html

        lموفق باشید

        دیدگاه


          #5
          پاسخ : UART در CCS+در خواست کمک

          نوشته اصلی توسط SA3ID
          با سلام
          دوست عزیز شما باید به صورت نرم افزاری پایه های مربوط به UART رو با استفاده از دستور TRIS پیکربندی کنید.
          نه . احتیاجی نیست که پایه ها را توسط دستور tris پیکر بندی کنید . همین که #use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3) را بنویسید ، پایه های مربوطه به یوزآرت تعلق میگیرند . شما برای دریافت اطلاعات از دستور getch() و برای ارسال اطلاعات از دستور putch() میتوانید استفاده کنید . فقط تنظیمات باد ریت و پریتی باید برای فرستنده و گیرنده مشابه هم باشند
          دلا خوبـــان دل خونيــــن پســـندند
          دلا خون شو که خوبان اين پسندند
          متاع کفر و دين بيآ‌مشتري نيست
          گروهــــي آن گروهي اين پســـندند

          دیدگاه


            #6
            پاسخ : UART در CCS+در خواست کمک

            نوشته اصلی توسط SA3ID
            با سلام
            دوست عزیز شما باید به صورت نرم افزاری پایه های مربوط به UART رو با استفاده از دستور TRIS پیکربندی کنید. درضمن دو تا برنامه واسه این ماژول نوشتم که میتونید از لینکهای زیر دانلود کنید:

            1. میکروی MASTER از صفر شروع به شمارش میکنه و میکروی SLAVE عدد رو دریافت میکنه و بر روی LCD نمایش میده
            http://www.4shared.com/file/TY1ZbBvS/USART.html

            2. میکروی MASTER عدد رو از KEYPAD میگیره و اون رو به میکروی SLAVE میفرسته و این میکرو نیز عدد رو روی LCD نمایش میده
            http://www.4shared.com/file/XIszkYUE/USARTKEYPAD.html

            lموفق باشید
            سلام ممنون اما فایل دوم کار نمیکنه هیچی را ال سی دی نشون نمیده. به محض اینکه یه کلید زده میشه دیگه اسکن نمیشه پایه ها.

            دیدگاه


              #7
              پاسخ : UART در CCS+در خواست کمک

              نوشته اصلی توسط ariahope
              سلام ممنون اما فایل دوم کار نمیکنه هیچی را ال سی دی نشون نمیده. به محض اینکه یه کلید زده میشه دیگه اسکن نمیشه پایه ها.
              فکر کنم مشکل تابع keypad باشه چون ارتباط که عین مثال اول هستش. خودت یه تابع واسه keypad بنویس :nice:
              AYRIC

              دیدگاه


                #8
                پاسخ : UART در CCS+در خواست کمک

                پایه های کی پد رو چک کنید درست اتصال داشته باشند و تو کامپایلر درست کانفیگ شده باشند.چون دستور kbd_getc تازمانی ک کاراکتری از صفخه کلید نگیره برنامه به خط بعدی نخواهد رفت.

                دیدگاه


                  #9
                  پاسخ : UART در CCS+در خواست کمک

                  نوشته اصلی توسط roboreza
                  فکر کنم مشکل تابع keypad باشه چون ارتباط که عین مثال اول هستش. خودت یه تابع واسه keypad بنویس :nice:
                  سلام من اومدم تابعی که تو AVR نوشته بودم رو بنویسم اما خیلی مشکل داشت و کار نکرد این تابعی بود که تو avr نوشته بودم شما هم اگه وقت کردید چک کنید ببینید میتونید این رو تبدیل کنید:

                  کد:
                  char row[4]={0xFE,0xFD,0xFB,0xF7};
                  char col[4]={0xE0,0xD0,0xB0,0x70};
                  char keycode[16]={7,8,9,'/',4,5,6,'*',1,2,3,'-','C',0,'=','+'};
                  int keybrd(void)
                  {
                    int i,j;
                    for(i=0;i<4;i++)
                    {
                      PORTC=row[i];
                      delay_us(100);
                      if((PINC&0xF0)!=0xF0)
                      {
                         for(j=0;j<4;j++)
                         {
                           if((PINC&0xF0)==col[j])
                           return keycode[i*4+j];
                         }
                         
                      }
                    }
                  }

                  دیدگاه

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