<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Mega128的串口通訊程序

          Mega128的串口通訊程序

          作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
          #i nclude
          #i nclude
          #i nclude "uart.h"
          /* USART Buffer Defines */
          #define USART_RX_BUFFER_SIZE 16 /* 1,2,4,8,16,32,64,128 or 256
          bytes */
          #define USART_RX_BUFFER_MASK ( USART_RX_BUFFER_SIZE - 1 )
          #define USART_TX_BUFFER_SIZE 16 /* 1,2,4,8,16,32,64,128 or 256
          bytes */
          #define USART_TX_BUFFER_MASK ( USART_TX_BUFFER_SIZE - 1 )
          #if ( USART_RX_BUFFER_SIZE & USART_RX_BUFFER_MASK )
          #error RX buffer size is not a power of 2
          #endif
          /* Static Variables */
          static unsigned char USART_RxBuf[USART_RX_BUFFER_SIZE];
          static volatile unsigned char USART_RxHead;
          static volatile unsigned char USART_RxTail;
          static unsigned char USART_TxBuf[USART_TX_BUFFER_SIZE];
          static volatile unsigned char USART_TxHead;
          static volatile unsigned char USART_TxTail;
          /* 串口初始化 */
          void InitUSART(INT8U baudrate)
          {
          INT8U x;
          UBRR0L = baudrate;
          UCSR0B = ( (1<Complete
          Interrupt Enable, Receiver Enable and Transmitter Enable*/
          x = 0; /* flush receive buffer */
          USART_RxTail = x;
          USART_RxHead = x;
          USART_TxTail = x;
          USART_TxHead = x;
          }
          /* 接收中斷 */
          void USART_RX_interrupt( void )
          {
          unsigned char data;
          unsigned char tmphead;
          data = UDR0; /* read the received data */
          tmphead = ( USART_RxHead + 1 ) & USART_RX_BUFFER_MASK;/*
          calculate
          buffer index */
          USART_RxHead = tmphead; /* store new index */
          if ( tmphead == USART_RxTail )
          {
          return;/* ERROR! Receive buffer overflow, you can use
          flux cortorl */
          }
          USART_RxBuf[tmphead] = data; /* store received data in buffer
          */
          }
          /* 發(fā)送中斷 */
          void USART_TX_interrupt( void )
          {
          unsigned char tmptail;
          if ( USART_TxHead != USART_TxTail )/* check if all data is
          transmitted */
          {
          tmptail = ( USART_TxTail + 1 ) & USART_TX_BUFFER_MASK;/*
          calculate buffer index */
          USART_TxTail = tmptail; /* store new index */
          UDR0 = USART_TxBuf[tmptail]; /* start transmition */
          }
          else
          {
          UCSR0B &= ~(1<}
          }
          /* 讀取數(shù)據(jù)函數(shù) */
          unsigned char ReceiveByte( void )
          {
          unsigned char tmptail;
          while ( USART_RxHead == USART_RxTail ) /* wait for incomming
          data */
          ;
          tmptail = ( USART_RxTail + 1 ) & USART_RX_BUFFER_MASK;/*
          calculate
          buffer index */
          USART_RxTail = tmptail; /* store new index */
          return USART_RxBuf[tmptail]; /* return data */
          }
          /* 發(fā)送數(shù)據(jù)函數(shù) */
          void TransmitByte( unsigned char data )
          {
          unsigned char tmphead;
          tmphead = ( USART_TxHead + 1 ) & USART_TX_BUFFER_MASK; /*
          calculate
          buffer index */
          while ( tmphead == USART_TxTail )/* wait for free space in
          buffer */
          ;
          USART_TxBuf[tmphead] = data; /* store data in buffer */
          USART_TxHead = tmphead; /* store new index */
          UCSR0B |= (1<}
          /* 查詢是否有數(shù)據(jù) */
          unsigned char DataInReceiveBuffer( void )
          {
          return ( USART_RxHead != USART_RxTail ); /* return 0 (FALSE)
          if the
          receive buffer is empty */
          }
          /* 中斷中只做很少的事情,通常我是在接收中斷中post一個信號量,觸發(fā)別的任務讀數(shù)據(jù)
          */


          關鍵詞: Mega128串口通

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();