<form id="itnzz"><noscript id="itnzz"></noscript></form>

          1. <menuitem id="itnzz"></menuitem>
          2. 成人午夜激情在线观看,国产精品一线天粉嫩av,99精品国产综合久久久久五月天 ,一卡2卡三卡4卡免费网站,国产高清在线男人的天堂,五月天国产成人AV免费观看,67194熟妇在线观看线路,成人无码潮喷在线观看
            現在位置:范文先生網>理工論文>電子通信論文>基于MDB/ICP協議的自動售賣系統的主控制器實現

            基于MDB/ICP協議的自動售賣系統的主控制器實現

            時間:2023-02-20 23:46:36 電子通信論文 我要投稿
            • 相關推薦

            基于MDB/ICP協議的自動售賣系統的主控制器實現

            摘要:介紹一種以DALLAS DS5002FP單片機為主控制器的MDB/ICP協議實現。從硬件和軟件描述了如何控制MDB總線,并給出一個較成熟的控制外設會話的總線驅動程序。該協議實現清晰、簡單,采用MCS-51兼容單片機降低成本,充分體現了MDB/ICP的優越性。

                關鍵詞:單片機 自動售賣系統 主控制器

            基于MDB/ICP協議的自動售賣系統的主控制器實現

            隨著國你經濟和技術的發展,自動售賣系統由于其方便性、易管理性和低成本,正得到越來越廣泛的應用。而自動售賣系統的外設也越來越復雜,從投幣機到讀鈔機到非現金交易(如IC記賬卡),導致對主控制器的要求越來越高。為了簡化設計,采用一個簡單、穩定的內部通訊總線協議非常必要。

            本文介紹了歐洲售機制造者協會(EVMMA)制定的MDB/ICP總線協議。該協議簡潔明了,功能強大,可擴展性強,并且對外掛外設備數目沒有限制,是理想的自動售賣系統內部總線協議。本文從主控制器的角度給出了對MDB/ICP總線進行操作控制的硬件和軟件實現。

            1 MDB/ICP協議簡介

            MDB/ICP協議(Multi-Drop Bus / Internal Communication Protocol)是歐洲售貨機制造者協會制定的一套用于協調自動售賣機的主控制器(VMC)(范文先生網www.ycxgx.cn收集整理)與多個外設之間通信的協議。硬幣機和讀鈔機的標準首先是由Coinco在美國可口可樂公司的指定下開發的。這個標準于1993年被NAMA協會采用,經過一個專門的工作組修訂后,于1994年被EVMMA采用。第二階段的非現金交易標準由Debitek代表NAMA開發,并于1994年被NAMA采用。EVMMA加入了一些兼容的指令后于1994年采用。

            MDB接口實際上是工作于9600波特率的主從型串行總線接口,所外圍設備(例如硬幣機、讀鈔機、讀卡器等)均為主控制器(傳統上稱售貨機控制器——VMC)的從機。所有外圍設備與VMC之間的通信方式都一致。

            MDB協議的串行位格式為:1個起始位,8個數據位,1個方式位與1個停止位,共11位。位傳遞的順序如圖1所示。其中方式位根據傳遞的方式不同置0或置1。在MDB總線上,VMC通過廣播方式向外發送命令。第一字節為地址字節(實際上只有高5位尋址信息,低3位為對外設的指令),該字節被所有的外設讀取,但只有符合地址字節所指定的外設才處理其后的數據字節,并做出反應。在VMC到外設的數據中,地址字節的方式位被置1,數據字節的方式位被置0,外設通過檢驗接收到的方式位確認是地址命令還是數據。當數據從外設發送到主機時,最后送出的字節方式位被置1,標志著數據發送完畢。

            VMC向外設傳送的指令由一個地址字節、一些可選的數據字節與一個校驗和(CHK)字節構成。發送指令后,外設應答VMC的通信塊可以由一個數據塊和一個CHK字節組成,或者一個應答字節(ACK),或者一個無應答字節(NAK)。如果外設應答數據塊的話,VMC將通過一個應答字節(ACK)、無應答字節(NAK)或得發字節(RET)應答外設傳回的數據。

            圖2至圖5為幾個典型的會話例子,其中“*”表示傳送時方式位置1,“ADD”表示地址字節,“CHK”表示傳送數據的校驗和。

            2 硬件系統結構

            在MDB/ICP總線協議基礎上,筆者構建了一個實際的自動售賣系統,系統原理圖如圖6所示。VMC通過MDB總線與投幣機、讀鈔機和讀卡器交互,控制外設的運轉,并從外設獲得用戶的支持情況。同時,VMC也負責處理與用戶之間的交互,驅動液晶顯示,處理鍵盤輸入,驅動符合用戶需要的電機運轉出貨。在本項目中,VMC還需通過MODEM自動撥號連接公司總線的服務器,將銷售數據傳送回公司。

            如圖6所示,所有MDB外設均掛在同一總線上,由總線提供24V和5V的電源,數據線與單片機的串口相連。

            本項目中選用的單片機為DALLAS DS5002FP。該單片機代碼級兼容MCS-51系列單片機,在使用外存的情況下仍然可以使用4個PO作為數據I/O,帶外設的能力較強。但它只有一個串口,控制MDB總線和控制MODEM都需要使用串口,因此必須將串口進行復用。通過一個譯碼器實現選通功能。

            3 MDB/ICP會話控制

            將VMC與外設之間通過MDB總線的會話分為四個層次:

            (1)串口初始化

            初始化串口時,主要工作是設置波率(9600)和傳輸方式(11位)。為順利獲得9600波特率,單片機采用的晶振為11.0592MHz。源代碼如下(采用Franklin C51語言編寫):

            // 一點常量定義

            #define uchar unsigned char

            #define T_RESPONSE 0xee //*5.0毫秒*/

            #define MAX_BLOCK_SIZF 36 /*數據塊最大長度*/

            #define ERR_TIME_OUT 0x81 /*超時*/

            #define ERR_NO_MODE_BIT 0x82*/未收到最后字節*/

            #define ERR_CHECKSUM 0x83 /*校驗和錯*/

            #define ACK 0x00

            #define RET 0xaa

            #define NAK 0xff

            //初始化串口

            void InitSerialPort()

            {

            SCON = 0xd0; //設置串口為方式3(9bit)

            TMOD &=0x0f;

            TMOD I=0x20; //設置定時器1為方式2

            TR1 =1; //定時器1使能

            TH1 = 0xfd; //設定波行率:9600 NRZ

            PCON &=0x7f; //Set SMOD=0

            RI=0;

            TI=0;

            }

                (2)字節的傳送

            這里需要注意的是:發送數據時要根據需要設置方式位,而接收數據時要返回方式位的值,以判斷是否收完所有數據。

            // 傳送字節

            void TransmitByte(uchar byte,bit mode)

            //形參:byte——準備發送的字節

            // mode——預備要設置的方式位

            {

            TB8=mode; //設置方式位

            SBUF = byte; //發送字節

            While(!TI); //等待發送完畢

            TI=0;

            }

            //接收字節

            #pragma disable

            uchar ReceiveByte(uchar *byte,uchar *bMode)

            //形參:*byte——返回接收到的字節值

            // *bMode——返回接收到的字節的方式位

            //返回值:0—超時,1—成功接收

            {

            TMOD &=0xf0;

            TMOD |=0x01; //設置定時器0為方式1(16位)

            TH0=T_RESPONSE;

            TL0=0x00; //設置超時門限

            TF0=0;

            TR0=1; //定時器0使能

            While (!RI && !TF0)

            ; //等待接收字節直至超時

            TF0=0;

            if(RI){ //已接收字節

            RI=0;

            *byte=SBUF; //返回字節值

            *bMode=RB8; //返回方式位

            return 1;

            }else{ //超時

            RI=0;

            return 0;

            }

            }

            (3)數據塊的傳送

            這部分與下面的會話部分放在一個函數體內實現。

            (4)會話

                這是MDB會話控制的核心部分。根據需要傳送數據包,計算校驗字節,控制方式位,在時序允許的響應時間內接愛外設返回的數據,做出ACK或NAK等反應。并且按照MDB/ICP標準中堆薦的方式處理異常情況,當接受數據超時或校驗和錯時,重復發送命令多次,以增強容錯性能。將接收到的數據返回給調用乾,并返回結果碼。源程序如下:

            //與外設會話,在調用之前確認譯碼器選通MDB總線

            uchar Session(uchar add,uchar dat[],uchar count)

            //形參:add——VMC發送的地址指令字節

            // dat[]——VMC發送的數據塊

            // count——數據塊的大小

            //返回值:0——外設應答ACK

            //非0且小于0x80——外設應答的數據塊的大小

            //大于等于0x80——會話中出錯

            //外設應答的數據塊存放在全局數組uchar recBuff[]

            {

            uchar data check,i,j,err;

            uchar data mode;

            for(j=0;j<5;j++){ //最多重復發送命令5次

            check=0;

            err=0;

            TransmitByte(add,1); //發送地址字節

            Check +=add; //計算CHK

            For(i=0;i<count,i++){ //發送數據字節

            TransmitByte(dat[i],0);

            check +=dat[i];

            }

            TransmitByte(check,0); //發送CHK

            for (i=0,check=0,mode=0;

            !mode && i<MAX_BLOCK_SIZE && !err;

            i++)

            {//反復接收字節直到方式位為1或出錯

            //接收到的數據存在全局數組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表示還有數據

            check +=recBuff[i];

            } //for i

            if(!err){ //未發生錯誤

            if (!mode){

            //收完36個字節還未結束

            TransmitByte(NAK,0);

            err=ERR_NO_MODE_BIT;

            }else if (i>1) {

            //收到數據塊

            if(check !=recBuff[i-1]){ //校驗和錯

            TransmitByte(NAK,0);

            err=ERR_CHECKSUM;

            } else{

            //一切正常,發送ACK后跳出循環

            TransmitByte(ACK,0);

            break;

            }

            } else

            //收到外設傳來的ACK

            break;

            }//if(!err)

            Wait(T_RESPONSE); //防止與外設數據沖突

            }//for j

            //返回接收到的數據塊大小或出錯代碼

            return err?err:(i-1);

            }

            本文使用DS5002FP實現了對MDB總線的控制與訪問。通過將MDB/ICP協議進行分解,很好地實現了總線驅動。實踐證明該驅動程序穩定、可靠,大大降低了上層界面開發的難度,提高了系統的可維護性,節約了成本。


            【基于MDB/ICP協議的自動售賣系統的主控制器實現】相關文章:

            基于信號接口的自動測試系統軟件的設計與實現08-06

            基于FRAM的公交收費系統的實現08-06

            基于DSP的自動對焦系統08-06

            基于Internet的智能家庭網絡控制器的實現08-06

            基于Client/Server 的課件系統的設計與實現08-06

            基于Client/Server 的課件系統的設計與實現04-12

            基于JSP網頁自動生成工具的設計與實現08-06

            基于JSP網頁自動生成工具的設計與實現08-06

            基于GPS的時標系統實現方法探究08-06

            主站蜘蛛池模板: 日韩免费美熟女中文av| 亚洲综合成人一区二区三区 | 成人午夜av在线播放| 不卡一区二区国产精品| 国产午夜精品一二区理论影院| 国产精品一区二区性色av| 午夜福利看片在线观看| 色猫咪av在线观看| 五月婷之久久综合丝袜美腿| 电影在线观看+伦理片| 中文字幕在线亚洲精品| 中文文字幕文字幕亚洲色| 2021国产精品视频网站| 日韩最新在线不卡av| 亚洲中文字幕无码中字| 黑森林av导航| 亚洲一区二区精品动漫| 国产一区二区三区视频| 天堂在线最新版av观看| 亚洲精品一区二区三区小| 亚洲AV无码一二区三区在线播放| 国产色视频一区二区三区| 亚洲AV无码久久精品日韩| 精品亚洲欧美高清不卡高清| 欧美丝袜高跟鞋一区二区| 久久精品国产亚洲av忘忧草18| 97久久精品无码一区二区| 国产综合色产在线视频欧美| 中文字幕亚洲无线码A| 亚洲欧美另类精品久久久| 国产亚洲AV电影院之毛片| 熟妇人妻中文字幕| 国产成人8X人网站视频| 涩涩爱狼人亚洲一区在线| 日本一区不卡高清更新二区| 国产97在线 | 亚洲| 中文人妻av高清一区二区| 亚洲日本欧美日韩中文字幕| 国产一区二区波多野结衣| 韩国午夜理论在线观看| 亚洲国产成人综合精品|