soloxin 发表于 2013-5-7 18:10:39

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);
         
      }
    }
}

明天你好 发表于 2013-5-12 00:29:29

改成下面的试试
UBRRH = (((_F_CPU/BAUD)/16)-1)/256;       
UBRRL = (((_F_CPU/BAUD)/16)-1)%256;

foxpro2005 发表于 2013-5-12 00:37:42

unsigned char xtal = 12000000 , baud = 9600;这么显示 的错误 .....

ben001 发表于 2013-5-13 11:14:02

将“unsigned char xtal = 12000000 , baud = 9600;“改为
#define XTAL 12000000
#define BAUD 9600
试一下,因为你初始化变量时,明显移除了,unsigned char的范围是0~255.

soloxin 发表于 2013-5-13 22:27:18

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的范围的了吧

ben001 发表于 2013-5-23 14:48:56

对没错!!
页: [1]
查看完整版本: USART通信收发的结果不一致,困扰很长时间,大家指点一下...