Thông báo

Collapse
No announcement yet.

UART với atmega128

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

  • UART với atmega128

    mình đang thực hiện làm việc với atmega128. viết uart trên nó (UART0) thì dữ liệu báo hiển thị sai. sửa nhiều mà vẫn không được. anh em giúp mình với

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <string.h>
    
    
    void USART_Init (void);
    void USART_Trans(char phat);
    
    unsigned char a[]= "MTA";
    char kytu;
    
    int main (void)
    	{
    	int i;
    	USART_Init();
    	while (1)
    	{
    	for (i=0;i<=strlen(a);i++)
    		{
    		 kytu = a[i];
    		 USART_Trans(a[i]);		 
    		}
    	return 0;
    	}
    	}
    
    void USART_Trans(char phat)
    	{
    	while(bit_is_clear(UCSR0A,UDRE0)) 
    	{};
    	UDR0 = phat;
    	_delay_ms(100);
    	}
    void USART_Init(void)
    	{
    	DDRE   = 0x00;
    	PORTE  = 0xff;
    	UBRR0H = 0;
    	UBRR0L = 51;
    	UCSR0B = (1<<TXEN0)|(1<<TXCIE0);
    	UCSR0C = (1<<UCSZ00)|(UCSZ01);
    	}

  • #2
    bạn thử dùng codevision để tạo mã bằng code wizardAVR ở chế độ truyền thông nối tiếp rùi chép phần khởi tạo đấy và chỉnh lại code bằng AVR studio xem sao mình thử dùng code wizardAVR mô phỏng bằng proteus thấy dữ liệu vẫn truyền đúng.cần phải chú ý giá trị thạch anh nữa,AVR khác 8051 là chỉ cần thạch anh 1MHz là có được chu kỳ 1us .chẳng hạn như là dùng timer với độ chia là 1,thì cứ sau 1us giá trị của TCNTx sẽ được tăng lên 1 đơn vị,do vậy bạn cần xem bạn dùng chế độ truyền thông nào mà tính toán giá trị thạch anh cho hợp lý,mình dùng avrstudi6 nhưng chưa viết code truyền thông nối tiếp với avrstudio6 bao giờ,chỉ viết với codevisionAVR thôi.

    Comment

    Về tác giả

    Collapse

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

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

    Collapse

    Đang tải...
    X