各位大侠,能不能看看下面的程序有什么错误,或需要改进的地方? 端口已经设置好了。编译环境是GCC ,

//发送字符voidusart_send(uchari){while(!(UCSRA&(1<<UDRE)));//采用查询方式发送UDR=i;}//接收中断函数SIGNA... //发送字符
void usart_send(uchar i)
{
while(!(UCSRA&(1<<UDRE))); //采用查询方式发送
UDR=i;
}
//接收中断函数
SIGNAL(SIG_USART_RECV)
{
Recv_Flag=1;
temp=UDR;
}

//主函数
int main(void)
{
init_devices();
Delay_1ms(40);
Recv_Flag=1;
UCSRB|=0x80;
sei();
while(1)
{
if(Recv_Flag)
{
Recv_Flag=0;
usart_send(temp);

}
}
}
编译没错误,但是PC发送了没有接收,
展开
 我来答
coms001
2011-05-05
知道答主
回答量:26
采纳率:0%
帮助的人:14.5万
展开全部
看样子用的AVR,你应该说一下芯片型号。不然不好回答的,这个是全部的程序吗,只看到一条UCSRB|=0x80设置串口的语句,光这个不够的,给你个参考。void intiuart(void)
{

DDRE = 0xFE;// RXD(PE0)输入,上拉有效, TXD(PE1)输出
PORTE = 0xFF;//
// USART初始化
UCSRA = 0x00;
UCSRB = (1<<RXCIE)|(1<<TXEN)|(1<<RXEN) ;// 允许RXC中断,发送允许
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // 8 Data, 1 Stop, No Parity
UBRRH = BAUD_H; // 设置波特率
UBRRL = BAUD_L;

}
#ifndef __UART_0_H__
#define __UART_0_H__

#define BAUD 9600 //波特率采用9600bps
#define CRYSTAL 8000000 //系统时钟8MHz

//计算和定义波特率设置参数
#define BAUD_SETTING (unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1)
#define BAUD_H (unsigned char)(BAUD_SETTING>>8)
#define BAUD_L (unsigned char)(BAUD_SETTING)
// USART控制和状态寄存器的标志位定义
#define RXC 7 // UCSRA位定义
#define TXC 6
#define UDRE 5
#define FE 4
#define DOR 3
#define PE 2
#define U2X 1
#define MPCM 0
#define RXCIE 7 // UCSRB位定义
#define TXCIE 6
#define UDRIE 5
#define RXEN 4
#define TXEN 3
#define UCSZ2 2
#define RXB8 1
#define TXB8 0
#define URSEL 7 // UCSRC位定义
#define UMSEL 6
#define UPM1 5
#define UPM0 4
#define USBS 3
#define UCSZ1 2
#define UCSZ0 1
#define UCPOL 0

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<PE)
#define DATA_OVERRUN (1<<DOR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#endif
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式