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