اطلاعیه

Collapse
No announcement yet.

مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

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

    مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

    سلام دوستان
    من تو اتمل استودیو و کتاب خانه stdio.h خواستم یوزاتو راش بندازم اما هر کاری کردم نشد با پروتیوس شبیه سازی کردم ولی اصلا کار نمیکنه اولش ریجستر هارو خودم تنظیم کردم کار نکرد بعد اومدم با کد ویزارد تنظیم کردم بازم کار نکرد باود ریتم درسته هم تو شبیه ساز هم تو کد ویژن رو ۲۴۰۰ تنظیمه ولی اصلا یه کلمه هم تو virtual terminal نشون نمیده
    پایه هارو هم درست زدم rx به tx و برعکس
    سپاس از دوستانی که لطف میکنن و برای بنده حقیر وقت میگذارن
    اینم کد:
    کد PHP:
    #ifndef F_CPU
    #define F_CPU 4000000UL
    #endif/*
     
    GccApplication5.c
     
    *
     * 
    Created24/06/1396 02:10:44 ق.ظ
     
    Author Master
     
    */ #include <avr/io.h>
    #include <stdio.h>
    #include <util/delay.h>
    int main(void)
    {
    UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
    UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
    UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
    UBRRH=0x00;
    UBRRL=0x19;
        
    /* Replace with your application code */
        
    putchar(324);
     while (
    1
        {
     
    puts("hello");
     
    _delay_ms(300);
      
        }

    جدیدترین ویرایش توسط Master81; ۲۰:۴۹ ۱۳۹۶/۰۶/۲۶.

    #2
    پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

    سلام
    این یه پروژه کامل در atmel studio با استفاده از کتابخانه uart که توسط peter Fleury نوشته شده و قابلیتهایی مثل بافر دریافت و ... داره
    سوالی بود در خدمتم:
    پرشین گیگ، ارائه دهنده انواع خدمات هاستینگ و میزبانی فایل و خرید سرور مجازی برای اولین بار در ایران به صورت ابری، با کیفیت عالی و قیمت مناسب

    دیدگاه


      #3
      پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

      نوشته اصلی توسط M3R-E نمایش پست ها
      سلام
      این یه پروژه کامل در atmel studio با استفاده از کتابخانه uart که توسط peter Fleury نوشته شده و قابلیتهایی مثل بافر دریافت و ... داره
      سوالی بود در خدمتم:
      http://cdn.persiangig.com/download/I...library.zip/dl
      دوست عزیز من فعلا فقط میخوام یه حرف تو یوزارت نشون بدم اونم فقط با کتاب خونه stdio.h لطفا مشکل این کدی که گذاشتمو بگین خیلی برام مهمه
      اتمل استودیو که بنظرش بدون مشکله

      دیدگاه


        #4
        پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

        نوشته اصلی توسط Master81 نمایش پست ها
        دوست عزیز من فعلا فقط میخوام یه حرف تو یوزارت نشون بدم اونم فقط با کتاب خونه stdio.h لطفا مشکل این کدی که گذاشتمو بگین خیلی برام مهمه
        اتمل استودیو که بنظرش بدون مشکله
        اگه اسرار به استفاده از هدر stdio واسه ارسال از طریق usart دارید لینک زیر رو مطالعه کنید:

        دیدگاه


          #5
          پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

          نوشته اصلی توسط M3R-E نمایش پست ها
          سلام
          این یه پروژه کامل در atmel studio با استفاده از کتابخانه uart که توسط peter Fleury نوشته شده و قابلیتهایی مثل بافر دریافت و ... داره
          سوالی بود در خدمتم:
          http://cdn.persiangig.com/download/I...library.zip/dl
          ببخشید من تو اینترنت ی سرچی کردم بیشتر از همین کتابخونه ای که شما گفتین استفاده کرده بودن
          گفتم منم از همون استفاده کنم همون کتاب خونه خودتون رو دانلود کردم و فایل تست رو تو غالب یک پروژه کپی کردم
          فایل های هدر رو هم با پوشه ریختم تو آدرس پروژه ای که ساختم
          بعد بدو ن کد کامپایل کردم دیدم مشکلی با هدر نداره
          اما وقتی که کد های test_uart رو کپی کردم ارور نشناختن توابع رو میده
          لیست ارور ها:
          Severity Code Description Project File Line
          Error undefined reference to `uart_init' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 41
          Error recipe for target 'GccApplication5.elf' failed GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\Debug\M akefile 108
          Error undefined reference to `uart_puts' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 55
          Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 60
          Error undefined reference to `uart_puts' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 68
          Error undefined reference to `uart_putc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 74
          Error undefined reference to `uart_getc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 85
          Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 101
          Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 110
          Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 118
          Error undefined reference to `uart_putc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 123
          Error ld returned 1 exit status GccApplication5 collect2.exe 0
          همون کد شما:
          کد PHP:
          #ifndef F_CPU
          #define F_CPU 1000000UL
          #endif
          /*
           * GccApplication5.c
           *
           * Created: 27/06/1396 08:46:36 ب.ظ
           * Author : Master
           */ #include <avr/io.h>
          #include <stdlib.h>
          #include <avr/interrupt.h>
          #include "usartlibrary/uart.h"
          #include <avr/pgmspace.h>#include "usartlibrary/uart.h"/* define CPU frequency in Hz in Makefile */
          #ifndef F_CPU
          #error "F_CPU undefined, please define CPU frequency in Hz in Makefile"
          #endif/* Define UART buad rate here */
          #define UART_BAUD_RATE      9600      
          int main(void)
          {
              
          unsigned int c;
              
          char buffer[7];
              
          int  num=134;    
              
          /*
               *  Initialize UART library, pass baudrate and AVR cpu clock
               *  with the macro 
               *  UART_BAUD_SELECT() (normal speed mode )
               *  or 
               *  UART_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
               */
              
          uart_initUART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
              
              
          /*
               * now enable interrupt, since UART library is interrupt controlled
               */
              
          sei();
              
              
          /*
               *  Transmit string to UART
               *  The string is buffered by the uart library in a circular buffer
               *  and one character at a time is transmitted to the UART using interrupts.
               *  uart_puts() blocks if it can not write the whole string to the circular 
               *  buffer
               */
              
          uart_puts("String stored in SRAM\n");
              
              
          /*
               * Transmit string from program memory to UART
               */
              
          uart_puts_P("String stored in FLASH\n");
              
                  
              
          /* 
               * Use standard avr-libc functions to convert numbers into string
               * before transmitting via UART
               */     
              
          itoanumbuffer10);   // convert interger into string (decimal format)         
              
          uart_puts(buffer);        // and transmit string to UART    
              /*
               * Transmit single character to UART
               */
              
          uart_putc('\r');
              
              for(;;)
              {
                  
          /*
                   * Get received character from ringbuffer
                   * uart_getc() returns in the lower byte the received character and 
                   * in the higher byte (bitmask) the last receive error
                   * UART_NO_DATA is returned when no data is available.
                   *
                   */
                  
          uart_getc();
                  if ( 
          UART_NO_DATA )
                  {
                      
          /* 
                       * no data available from UART 
                       */
                  
          }
                  else
                  {
                      
          /*
                       * new data available from UART
                       * check for Frame or Overrun error
                       */
                      
          if ( UART_FRAME_ERROR )
                      {
                          
          /* Framing Error detected, i.e no stop bit detected */
                          
          uart_puts_P("UART Frame Error: ");
                      }
                      if ( 
          UART_OVERRUN_ERROR )
                      {
                          
          /* 
                           * Overrun, a character already present in the UART UDR register was 
                           * not read by the interrupt handler before the next character arrived,
                           * one or more received characters have been dropped
                           */
                          
          uart_puts_P("UART Overrun Error: ");
                      }
                      if ( 
          UART_BUFFER_OVERFLOW )
                      {
                          
          /* 
                           * We are not reading the receive buffer fast enough,
                           * one or more received character have been dropped 
                           */
                          
          uart_puts_P("Buffer overflow error: ");
                      }
                      
          /* 
                       * send received character back
                       */
                      
          uart_putc( (unsigned char));
                  }
              }
              

          جدیدترین ویرایش توسط Master81; ۲۱:۳۲ ۱۳۹۶/۰۶/۲۷.

          دیدگاه


            #6
            پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

            نوشته اصلی توسط Master81 نمایش پست ها
            ببخشید من تو اینترنت ی سرچی کردم بیشتر از همین کتابخونه ای که شما گفتین استفاده کرده بودن
            گفتم منم از همون استفاده کنم همون کتاب خونه خودتون رو دانلود کردم و فایل تست رو تو غالب یک پروژه کپی کردم
            فایل های هدر رو هم با پوشه ریختم تو آدرس پروژه ای که ساختم
            بعد بدو ن کد کامپایل کردم دیدم مشکلی با هدر نداره
            اما وقتی که کد های test_uart رو کپی کردم ارور نشناختن توابع رو میده
            لیست ارور ها:
            Severity Code Description Project File Line
            Error undefined reference to `uart_init' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 41
            Error recipe for target 'GccApplication5.elf' failed GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\Debug\M akefile 108
            Error undefined reference to `uart_puts' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 55
            Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 60
            Error undefined reference to `uart_puts' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 68
            Error undefined reference to `uart_putc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 74
            Error undefined reference to `uart_getc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 85
            Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 101
            Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 110
            Error undefined reference to `uart_puts_p' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 118
            Error undefined reference to `uart_putc' GccApplication5 c:\users\master\Documents\Atmel Studio\7.0\GccApplication5\GccApplication5\main.c 123
            Error ld returned 1 exit status GccApplication5 collect2.exe 0
            همون کد شما:
            کد PHP:
            #ifndef F_CPU
            #define F_CPU 1000000UL
            #endif
            /*
             * GccApplication5.c
             *
             * Created: 27/06/1396 08:46:36 ب.ظ
             * Author : Master
             */ #include <avr/io.h>
            #include <stdlib.h>
            #include <avr/interrupt.h>
            #include "usartlibrary/uart.h"
            #include <avr/pgmspace.h>#include "usartlibrary/uart.h"/* define CPU frequency in Hz in Makefile */
            #ifndef F_CPU
            #error "F_CPU undefined, please define CPU frequency in Hz in Makefile"
            #endif/* Define UART buad rate here */
            #define UART_BAUD_RATE      9600      
            int main(void)
            {
                
            unsigned int c;
                
            char buffer[7];
                
            int  num=134;    
                
            /*
                 *  Initialize UART library, pass baudrate and AVR cpu clock
                 *  with the macro 
                 *  UART_BAUD_SELECT() (normal speed mode )
                 *  or 
                 *  UART_BAUD_SELECT_DOUBLE_SPEED() ( double speed mode)
                 */
                
            uart_initUART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 
                
                
            /*
                 * now enable interrupt, since UART library is interrupt controlled
                 */
                
            sei();
                
                
            /*
                 *  Transmit string to UART
                 *  The string is buffered by the uart library in a circular buffer
                 *  and one character at a time is transmitted to the UART using interrupts.
                 *  uart_puts() blocks if it can not write the whole string to the circular 
                 *  buffer
                 */
                
            uart_puts("String stored in SRAM\n");
                
                
            /*
                 * Transmit string from program memory to UART
                 */
                
            uart_puts_P("String stored in FLASH\n");
                
                    
                
            /* 
                 * Use standard avr-libc functions to convert numbers into string
                 * before transmitting via UART
                 */     
                
            itoanumbuffer10);   // convert interger into string (decimal format)         
                
            uart_puts(buffer);        // and transmit string to UART    
                /*
                 * Transmit single character to UART
                 */
                
            uart_putc('\r');
                
                for(;;)
                {
                    
            /*
                     * Get received character from ringbuffer
                     * uart_getc() returns in the lower byte the received character and 
                     * in the higher byte (bitmask) the last receive error
                     * UART_NO_DATA is returned when no data is available.
                     *
                     */
                    
            uart_getc();
                    if ( 
            UART_NO_DATA )
                    {
                        
            /* 
                         * no data available from UART 
                         */
                    
            }
                    else
                    {
                        
            /*
                         * new data available from UART
                         * check for Frame or Overrun error
                         */
                        
            if ( UART_FRAME_ERROR )
                        {
                            
            /* Framing Error detected, i.e no stop bit detected */
                            
            uart_puts_P("UART Frame Error: ");
                        }
                        if ( 
            UART_OVERRUN_ERROR )
                        {
                            
            /* 
                             * Overrun, a character already present in the UART UDR register was 
                             * not read by the interrupt handler before the next character arrived,
                             * one or more received characters have been dropped
                             */
                            
            uart_puts_P("UART Overrun Error: ");
                        }
                        if ( 
            UART_BUFFER_OVERFLOW )
                        {
                            
            /* 
                             * We are not reading the receive buffer fast enough,
                             * one or more received character have been dropped 
                             */
                            
            uart_puts_P("Buffer overflow error: ");
                        }
                        
            /* 
                         * send received character back
                         */
                        
            uart_putc( (unsigned char));
                    }
                }
                

            مشکل اینو فهمیدم چون کتاب خونه با پسوند C نمیذاشتم این مشکل رو داشت[emoji41]

            Sent from my GT-N5100 using Tapatalk

            دیدگاه


              #7
              پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

              سلام
              یه پروژه کامل به همراه uart سخت افزاری و نرم افزاری واستون آپلود میکنم امیدوارم که به کارتون بیاد uart نرم افزاری هم شما میتونید روی هر پایه از میکرو که خواستید انجام بدین
              پرشین گیگ، ارائه دهنده انواع خدمات هاستینگ و میزبانی فایل و خرید سرور مجازی برای اولین بار در ایران به صورت ابری، با کیفیت عالی و قیمت مناسب

              دیدگاه


                #8
                پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                نوشته اصلی توسط M3R-E نمایش پست ها
                سلام
                یه پروژه کامل به همراه uart سخت افزاری و نرم افزاری واستون آپلود میکنم امیدوارم که به کارتون بیاد uart نرم افزاری هم شما میتونید روی هر پایه از میکرو که خواستید انجام بدین
                http://cdn.persiangig.com/download/r...JZ/uart.rar/dl
                خیلی ممنون دوست عزیز خیلی بدردم خورد و الان کم کم کار با این کتابخونه دستم میاد فقط یه مشکل اساسی دارم اونم اینه که وقتی دستور uart_puts() رو میندازم تو تابع if() اتمل استودیو هشدار میده و بعد میرم تو پروتئوس میبینم بدون توجه به شرط داره مدام پیام یوزارت میده بقیه کد ها هم درست اجرا میشه البته با اینتراپت تست کردم اینطور نبود
                کمک کنید ممنون میشم
                کد PHP:
                #ifndef F_CPU
                #define F_CPU 1000000UL
                #endif

                #include <util/delay.h>
                #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c"
                #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.h"


                int main (void)
                {   
                    
                    
                DDRA=0x00;
                  
                PORTA=0xff;
                    
                uart_init(UART_BAUD_SELECT(2400,F_CPU));
                    
                sei();
                    
                uart_puts("eca.ir\r");


                     while(
                1)
                      {
                         if (
                PINA=0b11111110) {uart_puts("eca\r");};
                     
                _delay_ms(100);
                      }


                ارور اتمل استودیو:

                Suggest parentheses around assignment used as truth value [-Wparentheses]
                جدیدترین ویرایش توسط Master81; ۱۹:۲۹ ۱۳۹۶/۰۶/۳۰.

                دیدگاه


                  #9
                  پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                  نوشته اصلی توسط Master81 نمایش پست ها
                  خیلی ممنون دوست عزیز خیلی بدردم خورد و الان کم کم کار با این کتابخونه دستم میاد فقط یه مشکل اساسی دارم اونم اینه که وقتی دستور uart_puts() رو میندازم تو تابع if() اتمل استودیو هشدار میده و بعد میرم تو پروتئوس میبینم بدون توجه به شرط داره مدام پیام یوزارت میده بقیه کد ها هم درست اجرا میشه البته با اینتراپت تست کردم اینطور نبود
                  کمک کنید ممنون میشم
                  کد PHP:
                  #ifndef F_CPU
                  #define F_CPU 1000000UL
                  #endif

                  #include <util/delay.h>
                  #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c"
                  #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.h"


                  int main (void)
                  {   
                      
                      
                  DDRA=0x00;
                    
                  PORTA=0xff;
                      
                  uart_init(UART_BAUD_SELECT(2400,F_CPU));
                      
                  sei();
                      
                  uart_puts("eca.ir\r");


                       while(
                  1)
                        {
                           if (
                  PINA=0b11111110) {uart_puts("eca\r");};
                       
                  _delay_ms(100);
                        }


                  ارور اتمل استودیو:

                  Suggest parentheses around assignment used as truth value [-Wparentheses]
                  سلام
                  خوشحالم که تونستید جواب بگیرید
                  نحوه چک کردن یک بیت در atmel studio به صورت زیر هست:
                  این شرط واسه زمانی هست که PINA.0 مساوی 1 بشه
                  کد:
                  if (PINA&(1<<0))
                  این شرط هم واسه زمانی هست که PINA.0 مساوی 0 بشه:
                  کد:
                  if (!(PINA & (1<<0)))
                  جدیدترین ویرایش توسط M3R-E; ۱۰:۵۲ ۱۳۹۶/۰۶/۳۱.

                  دیدگاه


                    #10
                    پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                    نوشته اصلی توسط M3R-E نمایش پست ها
                    سلام
                    خوشحالم که تونستید جواب بگیرید
                    نحوه چک کردن یک بیت در atmel studio به صورت زیر هست:
                    این شرط واسه زمانی هست که PINA.0 مساوی 1 بشه
                    کد:
                    if (PINA&(1<<0))
                    این شرط هم واسه زمانی هست که PINA.0 مساوی 0 بشه:
                    کد:
                    if (!(PINA & (1<<0)))
                    دوست گرامی به لطف شما یه برنامه ساختم که با فشردن دکمه ای اطلاعات از طریق uart و بعد بلوتوث ارسال میشد مدارو رو برد برد بستم عالی کار میکرد الان میخوام با وقفه ها کار کنم
                    فعلا که این کد رو قبل از تابع main مینویسم چند تا ارور و هشدار میده می ده
                    کد:
                    Master:
                    #include <avr/io.h>
                    #include <util/delay.h>
                    #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c"
                    #include "C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.h"
                    
                    ISR(UART0_RECEIVE_INTERRUPT)
                    {
                      if(UART_RxHead!=0)uart_puts("ok");
                    
                    }
                    
                    int main (void)
                    {   
                      uart_init(UART_BAUD_SELECT(9600,F_CPU));
                      sei();
                        DDRA=0xff;
                      PORTA=0xff;
                      
                         while(1)
                          {
                         PORTA=1«PORTA0;
                         _delay_ms(300);
                         PORTA=0«PORTA0;
                         _delay_ms(300);
                         
                          }
                    }
                    ارور ها:
                    Severity Code Description Project File Line
                    Message in expansion of macro 'UART0_RECEIVE_INTERRUPT' usart test C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c 362
                    Error recipe for target 'main.o' failed usart test C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usart test\Debug\Makefile 76
                    Message in expansion of macro 'UART0_RECEIVE_INTERRUPT' usart test C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usart test\main.c 10
                    Error redefinition of '__vector_13' usart test C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c 111
                    Message previous definition of '__vector_13' was here usart test C:\Users\ali\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c 111

                    Sent from my GT-N5100 using Tapatalk

                    دیدگاه


                      #11
                      پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                      خواهش میکنم ، کاری نکردم زحمت خودتون بوده
                      این ارورها به خاطر این هست که وقفه دریافت یک بار در هدر uart تعریف شده و شما نمیتونید دوباره اینجا تعریف کنید!
                      دو راه واسه انجام کاری که شما میخواید انجام بدین هست:
                      1- تابع uart_getc رو دائم چک کنید و هر وقت نامساوی 0 بود کاری که میخواید رو انجام بدین
                      2- یه متغیر سراسری تعریف کنید و در هدر uart و وقفه دریافت مقدارش رو تغییر بدین تا متوجه دریافت بشید و کار مورد نظر رو انجام بدین

                      دیدگاه


                        #12
                        پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                        نوشته اصلی توسط M3R-E نمایش پست ها
                        خواهش میکنم ، کاری نکردم زحمت خودتون بوده
                        این ارورها به خاطر این هست که وقفه دریافت یک بار در هدر uart تعریف شده و شما نمیتونید دوباره اینجا تعریف کنید!
                        دو راه واسه انجام کاری که شما میخواید انجام بدین هست:
                        1- تابع uart_getc رو دائم چک کنید و هر وقت نامساوی 0 بود کاری که میخواید رو انجام بدین
                        2- یه متغیر سراسری تعریف کنید و در هدر uart و وقفه دریافت مقدارش رو تغییر بدین تا متوجه دریافت بشید و کار مورد نظر رو انجام بدین
                        از بس سوال کردم که خودم خجالت زده ام بخدا
                        روش اولو گرفتم
                        ولی میشه یکم بیشتر راجع به روش دوم توضیح بدین شرمندم

                        Sent from my GT-N5100 using Tapatalk

                        دیدگاه


                          #13
                          پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                          نوشته اصلی توسط Master81 نمایش پست ها
                          از بس سوال کردم که خودم خجالت زده ام بخدا
                          روش اولو گرفتم
                          ولی میشه یکم بیشتر راجع به روش دوم توضیح بدین شرمندم

                          Sent from my GT-N5100 using Tapatalk
                          این حرفا چیه ، من در خدمتم
                          از مراحل کار عکس گرفتم تا بهتر متوجه بشید:
                          1:به متغیری که قبل از تابع main معرفی بشه میگن متغییر سراسری یا همون global .یه متغیر سراسری به اسم re تعریف کردم:


                          2:همین متغیر رو به همین اسم در uart.c معرفی میکنیم اما با پیشوند extern به این معنی که این متغیری که من الان میخوام اینجا استفاده کنم قبلا جای دیگه معرفی کردم:


                          3: مرحله سوم هم قرار دادن شرط متغیر درون برنامه هست.الان برنامه به این صورت هست که هر بار وقفه دریافت اجرا میشه مقدار متغیر re=100 میشه و تو برنامه هر وقت مقدار این متغیر برابر 100 شد portd.5 به مدت 100 میلی ثانیه روشن میشه و سپس مقدار re=0 میشه.شما میتونید هر جوری دوست دارید برنامه رو تغییر بدید:


                          موفق باشی

                          دیدگاه


                            #14
                            پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                            نوشته اصلی توسط M3R-E نمایش پست ها
                            این حرفا چیه ، من در خدمتم
                            از مراحل کار عکس گرفتم تا بهتر متوجه بشید:
                            1:به متغیری که قبل از تابع main معرفی بشه میگن متغییر سراسری یا همون global .یه متغیر سراسری به اسم re تعریف کردم:


                            2:همین متغیر رو به همین اسم در uart.c معرفی میکنیم اما با پیشوند extern به این معنی که این متغیری که من الان میخوام اینجا استفاده کنم قبلا جای دیگه معرفی کردم:


                            3: مرحله سوم هم قرار دادن شرط متغیر درون برنامه هست.الان برنامه به این صورت هست که هر بار وقفه دریافت اجرا میشه مقدار متغیر re=100 میشه و تو برنامه هر وقت مقدار این متغیر برابر 100 شد portd.5 به مدت 100 میلی ثانیه روشن میشه و سپس مقدار re=0 میشه.شما میتونید هر جوری دوست دارید برنامه رو تغییر بدید:


                            موفق باشی
                            از بزرگی شماست که وقتتون برای من میذارید دوست عزیز
                            بنظر میاد روش اول ساده تر باشه که من از پس اونم برنیومدم
                            بلافاصله بعد از اجرای کد شبیه ساز مدام ok رو مینویسه رو ترمینال

                            کد:
                            #ifndef F_CPU
                            #define F_CPU 8000000UL
                            #endif
                            
                            #include 
                            #include 
                            #include "C:\Users\Master\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c"
                            #include "C:\Users\Master\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.h"
                            
                            
                            
                            
                            int main (void)
                            {   
                              uart_init(UART_BAUD_SELECT(9600,F_CPU));
                              sei();
                                DDRA=0xff;
                              PORTA=0xff;
                              
                                 while(1)
                                  {
                                  if(uart_getc()!=0)
                                   {
                                   uart_puts("ok");
                                    };
                                 
                                  }
                            }
                            جدیدترین ویرایش توسط Master81; ۲۳:۲۰ ۱۳۹۶/۰۷/۰۲.

                            دیدگاه


                              #15
                              پاسخ : مشکل با یوزارت و کتاب خانه stdio.h در Atmel studio

                              نوشته اصلی توسط Master81 نمایش پست ها
                              از بزرگی شماست که وقتتون برای من میذارید دوست عزیز
                              بنظر میاد روش اول ساده تر باشه که من از پس اونم برنیومدم
                              بلافاصله بعد از اجرای کد شبیه ساز مدام ok رو مینویسه رو ترمینال

                              کد:
                              #ifndef F_CPU
                              #define F_CPU 8000000UL
                              #endif
                              
                              #include 
                              #include 
                              #include "C:\Users\Master\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.c"
                              #include "C:\Users\Master\Documents\Atmel Studio\7.0\usart test\usartlibrary\uart.h"
                              
                              
                              
                              
                              int main (void)
                              {   
                                uart_init(UART_BAUD_SELECT(9600,F_CPU));
                                sei();
                                  DDRA=0xff;
                                PORTA=0xff;
                                
                                   while(1)
                                    {
                                    if(uart_getc()!=0)
                                     {
                                     uart_puts("ok");
                                      };
                                   
                                    }
                              }
                              سلام
                              مشکل شما به این دلیل هست که متغیر برگشتی تابع uart_getc از نوع 16 بیتی هست که 8 بیت بالایی مربوط به حالت و یا اروری هست که برای uart پیش اومده.
                              حالا شما دو تا راه حل دارید
                              1:یک متغیر از نوع unsigned char تعریف کنید و قبل از چک کردن شرط برابر با uart_getc قرار بدین:
                              کد:
                                  unsigned char re=0;    
                                  while (1) 
                                  {
                                      re=uart_getc();
                                      if (re!=0 )
                                      {
                                          PORTD|=(1<<5);
                                          _delay_ms(100);
                                      }
                                      else
                                          PORTD&=~(1<<5);        
                                  }
                              2: به روش زیر درون خود دستور شرط مقدار 8 بیت بالایی متغیر بازگشتی از uart_getc رو برابر 0 قرار بدین:
                              کد:
                                  while (1) 
                                  {
                                      if  ( (uart_getc() & 0x00ff )!=0 )
                                      {
                                          PORTD|=(1<<5);
                                          _delay_ms(100);
                                      }
                                      else
                                          PORTD&=~(1<<5);            
                                  }
                              نکته: یه چیزی که من راجع به این هدر یادم رفت بهتون بگم اینه که قابلیت بافر کردن رشته های دریافتی از uart رو داره ، یعنی اگه شما در حال انجام یک عملیات باشید که نتونید تابع uart_getc رو چک کنید بایتهای دریافتی در یک بافر به صورت حلقوی ذخیره میشه که مقدار بافر رو هم از طریق ماکرو UART_RX_BUFFER_SIZE در uart.h قابل تغییر هست که باید توان 2 باشه (32 ، 64 ، 128و ... )

                              دیدگاه

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