Thông báo

Collapse
No announcement yet.

Các đại ca giúp em với :AVR128L với COM

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Các đại ca giúp em với :AVR128L với COM

    Em muốn sử dụng ngắt để nhận một ký tự từ PC. Sau khi nhận được thì gửi lại ký tự đó trở lại PC. Nhưng không thực hiện được. Dưới đây là chương trình viết trên AvrStadio 4 mong các bác chỉ bảo:

    #include <inttypes.h>
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <avr/signal.h>
    // Declare
    void Init_COM(unsigned short) ;
    unsigned char *c;
    unsigned char Flag_Rs232=0;

    SIGNAL(USART1_TX_vect)
    {
    if(Flag_Rs232==1)
    {
    UDR1=*c;
    UCSR1A = (1<<TXC1); // TXC1 = 0
    *c=0;
    Flag_Rs232=0;
    };
    }
    SIGNAL(USART1_UDRE_vect)
    {
    *c=UDR1;
    UCSR1A = (1<<RXC1); // RXC1 = 0
    if(*c==11) Flag_Rs232=1;
    UCSR1A |= (1<<TXC1); // TXC1 = 1

    }
    //-------------------------------
    int main(void)
    {
    Init_COM(9600); // init USART
    sei();
    while(1);
    return 0;
    }

    //------------------------------
    //UBRR: USART Baud Rate Register
    //------------------------------
    void Init_COM(unsigned short BaudRate)
    {
    //-----------------------------------
    // set baud rate
    // F_CPU=8MHz
    // BaudRate=9600
    //-----------------------------------
    //UBRR1H = (uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8) ;
    //UBRR1L = (uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU);
    UBRR1H = (uint8_t)(((F_CPU/(BaudRate * 161))-1)>>8);
    UBRR1L = (uint8_t)((F_CPU/(BaudRate * 161))-1);
    //-----------------------------------
    // Enable receiver and transmitter; enable RX interrupt
    // RXEN1=1
    // TXEN1=1
    // RXCIE1=1
    // TXCIE1=1
    // TXB81=1
    // RXB81=1
    // UCSZ12=1
    //-----------------------------------
    UCSR1B =0xDF;//0xDF
    //-----------------------------------
    //asynchronous 8N1
    // USBS1=1
    // UCSZ11=1
    // UCSZ10=1
    // UMSEL1=0
    //-----------------------------------
    UCSR1C =0x0E;//0x0E;
    }

    Mail: works2000@yahoo.com
    |

  • #2
    Cái này mình viết cho ATMEGA8 không vấn đề khi chuyển qua MEGA khác.Code này chỉ là test cho mạch thôi mình không viết ngắt.
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include "MEGA8KIT-THAI.h"//chứa định nghĩa của mấy cái nút thôi
    void USART_Init( unsigned int baud );
    void USART_Transmit( unsigned char data );
    unsigned char USART_Receive( void );
    void io_init();
    void delay(int time);
    void main()
    {
    	unsigned char temp_char;
    	io_init();
    	USART_Init(12);//baudrate 56000 //đây là tốc độ cao nhất mà mạch mình đạt được.
    	temp_char='0';
    	//thuc hien viec truyen nhan du lieu qua cong noi tiep
    	//truoc tien la truyen du lieu
    	while(1)
    	{
    		temp_char=USART_Receive();
    		USART_Transmit(temp_char);
    	}
    }
    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRRH = (unsigned char)(baud>>8);
    UBRRL = (unsigned char)baud;
    /* Enable Receiver and Transmitter */
    UCSRB = (1<<RXEN)|(1<<TXEN);
    /* Set frame format: 8data, 1stop bit */
    UCSRC = (1<<URSEL)|(0<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
    }
    
    void USART_Transmit( unsigned char data )
    {
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) )
    ;
    /* Put data into buffer, sends the data */
    UDR = data;
    }
    
    unsigned char USART_Receive( void )
    {
    /* Wait for data to be received */
    while ( !(UCSRA & (1<<RXC)) );
    /* Get and return received data from buffer */
    return UDR;
    }
    PS:Mạch này mình sử dụng thạch anh ngoài 12M.Có thể cần điều chỉnh baudrate cho phù hợp với mạch cậu xem datasheet thêm.

    Sông dài, Thuyền lớn, Biển rộng bao la.
    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

    Comment


    • #3
      Cám ơn đại ca, em thử rồi nhưng chỉ truyền từ AVR lên PC còn PC xuống AVR không thực hiện được. Buồn quá,
      Đại ca nào có kinh nghiệm chỉ cho em với. Hu Hu Hu!
      |

      Comment


      • #4
        Em thử truyền từ PC xuống bằng cả hai kiểu TEXT và HEX rồi mà không được.
        Hu Hu
        |

        Comment


        • #5
          Chán cậu quá lấy chươgn trình Terminal của Phạm Thái Hòa post lên đấy rồi mà thử.

          Sông dài, Thuyền lớn, Biển rộng bao la.
          Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

          Comment


          • #6
            Nguyên văn bởi tiennd1978 Xem bài viết
            Em thử truyền từ PC xuống bằng cả hai kiểu TEXT và HEX rồi mà không được.
            Hu Hu
            Bạn nên xem lại phần cứng trước đã!
            PNLab
            Mạch nạp/debug ULink2, Jlink ARM USB
            Mạch nạp AVR, PIC, 8051, MSP430 USB
            Mạch phát triển STM32, ARM9, ARM11
            more...www.pnlabvn.com

            Comment


            • #7
              Rất cám ơn các đại ca, em làm được rồi.
              |

              Comment

              Về tác giả

              Collapse

              tiennd1978 Tìm hiểu thêm về tiennd1978

              Bài viết mới nhất

              Collapse

              Đang tải...
              X