导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→AVR单片机:串口程序请教

* 13794: AVR单片机:串口程序请教

   niudun 
niudun发表的帖子 

 AVR单片机:串口程序请教
高手!给看看可以吗?(ATMEGA161) 
存储器定义略,以下串口操作也可以用,当总感觉有些问题,在哪里呢?
/* Initialize USART1 1.8432 crystal*/
void USART1_Init( unsigned int baudrate )
{
    unsigned char x;
    UCSR1B = 0x00; //disable while setting baud rate
    UCSR1A = 0x00; //disable while setting baud rate

  
    /* Set the baud rate */
    UBRRHI = (unsigned char)(baudrate>>8);                  
    UBRR1 = 0x19;
    //(unsigned char) baudrate;
    
     UCSR1A = 0x00; //enable
          UCSR1B = 0xD8; //enable
     
     
    /* Flush receive buffer */
    x = 0;                 
    USART1_RxTail = x;
    USART1_RxHead = x;
    USART1_TxTail = x;
    USART1_TxHead = x;
        
}
#pragma  interrupt_handler USART1_RX_interrupt:15
void USART1_RX_interrupt( void )
{
    
    
    unsigned char data;
    unsigned char tmphead,tmptail;
    
    
        UCSR1A |= (1<<UDRE1);
    
     if((UCSR1A&(1<<UDRE1)) == (1<<UDRE1) )
      {
      
    /* Read the received data */
    data = UDR1;                 
    /* Calculate buffer index */
    tmphead = ( USART1_RxHead + 1 ) & USART1_RX_BUFFER_MASK;
    USART1_RxHead = tmphead;      /* Store new index */

    if ( tmphead == USART1_RxTail )
    {
        /* ERROR! Receive buffer overflow */
    }
    
    USART1_RxBuf[tmphead] = data; /* Store received data in buffer */

     }
     else
     {
     //data = UDR1; 
     }
}

void USART1_Transmit( unsigned char data )
{

    while ( !( UCSR1A & (1<<UDRE1)) )
    ;
// Put data into buffer, sends the data 
   UDR1 = data;


}

 
 


发表时间:2002年11月7日17:52:00

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:我的可以但感觉有问题; 却不知道问题在哪里?交流交流。。我的程序已帖上来了,你的能帖上来吗
[下一篇帖子]:关键是你想要什摩钱 ,挑战,公司 ,技术 ==============