急~~~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); 展开
#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); 展开
3个回答
展开全部
对于时钟时序要求比较高的UART,一般都是不使用内部的RC震荡电路的,UART允许误差范围是+/- 4%,而内部时钟误差较大,从规格书上看,频率随电压和温度变化的范围达30%,这个是不能和PC通讯的最大原因,所以还是需要外接外部晶振。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个也要看看 内部的熔丝是不是正确,如果不正确是实现不了的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询