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