新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 捷達汽車組合儀表的串行通訊的實現

        捷達汽車組合儀表的串行通訊的實現

        作者: 時間:2013-02-17 來源:網絡 收藏

        //檢查接收的數據是否準備好,為1表示接收移位寄存器已收到一個完整的數據,并送到接收緩沖器中
        if(intTemp>intWaitTime)
        {Error();}
        }
        if(!blnBeyondWaitTime)
        bytResult=InportB(intDRR);//intDRR=0x3f8
        return bytResult;
        }
        VOld TForml∷subSendByte(byte bytSend)
        {
        byte bytTemp;
        bytTemp=InportB(intLSR);
        //檢查發送緩沖器是否為空,1為空
        while((bytTemp0x20)!=0x20)
        bytTemp=InportB(intLSR);
        OutportB(0x3F8,bytSend); //發送緩沖器為空
        bytTemp=InportB(intLSR);
        //檢查發送移位寄存器是否為空,即發送緩沖器的數據是否送完
        while((bytTemp0x40)!=0x40)
        bytTemp=InportB(intLSR);
        bytTemp=InportB(intLSR);
        //檢查接收的數據是否準備好,為1表示接收移位寄存器已收到一個完整的數據,并送到接收緩沖器中
        while((bytTemp 0x1)!=0x1)
        bytTemp=InportB(intLSR);
        bytTemp=InportB(intDRR);
        //清空接收緩沖區中的發送數據
        }

        在此基礎上建立本通訊初始化的主函數,如清單2所示:

        清單2:

        void TForml∷InitRS232(void)
        {
        String strTemp;//Dim strTemp As String
        byte bytTemp; //Dim bytTemp As Byte
        int intTemp; //Dim intTemp As Integer
        int i; //Dim I As Integer
        //Stepl:
        OutportB (intLCR,0x80);
        //輸出控制字,下面輸出波特串
        OutportB(intLSB,0x0); //低位
        OutportB(intMSB,0x5A); //高位
        OutportB(intLCR,0xA);
        //5 bit,l起始位,1奇偶位和1停止位
        OutportB(intIER,0); //抑制中斷
        strTemp="";
        subSendByte (0x * *) //發送建立通訊密碼
        //Step2:
        OutportB(intLCR,0x80);
        //輸出控制字,下面輸出波特率
        OutportB(intLSB,0xB);
        OutportB(intMSB,0x0);
        OutportB(intLCR,0x3);//10400,8,N
        strTemp=strTemp+""+IntToHex(bytReceiveByte(),2);
        //Step3:
        Receive the Low byte Of Key Word
        strTemp=strTemp+""+IntToHex(bytReceiveByte(),2);
        //Step4:
        Receive the High byte Of Key Word
        bytTemp=bytReceiveByte();
        strTemp=strTemp+""+IntToHex(bytTemp,2);
        //Step5:

        下面PC送高位字節的取反

        if(! blnBeyondWaitTime)
        subSendByte(byte(~bytTemp)); //byte
        else
        {Error();}
        //Step 6 Receive the block data
        if (! blnReceiveIDBlock(16)) //接收第1個ID塊,為16B
        {Error();}
        if (! blnReceiveIDBlock(16)) //接收第2個ID塊,為16B
        {Error();}
        if (! blnReceiveIDBlock(15)) //接收第3個ID塊,為15B
        {Error();}
        if (! blnReceiveIDBlock(9)) //接收第4個ID塊,為9B
        {Error();}
        //Cluster)> >PC
        subReceiveTheFifthBlock();
        String ResOfFT=strTestDataStream(strEnableFT);
        //儀表Epprom可讀寫命令
        if(ResOfFT==EmptyStr)
        {Error();}
        blnInitRS232=True;

        4 結 語

        本文采用C++Builder軟件平臺成功開發了儀表特殊串行口通訊程序,該系統在西門子VDO(蕪湖)公司生產線投入使用一年多,與采用快速通訊方式相比通訊傳輸性能穩定,并具有了方便美觀的用戶界面,為實現儀表檢測設備奠定了基礎,具有重要的應用價值。(end)

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 垫江县| 禹州市| 辛集市| 乡宁县| 双桥区| 旬阳县| 湘潭县| 三穗县| 南雄市| 重庆市| 博罗县| 葫芦岛市| 五台县| 融水| 林州市| 漾濞| 浠水县| 长岛县| 定结县| 梁山县| 阿瓦提县| 河源市| 吐鲁番市| 弋阳县| 察雅县| 乾安县| 建阳市| 洛扎县| 文成县| 观塘区| 宽甸| 房产| 舟曲县| 报价| 方山县| 西藏| 察雅县| 扶沟县| 义马市| 灵璧县| 连云港市|