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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。