• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關(guān) 閉

    新聞中心

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

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

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

    2 硬件結(jié)構(gòu)
    總線基礎(chǔ)上,筆者構(gòu)建了一個(gè)實(shí)際的原理圖如圖6所示。VMC通過MDB總線與投幣機(jī)、讀鈔機(jī)和讀卡器交互,控制外設(shè)的運(yùn)轉(zhuǎn),并從外設(shè)獲得用戶的支持情況。同時(shí),VMC也負(fù)責(zé)處理與用戶之間的交互,驅(qū)動(dòng)液晶顯示,處理鍵盤輸入,驅(qū)動(dòng)符合用戶需要的電機(jī)運(yùn)轉(zhuǎn)出貨。在本項(xiàng)目中,VMC還需通過MODEM撥號(hào)連接公司總線的服務(wù)器,將銷售數(shù)據(jù)傳送回公司。


    如圖6所示,所有MDB外設(shè)均掛在同一總線上,由總線提供24V和5V的電源,數(shù)據(jù)線與單片機(jī)的串口相連。
    本項(xiàng)目中選用的單片機(jī)為DALLAS DS5002FP。該單片機(jī)代碼級(jí)兼容MCS-51系列單片機(jī),在使用外存的情況下仍然可以使用4個(gè)PO作為數(shù)據(jù)I/O,帶外設(shè)的能力較強(qiáng)。但它只有一個(gè)串口,控制MDB總線和控制MODEM都需要使用串口,因此必須將串口進(jìn)行復(fù)用。通過一個(gè)譯碼器實(shí)現(xiàn)選通功能。
    3 會(huì)話控制
    將VMC與外設(shè)之間通過MDB總線的會(huì)話分為四個(gè)層次:
    (1)串口初始化
    初始化串口時(shí),主要工作是設(shè)置波率(9600)和傳輸方式(11位)。為順利獲得9600波特率,單片機(jī)采用的晶振為11.0592MHz。源代碼如下(采用Franklin C51語言編寫):
    // 一點(diǎn)常量定義
    #define uchar unsigned char
    #define T_RESPONSE 0xee //*5.0毫秒*/
    #define MAX_BLOCK_SIZF 36 /*數(shù)據(jù)塊最大長(zhǎng)度*/
    #define ERR_TIME_OUT 0x81 /*超時(shí)*/
    #define ERR_NO_MODE_BIT 0x82*/未收到最后字節(jié)*/
    #define ERR_CHECKSUM 0x83 /*校驗(yàn)和錯(cuò)*/
    #define ACK 0x00
    #define RET 0xaa
    #define NAK 0xff
    //初始化串口
    void InitSerialPort()
    {
    SCON = 0xd0; //設(shè)置串口為方式3(9bit)
    TMOD =0x0f;
    TMOD I=0x20; //設(shè)置定時(shí)器1為方式2
    TR1 =1; //定時(shí)器1使能
    TH1 = 0xfd; //設(shè)定波行率:9600 NRZ
    PCON =0x7f; //Set SMOD=0
    RI=0;
    TI=0;
    }

    (2)字節(jié)的傳送
    這里需要注意的是:發(fā)送數(shù)據(jù)時(shí)要根據(jù)需要設(shè)置方式位,而接收數(shù)據(jù)時(shí)要返回方式位的值,以判斷是否收完所有數(shù)據(jù)。
    // 傳送字節(jié)
    void TransmitByte(uchar byte,bit mode)
    //形參:byte——準(zhǔn)備發(fā)送的字節(jié)
    // mode——預(yù)備要設(shè)置的方式位
    {
    TB8=mode; //設(shè)置方式位
    SBUF = byte; //發(fā)送字節(jié)
    While(!TI); //等待發(fā)送完畢
    TI=0;
    }
    //接收字節(jié)
    #pragma disable
    uchar ReceiveByte(uchar *byte,uchar *bMode)
    //形參:*byte——返回接收到的字節(jié)值
    // *bMode——返回接收到的字節(jié)的方式位
    //返回值:0—超時(shí),1—成功接收



    評(píng)論


    相關(guān)推薦

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

    關(guān)閉
    主站蜘蛛池模板: 景宁| 平邑县| 仙居县| 梧州市| 南召县| 青川县| 上饶市| 铅山县| 沛县| 弋阳县| 栾川县| 诸暨市| 淮安市| 杭州市| 息烽县| 望城县| 普兰店市| 玛多县| 洛扎县| 稻城县| 武强县| 安龙县| 明水县| 南郑县| 西盟| 萨迦县| 新乡县| 永安市| 凤庆县| 桃源县| 承德县| 东乡族自治县| 老河口市| 宁海县| 玉林市| 交城县| 玛曲县| 正定县| 大理市| 安新县| 永清县|