اطلاعیه

Collapse
No announcement yet.

مشکل ارسال یک کاراکتر اضافه (دات) در USART

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

    مشکل ارسال یک کاراکتر اضافه (دات) در USART

    سلام
    این کد من چرا یه کاراکتر اضافه (دات) هم آخر هر بار ارسال میفرسته؟
    کد:
    #include<p18f4550.h>
    #include<xc.h>
    #include <plib/usart.h>
    
    #define USE_AND_MASKS
    
    #define _XTAL_FREQ 16000000L
    
    #pragma config WDT = OFF
    #pragma config FOSC = HS
    #pragma config BOR = OFF
    #pragma config PWRT = ON
    #pragma config MCLRE = OFF
    #pragma config PBADEN = OFF
    #pragma config LVP = OFF
    #pragma config ICPRT = OFF
    #pragma config DEBUG = OFF
    
    void delayMS(int time);
    unsigned char UART1Config = 0, baud = 0;
    unsigned char msg[]="HELLO FROM PIC\r";
    
    void main(){
    
      //USART CONFIG
      TRISCbits.RC6 = 0; //TX pin set as output
      TRISCbits.RC7 = 1; //RX pin set as input
      UART1Config = USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_BRGH_HIGH ;
      baud = 103;
      OpenUSART(UART1Config,baud);
      //
      while(1){
        putsUSART(msg);
        delayMS(1000);
        
      }
    
    }
    
    void delayMS(int time){
      time=time/10;
      for(int x = 0; x<time; x++){
        __delay_ms(10);
      }
    }
    کد رو تو MPLABX نوشتم و برای کانفیگ و ارسال دیتا از توابع خود میکروچیپ استفاده کردم
    خروجی این کد اینه:
    ;()((void (*)(void))0x0000))

    #2
    پاسخ : مشکل ارسال یک کاراکتر اضافه (دات) در USART

    مشکل از تابع
    کد:
    putsUSART(msg);
    هست که null هم آخرش میفرسته :-w
    ;()((void (*)(void))0x0000))

    دیدگاه


      #3
      پاسخ : مشکل ارسال یک کاراکتر اضافه (دات) در USART

      سلام

      من فکر میکنم چون در انتهای آرایه msg کاراکتر تهی نیست , این اتفاق میوفته
      نا امیدی یه دروغ بزرگه که آدما به خودشون میگن
      تلاش یه حقیقت بزرگه که با صبر به ثمر میرسه

      دیدگاه


        #4
        پاسخ : مشکل ارسال یک کاراکتر اضافه (دات) در USART

        نوشته اصلی توسط ramezani.t
        من فکر میکنم چون در انتهای آرایه msg کاراکتر تهی نیست , این اتفاق میوفته
        همه جوره تستش کردم
        آخر رفتم کد تابع putsUSART رو از فولدر XC8 بررسی کردم دیدم اصلا کارش همینه (البته تو داکیومنتش هم گفته بود اینو ولی متوجه نشده بودم)، آرایه رو همراه با کاراکتر null آخرش میفرسته، بدنه این تابع به این صورته:
        کد:
        void putsUSART( char *data)
        {
         do
         { // Transmit a byte
          while(BusyUSART());
          putcUSART(*data);
         } while( *data++ );
        }
        بعد خودم یه تابع تعریف کردم و بدنه همین تابع قبلی رو با یک تغییر خیلی ریز ولی اساسی به این صورت در آوردم:
        کد:
        void printUSART(char *data){
          while(*data){
          while(BusyUSART());
          WriteUSART(*data);
          *data++;
          }
        }
        و دقیقا اون چیزی که توقع داشتم در اومد ، و دیگه خبری از اون کاراکتر اضافه نبود.
        ****
        پ.ن: تابع
        کد:
        putcUSART(*data)
        دقیقا با
        کد:
        WriteUSART(*data);
        برابر هستن.
        ;()((void (*)(void))0x0000))

        دیدگاه

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