اطلاعیه

Collapse
No announcement yet.

مشکل دریافت داده در hmr به زبان c

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

    مشکل دریافت داده در hmr به زبان c

    سلام دوستان :smile: توی یه تاپیکی من سوالمو مطرح کردم کسی پاسخ نداد واسه همین تاپیک جدید زدم... بیشتریا هم با بسکام کار میکردن...
    من یه hmt و hmr 915mhz دارم که میخوام راه اندازیش کنم . یه ال سیدی به پورت b اتمگا 8 زدم و کاراکتر 1 رو مدام میفرستم .ولی چیزای عجیب غریبی روی ال سیدی نشون میده....


    میشه کمکم کنین؟
    کد:
    #include <mega8.h>  
    #include <delay.h> 
    #asm
      .equ __lcd_port = 0x18; PORTB  0x12 D
    #endasm
    #include <lcd.h> 
    #include <stdlib.h> 
    #include <stdio.h>
     
    #define FRAMING_ERROR (1<<FE)
    #define PARITY_ERROR (1<<PE)
    #define DATA_OVERRUN (1<<DOR)
    #define DATA_REGISTER_EMPTY (1<<UDRE)
    #define RX_COMPLETE (1<<RXC)
    
    
    // USART Receiver buffer
    #define RX_BUFFER_SIZE 64
    char rx_buffer[RX_BUFFER_SIZE];
    #if RX_BUFFER_SIZE<256
    unsigned char rx_wr_index,rx_rd_index,rx_counter;
    #else
    unsigned int rx_wr_index,rx_rd_index,rx_counter;
    #endif
    
    // This flag is set on USART Receiver buffer overflow
    bit rx_buffer_overflow;
    
    //void USART_Transmit(unsigned char);
    //void USART_Receive();
    
    // USART Receiver interrupt service routine
    interrupt [USART_RXC] void usart_rx_isr(void)
    {
     char status,data;
     status=UCSRA;
     data=UDR;   
     if ((status & (FRAMING_ERROR | PARITY_ERROR |DATA_OVERRUN))==0)
     {
      rx_buffer[rx_wr_index]=data;
      if (++rx_wr_index == RX_BUFFER_SIZE)
       rx_wr_index=0;
      if (++rx_counter == RX_BUFFER_SIZE)
      {
       rx_counter=0;
       rx_buffer_overflow=1;
      };
     };
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Get a character from the USART Receiver buffer
    #define _ALTERNATE_GETCHAR_
    #pragma used+
    char getchar(void)
    {
     char data;
     while (rx_counter==0);
     data=rx_buffer[rx_rd_index];
     if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
     #asm("cli")
     --rx_counter;
     #asm("sei")
     return data;
    }
    #pragma used-
    #endif
    
    // USART Transmitter buffer
    #define TX_BUFFER_SIZE 32//64
    char tx_buffer[TX_BUFFER_SIZE];
    #if TX_BUFFER_SIZE<256
    unsigned char tx_wr_index,tx_rd_index,tx_counter;
    #else
    unsigned int tx_wr_index,tx_rd_index,tx_counter;
    #endif
    
    // USART Transmitter interrupt service routine
    interrupt [USART_TXC] void usart_tx_isr(void)
    {
    
     if (tx_counter)
     {
      --tx_counter;
      UDR=tx_buffer[tx_rd_index];
      if (++tx_rd_index == TX_BUFFER_SIZE)
       tx_rd_index=0;
     }; 
    }
    
    #ifndef _DEBUG_TERMINAL_IO_
    // Write a character to the USART Transmitter buffer
    #define _ALTERNATE_PUTCHAR_
    #pragma used+
    void putchar(char c)
    {
                  
     while (tx_counter == TX_BUFFER_SIZE);
     #asm("cli")
     if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
     {
      tx_buffer[tx_wr_index]=c;
      if (++tx_wr_index == TX_BUFFER_SIZE)
       tx_wr_index=0;
      ++tx_counter;
     }
     else
     {  
      UDR=c;
     }
     #asm("sei") 
                 
    }
    #pragma used-
    #endif
    
    /***************************************/
         
    void main()
    { 
      char str;
      UCSRA=0x00;
      UCSRB=0xD8; 
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x67;
     
      #asm("sei") 
      lcd_init(16); 
      lcd_gotoxy(0,0); 
      lcd_putsf("start..");
      delay_ms(1000);
      lcd_clear();
      while(1)
      {  
        printf("1");
        
        while(rx_counter>0)
        {    
            str=getchar();
            if(str=='1')
              lcd_putsf(" ok ");
            else
              lcd_putchar(str);
            delay_ms(100);
        }  
       
      }   
      
    }
    اگه پایه های rx tx میکرو رو به هم وصل کنم کاراکتر ok رو بدون وقفه نشون میده که نشون دهنده این هس که ارسال و دریافت داره به درستی انجام میشه... ولی وقتی به ماژول هام وصل میکنم ممکنه گاهی 3 ،4 تا ok روی ال سیدی نشون بده بقیش معلوم نیس چیه از شکلک وعدد گرفته تا حروف چینی میاد
    میشه بگین چیکار کنم؟
    از دوستانی که راهنمایی کنن پیشاپیش متشکرم

    #2
    پاسخ : مشکل دریافت داده در hmr به زبان c

    سلام
    اینجا سورس نوشته شده هم به زبان سی هست هم بیسیک : http://www.eca.ir/forum2/index.php?t...4217#msg444217
    در فرکانس 915 همیشه یه دیتای اضافه روی نمایشگر میاد که باید با ترفندهای برنامه نویسی حذفشون کنید!
    بازم سوالی باشه و بدونم در خدمتم.
    موفق باشید
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : مشکل دریافت داده در hmr به زبان c

      ممنونم سوران جان.
      ولی سوال من اینجاس :
      من دارم کارکترو بی وقفه ارسال میکنم . اگه به عکس دقت کنی متوجه میشی وقتی کاراکتر درست رو دریافت کردم دیگه خبری از اون کاراکتر نشد...در سیلی از کاراکترهای نامفهمو گم شده....
      حداقل باید مابین اینها بازم ok بشه دگ؟ولی دیگه نمیشه...اگه خیلی شانس بیارم همون اول چندتا بیاد و دیگه نمیاد...
      میشه توضیح بدین ؟ از فایلت هم ممنون

      دیدگاه


        #4
        پاسخ : مشکل دریافت داده در hmr به زبان c

        سلام دوست عزیز.
        این ماژول ها طراحی خوبی نداره و از نویز های محیطی تاثیر میگیره.
        مثلا سیگنال های مودم های وایرلس که این روزا همه جا هستن باعث در یافت داده های اضافی در گیرنده HMr می شه .
        برای همین وقتی با سیم پایه TX رو به Rx وصل می کنید همه چیز درسته ولی با دیافت داده از خروجی HMr داده های اضافی دریافت می کنید که نویز های موجود در محیط اطراف به ویژه مودم های وایلس هست .

        راه حل چیه؟
        باید داده ارسالی رو با یه سری کد اضافی ارسال کنید و در گیرنده بگید اگر این کد اضافی اومد داده صحیحه.
        مثلا برای ارسال "OK" این عبارت رو دائم در فرستنده ارسال کنید : "AB1OK"
        در گیرنده با کد نویسی به میکرو بگید اگر عبارت "AB1" رو دیدی دو کاراکتر بعد رو روی LCD نمایش بده . :job:

        دیدگاه


          #5
          مشکل دریافت داده در hmr به زبان (رفع شد)c

          نوشته اصلی توسط سوران آراسته
          سلام
          اینجا سورس نوشته شده هم به زبان سی هست هم بیسیک : http://www.eca.ir/forum2/index.php?t...4217#msg444217
          در فرکانس 915 همیشه یه دیتای اضافه روی نمایشگر میاد که باید با ترفندهای برنامه نویسی حذفشون کنید!
          بازم سوالی باشه و بدونم در خدمتم.
          موفق باشید
          سلام سوران جان
          مشکلم با کدی که توی این تاپیک پ کردی حل شد !!!1 :applause: :job: :nice:
          آقا هرکی مشکل ن.یز رو داره توی دریافت اطلاعات با ماژولهای hm-r اگه به این روش که سواران جان نوشته برنامه رو بنویسین درس میشه ....
          کدی که سوران جان گذاشتن ایناس که من تغییر هم دادم :
          قسمت رسیور:
          کد:
          #include <mega8.h>
          #include <delay.h>
          #include <stdio.h>
          #asm
            .equ __lcd_port = 0x18; PORTB  0x12 D
          #endasm
          #include <lcd.h> 
          
          void main(void)
          {
          unsigned char buffer[4];
          
            UCSRA=0x00;
            UCSRB=0xD8; 
            UCSRC=0x86;
            UBRRH=0x00;
            UBRRL=0x67;
          //*********************
          lcd_init(16); 
            lcd_gotoxy(0,0); 
            lcd_putsf("start..");
            delay_ms(1000);
            lcd_clear();
            while (1)
            {   
             delay_ms(10);
             gets(buffer,4);
             lcd_clear();
             lcd_puts(buffer); 
            } 
              
          }
          قسمت فرستنده :
          کد:
          #include <mega8.h>
          #include <delay.h>
          #include <stdio.h>
          
          void main(void)
          {
          unsigned char buffer[5]={"1234"};
          DDRB=0xff;
          PORTB=0x00;
          // USART initialization
          // Communication Parameters: 8 Data, 1 Stop, No Parity
          // USART Receiver: Off
          // USART Transmitter: On
          // USART Mode: Asynchronous
          // USART Baud Rate: 9600
          
            UCSRA=0x00;
            UCSRB=0xD8; 
            UCSRC=0x86;
            UBRRH=0x00;
            UBRRL=0x67;
          while (1)
             {
              printf("%s",buffer);
              delay_ms(100);
             
             }
          }
          جالبه خودم الان با همون کد قبلیم جواب گرفتم بدیون هیچ نویزی
          فقط حتما حتما باید ماژول hmr با hmt روی یک میکرو نصب نشه باید جدا باشن.
          ار همه ممنون :applause: :read:

          دیدگاه


            #6
            پاسخ : مشکل دریافت داده در hmr به زبان c

            رسیور :
            کد:
            #include <mega8.h>
            #include <delay.h>
            #include <stdio.h>
            #include <string.h>
            #asm
              .equ __lcd_port = 0x18; PORTB  0x12 D
            #endasm
            #include <lcd.h> 
            
            #define FRAMING_ERROR (1<<FE)
            #define PARITY_ERROR (1<<PE)
            #define DATA_OVERRUN (1<<DOR)
            #define DATA_REGISTER_EMPTY (1<<UDRE)
            #define RX_COMPLETE (1<<RXC)
            
            
            // USART Receiver buffer
            #define RX_BUFFER_SIZE 64
            char rx_buffer[RX_BUFFER_SIZE];
            #if RX_BUFFER_SIZE<256
            unsigned char rx_wr_index,rx_rd_index,rx_counter;
            #else
            unsigned int rx_wr_index,rx_rd_index,rx_counter;
            #endif
            
            // This flag is set on USART Receiver buffer overflow
            bit rx_buffer_overflow;
            
            //void USART_Transmit(unsigned char);
            //void USART_Receive();
            
            // USART Receiver interrupt service routine
            interrupt [USART_RXC] void usart_rx_isr(void)
            {
             char status,data;
             status=UCSRA;
             data=UDR;   
             if ((status & (FRAMING_ERROR | PARITY_ERROR |DATA_OVERRUN))==0)
             {
              rx_buffer[rx_wr_index]=data;
              if (++rx_wr_index == RX_BUFFER_SIZE)
               rx_wr_index=0;
              if (++rx_counter == RX_BUFFER_SIZE)
              {
               rx_counter=0;
               rx_buffer_overflow=1;
              };
             };
            }
            
            #ifndef _DEBUG_TERMINAL_IO_
            // Get a character from the USART Receiver buffer
            #define _ALTERNATE_GETCHAR_
            #pragma used+
            char getchar(void)
            {
             char data;
             while (rx_counter==0);
             data=rx_buffer[rx_rd_index];
             if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
             #asm("cli")
             --rx_counter;
             #asm("sei")
             return data;
            }
            #pragma used-
            #endif
            
            // USART Transmitter buffer
            #define TX_BUFFER_SIZE 32//64
            char tx_buffer[TX_BUFFER_SIZE];
            #if TX_BUFFER_SIZE<256
            unsigned char tx_wr_index,tx_rd_index,tx_counter;
            #else
            unsigned int tx_wr_index,tx_rd_index,tx_counter;
            #endif
            
            // USART Transmitter interrupt service routine
            interrupt [USART_TXC] void usart_tx_isr(void)
            {
            
             if (tx_counter)
             {
              --tx_counter;
              UDR=tx_buffer[tx_rd_index];
              if (++tx_rd_index == TX_BUFFER_SIZE)
               tx_rd_index=0;
             }; 
            }
            
            #ifndef _DEBUG_TERMINAL_IO_
            // Write a character to the USART Transmitter buffer
            #define _ALTERNATE_PUTCHAR_
            #pragma used+
            void putchar(char c)
            {
                          
             while (tx_counter == TX_BUFFER_SIZE);
             #asm("cli")
             if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
             {
              tx_buffer[tx_wr_index]=c;
              if (++tx_wr_index == TX_BUFFER_SIZE)
               tx_wr_index=0;
              ++tx_counter;
             }
             else
             {  
              UDR=c;
             }
             #asm("sei") 
                         
            }
            #pragma used-
            #endif
            void main(void)
            {
            unsigned char buffer[8];
            
              UCSRA=0x00;
              UCSRB=0xD8; 
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x67; 
              #asm("sei") 
            //*********************
            lcd_init(16); 
              lcd_gotoxy(0,0); 
              lcd_putsf("start..");
              delay_ms(1000);
              lcd_clear();
              while (1)
              { 
               while(rx_counter>0)
                {    
                      lcd_putchar(getchar()); 
                    delay_ms(100);
                }  
              } 
                
            }
            فرستنده :
            کد:
            #include <mega8.h>
            #include <delay.h>
            #include <stdio.h>
            
            #define FRAMING_ERROR (1<<FE)
            #define PARITY_ERROR (1<<PE)
            #define DATA_OVERRUN (1<<DOR)
            #define DATA_REGISTER_EMPTY (1<<UDRE)
            #define RX_COMPLETE (1<<RXC)
            
            
            // USART Receiver buffer
            #define RX_BUFFER_SIZE 64
            char rx_buffer[RX_BUFFER_SIZE];
            #if RX_BUFFER_SIZE<256
            unsigned char rx_wr_index,rx_rd_index,rx_counter;
            #else
            unsigned int rx_wr_index,rx_rd_index,rx_counter;
            #endif
            
            // This flag is set on USART Receiver buffer overflow
            bit rx_buffer_overflow;
            
            //void USART_Transmit(unsigned char);
            //void USART_Receive();
            
            // USART Receiver interrupt service routine
            interrupt [USART_RXC] void usart_rx_isr(void)
            {
             char status,data;
             status=UCSRA;
             data=UDR;   
             if ((status & (FRAMING_ERROR | PARITY_ERROR |DATA_OVERRUN))==0)
             {
              rx_buffer[rx_wr_index]=data;
              if (++rx_wr_index == RX_BUFFER_SIZE)
               rx_wr_index=0;
              if (++rx_counter == RX_BUFFER_SIZE)
              {
               rx_counter=0;
               rx_buffer_overflow=1;
              };
             };
            }
            
            #ifndef _DEBUG_TERMINAL_IO_
            // Get a character from the USART Receiver buffer
            #define _ALTERNATE_GETCHAR_
            #pragma used+
            char getchar(void)
            {
             char data;
             while (rx_counter==0);
             data=rx_buffer[rx_rd_index];
             if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
             #asm("cli")
             --rx_counter;
             #asm("sei")
             return data;
            }
            #pragma used-
            #endif
            
            // USART Transmitter buffer
            #define TX_BUFFER_SIZE 32//64
            char tx_buffer[TX_BUFFER_SIZE];
            #if TX_BUFFER_SIZE<256
            unsigned char tx_wr_index,tx_rd_index,tx_counter;
            #else
            unsigned int tx_wr_index,tx_rd_index,tx_counter;
            #endif
            
            // USART Transmitter interrupt service routine
            interrupt [USART_TXC] void usart_tx_isr(void)
            {
            
             if (tx_counter)
             {
              --tx_counter;
              UDR=tx_buffer[tx_rd_index];
              if (++tx_rd_index == TX_BUFFER_SIZE)
               tx_rd_index=0;
             }; 
            }
            
            #ifndef _DEBUG_TERMINAL_IO_
            // Write a character to the USART Transmitter buffer
            #define _ALTERNATE_PUTCHAR_
            #pragma used+
            void putchar(char c)
            {
                          
             while (tx_counter == TX_BUFFER_SIZE);
             #asm("cli")
             if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0))
             {
              tx_buffer[tx_wr_index]=c;
              if (++tx_wr_index == TX_BUFFER_SIZE)
               tx_wr_index=0;
              ++tx_counter;
             }
             else
             {  
              UDR=c;
             }
             #asm("sei") 
                         
            }
            #pragma used-
            #endif
            void main(void)
            {
            unsigned char buffer[]={"123456789abcdf"};
            DDRB=0xff;
            PORTB=0x00;
            
              UCSRA=0x00;
              UCSRB=0xD8; 
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x67;
            
            while (1)
               {
                printf(">send:k1");
                delay_ms(100); 
                printf(">send:chetori ?");
                delay_ms(100);
                
               }
            }
            اتمگا8 ، کریستال 8 مگاهرتز

            موفق باشید

            دیدگاه


              #7
              پاسخ : مشکل دریافت داده در hmr به زبان c

              یک مشکلی هس...
              وقتی بین ارسال داده دیلی میزارم توی رسیور مشکل پیش میاد...کسی نمیدونه واسه چیه ؟
              مثلا تاخیر بین ارسالها رو از 100 میلی ثانیه به 500 تبدیل میکنم همه کاراکترهای دریافتی قاطی پاتی میشه...

              دیدگاه


                #8
                پاسخ : مشکل دریافت داده در hmr به زبان c

                دوست عزیز باید قبل ارسال یک کد هرز بفرستی بعد یه دیلی در حد 20 میلی ثانیه بدی تا از حالت استند بای خارج بشه تا ارسال درست انجام بگیره بعد اطلاعات مورد نظرتون رو بفرستید اون طرف هم با یک if ببینید آیا اون کد هرز دریافت شده یا نه اگه دریافت شد داخل if کاری که می خوای انجام بدید رو انجام بدهید
                یادت نرده اگر تا 50 میلی اطلاعات نفرستی دوباره میره به حالت استند بای

                دیدگاه


                  #9
                  پاسخ : مشکل دریافت داده در hmr به زبان c

                  نوشته اصلی توسط exelance
                  دوست عزیز باید قبل ارسال یک کد هرز بفرستی بعد یه دیلی در حد 20 میلی ثانیه بدی تا از حالت استند بای خارج بشه تا ارسال درست انجام بگیره بعد اطلاعات مورد نظرتون رو بفرستید اون طرف هم با یک if ببینید آیا اون کد هرز دریافت شده یا نه اگه دریافت شد داخل if کاری که می خوای انجام بدید رو انجام بدهید
                  یادت نرده اگر تا 50 میلی اطلاعات نفرستی دوباره میره به حالت استند بای
                  خیلی ممنون دوست عزیز :redface:
                  به نکته خوبی اشاره کردین توی دیتاشیت فرستنده هم نوشته اگه 70 میلی ثانیه استفاده نشه standby میشه ... ولی مشکل اصلی اینه که قسمت رسیور توی زمانی که فرستنده کاملا قطع شده یا ارسال نداره کاراکتر های نامفهوم و الکی از خودش تولید میکنه...
                  هرچند من تو برنامه ملزم کردم که کاراکتر < حتما اول ارسال باشه و آخرش هم با ; تموم بشه ولی باز هم گاهی کارساز نیس :angry: :sad:

                  دیدگاه


                    #10
                    پاسخ : مشکل دریافت داده در hmr به زبان c

                    دوستان عزیز ماژول های hmt-r که فرستنده گیرنده با هم هستند این مشکلات رو ندارن ؟
                    اگه ندارن من بیخیال این ماژول بشم...

                    دیدگاه


                      #11
                      پاسخ : مشکل دریافت داده در hmr به زبان c

                      داداش هر دو ماژول یکی هستن به روشی که گفتم عمل کنین با وقفه هم می تونین انجام بدین اون هم سعی خطا می خواد

                      دیدگاه


                        #12
                        پاسخ : مشکل دریافت داده در hmr به زبان c

                        نوشته اصلی توسط exelance
                        داداش هر دو ماژول یکی هستن به روشی که گفتم عمل کنین با وقفه هم می تونین انجام بدین اون هم سعی خطا می خواد
                        اینکاری که گفتینو انجام دادم خیلی بهتر شد ولی رفع نشد...یک کاری کردم
                        پایه دیتای ماژول گیرنده رو زدم به max232 دادم به کامپیوتر ... هیچ کدوم از اون کاراکترهای بی ربط توی هایپرترمینال نیومدن...
                        دقیقا هرچی که میفرستم میاد.... ولی وقتی میدم به میکرو و میخواد رو lcd نشون بده ، وستاش چیزای بی ربط میاد...

                        دیدگاه


                          #13
                          پاسخ : مشکل دریافت داده در hmr به زبان c

                          سلام دوستان.
                          من دارم رو یه پروژه کار میکنم ک از یه طرف 6تا کلید داره.اون سمتم 6تا ال ای دی.با سیم درست جواب میده ولی با hmt hmr نه.برنامه ای که نوشتمم به این شکله.
                          واسه فرستنده
                          #include <mega8.h>
                          #include <stdio.h>
                          #include <delay.h>
                          char key;
                          void main(void)
                          {
                          PORTB=0xff;
                          DDRB=0x00;
                          PORTC=0x00;
                          DDRC=0xff;
                          UCSRA=0x00;
                          UCSRB=0x08;
                          UCSRC=0x86;
                          UBRRH=0x00;
                          UBRRL=0x33;
                          while (1)
                          {
                          key=PINB;
                          delay_ms(30);
                          if(PINB.0==0){
                          while(PINB.0==0);
                          putchar(0x01);
                          delay_ms(75);
                          putchar(0xdd);
                          };
                          if(PINB.1==0){
                          while(PINB.1==0);
                          putchar(0x02);
                          delay_ms(75);
                          putchar(0xbb);
                          };
                          if(PINB.2==0){
                          while(PINB.2==0);
                          putchar(0x03);
                          delay_ms(75);
                          putchar(0xad);
                          };
                          if(PINB.3==0){
                          while(PINB.3==0);
                          putchar(0x04);
                          delay_ms(75);
                          putchar(0xfa);
                          };
                          if(PINB.4==0){
                          while(PINB.4==0);
                          putchar(0x05);
                          delay_ms(75);
                          putchar(0xce);
                          };
                          if(PINB.5==0){
                          while(PINB.5==0);
                          putchar(0x06);
                          delay_ms(75);
                          putchar(0xc5);
                          };
                          }
                          }

                          گیرنده

                          #include <mega8.h>
                          #include <stdio.h>
                          #include <delay.h>
                          char a,b,s0,s1,s2,s3,s4,s5;
                          void main(void)
                          {
                          PORTB=0x00;
                          DDRB=0xFF;

                          UCSRA=0x00;
                          UCSRB=0x10;
                          UCSRC=0x86;
                          UBRRH=0x00;
                          UBRRL=0x33;
                          while (1)
                          {
                          a=getchar();
                          delay_ms(75);
                          b=getchar();
                          if((a==0x01)&(b==0xdd)){
                          if(s0==0){
                          PORTB.0=1;
                          s0=1;
                          goto l;
                          };
                          if(s0==1){
                          PORTB.0=0;
                          s0=0;
                          };
                          };
                          if((a==0x02)&(b==0xbb)){
                          if(s1==0){
                          PORTB.1=1;
                          s1=1;
                          goto l;
                          };
                          if(s1==1){
                          PORTB.1=0;
                          s1=0;
                          };
                          };
                          if((a==0x03)&(b==0xad)){
                          if(s2==0){
                          PORTB.2=1;
                          s2=1;
                          goto l;
                          };
                          if(s2==1){
                          PORTB.2=0;
                          s2=0;
                          };
                          };
                          if((a==0x04)&(b==0xfa)){
                          if(s3==0){
                          PORTB.3=1;
                          s3=1;
                          goto l;
                          };
                          if(s3==1){
                          PORTB.3=0;
                          s3=0;
                          };
                          };
                          if((a==0x05)&(b==0xce)){
                          if(s4==0){
                          PORTB.4=1;
                          s4=1;
                          goto l;
                          };
                          if(s4==1){
                          PORTB.4=0;
                          s4=0;
                          };
                          };
                          if((a==0x06)&(b==0xc5)){
                          if(s5==0){
                          PORTB.5=1;
                          s5=1;
                          goto l;
                          };
                          if(s5==1){
                          PORTB.5=0;
                          s5=0;
                          };
                          };
                          l :
                          }
                          }
                          قبلا وقفه زمانی20 میلی ثانیه بود که جواب نداد.بعد تغییر دادم به 75 ک بازم نشد.از اینیم که میگین باید از استند بای در بیاد چیزی نمیفهمم!!

                          دیدگاه

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