新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 捷達(dá)汽車(chē)組合儀表的串行通訊的實(shí)現(xiàn)

捷達(dá)汽車(chē)組合儀表的串行通訊的實(shí)現(xiàn)

作者: 時(shí)間:2013-02-17 來(lái)源:網(wǎng)絡(luò) 收藏

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

在此基礎(chǔ)上建立本通訊初始化的主函數(shù),如清單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 * *) //發(fā)送建立通訊密碼
//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送高位字節(jié)的取反

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

4 結(jié) 語(yǔ)

本文采用C++Builder軟件平臺(tái)成功開(kāi)發(fā)了儀表特殊串行口通訊程序,該系統(tǒng)在西門(mén)子VDO(蕪湖)公司生產(chǎn)線投入使用一年多,與采用快速通訊方式相比通訊傳輸性能穩(wěn)定,并具有了方便美觀的用戶界面,為實(shí)現(xiàn)儀表檢測(cè)設(shè)備奠定了基礎(chǔ),具有重要的應(yīng)用價(jià)值。(end)

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉