基於Atmega8微控制器的串列埠收發程式

志遠電子發表於2019-05-14

Atmega8出廠預設的內部時脈頻率是1Mhz,做串列埠收發時波特率最高設定為4800,設定為9600會亂碼,提高時脈頻率才能將波特率提高。


#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;
}

相關文章