基於Atmega8單片機的串口收發程序

Atmega8出廠默認的內部時鐘頻率是1Mhz,作串口收發時波特率最高設置爲4800,設置爲9600會亂碼,提升時鐘頻率才能將波特率提升。code

#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 1000000//時鐘頻率
#define BAUD 4800//串口波特率

//定義接收字符
volatile char rx_data;
/************************************************************************/
/* 主程序                                                               */
/************************************************************************/
int main(void){
    //設置波特率
    UBRRH=(F_CPU/BAUD/16-1)/256;
    UBRRL=(F_CPU/BAUD/16-1)%256;
    //接收中斷使能,接收使能,發送使能
    UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    sei(); //使能總中斷
    while(1){
    }
}

/************************************************************************/
/* 串口接收中斷                                                          */
/************************************************************************/
ISR(USART_RXC_vect){
    rx_data = UDR;
    
    //發送接收到的字符
    while(!(UCSRA & (1 << UDRE)));
    UDR = rx_data;
}
相關文章
相關標籤/搜索