AVR168PA GCC下 预设9600波特率但实际是1200波特率(已解决)
本帖最后由 741342386 于 2015-3-15 18:09 编辑#define F_CPU 8000000UL
#define BAUD_RATE 9600 //9600波特率
void uart_init(void) //UART初始化 ( 异步通讯 无效验 1停止位 8数据位模式 )
{
UCSR0B = 0x00; //
//关闭USART0为后续模式设置排除干扰
UCSR0A = 0x00; //
//UBRR0= ( F_CPU/(BAUD_RATE*16L)-1 ); //波特率设置9600为计数器装入初值51
UBRR0L = ( F_CPU/BAUD_RATE/16-1 ) % 256;
UBRR0H = ( F_CPU/BAUD_RATE/16-1 ) / 256;
UCSR0C = ( 0<<UMSEL00 )|( 0<<UPM00 )|( 0<<USBS0 )|( 3<<UCSZ00 );
// 异步通讯 无效验 1停止位 8数据位
UCSR0B = ( 1<<RXEN0 )|(1<<RXCIE0)|( 1<<TXEN0 );
// 允许接收 打开接收中断允许发送
}
代码如上
外部晶振8M20P起振电容 波特率9600
实际通讯为1200波特率,寄存器内放的值为9600波特率的参数. 请求各位百忙之中能否帮我看下.
修正后的熔丝位配置 感谢给位指导 熔丝位没有配置,默认芯片内部RC振荡器,频率1M,这样刚好就是9600/8=1200了
熔丝位CKDIV8取消,或者将预分频计数器CLKPR设置为不分频(复位初始值由CKDIV8决定) 熔丝位是这样配置的 CKDIV8 "0" 是使用,"1" 是不用,正如其它人所说,你使用了时钟除8。 alias 发表于 2015-3-15 17:54
CKDIV8 "0" 是使用,"1" 是不用,正如其它人所说,你使用了时钟除8。
感谢您指点 新手不胜感激 airbox 发表于 2015-3-15 17:40
熔丝位CKDIV8取消,或者将预分频计数器CLKPR设置为不分频(复位初始值由CKDIV8决定) ...
感谢您指点 新手不胜感激 yuanbo19870216 发表于 2015-3-15 17:12
熔丝位没有配置,默认芯片内部RC振荡器,频率1M,这样刚好就是9600/8=1200了
...
感谢您指点 新手不胜感激
页:
[1]