<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于MDB/ICP協(xié)議的自動(dòng)售賣(mài)系統的主控制器

基于MDB/ICP協(xié)議的自動(dòng)售賣(mài)系統的主控制器

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

{
TMOD =0xf0;
TMOD |=0x01; //設置定時(shí)器0為方式1(16位)
TH0=T_RESPONSE;
TL0=0x00; //設置超時(shí)門(mén)限
TF0=0;
TR0=1; //定時(shí)器0使能
While (!RI !TF0)
; //等待接收字節直至超時(shí)
TF0=0;
if(RI){ //已接收字節
RI=0;
*byte=SBUF; //返回字節值
*bMode=RB8; //返回方式位
return 1;
}else{ //超時(shí)
RI=0;
return 0;
}
}
(3)數據塊的傳送
這部分與下面的會(huì )話(huà)部分放在一個(gè)函數體內實(shí)現。
(4)會(huì )話(huà)

本文引用地址:http://dyxdggzs.com/article/162064.htm

這是MDB會(huì )話(huà)控制的核心部分。根據需要傳送數據包,計算校驗字節,控制方式位,在時(shí)序允許的響應時(shí)間內接愛(ài)外設返回的數據,做出ACK或NAK等反應。并且按照標準中堆薦的方式處理異常情況,當接受數據超時(shí)或校驗和錯時(shí),重復發(fā)送命令多次,以增強容錯性能。將接收到的數據返回給調用乾,并返回結果碼。源程序如下:
//與外設會(huì )話(huà),在調用之前確認譯碼器選通MDB總線(xiàn)
uchar Session(uchar add,uchar dat[],uchar count)
//形參:add——VMC發(fā)送的地址指令字節
// dat[]——VMC發(fā)送的數據塊
// count——數據塊的大小
//返回值:0——外設應答ACK
//非0且小于0x80——外設應答的數據塊的大小
//大于等于0x80——會(huì )話(huà)中出錯
//外設應答的數據塊存放在全局數組uchar recBuff[]
{
uchar data check,i,j,err;
uchar data mode;
for(j=0;j5;j++){ //最多重復發(fā)送命令5次
check=0;
err=0;
TransmitByte(add,1); //發(fā)送地址字節
Check +=add; //計算CHK
For(i=0;icount,i++){ //發(fā)送數據字節
TransmitByte(dat[i],0);
check +=dat[i];
}
TransmitByte(check,0); //發(fā)送CHK
for (i=0,check=0,mode=0;
!mode iMAX_BLOCK_SIZE !err;
i++)
{//反復接收字節直到方式位為1或出錯
//接收到的數據存在全局數組recBuff[]里
if(!ReceiveByte(recBuff+i,mode))
//超時(shí)。外設可用超時(shí)表示NAK
err=i?ERR_TIME_OUT:NAK;
else if (i= =0 recBuff[i]= =NAK mode)
//收到NAK
err = NAK;
else if (!mode)
//方式位為0表示還有數據
check +=recBuff[i];
} //for i
if(!err){ //未發(fā)生錯誤
if (!mode){
//收完36個(gè)字節還未結束
TransmitByte(NAK,0);
err=ERR_NO_MODE_BIT;
}else if (i>1) {
//收到數據塊
if(check !=recBuff[i-1]){ //校驗和錯
TransmitByte(NAK,0);
err=ERR_CHECKSUM;
} else{
//一切正常,發(fā)送ACK后跳出循環(huán)
TransmitByte(ACK,0);
break;
}
} else
//收到外設傳來(lái)的ACK
break;
}//if(!err)
Wait(T_RESPONSE); //防止與外設數據沖突
}//for j
//返回接收到的數據塊大小或出錯代碼
return err?err:(i-1);
}
本文使用DS5002FP實(shí)現了對MDB總線(xiàn)的控制與訪(fǎng)問(wèn)。通過(guò)將進(jìn)行分解,很好地實(shí)現了總線(xiàn)驅動(dòng)。實(shí)踐證明該驅動(dòng)程序穩定、可靠,大大降低了上層界面開(kāi)發(fā)的難度,提高了的可維護性,節約了成本


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

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>