[求助]
本人最近在用Atmega128串口接收不到GPS模块的数据,代码如下,问题在哪??谢谢啦
#define Crystal 8000000
#define Baud 4800
#include
#include
#define uchar unsigned char
uchar Flag0=0;
uchar Flag1=0;
volatile uchar R_dat1;
volatile uchar R_dat0;
/*串口0的初始化*/
void Uart0_init(void)
{
UCSR0B = 0x00; //禁止发送和接收
UCSR0A = 0x02; //倍速异步模式USX0=1
UBRR0L=(Crystal/16/Baud-1)%256; //根据数据手册的计算法
UBRR0H=(Crystal/16/Baud-1)/256; //如果不是倍速则(Crystal/16/Baud0-1)
UCSR0B=(1<
UCSR0C=(1<
DDRE|=BIT(1); //设置发送口为输出
}
/*串口0单字符发送,查询方式*/
void Uart0_sendbyte(uchar i)
{
while (!(UCSR0A & (1<
UDR0 = i; /* 要发送的数据*/
}
/*串口0字符串发送*/
void Uart0_sendstring(uchar *p)
{
while(*p)
{
Uart0_sendbyte(*p);
p++;
}
}
/*串口0接收中断*/
#pragma interrupt_handler Uart0_rx:19
void Uart0_rx(void)
{
UCSR0B&=~BIT(RXCIE0);//先关接收中断
R_dat0=UDR0; //用变量接收串口1收到的数据
Flag0=1;
UCSR0B|=BIT(RXCIE0);//重开接收中断
}
/***************************这是串口1******************************/
/*串口1的初始化*/
void Uart1_init(void)
{
UCSR1B = 0x00; //禁止发送和接收
UCSR1A = 0x02; //倍速异步模式USX0=1
UBRR1L=(Crystal/8/Baud-1)%256; //根据数据手册的计算法
UBRR1H=(Crystal/8/Baud-1)/256; //如果不是倍速则(Crystal/16/Baud1-1)
UCSR1B=(1<
UCSR1C=(1<
DDRD|=BIT(3); //设置发送口为输出
}
/*串口0单字符发送,查询方式*/
void Uart1_sendbyte(uchar i)
{
while (!(UCSR1A & (1<
UDR1 = i; /* 要发送的数据*/
}
/*串口1字符串发送*/
void Uart1_sendstring(uchar *p)
{
while(*p)
{
Uart1_sendbyte(*p);
p++;
}
}
/*串口1接收中断*/
#pragma interrupt_handler Uart1_rx:31
void Uart1_rx(void)
{
UCSR1B&=~BIT(RXCIE1);//先关接收中断
R_dat1=UDR1; //用变量接收串口1收到的数据
Flag1=1;
UCSR1B|=BIT(RXCIE1);//重开接收中断
}
void main(void)
{
CLI();
SEI();
Uart1_init();
while(1)
{
if(Flag1==1)
Uart0_init();
Uart0_sendbyte(R_dat1);
}
}
暂无评论,赶紧抢沙发吧