《電子技術應用》
您所在的位置:首頁 > 其他 > 業界動態 > 基于MDB/ICP協議的自動售賣系統的主控制器實現

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

2008-12-09
作者:洪強寧 齊國生 葉 丹

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

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

?

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

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

1 MDB/ICP協議簡介?

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

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

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

  VMC向外設傳送的指令由一個地址字節、一些可選的數據字節與一個校驗和(CHK)字節構成。發送指令后,外設應答VMC的通信塊可以由一個數據塊" title="數據塊">數據塊和一個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的電源,數據線與單片機的串口" title="串口">串口相連。?

  本項目中選用的單片機為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_SIZE 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 |= 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

??????????? TransmitByte(dat[i], 0);?

??????????? check += dat[i];?

??????? }?

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

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

??????? !mode && i

??????? 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協議進行分解,很好地實現了總線驅動。實踐證明該驅動程序穩定、可靠,大大降低了上層界面開發的難度,提高了系統的可維護性,節約了成本。?

參考文獻?

1 DALLAS Semiconductor Corp. Secure Microcontroller Data Book, 1996?

2 Philips Semiconductors.80C51-Based 8-Bit Microcontrollers,1994?

3 EVMMA. The I.C.P.(M.D.B. Europe) V2.1, 1996?

4 徐愛鈞, 彭繡華. 單片機高級語言C51應用程序設計.北京:電子工業出版社, 1998?

5 何立民. MCU應用系統的可靠性設計綱要V0.5. 電子技術應用, 1999; 5(4)?

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          日韩视频精品在线观看| 欧美深夜影院| 中文一区二区在线观看| 久久这里只有精品视频首页| 影音先锋一区| 欧美日韩一区二区在线播放| 欧美天堂亚洲电影院在线观看| 国产美女精品视频免费观看| 久久精品国产久精国产一老狼| 久久久久欧美| 亚洲精品日产精品乱码不卡| 樱花yy私人影院亚洲| 久久不见久久见免费视频1| 欧美日韩国产成人精品| 亚洲一二三四久久| 国产综合香蕉五月婷在线| 亚洲看片网站| 欧美在线观看一区二区| 国产精品亚洲综合天堂夜夜| 香蕉尹人综合在线观看| 欧美体内谢she精2性欧美| 国产专区欧美专区| 国产视频欧美| 国产精品扒开腿做爽爽爽视频| 欧美午夜三级| 亚洲综合色丁香婷婷六月图片| 久久久无码精品亚洲日韩按摩| 在线综合视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久久久国产精品午夜一区| 国产精品v片在线观看不卡| 欧美精品v日韩精品v韩国精品v| 国产精品久久久久久久久免费| 久久久久九九视频| 亚洲毛片在线| 亚洲欧美日韩国产中文在线| 欧美日韩一二三四五区| 欧美激情视频给我| 亚洲国产精品尤物yw在线观看| 一区在线播放视频| 日韩午夜三级在线| 免费亚洲一区二区| 国内精品国语自产拍在线观看| 国产噜噜噜噜噜久久久久久久久| 欧美精品入口| 久久免费国产| 亚洲激情图片小说视频| 香蕉成人久久| 精品不卡在线| 99re66热这里只有精品3直播| 亚洲欧美激情视频| 免费亚洲一区二区| 亚洲人成网站在线播| 亚洲私拍自拍| 久久久中精品2020中文| 一本一本a久久| 伊人久久综合| 国产精品毛片在线看| 日韩午夜精品| 99精品欧美| 亚洲国产一区在线| 欧美国产一区在线| 欧美精彩视频一区二区三区| 欧美极品欧美精品欧美视频| 欧美人牲a欧美精品| 国内外成人在线视频| 国内精品久久久久国产盗摄免费观看完整版| 欧美亚日韩国产aⅴ精品中极品| 一个人看的www久久| 欧美11—12娇小xxxx| 久久久精品日韩| 免费在线欧美黄色| 国产一区二区电影在线观看| 久久久av毛片精品| 欧美色欧美亚洲另类七区| 午夜精品99久久免费| 国产欧美一区二区精品忘忧草| 久久久久国产一区二区三区四区| 国产深夜精品福利| 一色屋精品亚洲香蕉网站| 激情综合色综合久久| 亚洲女人小视频在线观看| 日韩一级精品视频在线观看| 欧美激情视频一区二区三区免费| 麻豆精品视频在线| 国产一区二区三区久久悠悠色av| 国产欧美日韩亚州综合| 国产欧美日韩不卡| 国产精品天天摸av网| 国产区欧美区日韩区| 国产精品乱人伦一区二区| 国产精品尤物福利片在线观看| 一区二区三区日韩在线观看| 欧美激情免费观看| 国产精品一区在线播放| 日韩视频精品在线观看| 亚洲精品一区二区网址| 雨宫琴音一区二区在线| 久久久精品一区二区三区| 国产精品福利久久久| 欧美精品一区二区蜜臀亚洲| 午夜精品久久| 久久久久**毛片大全| 亚洲国产精品一区二区尤物区| 欧美成人一区二区在线| 性娇小13――14欧美| 亚洲欧美国内爽妇网| 欧美日韩国产免费观看| 欧美精品久久天天躁| 国产精品一区久久久| 国产一区二区三区丝袜| 黄色一区二区三区四区| 国产精品网站在线播放| 亚洲伊人网站| 欧美一区二区精品久久911| 99国产欧美久久久精品| 久久久久久亚洲精品中文字幕| 欧美性一二三区| 在线亚洲精品| 欧美一区二区三区精品电影| 亚洲视频999| 日韩一二三在线视频播| 欧美视频网站| 一区在线视频观看| 亚洲高清资源综合久久精品| 欧美精品日韩| 国产在线观看91精品一区| 亚洲激情成人网| 国产无遮挡一区二区三区毛片日本| 精品成人一区二区三区四区| 亚洲精品国产精品乱码不99按摩| 樱桃国产成人精品视频| 国产精品丝袜久久久久久app| 国产精品久久久一区二区三区| 欧美成人国产va精品日本一级| 久久久91精品国产一区二区三区| 亚洲日本激情| 欧美日韩美女在线| 麻豆av一区二区三区久久| 欧美精品午夜视频| 欧美日韩成人在线观看| 亚洲欧洲日本国产| 久久综合久久综合久久| 久久人人爽人人爽| 欧美日韩美女在线观看| 一区二区在线视频播放| 蜜桃av一区二区在线观看| 久久成人久久爱| 国产精品jvid在线观看蜜臀| 国产一区二区看久久| 欧美黑人一区二区三区| 久久久久久欧美| 精品成人一区二区| 伊人久久噜噜噜躁狠狠躁| 欧美日韩亚洲系列| 欧美大片免费| 美女精品视频一区| 国产一区二区三区的电影| 国产精品久久久久久妇女6080| 久久高清福利视频| 久久久夜色精品亚洲| 国产精品女同互慰在线看| 亚洲精品国产欧美| 欧美电影美腿模特1979在线看| 黄色成人在线| 精品51国产黑色丝袜高跟鞋| 欧美激情精品久久久久久免费印度| 美女精品国产| 欧美日韩综合另类| 亚洲天堂第二页| 免费在线成人| 午夜精品免费视频| 欧美在线视频免费| 亚洲精品美女91| 欧美日韩在线一二三| 狠狠综合久久av一区二区小说| 久久影音先锋| 国产精品久久波多野结衣| 午夜日本精品| 国产区在线观看成人精品| 国产精品久久久久久久7电影| 欧美日韩中文精品| 在线观看亚洲视频| 夜久久久久久| 国语自产精品视频在线看一大j8| 日韩写真视频在线观看| 亚洲一区黄色| 久久国产精品一区二区三区| 亚洲片国产一区一级在线观看| 国产精品高清一区二区三区| 狠狠干综合网| 欧美成人亚洲成人日韩成人| 久久综合一区二区| 亚洲一区中文字幕在线观看| 国产精品青草久久久久福利99| 欧美一区二区三区在线观看视频| 久久综合伊人77777蜜臀| 国产精品免费一区二区三区在线观看| 好吊一区二区三区| 免费观看成人| 国产欧美一区二区三区久久| 亚洲一区二区视频在线| 国产精品日韩欧美| 狠狠色综合网站久久久久久久| 中文亚洲免费| 亚洲影院色在线观看免费| 国产一区视频在线观看免费| 国产深夜精品| 亚洲性线免费观看视频成熟| 亚洲综合第一页| 在线观看中文字幕亚洲| 亚洲视屏一区| 亚洲激情黄色| 欧美高清视频一区| 一区二区在线观看av| 日韩视频―中文字幕| 国产精品xxxav免费视频| 欧美日韩国产一区| 国产精品视频久久一区| 欧美一区二区在线免费播放| 麻豆国产va免费精品高清在线| 久久久久国产一区二区三区| 国产精品久久久亚洲一区| 欧美一区久久| 欧美激情区在线播放| 午夜精品久久久久久99热| 欧美日韩一区二区视频在线| 欧美日韩成人一区| 欧美日韩精品在线播放| 久久精品亚洲精品| 欧美高清在线一区| 亚洲欧美日韩精品久久| 在线视频欧美一区| 樱桃成人精品视频在线播放| 999亚洲国产精| 国产麻豆成人精品| 国产一区视频在线看| 99re热精品| 久久久一本精品99久久精品66| 国内外成人在线视频| 久久免费午夜影院| 亚洲黄页视频免费观看| 国产综合自拍| 国产综合久久久久久| 美女黄毛**国产精品啪啪| 国产精品99久久久久久久久久久久| 国产精品99免费看| 99re6热只有精品免费观看| 久久精品99久久香蕉国产色戒| 性欧美videos另类喷潮| 欧美在线免费视频| 黄色综合网站| 久久全球大尺度高清视频| 亚洲欧美自拍偷拍| 亚洲狼人综合| 美日韩精品免费| 国产一区二区黄| 亚洲午夜久久久| 国产精品久久久久久久久久久久久久| 国产精品自在欧美一区| 韩国女主播一区二区三区| 欧美一级淫片aaaaaaa视频| 国产一区二区三区在线观看免费视频| 亚洲深夜av| 国产乱码精品一区二区三区不卡| 国产欧美1区2区3区| 亚洲欧洲综合另类| 欧美日韩国产成人在线91| 欧美成人午夜剧场免费观看| 夜色激情一区二区| 在线一区二区三区四区| 1024欧美极品| 国产精品国产自产拍高清av| 国产精品久久久久久一区二区三区| 美女主播一区| 国产日韩欧美在线观看| 亚洲欧洲日产国产网站| 欧美经典一区二区三区| 欧美一区免费| 亚洲国产日韩欧美一区二区三区| 国产精品自拍在线| 国产亚洲精品久| 欧美gay视频激情| 日韩一级成人av| 亚洲第一页自拍| 欧美日韩一卡二卡| 在线不卡a资源高清| 欧美视频在线不卡| 亚洲九九九在线观看| 91久久一区二区| 亚洲私人影院在线观看| 一区二区三区毛片| 亚洲精品视频二区| 韩国精品主播一区二区在线观看| 日韩一级视频免费观看在线| 国产一区二区三区黄视频| 亚洲欧美一级二级三级| 欧美一级大片在线免费观看| 极品日韩久久| 欧美日本乱大交xxxxx| 免费欧美网站| 欧美婷婷六月丁香综合色| 樱花yy私人影院亚洲| 欧美久久电影| 国产伦精品一区二区三区| 国产精品综合网站| 国产亚洲激情视频在线| 国产一区二区高清视频| 欧美视频在线免费看| 性欧美8khd高清极品| 亚洲一区二区三区视频播放| 国产目拍亚洲精品99久久精品| 国产精品美女久久久久av超清| 欧美午夜精品久久久| 久久久亚洲欧洲日产国码αv| 国产亚洲网站| 欧美日韩国产一区精品一区| 亚洲精品网址在线观看| 久久尤物视频| 欧美一级午夜免费电影| 欧美理论在线播放| 亚洲午夜日本在线观看| 欧美日韩免费观看一区| 国产农村妇女精品| 欧美一区二区网站| 国产一区视频在线观看免费| 欧美精品情趣视频| 亚洲欧美国内爽妇网|