中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AVR 單片機UART以查詢、中斷方式發(fā)送數(shù)據(jù)

        AVR 單片機UART以查詢、中斷方式發(fā)送數(shù)據(jù)

        作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
        /****************************************************************************************************************

        * AVR 單片機UART查詢中斷方式發(fā)送數(shù)據(jù)

        本文引用地址:http://www.antipu.com.cn/article/201611/315940.htm

        * 說明:測試環(huán)境 硬件M16、開發(fā)平臺IAR for AVR V5.11B

        ****************************************************************************************************************/

        //----------------------初始化-------------------------------------------------------------------

        void Uart_init(long int baud)
        {
        baud=mclk/16/baud-1; //波特率最大為65K
        UCSRB=0x00;
        UCSRA=0x00; //控制寄存器清零
        UCSRC=(0< UBRRL=baud;
        UBRRH=baud>>8; //設(shè)置波特率
        UCSRB=(1< SREG|=(1<<7); //全局中斷開放
        }

        //---------------------查詢方式 發(fā)送--start----------------------------------------------------------

        /***********************************************************
        *名 稱:
        *功 能:從串口UART0發(fā)送一字節(jié)

        *入口參數(shù):sendB:發(fā)送的單個字節(jié)

        *說 明:

        ***********************************************************/
        void Uart_sendB(uchar sendB)
        {
        while(!(UCSRA&(1<UDR=sendB; //發(fā)送數(shù)據(jù)
        while(!(UCSRA&(1<UCSRA|=1<}

        /***********************************************************
        *名 稱:
        *功 能:從串口UART0發(fā)送一字符串

        *入口參數(shù):*sendpt:字符串首地址
        *說 明:

        ***********************************************************/

        void Uart_sentstr(uchar *sendpt)
        {
        while(*sendpt)//字符串未結(jié)束則繼續(xù)發(fā)送
        {
        Uart_sendB(*sendpt++);
        }
        }

        /***********************************************************
        *名 稱:
        *功 能:從串口UART0發(fā)送一組字節(jié)數(shù)據(jù)
        *入口參數(shù):*p:待發(fā)的首個字節(jié)數(shù)據(jù),len 發(fā)送個數(shù)
        *說 明:

        ***********************************************************/

        void Uart_sentstr_Array(uchar *p,uchar len)
        {
        uchar i;
        for(i=0;i{
        Uart_sendB(*p++);
        }
        }

        //--------------------------------------------end--------------------------------------------------------

        //--------------------------------------------中斷方式發(fā)送-- start-----硬件M164P----------------------------------------

        /******************************************************
        **由宏定義TXRX_FIFO控制此段代碼的編譯
        **用于高效收發(fā)數(shù)據(jù),收發(fā)均不阻塞CPU運行。

        **函數(shù)口中包含了兩種中斷發(fā)送方式,可選擇 緩沖空中斷 || 發(fā)送結(jié)束中斷。
        ******************************************************/
        //#if(TXRX_FIFO==1)
        #define TXRXBUF_SIZE 64
        uchar TXRX_BUFF[TXRXBUF_SIZE];
        volatile uint UART_OutLen=0;
        volatile uint TXRX_IndexR=0;
        volatile uint TXRX_IndexW=0;

        /***********************************************************
        *名 稱:Uart_IntSentBuf
        *功 能:從串口UART0發(fā)送一組字節(jié)數(shù)據(jù)
        *入口參數(shù):*p:待發(fā)的首個字節(jié)數(shù)據(jù),len 發(fā)送個數(shù)
        *出口參數(shù):返回1:發(fā)送成功
        * 返回0:發(fā)送失敗
        *說 明:在發(fā)送過程中,不阻塞CPU的運行。 函數(shù)口中包含了兩種中斷發(fā)送方式,可選擇
        ***********************************************************/
        UINT8 Uart_IntSentBuf(UINT8 *p,UINT8 len)
        {
        UINT8 i;

        if (len <= (TXRXBUF_SIZE-UART_OutLen))//緩存區(qū)空間不小于發(fā)送字節(jié)數(shù)
        {

        //------------方式一 緩沖空中斷--------------------------------------
        if(!(UCSR0B&(1< {
        UART_OutLen=TXRX_IndexR=TXRX_IndexW=0;
        }
        else
        {
        UCSR0B &= ~(1< }

        for ( i=0;i {
        UART_OutLen++;//發(fā)送字節(jié)數(shù)
        UART_RxTx[TXRX_IndexW]=*p++;//移入FIFO數(shù)據(jù)
        if(++TXRX_IndexW >= TXRXBUF_SIZE)
        {
        TXRX_IndexW=0;//FIFO回頭
        }
        }

        if(UCSR0A&(1< UCSR0A|=(1< UCSR0B |= (1< //----------------------end 方式一 ------------------------------------
        /*

        //------------方式二 發(fā)送結(jié)束中斷--------------------------------------
        if(!(UCSR0B&(1< {
        UART_OutLen=TXRX_IndexR=TXRX_IndexW=0;
        for ( i=0;i {
        UART_OutLen++;//發(fā)送字節(jié)數(shù)
        UART_RxTx[TXRX_IndexW]=*p++;//移入FIFO數(shù)據(jù)
        if(++TXRX_IndexW >= TXRXBUF_SIZE)
        {
        TXRX_IndexW=0;//FIFO回頭
        }
        }
        if(UCSR0A&(1< UCSR0A|=1< UCSR0B |= (1< UDR0=UART_RxTx[TXRX_IndexR];
        --UART_OutLen;
        ++TXRX_IndexR;
        }
        else
        {
        UCSR0B &= ~(1< for ( i=0;i {
        UART_OutLen++;//發(fā)送字節(jié)數(shù)
        UART_RxTx[TXRX_IndexW]=*p++;//移入FIFO數(shù)據(jù)
        if(++TXRX_IndexW >= TXRXBUF_SIZE)
        {
        TXRX_IndexW=0;//FIFO回頭
        }
        }
        UCSR0B |= (1< }

        //----------------------end 方式二 ------------------------------------

        */


        return 1;
        }
        else
        return 0;

        }

        //------------方式一 緩沖空中斷--------------------------------------
        #pragma vector = USART0_UDRE_vect
        __interrupt void UsartUDRE(void) //串口緩沖器空中斷函數(shù)聲明
        {
        if(UART_OutLen>0)
        {
        UDR0=UART_RxTx[TXRX_IndexR];
        --UART_OutLen;
        if(++TXRX_IndexR >= TXRXBUF_SIZE)
        {
        TXRX_IndexR=0;//FIFO回頭
        }
        }
        else //發(fā)送結(jié)束
        {
        //UART_OutLen=TXRX_IndexR=TXRX_IndexW=0;
        UCSR0B &= ~(1< }

        }

        //----------------------end 方式一 ------------------------------------

        /*

        //------------方式二 發(fā)送結(jié)束中斷--------------------------------------
        #pragma vector = USART0_TX_vect
        __interrupt void UsartTx(void) //串口發(fā)送結(jié)束中斷函數(shù)聲明
        {
        if(UART_OutLen>0)
        {
        UDR0=UART_RxTx[TXRX_IndexR];
        --UART_OutLen;
        if(++TXRX_IndexR >= TXRXBUF_SIZE)
        {
        TXRX_IndexR=0;//FIFO回頭
        }
        }
        else //發(fā)送結(jié)束
        {
        //UART_OutLen=TXRX_IndexR=TXRX_IndexW=0;
        UCSR0B &= ~(1< }
        }

        //----------------------end 方式二 ------------------------------------

        */

        #endif

        //----------------------------------------------------end---------------------------------------------------------------------



        評論


        技術(shù)專區(qū)

        關(guān)閉