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

 *第6073篇: AVR单片机:串口程序请教

  
楼 主:niudun 2002年11月7日17:52
 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;


}

 
 


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:初学者:求助

[下一篇主题]:初学者:80C296的指令集或资料