急~~~Atmega128 usart程序,为何实现不了pc与单片机通信?用的是avr studio4的编译环境。。。

#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong#include<avr/io... #define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>
#define XTAL 8 //晶振频率,以MHz为单位
void avr_USART1_setup(void)
{
UCSR1B=0b00011000;
UCSR1C=0b00000110;
UBRR1H=0;
UBRR1L=207; //波特率寄存器,2400波特率,使用11.0592Mhz晶振
UCSR1A=0b00100000;
return;
}
void uart1_sendbyte(uchar us_data)
{
UCSR1A &= 0b10111111; //清发送标志位
UCSR1A |= 0b00100000; //提示MCU发送寄存器为空
UDR1=us_data; //写入发送数据
while ((UCSR1A & 0b01000000)==0x00); //等待发送完毕
return;
}
uchar uart1_recievebyte(void)
{
UCSR1A &= 0b01111111; //清接收标志位
UCSR1A |= 0b00100000; //提示MCU发送寄存器为空
while ((UCSR1A & 0b10000000) == 0x00); //等待接收数据
return UDR1;
}
int main(void)
{
uchar data;
avr_USART1_setup();
while(1)
{
data = uart1_recievebyte();
_delay_ms(1);
uart1_sendbyte(data);
_delay_ms(1);*/
}
}
UBRR1L=207; //波特率寄存器,2400波特率,使用11.0592Mhz晶振
_delay_ms(1);*/
上面这两句写错了,改为:
UBRR1L=207; //波特率寄存器,2400波特率,用的是内部的8M的晶振
_delay_ms(1);
展开
 我来答
bh_binghu
2013-08-22 · TA获得超过640个赞
知道小有建树答主
回答量:751
采纳率:50%
帮助的人:383万
展开全部
首先,你要确认你的接收和发送是可以用的,程序运行没有死机,然后把接收和发送两个脚用22欧电阻(主要是为了保护引脚)连接起来。然后你发送一个数,看能否接收到
其次,你要确实你的单片机与电脑的串口线连接正确,接收对发送,发送对接收,不能错
然后,电脑的波特率,校验位,停止位设置正确
伽罗林克
2013-08-20 · TA获得超过2634个赞
知道小有建树答主
回答量:931
采纳率:0%
帮助的人:1188万
展开全部
对于时钟时序要求比较高的UART,一般都是不使用内部的RC震荡电路的,UART允许误差范围是+/- 4%,而内部时钟误差较大,从规格书上看,频率随电压和温度变化的范围达30%,这个是不能和PC通讯的最大原因,所以还是需要外接外部晶振。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2013-08-20 · TA获得超过3712个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1078万
展开全部
这个也要看看 内部的熔丝是不是正确,如果不正确是实现不了的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式