اطلاعیه

Collapse
No announcement yet.

سوال در مورد putchar در avrstudio

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

    سوال در مورد putchar در avrstudio

    سلام
    من یک برنامه ساده داشتم می نوشتم با avrstudio. می خوام روی پورت سریال یک رشته رو بدم به hyper terminal. تو avrstudio برای putchar وارنینگ میده !!
    کسی میدونه علتش چیه ؟؟
    اینم برنامه : (اون اینتراپت واسه یه چیزه دیگست )
    کد:
    #define F_CPU 8000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #include <avr/interrupt.h>
    #include <stdio.h>
    
    
    int main ()
    {
    UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
    UBRRH = 0;
    UBRRH = 51;
    _delay_ms (500);
    MCUCR = (1<<ISC01)|(1<<ISC00);
    GICR = (1<<INT0);
    DDRC = 0xFF;
    sei();
    putchar ("hello world");
    while (1);
    }
    
    ISR(INT0_vect)
    {
    PORTC = 0x01;
    _delay_ms (1000);
    PORTC = 0x00;
    }

    #2
    پاسخ : سوال در مورد putchar در avrstudio

    از اسمش معلومه putchar
    یعنی برای ارسال char یعنی ارسال یک بایت ، نه یک رشته.

    دیدگاه


      #3
      پاسخ : سوال در مورد putchar در avrstudio

      میدونم که putchar ماله کاراکتر هست نه رشته. اما تو کدویژن دقیقا به همین شکل یک رشته رو می فرستم روی هایپر ترمینال با کامپیوتر. تو avrstudio چجوری میشه یک رشته رو فرستاد سوالم اینه ؟؟؟

      دیدگاه


        #4
        پاسخ : سوال در مورد putchar در avrstudio

        این یه هدر فایل واسه شما که خیلی راحت می تونید ازش استفاده کنید:
        avr_usart.h

        کد:
        /*
         * avr_usart.h
         *
         * Created on: Dec 2, 2012
         *   
         */
        
        #ifndef AVR_USART_H_
        #define AVR_USART_H_
        
        // Function prototypes
        char Avr_Usart_Init(unsigned int baudRate);
        char Avr_Usart_Write_Char(char txData);
        char Avr_Usart_Write_String(char* txData);
        char Avr_Usart_Read_Char(void);
        
        #endif /* AVR_USART_H_ */
        avr_usart.c
        کد:
        /*
         * avr_usart.c
         *
         * Created on: Dec 2, 2012
         *   
         */
        
        #include <avr/io.h>
        #include "avr_usart.h"
        
        /************************************************************************
         * @description: Initialize UART.
         *
         * @param: baudRate: Desired Baud Rate calculated according to datasheet.
         *
         * @return: success: returns 1 if operations took place.
         ************************************************************************/
        char Avr_Usart_Init(unsigned int baudRate)
        {
        	char success = 0;
        
        	// Set baud rate
        	UBRR1L = (unsigned char)(baudRate);
        	UBRR1H = (unsigned char)(baudRate >> 8);
        
        	// Enable receiver and transmitter
        	UCSR1B = (1<<RXEN1)|(1<<TXEN1);
        	// Set frame format: 8data, 2stop bits
        	UCSR1C = (1 << UCSZ11) | (1<<UCSZ10);
        
        	success = 1;
        
        	return(success);
        }
        
        /************************************************************************
         * @description: Send 1 character via UART.
         *
         * @param: txData: Character to be sent.
         *
         * @return: success: returns 1 if operations took place.
         ************************************************************************/
        char Avr_Usart_Write_Char(char txData)
        {
        	char success = 0;
        
        	// Wait for transmission buffer to become empty
        	while(!(UCSR1A & (1 << UDRE1)));
        	// Place new data into buffer
        	UDR1 = txData;
        
        	success = 1;
        
        	return(success);
        }
        
        /************************************************************************
         * @description: Send a string via UART.
         *
         * @param: *txData: String to be sent.
         *
         * @return: success: returns 1 if operations took place.
         ************************************************************************/
        char Avr_Usart_Write_String(char* txData)
        {
        	char success = 0;
        	int i = 0;
        
        	// While not end of transmit string
        	while(txData[i] != '\0')
        	{
        		// Print string one char at a time
        		Avr_Usart_Write_Char(txData[i]);
        		// Increment char position in string
        		i++;
        	}
        
        	success = 1;
        
        	return(success);
        }
        
        /************************************************************************
         * @description: Read a character via UART.
         *
         * @param: None.
         *
         * @return: UDR1: Character read via UART.
         ************************************************************************/
        char Avr_Usart_Read_Char(void)
        {
        	// wait for data to be received
        	while(!(UCSR1A & (1 << RXC1)));
        
        	// Return read data
        	return(UDR1);
        }
        اینم یه نمونه کد:

        کد:
        /*
         * main.c
         *
         * Created on: Dec 2, 2012
         *   
         */
        
        #include <avr/io.h>
        #include "avr_usart.h"
        
        int main(void)
        {
        	char rxData = 0;
        
        	// Initialize USART
        	// Baud Rate 19200 (for 8 MHz Clock)
        	// 8 Data Bits
        	// 2 Stop Bits
        	// Enable RX and TX
        	Avr_Usart_Init(25);
        
        	// Infinite Loop
        	while(1)
        	{
        		// Print Input Request Messege
        		Avr_Usart_Write_String("Press [w] to print a messege: ");
        		// Read input char
        		rxData = Avr_Usart_Read_Char();
        		// Loopback print input char
        		Avr_Usart_Write_Char(rxData);
        		Avr_Usart_Write_String("\n\r");
        		// Check if input char is 'w'
        		if(rxData == 'w')
        		{
        			// Print "Hello World!" messege
        			Avr_Usart_Write_String("Hello World!\n\r");
        			// Reset rxData to avoid infinite printing of messege
        			rxData = 0;
        		}
        	}
        	return(0);
        }

        دیدگاه


          #5
          پاسخ : سوال در مورد putchar در avrstudio

          در هدر نوشتن
          کد:
          #ifndef AVR_USART_H_
          چرا حروف بزرگ نوشتین ؟
          چرا آخرش آندرلاین داره ؟
          ترجمه این عبارت اینه آیا ؟ اگر AVR_USART_H_ تا حالا تعریف نشده تعریفش کن


          ******** یَاربَّ الحسَینِ ؛ بحَقٍِّ الحسَینِ ؛ اِشفِ صَدرَ الحسَینِ ؛ بِظُهوُرِالحجَّةِ *******
          اللهم صل علی محمد وآل محمد و عجل فرجهم

          دیدگاه

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