USART通信收发的结果不一致,困扰很长时间,大家指点一下...
#include <mega16.h>unsigned char data;
bit flag = 0;
void Port_Init()
{
DDRD = 0X02;
PORTD = 0X03;
}
void USART_Init(unsigned int xtal,unsigned int baud)
{
UBRRH =(xtal/16/baud-1)>>8;
UBRRL =(xtal/16/baud-1) ;
UCSRA = 0X00;
UCSRB = (1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
}
void USART_Transmit(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)));
UDR = data;
}
interrupt void usart_rx_isr(void)
{
data = UDR;
flag = 1;
}
void main()
{
unsigned char xtal = 12000000 , baud = 9600;
Port_Init();
USART_Init(xtal,baud);
#asm("sei")
while(1)
{
if(flag)
{
flag = 0;
USART_Transmit(data);
}
}
} 改成下面的试试
UBRRH = (((_F_CPU/BAUD)/16)-1)/256;
UBRRL = (((_F_CPU/BAUD)/16)-1)%256; unsigned char xtal = 12000000 , baud = 9600;这么显示 的错误 ..... 将“unsigned char xtal = 12000000 , baud = 9600;“改为
#define XTAL 12000000
#define BAUD 9600
试一下,因为你初始化变量时,明显移除了,unsigned char的范围是0~255. ben001 发表于 2013-5-13 11:14 static/image/common/back.gif
将“unsigned char xtal = 12000000 , baud = 9600;“改为
#define XTAL 12000000
#define BAUD 9600
也就是12000000超过了unsigned char的范围的了吧 对没错!!
页:
[1]