日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于MDB/ICP協(xié)議的自動售賣系統(tǒng)的主控制器

          基于MDB/ICP協(xié)議的自動售賣系統(tǒng)的主控制器

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

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

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

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


          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

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

          關(guān)閉