<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 6143|回復: 0
    打印 上一主題 下一主題

    PIC24菜鳥畢業留念---GPS串口2接收中斷服務程序

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2009-4-2 22:59:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: GPS , 菜鳥 , 串口 , 服務程序 , 留念
    PIC24菜鳥畢業留念---GPS串口2接收中斷服務程序

    /*------------------------------------------------------------------------
                       GPS串口2接收中斷服務程序(接收GPS數據)
    菜農HotPower之PIC24菜鳥畢業留念    2007.12.20   2:40 于菜地留念   
    -------------------------------------------------------------------------*/
    void __attribute__((interrupt, no_auto_psv)) _U2RXInterrupt( void )
    {
    static unsigned char cData = 0, cPosition;
    unsigned char ch;
        if (IFS1bits.U2RXIF)//確實是GPS串口2接收中斷
        {
            if (IEC1bits.U2RXIE)//GPS串口2接收中斷已被允許
            {
                ch = U2RXREG;//讀取串口GPS數據
                if (ch == '$')//是GPS引導字符
                {
                    cData = ch;//記錄引導字符
                    cPosition = GPSRxWriteCount;//引導字符位置記錄
                    GPSRxBuffers[GPSRxWriteCount ++] = ch;//存入數據
                }
                else if (cData == '$')//收到引導字符
                {        
                    if (ch >= ' ')//可能是有效數據
                    {
                        GPSRxBuffers[GPSRxWriteCount ++] = ch;//存入數據
                    }
                    else if (ch == '*')//GPS校驗引導字符
                    {
                        GPSRxBuffers[GPSRxWriteCount ++] = ch;//存入數據
                    }
                    else if ((ch == '\r') && (GPSRxBuffers[GPSRxWriteCount - 3] == '*'))//回車字符校驗
                    {
                        GPSRxBuffers[GPSRxWriteCount ++] = ch;//存入數據
                    }
                    else
                    {
                        if ((ch == '\n') && (GPSRxBuffers[GPSRxWriteCount - 1] == '\r'))//換行字符校驗
                        {//只取GPRMC語句
                            if (GPSGPRMCTest((char *)&GPSRxBuffers[cPosition + 1]))
                            {
                                GPSRxBuffers[GPSRxWriteCount ++] = ch;//存入數據
                                GPSbits.RXFlag = 1;//激活GPS接收成功解碼程序(在“零耗時鍵盤OS”的空閑任務內細加工處理)
                            }
                        }
                        cData = 0;//結束或出錯
                    }
                }
                else
                {
                    cData = 0;//出錯   
                }
            }
        }
         IFS1bits.U2RXIF = 0;//清除RX2中斷標志
    }


    /*------------------------------------------------------------------------
        GPS串口2初始化程序
    -------------------------------------------------------------------------*/
    void Uart2Init(void)
    {
        TRIS_TX2 = PORTOUTMODE;//設置TX2為輸出IO
        TRIS_RX2 = PORTINPUTMODE;//設置RX2為輸入IO
        U2MODE = 0;
    //    U2MODEbits.STSEL = 0;// 1-stop bit
    //    U2MODEbits.PDSEL = 0;// No Parity, 8-data bits
    //    U2MODEbits.ABAUD = 0;// Autobaud Disabled
        U2STA = 0;
    //    U2STAbits.UTXISEL0 = 0;            // Interrupt after one Tx character is transmitted
    //    U2STAbits.UTXISEL1 = 0;                                       
    //    U2STAbits.URXISEL  = 3;            // Interrupt after one RX character is received
        U2BRG = BRGVAL2;//BAUD Rate Setting for 19200
        U2MODEbits.WAKE    = 1;//啟動位時喚醒使能位
        U2MODEbits.UARTEN   = 1;        // Enable UART
        U2STAbits.UTXEN     = 1;        // Enable UART Tx
    /*------------------------------------------------------------------------
        定義GPS串口2中斷優先級位1111)
    -------------------------------------------------------------------------*/
        IPC7bits.U2RXIP0 = 1;
        IPC7bits.U2RXIP1 = 1;
        IPC7bits.U2RXIP2 = 1;
        IEC1bits.U2RXIE = 1;
        IFS1bits.U2RXIF = 0;//清除RX1中斷標志
        IEC1bits.U2TXIE = 1;
        IFS1bits.U2TXIF = 0;//清除TX1中斷標志
    }
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷