اطلاعیه

Collapse
No announcement yet.

کار با usart1 میکرو

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

    کار با usart1 میکرو

    با سلام خدمت دوستان
    من میخوام با توابع کتبخانه stdio با uart1 میکرو atmega162 کار کنم ولی نمیدونم چطوری باهاشون کار کنم چون این توابع با uart0 کار میکنند.
    تو هلپ کدویژن فقط گفته دوتا تابع putchar1 و getchar1 میشه استفاده کرد ولی من میخوام از printf یا putsf و... هم استفاده کنم
    کسی از دوستان به این مشکل برخورده و میتئنه منو راهنمایی کنه؟

    #2
    پاسخ : کار با usart1 میکرو

    نوشته اصلی توسط msadegh
    با سلام خدمت دوستان
    من میخوام با توابع کتبخانه stdio با uart1 میکرو atmega162 کار کنم ولی نمیدونم چطوری باهاشون کار کنم چون این توابع با uart0 کار میکنند.
    تو هلپ کدویژن فقط گفته دوتا تابع putchar1 و getchar1 میشه استفاده کرد ولی من میخوام از printf یا putsf و... هم استفاده کنم
    کسی از دوستان به این مشکل برخورده و میتئنه منو راهنمایی کنه؟
    چه کاریه حالا حتما از توابع آماده کدویژن استفاده کنی !!
    این تابع برای راه اندازی UART میکروی ATmega32 هستش. باهاش می تونی یک بایت رو بفرستی.
    یک نگاهی به دیتاشیت بندازید و رجیسترها رو اسمشونو عوض کنید و با این کار از هر چند تا UART که خواستید استفاده کنید.
    [code=c]void Send_Data(uint8_t data){
    UDR=data;
    while ( !( UCSRA & (1<<UDRE)) ); // wait until Transmit buffer be empty
    UCSRA = (1<<TXC);
    }[/code]
    باز هم تاکید می کنم، فقط اسم رجیسترها رو عوض کنید.
    ---------
    .
    .
    ...........

    دیدگاه


      #3
      پاسخ : کار با usart1 میکرو

      کد:
      #include <delay.h>
      #define F_CPU 11059200UL
       
      #define BaudRate(x) (F_CPU/16ul/(x)-1)
       
       
      void putchar0(char c)
      {
      while ((UCSR0A & (1<<UDRE0))==0);
      UDR0=c;
      }
       
      void putchar1(char c)
      {
      while ((UCSR1A & (1<<UDRE1))==0);
      UDR1=c;
      }
       
      void puts0(char*s)
      {
      while(*s)putchar0(*s++);
      }
       
      void puts1(char*s)
      {
      while(*s)putchar1(*s++);
      }
       
       
      char getchar0(void)
      {  
      while ((UCSR0A & (1<<RXC0))==0);
      return UDR0;  
      }
        
      char getchar1(void)
      {  
      while ((UCSR1A & (1<<RXC1))==0);
      return UDR1;  
      }  
          
        
      void main(void)
      {
      char a;
      
      
      
      
      DDRA=DDRC=0xFF;
       
      UCSR0A=0x00;
      UCSR0B=(1<<TXEN0)|(1<<RXEN0);
      UCSR0C=(1<<UCSZ01)|(1<<RXB80);
      UBRR0H=BaudRate(9600UL) / 256;
      UBRR0L=BaudRate(9600UL) & 0xff;
       
      UCSR1A=0x00;
      UCSR1B=(1<<RXEN1)|(1<<TXEN1);
      UCSR1C=(1<<UCSZ11)|(1<<RXB81);
      UBRR1H=BaudRate(9600UL) / 256;
      UBRR1L=BaudRate(9600UL) & 0xff;
      //puts0 ("Abbas Sarami\r");
      //puts1 ("UART Sample\r");
      //puts0 ("Mega128 UART0 Test");
      //puts1 ("Mega128 UART1 Test");
      puts0 ("Abbas Sarami\r");
      
      
      while(1)
      {
       a++;
       putchar0(a);
       delay_ms(1);
      //PORTA = getchar0();
      //PORTC = getchar1();
      }
       
      }
      www.gam-co.blogsky.com

      دیدگاه


        #4
        پاسخ : کار با usart1 میکرو

        نوشته اصلی توسط vahidabedi
        کد:
        #include <delay.h>
        #define F_CPU 11059200UL
         
        #define BaudRate(x) (F_CPU/16ul/(x)-1)
         
         
        void putchar0(char c)
        {
        while ((UCSR0A & (1<<UDRE0))==0);
        UDR0=c;
        }
         
        void putchar1(char c)
        {
        while ((UCSR1A & (1<<UDRE1))==0);
        UDR1=c;
        }
         
        void puts0(char*s)
        {
        while(*s)putchar0(*s++);
        }
         
        void puts1(char*s)
        {
        while(*s)putchar1(*s++);
        }
         
         
        char getchar0(void)
        {  
        while ((UCSR0A & (1<<RXC0))==0);
        return UDR0;  
        }
          
        char getchar1(void)
        {  
        while ((UCSR1A & (1<<RXC1))==0);
        return UDR1;  
        }  
            
          
        void main(void)
        {
        char a;
        
        
        
        
        DDRA=DDRC=0xFF;
         
        UCSR0A=0x00;
        UCSR0B=(1<<TXEN0)|(1<<RXEN0);
        UCSR0C=(1<<UCSZ01)|(1<<RXB80);
        UBRR0H=BaudRate(9600UL) / 256;
        UBRR0L=BaudRate(9600UL) & 0xff;
         
        UCSR1A=0x00;
        UCSR1B=(1<<RXEN1)|(1<<TXEN1);
        UCSR1C=(1<<UCSZ11)|(1<<RXB81);
        UBRR1H=BaudRate(9600UL) / 256;
        UBRR1L=BaudRate(9600UL) & 0xff;
        //puts0 ("Abbas Sarami\r");
        //puts1 ("UART Sample\r");
        //puts0 ("Mega128 UART0 Test");
        //puts1 ("Mega128 UART1 Test");
        puts0 ("Abbas Sarami\r");
        
        
        while(1)
        {
         a++;
         putchar0(a);
         delay_ms(1);
        //PORTA = getchar0();
        //PORTC = getchar1();
        }
         
        }
        این کد چیکار میکنه؟
        یعنی باری تنظیمات سریال دیگه نباید از ویزراد استفاده کرد؟
        puts0 و puts1 رو هم ارور میگیره

        دیدگاه


          #5
          پاسخ : کار با usart1 میکرو

          اینا چنتا تابع هستش که باید به برنامت اضافه کنی. از این به بعد میتونی از دستورات putchar , puts برای یوزارت 1 هم استفاده کنی.
          www.gam-co.blogsky.com

          دیدگاه

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