中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 關 閉

        新聞中心

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

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

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

        {
        TMOD =0xf0;
        TMOD |=0x01; //設置定時器0為方式1(16位)
        TH0=T_RESPONSE;
        TL0=0x00; //設置超時門限
        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://www.antipu.com.cn/article/162064.htm

        這是MDB會話控制的核心部分。根據(jù)需要傳送數(shù)據(jù)包,計算校驗字節(jié),控制方式位,在時序允許的響應時間內(nèi)接愛外設返回的數(shù)據(jù),做出ACK或NAK等反應。并且按照標準中堆薦的方式處理異常情況,當接受數(shù)據(jù)超時或校驗和錯時,重復發(fā)送命令多次,以增強容錯性能。將接收到的數(shù)據(jù)返回給調(diào)用乾,并返回結果碼。源程序如下:
        //與外設會話,在調(diào)用之前確認譯碼器選通MDB總線
        uchar Session(uchar add,uchar dat[],uchar count)
        //形參:add——VMC發(fā)送的地址指令字節(jié)
        // dat[]——VMC發(fā)送的數(shù)據(jù)塊
        // count——數(shù)據(jù)塊的大小
        //返回值:0——外設應答ACK
        //非0且小于0x80——外設應答的數(shù)據(jù)塊的大小
        //大于等于0x80——會話中出錯
        //外設應答的數(shù)據(jù)塊存放在全局數(shù)組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ā)送地址字節(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++)
        {//反復接收字節(jié)直到方式位為1或出錯
        //接收到的數(shù)據(jù)存在全局數(shù)組recBuff[]里
        if(!ReceiveByte(recBuff+i,mode))
        //超時。外設可用超時表示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é)還未結束
        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
        //收到外設傳來的ACK
        break;
        }//if(!err)
        Wait(T_RESPONSE); //防止與外設數(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 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉