单片机型号:atmega2560,选择的是单片机的USART2口,但是,老是调试不通,上位机接收到的数据不对,下面附上程序:
#define fosc 16000000 //晶振16M
#define baud 9600 //波特率定义
void WaitMs(uint16_t time)
{
uint16_t i=0,j=0;
for(i=0; i<time; i++)
{
for(j=0;j<5000;j++);
}
}
void usart_init(void)
{
UCSR2B = 0x00; //关闭USART2
UCSR2A = 0x00; //串口控制与状态寄存器,不使用倍速
UCSR2C = (0<<UCSZ22)|(1<<UCSZ21)|(1<<UCSZ20); //异步,数据格式8,N,1
UBRR2H = (fosc/baud/16-1)/256;
UBRR2L = (fosc/baud/16-1)%256;
UCSR2B = (1<<RXEN2)|(1<<TXEN2); //接收使能,发送使能
}
//发送数据函数
void send(unsigned char i)
{
while(!(UCSR2A&(1<<UDRE2))); //只有数据寄存器为空时才能发送数据
UDR2=i;
}
//接收数据函数
unsigned char receive(void)
{
while(!(UCSR2A&(1<<RXC2))); //等待接收完成
return UDR2;
}
int main(void)
{
// unsigned char temp;
DDRH|=(1<<PD1);//RXD(PH0)设置为输入,TXD(PH1)设置为输出
PORTH = 0x00;
usart_init();
while(1)
{
send(0x42);
WaitMs(5000);
}
} |