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