#include<avr/io.h>
//#include<util/tbaud.h>
//BAUD=38400
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
// UCSR0B = 0x18;
UCSR0A = 0x00;
UCSR0C = 0x0e;
UBRRH = 0x00; //设置波特率
UBRRL = 0x19;
UCSR0B = 0x18;
}
void sendchar(unsigned char c)
{
while(!(UCSR0A&(1<<UDRE0)));
UDR0=c;
// while(!(UCSR0A&0x40));
}
main()
{
int i;
unsigned char shu[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uart0_init();
while(1)
{
for(i=0;i<8;i++)
{sendchar(shu);
delay();
}
}
}
void delay(void)
{
unsigned long i;
for(i=0;i<5142;i++);
}
这是ATMEGA88 上的一个串口发送程序。问题是为什么我发出的波特率用内部8M晶振是2.53KHZ 用外部是2.40KHZ
对于8M的晶振0X19波特率应该是9600啊
我用2.40KHZ的波特率发送数据给串口助手显示的是错误的信息。
是什么问题了?是烧写熔丝位的问题还是寄存器的设置什么的有问题、
跪求原子兄弟了。!!在线等!!!!!
|