atmega16串口波特率设置问题

2019-03-24 20:32发布

刚刚学avr,按照教程设置串口波特率为9600,但是用串口调试时波特率选600才能正常输出,怎么不是9600呢?代码如下:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

#define F_CPU 16000000
#define BAUD 9600

int main(void)
{
        unsigned char temp = 0x55;
        DDRB = 0xff;
        PORTB = 0xaa;
       
        UBRRH = ( F_CPU/BAUD/16 - 1 ) / 256;        /*设置波特率*/
        UBRRL = ( F_CPU/BAUD/16 - 1 ) % 256;
        UCSRB |= ( 1 << RXEN ) | ( 1 << TXEN ) | ( 1 << RXCIE );        /*接收使能,发送使能,接收结束中断使能*/
        sei();        /*使能全局中断*/
       
        while(1)
        {
                while( !( UCSRA & ( 1 << UDRE ) ) );
                temp = ~temp;
                UDR = temp;
                PORTB = ~PORTB;
                _delay_ms( 1000 );
        }
       
        return 0;
}
请高手指点,谢谢了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ddlxiaoxu
1楼-- · 2019-03-25 01:31
 精彩回答 2  元偷偷看……
gh131413
2楼-- · 2019-03-25 02:58
修改熔丝位吧,选择外部晶振,看下电压支持16M吗,要不换成8M外部晶振,同时软件也要修改晶振频率一致
hnjylijunz
3楼-- · 2019-03-25 04:32
问题在你的熔丝位上,我感觉。你用9600的波特率实际是600, 9600/600=16 .相差16倍,你用的晶振是16M 内部的RC振荡器是1M刚好差16倍。这个应该不是巧合吧?你想想?:

一周热门 更多>