<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > 基于大容量IC卡AT45D041的出租車數(shù)據(jù)采集系統(tǒng)

          基于大容量IC卡AT45D041的出租車數(shù)據(jù)采集系統(tǒng)

          作者:解放軍廣州通信學院 黃再銀 時間:2004-11-02 來源:電子產(chǎn)品世界 收藏

          2004年6月B版

          摘  要:本文介紹了基于大容量IC卡AT45D041的出租車數(shù)據(jù)采集系統(tǒng)的設(shè)計方法,討論了IC卡AT45D041的主要特點及其使用方法;介紹了PIC單片機和PC機串行通信的硬件、軟件方法。

          關(guān)鍵詞:出租車;IC卡;AT45D041;單片機;串行通信

          引言

            隨著出租車行業(yè)的發(fā)展,對出租車管理的要求也越來越高。通常,出租車管理部門需要經(jīng)常采集出租車計費器中存儲的各種數(shù)據(jù),這些數(shù)據(jù)主要包括累積數(shù)據(jù)(如總行駛里程、總收費里程、總收費時間、總車資等)和乘客記錄數(shù)據(jù)(如起止時間、收費里程、收費時間、郊區(qū)或夜間收費里程、1公里單價、車資等)。一般來說,出租車的計費器可存儲300次以上的乘客記錄,每條乘客記錄約占50字節(jié),這樣300次乘客記錄約占15K字節(jié)。大容量IC卡AT45D041的容量為4Mbit(約500K字節(jié)),利用該IC卡來采集出租車計費器中存儲的數(shù)據(jù),不僅攜帶方便,而且可一次采集多達33臺出租車的數(shù)據(jù)。數(shù)據(jù)采集完后,可通過串行接口控制器將數(shù)據(jù)輸入給出租車管理部門的PC機,然后對這些數(shù)據(jù)進行分析、匯總、打印等各種處理。下面具體介紹基于大容量IC卡AT45D041的出租車數(shù)據(jù)采集系統(tǒng)的設(shè)計方法。

            出租車數(shù)據(jù)采集系統(tǒng)的原理框圖如圖1所示,由圖可知,該系統(tǒng)由出租車計費器、串行接口控制器、PC機及大容量IC卡AT45D041等四個部分組成。AT45D041采集多臺出租車計費器中存儲的總累積和乘客記錄等數(shù)據(jù),然后通過串行接口控制器即可將所采集的數(shù)據(jù)輸入給管理部門的PC機,PC機根據(jù)車牌號或計費器編號可區(qū)分每臺車所對應(yīng)的數(shù)據(jù)。AT45D041與出租車計費器及串行接口控制器之間數(shù)據(jù)的交換均是通過其中的單片機來完成的,而串行接口控制器與PC機之間的數(shù)據(jù)交換主要是通過PC機的串行口來實現(xiàn)的;因此,該數(shù)據(jù)采集系統(tǒng)設(shè)計的關(guān)鍵是AT45D041與單片機接口軟、硬件設(shè)計及單片機通過串行口與PC機之間串行通信的軟、硬件設(shè)計。
           
          AT45D041的性能特點及其使用方法

          AT45D041的性能特點及內(nèi)部結(jié)構(gòu)

            AT45D041是一由單5V供電、帶串行接口的快閃存儲器,該芯片特別適合于在系統(tǒng)(in-system)反復編程,其4兆位的存儲容量被分為2048頁,每頁264個字節(jié)。除了主存儲頁外,AT45D041還包含2個SRAM數(shù)據(jù)緩沖區(qū),每個區(qū)的容量均為264個字節(jié),當主存儲頁正在編程時,緩沖區(qū)可接收外部數(shù)據(jù)。傳統(tǒng)快閃存儲器往往利用多條地址線和并行接口來實現(xiàn)隨機存取數(shù)據(jù),而AT45D041則利用串行接口來實現(xiàn)連續(xù)存取數(shù)據(jù)。簡單的串行接口簡化了硬件電路,使線路板尺寸變小,成本降低,抗干擾能力增強,系統(tǒng)的可靠性得以提高。數(shù)據(jù)編程寫入時,不需要高編程輸入電壓,只需要單5V(范圍為4.5V至5.5V)即可完成數(shù)據(jù)的寫入及讀出。

            AT45D041的內(nèi)部結(jié)構(gòu)圖如圖2所示,由圖可知,該IC卡有九個引腳,其中SCK為串行時鐘輸入腳,SI和SO分別為串行數(shù)據(jù)輸入、輸出腳。

          AT45D041的使用方法

            通過單片機的控制可完成對AT45D041中數(shù)據(jù)的讀出及寫入操作,當芯片使能腳為低電平時,在時鐘輸入腳(SCK)的控制下,通過串行數(shù)據(jù)輸入腳(SI),便可將命令碼、主存儲頁或緩沖區(qū)地址碼串行輸入給該芯片,然后即可讀或?qū)懭霐?shù)據(jù)。值得注意的是,所有的命令碼、地址、數(shù)據(jù)串行輸入時,均是高位在前,低位在后。下面具體介紹數(shù)據(jù)的讀寫方法。

          數(shù)據(jù)的讀出

            數(shù)據(jù)的讀出包括主存儲頁直接讀出、從主存儲頁讀取數(shù)據(jù)至緩沖區(qū)、從緩沖區(qū)讀數(shù)據(jù)、讀狀態(tài)寄存器等四種,除命令碼不同外,讀取數(shù)據(jù)的方法均大同小異。由于本數(shù)據(jù)采集系統(tǒng)的設(shè)計只用到了主存儲頁直接讀出,下面只介紹從主存儲頁直接讀取數(shù)據(jù)的方法。主存儲頁直接讀取數(shù)據(jù)的時序波形圖如圖3所示。主存儲頁讀允許用戶從2048主存儲頁的任一頁中讀取數(shù)據(jù),在SCK時鐘脈沖的控制下,先串行輸入命令碼52H、緊接著是4個保留位、然后是20個地址位(即11個頁地址位和9個頁中數(shù)據(jù)起始地址位)、最后是32個無關(guān)位0。4個保留位是用于將來擴展該芯片的容量而設(shè)置的,對于AT45D041可輸入4個0,32個無關(guān)位用于初始化讀操作。數(shù)據(jù)通過SO腳串行輸出,在數(shù)據(jù)的讀出過程中,芯片使能腳必須保持低電平,當一頁數(shù)據(jù)的最后一個字節(jié)讀完后,會從該頁的第一個字節(jié)開始繼續(xù)讀取數(shù)據(jù)。當芯片使能腳(CS)由低電平變?yōu)楦唠娖綍r,將終止數(shù)據(jù)的讀取,SO腳保持高阻態(tài)。

          數(shù)據(jù)的寫入

            數(shù)據(jù)的寫入包括將數(shù)據(jù)直接寫入主存儲器頁、寫入緩沖區(qū)、通過緩沖區(qū)將數(shù)據(jù)寫入主存儲頁(帶內(nèi)置擦除功能)、通過緩沖區(qū)將數(shù)據(jù)寫入主存儲頁(不帶內(nèi)置擦除功能)、主存儲頁自動重寫等五種。除命令碼不同外,數(shù)據(jù)寫入的方法均差不多。在本數(shù)據(jù)采集系統(tǒng)的設(shè)計中使用的是將數(shù)據(jù)直接寫入主存儲頁的方法,該方法的時序波形如圖3所示,要寫入的數(shù)據(jù)須事先寫入緩沖區(qū)1或緩沖區(qū)2,然后再利用帶內(nèi)置擦除功能的緩沖區(qū)至主存儲頁寫入功能將數(shù)據(jù)寫入至指定的主存儲頁。在SCK時鐘脈沖的控制下,先串行輸入命令碼82H或85H、緊接著是4個保留位、然后是11個頁地址位(表示數(shù)據(jù)要寫入的指定主存儲頁)、最后是9個數(shù)據(jù)起始地址位(表示緩沖區(qū)第一個字節(jié)的起始地址)。當所有的地址位均串行輸入后,芯片通過SI腳開始接收數(shù)據(jù)并存儲在緩沖區(qū)1或緩沖區(qū)2中,當緩沖區(qū)存滿后,將從緩沖區(qū)的第一個字節(jié)處開始存儲數(shù)據(jù)。當芯片使能腳CS由低電平變?yōu)楦唠娖綍r,芯片將首先擦除指定的主存儲頁,然后再將存儲在緩沖區(qū)中的數(shù)據(jù)寫入指定的主存儲頁。

          硬件寫保護及復位功能

            當寫保護腳(WP)為低電平時,主存儲頁的前256頁不能寫入數(shù)據(jù)。當復位腳(RESET)變?yōu)榈碗娖綍r,將中斷所有正在進行的讀操作,并將內(nèi)部置成空閑狀態(tài)。一旦該腳變?yōu)楦唠娖?,即可對芯片進行正常的讀寫操作。

          AT45D041與出租車計費器及串行接口控制器的接口設(shè)計

            AT45D041用于出租車數(shù)據(jù)采集系統(tǒng)時,一方面它采集出租車計費器中存儲的各種數(shù)據(jù),此時計費器中的單片機將數(shù)據(jù)寫入到AT45D041中的主存儲頁中;另一方面通過串行接口控制器將數(shù)據(jù)輸入給管理部門的PC機,此時串行接口控制器中的單片機從AT45D041中的主存儲頁讀取數(shù)據(jù),然后再將數(shù)據(jù)通過串行口傳送到PC機中。因此AT45D041與出租車計費器及串行接口控制器的接口設(shè)計主要表現(xiàn)為AT45D041與單片機的接口設(shè)計,假設(shè)單片機為AT89C51,則單片機與AT45D041的接口如圖4所示。圖中R、C是使AT45D041具有上電復位功能,寫保護腳(WP)接VCC是讓AT45D041的前256頁也能寫入數(shù)據(jù)。

            串行接口控制器的主要作用是從AT45D041的主存儲中讀出數(shù)據(jù),然后再將數(shù)據(jù)輸入給PC機,它的核心是單片機,利用單片機來實現(xiàn)和PC機的串行通信。圖5所示為串行接口控制器的硬件電路圖,因PIC系列單片機由于具有實用、低價、省電、小巧和高速等優(yōu)點,所以串行接口控制器中的單片機選PIC16C57,由于該單片機沒有專用的異步通訊口(RXD,TXD)及波特率發(fā)生器,因此要實現(xiàn)PIC單片機與PC機的串行通信,必須由軟件指定PIC的兩個I/O端口(如RA0為RXD,RA1為TXD)為異步通訊口,并按照預定的波特率編寫軟件延時子程序。 圖中電阻為10KΩ,電容為10_F,電源電壓Vcc為5V。MAX232為一電平轉(zhuǎn)換芯片,它將單片機輸出的TTL電平轉(zhuǎn)換成PC機能接收的RS-232電平,并將PC機串行口輸出的RS-232電平轉(zhuǎn)換成單片機能接收的TTL電平。

          系統(tǒng)軟件設(shè)計

            系統(tǒng)軟件設(shè)計由兩個部分組成:單片機讀寫AT45D041中的數(shù)據(jù)及單片機和PC機之間的串行通信。單片機讀寫AT45D041中數(shù)據(jù)的軟件設(shè)計比較簡單,這里不再敘述。下面主要介紹單片機和PC機之間串行通信的軟件設(shè)計,由于VB6.0提供了串行通訊MSComm(電話盒)控件來為應(yīng)用程序提供串行通信,它將串口設(shè)備當作一個目標封裝起來,容易操作,編程很方便,其良好的用戶界面、簡單方便的串行通信和實用性強的優(yōu)點,無須借用其他語言就可以開發(fā)出優(yōu)秀的通信軟件,因而PC機軟件采用VB6.0語言編寫。MSComm控件的調(diào)出及其主要屬性如下。

          MSComm控件的調(diào)出

            VB 6.0的MSComm控件并不會主動出現(xiàn)在工具箱中,當我們需要它時,讓它出現(xiàn)在工具箱中的步驟如下:


          MSComm屬性

            MSComm屬性很多,其重要的屬性說明如下:


            軟件設(shè)計時應(yīng)注意的幾個問題


          結(jié)語

            本文所介紹的出租車數(shù)據(jù)采集系統(tǒng)使用了大容量IC卡AT45D041、PC機串行口及VB6.0來實現(xiàn)數(shù)據(jù)的采集和傳輸,不僅數(shù)據(jù)采集方便,且系統(tǒng)的硬件和軟件設(shè)計均較簡單,軟件升級容易。降低了系統(tǒng)成本,提高了系統(tǒng)的可靠性,目前該系統(tǒng)已在許多大中城市的出租車公司得到了廣泛的應(yīng)用?!?BR> 

          參考文獻:

          1.薛棟梁. ‘MCS-51/151/251 單片機原理與應(yīng)用(二)’, 中國水利水電出版社,2001

          2.范逸之. ‘Visual Basic 與 RS232 串行通訊控制’, 中國青年出版社, 2001



          關(guān)鍵詞: 汽車電子 汽車電子

          評論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();