AVR单片机串口程序遇到的问题,Atmega48PA-PU
在微雪买了个STK48+的开发板,在用它的串口示例程序时候,老是出现打印错误。有没有做过这个的朋友,在下虚心求教!附上代码:voiduart_init(void){UCS...
在微雪买了个STK48+的开发板,在用它的串口示例程序时候,老是出现打印错误。有没有做过这个的朋友,在下虚心求教!附上代码:
void uart_init(void)
{
UCSR0A=0x00;
UCSR0B=0x98;//接收发送使能
UCSR0C=0x06;
UBRR0H=0x00;//9600
UBRR0L=0x2F;
}
void uart_send(unsigned char c)
{
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
}
int main(void)
{
uart_init();
// PORTD=0x01;
// DDRD=0xFF;
while(1)
{
uart_send('a');
// if(PORTD==0x80) PORTD=0x01;
// else PORTD<<=1;
_delay_ms(500);
}
} 展开
void uart_init(void)
{
UCSR0A=0x00;
UCSR0B=0x98;//接收发送使能
UCSR0C=0x06;
UBRR0H=0x00;//9600
UBRR0L=0x2F;
}
void uart_send(unsigned char c)
{
while(!(UCSR0A & (1<<UDRE0)));
UDR0 = c;
}
int main(void)
{
uart_init();
// PORTD=0x01;
// DDRD=0xFF;
while(1)
{
uart_send('a');
// if(PORTD==0x80) PORTD=0x01;
// else PORTD<<=1;
_delay_ms(500);
}
} 展开
展开全部
1、看看芯片的熔丝位设置的是否正确,是否使用的是内部1m的振荡器
2、看看串口工具的波特率是否和代码里设置的一样
2、看看串口工具的波特率是否和代码里设置的一样
更多追问追答
追问
同样的设置,我用代码驱动LED就可以正常工作,所以说熔丝位和振荡器应该是没错的,软件和调试工具的波特率一样的,9600。我也很纳闷,不知道到底什么错了?
追答
LED可以工作 不代表熔丝位正确,如果使用内部1m的振荡器,芯片同样工作,led只需要高低电平就可以亮,但是串口需要计算每个数据bit的时间。而这个时间据取决于晶振的频率和寄存器的设置,如果你是按照12m的晶振设置寄存器,却用1m的晶振,那收发肯定是乱码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询