版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 摘 要</b></p><p> 近年來(lái),美國(guó)的達(dá)拉斯半導(dǎo)體公司(DALLAS SEMICONDUCTOR)推出了一項(xiàng)特有的單總線(1-Wire Bus)技術(shù),它采用單根信號(hào)線,既可傳輸時(shí)鐘,又能傳輸數(shù)據(jù),而且數(shù)據(jù)傳輸是雙向的,因而這種單總線技術(shù)具有線路簡(jiǎn)單,硬件開(kāi)銷(xiāo)少,成本低廉,便于總線擴(kuò)展和維護(hù)等優(yōu)點(diǎn)。</p><p> 本
2、文設(shè)計(jì)了一種基于ATMega16單片機(jī)和iButton的電子鎖的控制器,從硬件和軟件兩方面闡述了ATMega16單片機(jī)對(duì)iButton電子鎖進(jìn)行控制的設(shè)計(jì)方法。</p><p> 首先,本文介紹了基于單總線的iButton電子鎖的發(fā)展背景,單總線的原理以及現(xiàn)在國(guó)內(nèi)外的iButton電子鎖的發(fā)展現(xiàn)狀。</p><p> 其次,介紹了基于ATMega16和iButton的電子鎖控制器的硬件
3、設(shè)計(jì)。</p><p> 再次,介紹了該系統(tǒng)的軟件設(shè)計(jì),包括對(duì)iButton仿真模擬器的軟件設(shè)計(jì)。</p><p> 最后,進(jìn)行了系統(tǒng)的仿真和測(cè)試。</p><p> 結(jié)果表明,該ATMega16單片機(jī)能夠?qū)Button進(jìn)行各種控制,因此該基于ATMega16和iButton的電子鎖控制器的設(shè)計(jì)達(dá)到了設(shè)計(jì)的要求。</p><p>
4、關(guān)鍵詞:?jiǎn)慰偩€,IButton,ATMega16</p><p> 注:本設(shè)計(jì)題目來(lái)源于教師的企業(yè)科研項(xiàng)目,項(xiàng)目編號(hào)為:1920</p><p><b> Abstract</b></p><p> In recent days, an American company named Dallas Semiconductor had lau
5、nched the unique 1-Wire Bus Technology, which could transfer the clock signal and data simultaneously. One signal wire is its tool, and the transmission of it comprises a bidirectional way. Owing to the special design, t
6、he 1-Wire Bus Technology operates with simple lines, low hardware expenses and costs, being available to expand the bus circuit and implement maintenance.</p><p> This paper designs a controller based on th
7、e ATMega16 microcontroller and iButton electronic lock, expounding how to control the iButton electronic lock by ATMega16 microcontroller from both the software’s and hardware’s sides.</p><p> At first, the
8、 development of the iButton electronic lock based on 1-Wire bus is introduced, accompanying the principle of 1-Wire Bus and the current condition of iButton electronic lock.</p><p> Second, the hardware des
9、ign of the controller based on ATMega16 and iButton is introduced.</p><p> Third, the software design of the system is presented, including a simulative software of iButton. </p><p> Finally,
10、the simulation and the test of the system are carried out. </p><p> The results show that the ATMega16 microcontroller is able to conduct various controls on iButton, which eventually implies the eligibilit
11、y of the designed electronic controller</p><p> Key words: 1-Wire Bus, iButton, ATMega16</p><p><b> 目 錄</b></p><p> 1緒 論1</p><p> 1.1題目背景及目的1
12、</p><p> 1.2國(guó)內(nèi)外發(fā)展現(xiàn)狀2</p><p> 1.2.1單總線技術(shù)3</p><p> 1.2.2多密鑰iButton-DS19914</p><p> 1.3論文的主要內(nèi)容6</p><p> 2系統(tǒng)的硬件設(shè)計(jì)7</p><p> 2.1開(kāi)發(fā)環(huán)
13、境介紹—Proteus7</p><p> 2.2AVR單片機(jī)簡(jiǎn)介8</p><p> 2.3系統(tǒng)硬件電路構(gòu)成9</p><p> 2.3.1系統(tǒng)主控制器10</p><p> 2.3.2系統(tǒng)顯示器11</p><p> 2.3.3系統(tǒng)單總線接線11</p><p&g
14、t; 2.3.4系統(tǒng)iButton模擬器12</p><p> 2.3.5系統(tǒng)控制鍵盤(pán)13</p><p><b> 3軟件設(shè)計(jì)15</b></p><p> 3.1主控制器設(shè)計(jì)15</p><p> 3.1.1LCD顯示器模塊設(shè)計(jì)16</p><p> 3.1.2
15、總線基本操作模塊20</p><p> 3.1.3總線主要功能模塊23</p><p> 3.2iButton模擬器設(shè)計(jì)26</p><p> 3.2.1模擬器總線基本操作模塊27</p><p> 3.2.2模擬器主要功能模塊28</p><p> 4系統(tǒng)的仿真31</p>
16、;<p> 4.1主控制器ROM操作仿真31</p><p> 4.2主控制器存儲(chǔ)器操作仿真32</p><p><b> 結(jié) 論34</b></p><p> 參 考 文 獻(xiàn)35</p><p><b> 致 謝36</b></p>
17、;<p><b> 緒 論</b></p><p><b> 題目背景及目的</b></p><p> 門(mén)禁系統(tǒng)[1]發(fā)展到今天,舊式的機(jī)械門(mén)鎖已逐步加上電子的成分,電子門(mén)鎖已開(kāi)始廣泛地在一些機(jī)密單位、高級(jí)賓館及宅區(qū)得到使用。在密碼鎖、磁卡、IC卡等名目縱多的電子門(mén)鎖中,由于條形碼、磁卡、IC卡等構(gòu)成的數(shù)字識(shí)別系統(tǒng)存在著
18、攜帶不便、易受損壞、不能應(yīng)用于惡劣環(huán)境等不足[2];指紋識(shí)別系統(tǒng)、人像識(shí)別系統(tǒng)有著很高的安全性,不存在以上所說(shuō)的問(wèn)題,但是,開(kāi)發(fā)起來(lái)十分繁瑣,且由于數(shù)據(jù)量大,由于iButton電子瑣保密性強(qiáng)、使用方便、耐用,作為更新一代產(chǎn)品脫穎而出,引起了廣泛內(nèi)的關(guān)注。</p><p> iButton是Information Button的簡(jiǎn)稱(chēng),它是一種能夠授權(quán)給持有它的人的一種電子元件,每一顆iButton內(nèi)的存儲(chǔ)器是記錄
19、著一組獨(dú)一無(wú)二的識(shí)別碼(有64位二進(jìn)制碼組成)[3],當(dāng)iButton接觸到門(mén)鎖的藍(lán)點(diǎn)接收器時(shí),識(shí)別碼便會(huì)被讀出。iButton的外型為紐扣狀(形同紐扣電池狀),封裝在耐用的不銹鋼外殼內(nèi),可在惡劣的環(huán)境中使用。除用它可加一個(gè)把做成鑰匙外,還可以做在戒指上、或裝在皮夾上等,使用十分方便。</p><p> iButton電子鎖正是用iButton作為鑰匙,當(dāng)來(lái)到受管制的地方,只要將iButton鑰匙輕輕接觸鎖上的
20、藍(lán)點(diǎn)接收器,只要識(shí)別碼與接收器中存的碼相同,門(mén)即打開(kāi),便馬上可以進(jìn)出。除此之外,系統(tǒng)管理員還可以指定哪扇門(mén),何時(shí),由誰(shuí)能夠打開(kāi)。儲(chǔ)存鎖內(nèi)部的進(jìn)出資料檔可以記錄最近的1240筆門(mén)鎖操作記錄。</p><p> iButton利用單總線技術(shù)來(lái)與外界溝通,數(shù)字化單總線技術(shù)[4] 是Dallas獨(dú)特的單線傳輸協(xié)定。每個(gè)iButton LP中的DS3708都有一個(gè)MicroLAN腳,它可連到Host PC作為資料傳輸。因
21、MicroLAN具有multidrop的功能,數(shù)個(gè)鎖可同時(shí)連到Host PC,由Host PC監(jiān)控。iButton電子提供online和offline兩種操作模式。在online模式下,各個(gè)鎖皆能夠快速更新資料庫(kù),而相對(duì)應(yīng)的分散式管理則意味著使用者能立即得到回應(yīng)。iButton電子鎖完全具備這兩項(xiàng)條件。</p><p> iButton電子鎖以其靈活方便的操作方式和極強(qiáng)的保密性能被廣泛地利用于門(mén)鎖、車(chē)庫(kù)鎖、電梯
22、控制、汽車(chē)防盜等領(lǐng)域[4],必將成為新一代電子鎖中的佼佼者。</p><p> 本課題即以上述問(wèn)題為出發(fā)點(diǎn),設(shè)計(jì)實(shí)現(xiàn)了基于ATMega16和iButton的電子鎖控制器,該系統(tǒng)不僅實(shí)現(xiàn)了ATMega16單片機(jī)對(duì)iButton的讀寫(xiě)操作,而且能夠迅速處理數(shù)據(jù),并將處理結(jié)果通過(guò)友好的界面顯示給用戶(hù),并且使用另一個(gè)單片機(jī)模擬iButton的輸入輸出時(shí)序和各種功能操作,這樣在進(jìn)行系統(tǒng)開(kāi)發(fā)時(shí)便可在Proteus這個(gè)軟件里
23、面仿真了,不用真的下載到開(kāi)發(fā)板后再進(jìn)行仿真,從而提高了系統(tǒng)開(kāi)發(fā)的效率。</p><p><b> 國(guó)內(nèi)外發(fā)展現(xiàn)狀</b></p><p> iButton是基于1-Wire總線技術(shù)發(fā)展起來(lái)的,1-Wire總線與目前多數(shù)標(biāo)準(zhǔn)串行數(shù)據(jù)通信方式如SPI/I2C/MICROWIRE不同,采用單根信號(hào)線,既傳輸時(shí)鐘又傳輸數(shù)據(jù),同時(shí)還為從機(jī)(Slave)提供寄生電源,數(shù)據(jù)傳輸
24、是雙向半工的。由于它只有一個(gè)信號(hào)線,因此具有節(jié)省I/O口線資源、結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于擴(kuò)展和維護(hù)等優(yōu)點(diǎn)[6]?;谝陨系膬?yōu)點(diǎn),國(guó)內(nèi)外對(duì)1-Wire總線的開(kāi)發(fā)已經(jīng)十分廣泛。例如,基于1-Wire信號(hào)采集系統(tǒng)、基于1-Wire總線的分布式溫濕度測(cè)控系統(tǒng)、1-Wire總線協(xié)議的數(shù)字IC溫度傳感器等。</p><p> 美國(guó)達(dá)拉斯半導(dǎo)體公司(Dallas Semiconductor Corporation)在99年推
25、出的1種智能化信息載體信息紐扣(iButton),較好地解決了數(shù)字識(shí)別系統(tǒng)存在的這些問(wèn)題,為開(kāi)發(fā)更加完善、新穎的數(shù)字識(shí)別系統(tǒng)提供了技術(shù)支持和實(shí)現(xiàn)手段[7]。由于iButton方便、可靠的特點(diǎn),越來(lái)越得到廣泛的開(kāi)發(fā)應(yīng)用,美國(guó)的DALLAS公司一直在進(jìn)行1-Wire的研制和開(kāi)發(fā),國(guó)內(nèi)像遠(yuǎn)志科技公司就專(zhuān)門(mén)提供1-Wire完整的解決方案。iButton的應(yīng)用包括替代現(xiàn)金用于小額交易、搬運(yùn)系統(tǒng)、停車(chē)計(jì)時(shí)器、自動(dòng)販賣(mài)機(jī)、巡檢系統(tǒng)、考勤門(mén)禁系統(tǒng)等。i
26、Button采用直徑17mm、厚3~6mm的鈕扣狀不銹鋼外殼封裝。內(nèi)部由I/O處理器和存儲(chǔ)器兩個(gè)基本部分組成,某些應(yīng)用于特殊場(chǎng)合的iButton還內(nèi)置有感溫、時(shí)鐘。iButton以1-Wire規(guī)范作為通信協(xié)議,僅用1根數(shù)據(jù)線來(lái)實(shí)現(xiàn)與外界的信息交換。本文研究的內(nèi)容就是對(duì)1-Wire總線和多密鑰iButton的介紹,并設(shè)計(jì)基于ATMega16的iButton電子鎖控制器。</p><p><b> 單總線
27、技術(shù)</b></p><p> 單總線技術(shù)(1-Wire)是Maxim全資子公司Dallas的一項(xiàng)專(zhuān)有技術(shù)。Dallas半導(dǎo)體公司1-Wire器件采用一種特殊的接口協(xié)議,通過(guò)單條連接線解決了控制、通信和供電,降低了系統(tǒng)成本并簡(jiǎn)化了設(shè)計(jì)。1-wire芯片包含多種功能的器件,例如電子標(biāo)識(shí)、傳感器、控制和存儲(chǔ)等,既有各種傳統(tǒng)的IC封裝形式,還可提供超小型CSP、不銹鋼愷裝iButtons等新型封裝。單總線
28、(1-Wire)技術(shù)與目前多數(shù)標(biāo)準(zhǔn)的串行數(shù)據(jù)通信方式(如I2C串行總線)不同,它將地址線、數(shù)據(jù)線、控制線合為一根信號(hào)線,采用單根信號(hào)線雙向傳輸,允許在這根信號(hào)線上掛上百個(gè)由Dallas公司提供的芯片控制的對(duì)象,具有節(jié)省I/O口線資源、結(jié)構(gòu)簡(jiǎn)單、成本低廉、便于總線擴(kuò)展等優(yōu)點(diǎn)。 </p><p> 單總線的工作原理顧名思義,單總線即只有一根數(shù)據(jù)線,系統(tǒng)中的數(shù)據(jù)交換、控制都由這根線完成。設(shè)備(主機(jī)或從機(jī))通過(guò)一個(gè)漏極
29、開(kāi)路或三態(tài)端口連至該數(shù)據(jù)線,以允許設(shè)備在不發(fā)送數(shù)據(jù)時(shí)能夠釋放總線,而讓其它設(shè)備使用總線。單總線通常要求外接一個(gè)約為4.7kΩ的上拉電阻,這樣,當(dāng)總線閑置時(shí),其狀態(tài)為高電平。主機(jī)和從機(jī)之間的通信可通過(guò)3個(gè)步驟完成,分別為初始化1-wire器件、識(shí)別1-wire器件和交換數(shù)據(jù)。由于它們是主從結(jié)構(gòu),只有主機(jī)呼叫從機(jī)時(shí),從機(jī)才能應(yīng)答,因此主機(jī)訪問(wèn)1-wire器件都必須嚴(yán)格遵循單總線命令序列,即初始化、ROM、命令功能命令。如果出現(xiàn)序列混亂,1-
30、wire器件將不響應(yīng)主機(jī)(搜索ROM命令,報(bào)警搜索命令除外)。</p><p> 通常把掛在單總線上的器件稱(chēng)之為單總線器件,單總線器件內(nèi)一般都具有控制、收/發(fā)、存儲(chǔ)等電路。為了區(qū)分不同的單總線器件,廠家生產(chǎn)單總線器件時(shí)都要刻錄一個(gè)64位的二進(jìn)制ROM代碼,以標(biāo)志其ID號(hào)。目前,單總線器件主要有數(shù)字溫度傳感器(如DS18B20)、A/D轉(zhuǎn)換器(如DS2450)、門(mén)標(biāo)、身份識(shí)別器(如DS1990A)、單總線控制器(
31、如DS1WM)等。這里介紹一種iButton形式的單總線器件,它是利用瞬間接觸來(lái)進(jìn)行數(shù)字通信的,這些器件的應(yīng)用已經(jīng)滲透到貨幣交易和高度安全的認(rèn)證系統(tǒng)之中。IButton是采用紐扣狀不銹鋼外殼封裝的微型計(jì)算機(jī)晶片,它具有抗撞擊、防水漬、耐腐蝕、抗磁擾、防折疊、價(jià)格便宜等特點(diǎn),能較好的解決傳統(tǒng)識(shí)別器存在的不足,同時(shí)又可滿(mǎn)足系統(tǒng)在可靠性、穩(wěn)定性方面的要求。IButton主要有三種類(lèi)型,分別是Memory iButton(存儲(chǔ)器);Java-p
32、owered cryptographic iButton(加密型);Thermochron iButton(溫度型)。存儲(chǔ)型iButton最大存儲(chǔ)空間為64kB,可以存儲(chǔ)文本或數(shù)字照片。加密型iButton是一種微處理器和高速算</p><p> 多密鑰iButton-DS1991</p><p> 多密鑰 iButton DS1991 是進(jìn)行讀/寫(xiě)操作的數(shù)據(jù)載體,它有三個(gè)獨(dú)立的電子密
33、鑰,提供 1,152 位安全、非易失存儲(chǔ)器。其外型如圖1.1所示。每個(gè)密鑰分區(qū)包括 384位,具有獨(dú)立的 64位密碼和公共識(shí)別區(qū);密碼區(qū)必須匹配才能訪問(wèn)安全存儲(chǔ)器。數(shù)據(jù)按照 1-Wire 協(xié)議傳輸,只需單條數(shù)據(jù)線和地回路。512位的暫存器能夠保證安全存儲(chǔ)器的數(shù)據(jù)完整性。數(shù)據(jù)首先寫(xiě)到能讀回的暫存器;數(shù)據(jù)被校驗(yàn)確認(rèn)后,發(fā)出復(fù)制暫存器命令,以便將數(shù)據(jù)傳送到存儲(chǔ)器。這個(gè)過(guò)程確保了在改變存儲(chǔ)器內(nèi)容時(shí)的數(shù)據(jù)完整性。每片</p><
34、;p> 圖1.1 iButton元件</p><p> DS1991 內(nèi)部都有在工廠光刻的 48位序列碼,為唯一的身份驗(yàn)證提供了保證,也確保了可絕對(duì)跟蹤功能;DS1991的家族碼是 02H。由于 iButton采用了 MicroCan封裝,所以具有防塵、防潮、抗震等特性,適用于在惡劣環(huán)境中工作。另外,工程技術(shù)人員操作起來(lái)也很方便;DS1991 緊湊的紐扣外型使其可以自動(dòng)對(duì)準(zhǔn)相應(yīng)的接收器。與 DS1991
35、 配套的附件使其可以裝在塑料鑰匙環(huán)上、圖像身份證上、印刷電路板或任何其它表面平滑的物體上。應(yīng)用領(lǐng)域包括:安全訪問(wèn)控制、銀行存儲(chǔ)借貸信息、工作進(jìn)程的跟蹤、旅行者的電子支票和私有資料的保存等。</p><p> 每片DS1991 都有唯一的 64 位ROM代碼。6個(gè)特定的設(shè)備檢測(cè)命令,包括3個(gè)中間結(jié)果暫存器命令:Write Scratchpad、Read Scratchpad和Copy Scratchpad;還有3
36、個(gè)子密鑰命令:Write Password、Write Subkey 和Read Subkey。當(dāng)選中某個(gè)從機(jī)設(shè)備后,存儲(chǔ)器功能命令就會(huì)寫(xiě)入DS1991中。這些命令由三段組成,每段長(zhǎng)為一個(gè)字節(jié);第一個(gè)字節(jié)為功能代碼段,它定義了6個(gè)可執(zhí)行的命令;第二個(gè)字節(jié)是地址段,其中的前六位定義了命令的起始地址值,后兩位是子密鑰的地址代碼;命令的第三個(gè)字節(jié)是第二個(gè)字節(jié)的補(bǔ)碼。其暫存器命令和子密鑰命令如下:</p><p><
37、;b> (1) 暫存器命令</b></p><p> DS1991中64位的讀/寫(xiě)暫存器是沒(méi)有密碼保護(hù)的;它通常用于構(gòu)建數(shù)據(jù)以進(jìn)行校驗(yàn),然后再?gòu)?fù)制到安全子密鑰分區(qū)。</p><p> Write Scratchpad [96H] 命令用于將數(shù)據(jù)輸入到暫存器。 </p><p> Read Scratchpad [69H] 令用于提取來(lái)自暫存
38、器的數(shù)據(jù)。 </p><p> Copy Scratchpad [3CH] 命令將指定的數(shù)據(jù)塊從暫存器傳遞到選中的子密鑰分區(qū)中。</p><p><b> (2) 子密鑰命令</b></p><p> DS1991中的每個(gè)子密鑰塊都是單獨(dú)地進(jìn)行訪問(wèn)的。處理安全子密鑰的數(shù)據(jù)讀、寫(xiě)從命令指定的地址開(kāi)始,處理過(guò)程持續(xù)進(jìn)行直到從機(jī)設(shè)備復(fù)位或子密鑰
39、數(shù)據(jù)讀、寫(xiě)完畢。</p><p> Write Password [5AH] 命令用來(lái)向已選中的子密鑰分區(qū)輸入識(shí)別碼和密碼。</p><p> Write Subkey [99H] 命令用來(lái)將數(shù)據(jù) 輸入到選中的子密鑰中。</p><p> Read Subkey [66H] 命令用于提取選中的子密鑰區(qū)內(nèi)的數(shù)據(jù)。</p><p>
40、; 初次使用時(shí),無(wú)法確定存儲(chǔ)在從機(jī)設(shè)備里的密碼,所以需要先對(duì) DS1991 進(jìn)行初始化。初始化時(shí)對(duì)選定的子密鑰區(qū)利用Write Password 命令直接寫(xiě)入新的識(shí)別碼和密碼(而不必通過(guò)暫存器),一旦新的識(shí)別碼和密碼存入從機(jī)設(shè)備里,再進(jìn)行修改時(shí),就要通過(guò)暫存器。</p><p> 一旦主機(jī)檢測(cè)到在線應(yīng)答脈沖,就可以發(fā)出4條DS1991支持的ROM功能命令。所有ROM操作命令的長(zhǎng)度為8位。</p>
41、<p> Read ROM [33H]:此命令允許主機(jī)讀取的 8 位家族碼、48 位唯一的序列號(hào)和 8 位CRC校驗(yàn)碼。</p><p> Match ROM [55H]:此命令跟隨 64位ROM序列號(hào),允許主機(jī)訪問(wèn)多從機(jī)總線系統(tǒng)中某個(gè)特定的DS1991。</p><p> Skip ROM [CCH]:此命令在單從機(jī)總線系統(tǒng)中允許主機(jī)直接訪問(wèn)存儲(chǔ)器,而無(wú)須提 供6
42、4位ROM代碼,節(jié)省時(shí)間。</p><p> Search ROM [F0H]:此系統(tǒng)初次上電時(shí),主機(jī)可能檢測(cè)不出 1-Wire總線上從機(jī)設(shè)備的數(shù)目和它們的64位ROM代碼,而Search ROM命令能夠使得主機(jī)通過(guò)排除法來(lái)檢測(cè)出總線上所有從機(jī)設(shè)備的64位ROM代碼。</p><p><b> 論文的主要內(nèi)容</b></p><p> 本
43、設(shè)計(jì)在軟件開(kāi)發(fā)的過(guò)程中,盡可能的采用模塊化的設(shè)計(jì)思想設(shè)計(jì),構(gòu)建“平臺(tái)的模式”,便于儀器的調(diào)試、升級(jí)和移植。整個(gè)系統(tǒng)是在Proteus這個(gè)仿真軟件里面進(jìn)行仿真的。</p><p> 第二章介紹了系統(tǒng)的硬件設(shè)計(jì),包括控制器的發(fā)送單元和接收單元(模擬部分)、信號(hào)處理模塊(數(shù)字部分),界面顯示方面等的器件選擇和電路原理圖。</p><p> 第三章介紹了系統(tǒng)的軟件設(shè)計(jì),整個(gè)程序以模塊化的思想設(shè)
44、計(jì),大致可有顯示器初始化,顯示,控制,單總線的初始化,讀寫(xiě)操作等延時(shí)等幾個(gè)模塊供主控模塊調(diào)用。其中大部分模塊可以形成標(biāo)準(zhǔn)函數(shù)庫(kù),可方便地實(shí)現(xiàn)移植。</p><p> 第四章對(duì)系統(tǒng)進(jìn)行測(cè)試和仿真,對(duì)系統(tǒng)程序運(yùn)行是否正確進(jìn)行測(cè)試,并對(duì)系統(tǒng)的功能實(shí)現(xiàn)效果進(jìn)行仿真。</p><p><b> 系統(tǒng)的硬件設(shè)計(jì) </b></p><p> 由于系統(tǒng)是
45、要實(shí)現(xiàn)ATMega16單片機(jī)對(duì)iButton電子鎖的控制,硬件設(shè)計(jì)選用的環(huán)境是Proteus 6.7,Proteus是Labcenter出品的電路分析實(shí)物仿真系統(tǒng),可仿真各種電路和IC,并支持單片機(jī),元件庫(kù)齊全,使用方便,是不可多得的好軟件。</p><p> 開(kāi)發(fā)環(huán)境介紹—Proteus</p><p> PROSPICE是結(jié)合ISIS原理圖設(shè)計(jì)環(huán)境使用的混合型電路仿真器。基于工業(yè)標(biāo)
46、準(zhǔn)SPICE3F5的模擬內(nèi)核,加上混合型仿真的擴(kuò)展以及交互電路動(dòng)態(tài),PROSPICE為您提供開(kāi)發(fā)和測(cè)試設(shè)計(jì)的強(qiáng)大交互式環(huán)境。</p><p><b> 其系統(tǒng)特性如下:</b></p><p> 完全集成原理圖布圖環(huán)境;</p><p> 以虛擬儀器以及用戶(hù)可定義的動(dòng)態(tài)元件支持基于曲線圖和交互電路模型;</p><p&
47、gt; 14種虛擬儀器:直流電壓/電流表、交流電壓/電流表、信號(hào)發(fā)生器、數(shù)字發(fā)生器、 示波器、邏輯分析儀頻率計(jì)數(shù)虛擬終端、SPI調(diào)試器、I2C調(diào)試器和邏輯探頭;</p><p> 獨(dú)特的Proteus VSM技術(shù)以實(shí)現(xiàn)微處理器設(shè)計(jì)的協(xié)同仿真;</p><p><b> 數(shù)字仿真:</b></p><p> 事件驅(qū)動(dòng)數(shù)字仿真模
48、型定時(shí),失靈以及浮空輸入特性;</p><p> 熔絲圖模型允許從JEDEC文件中直接仿真PLD;</p><p> 完全以定時(shí)信息設(shè)置TTL和CMOS模型;</p><p> 一致性分析便易于嵌入系統(tǒng)的自動(dòng)測(cè)試。</p><p> 單片機(jī)技術(shù)是現(xiàn)代電子工程領(lǐng)域一門(mén)迅速發(fā)展的技術(shù),應(yīng)用于各種嵌入式系統(tǒng)中。單片機(jī)技術(shù)的發(fā)展和推廣極大地推
49、動(dòng)了電子工業(yè)的發(fā)展,其在教學(xué)和產(chǎn)業(yè)界的技術(shù)推廣仍然是當(dāng)今業(yè)界的一個(gè)熱點(diǎn)。單片機(jī)技術(shù)是現(xiàn)代電子工業(yè)中不可缺少的一項(xiàng)技術(shù),掌握單片機(jī)技術(shù)是電子信息類(lèi)專(zhuān)業(yè)學(xué)生就業(yè)的一個(gè)基本條件。過(guò)去,在單片機(jī)實(shí)驗(yàn)室的建設(shè)中基本都是采用硬件仿真系統(tǒng),所以為了保證實(shí)驗(yàn)的順利開(kāi)設(shè),同類(lèi)型的硬件仿真開(kāi)發(fā)系統(tǒng)就需要采購(gòu)多套設(shè)備,這樣硬件的投資成本相對(duì)較高,然而使用單片機(jī)軟件仿真系統(tǒng),就可以大大減少硬件設(shè)備的采購(gòu),同時(shí)降低對(duì)硬件設(shè)備進(jìn)行維護(hù)的工作量。根據(jù)以上的原因所以本
50、系統(tǒng)采用Proteus這個(gè)軟件進(jìn)行硬件設(shè)計(jì)。</p><p><b> AVR單片機(jī)簡(jiǎn)介</b></p><p> 單片機(jī)就是包括了中央處理器CPU(Contral Prosessor Unit)、隨機(jī)存儲(chǔ)器(Ramdom Access Memory)、只讀存儲(chǔ)器ROM(Read Only Memory)和各種輸入輸出的單芯片微機(jī)系統(tǒng)。</p>&l
51、t;p> 單片微型計(jì)算機(jī)也稱(chēng)為單片機(jī),目前已被廣泛地應(yīng)用在自動(dòng)測(cè)量、智能儀表、工業(yè)控制以及家用電器等各個(gè)方面。</p><p> AVR單片機(jī)是Atmel公司1997年推出的RISC單片機(jī),RISC(精簡(jiǎn)指令系統(tǒng)計(jì)算機(jī))是相對(duì)于CISC(復(fù)雜指令系統(tǒng)計(jì)算機(jī))而言的。RISC并非只是簡(jiǎn)單地減去指令,而是通過(guò)使計(jì)算機(jī)的結(jié)構(gòu)更加簡(jiǎn)單合理而提高運(yùn)算速度的。RISC優(yōu)先的選取使用頻率最高的簡(jiǎn)單指令,避免復(fù)雜指令,
52、并固定指令長(zhǎng)度,減少指令格式和尋址方式的種類(lèi),從而縮短指令周期,提高運(yùn)行速度。由于AVR單片機(jī)采用了RISC的這種結(jié)構(gòu),使AVR系列的單片機(jī)都具備了1MIPS/MHZ(百萬(wàn)條指令每秒/兆赫茲)的高速處理能力。</p><p> AVR單片機(jī)吸收了DSP雙總線的特點(diǎn),采用Harvard總線結(jié)構(gòu),因此單片機(jī)的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器是分離的,并且可對(duì)具有相同的地址的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器進(jìn)行。與傳統(tǒng)的MCS51系列單
53、片機(jī)相比,AVR單片機(jī)中,寄存器有32個(gè)通用工作寄存器組成,并且任何一個(gè)寄存器都可以充當(dāng)累加器,從而有效的避免了累加器的瓶頸效應(yīng),提高了系統(tǒng)的性能[2]。</p><p> ATmega16是基于增強(qiáng)的AVR RISC結(jié)構(gòu)的低功耗8位CMOS微控制器。由于其先進(jìn)的指令集以及單時(shí)鐘周期指令執(zhí)行時(shí)間,ATmega16的數(shù)據(jù)吞吐率高達(dá)1MIPS/MHz,從而可以緩減系統(tǒng)在功耗和處理速度之間的矛盾。</p>
54、<p> ATmega16有如下特點(diǎn):16K字節(jié)的系統(tǒng)內(nèi)可編程Flash(具有同時(shí)讀寫(xiě)的能力,即RWW),512字節(jié)EEPROM,1K字節(jié)SRAM,32個(gè)通用I/O 口線,32個(gè)通用工作寄存器,用于邊界掃描的JTAG接口,支持片內(nèi)調(diào)試與編程,三個(gè)具有比較模式的靈活的定時(shí)器 / 計(jì)數(shù)器(T/C),片內(nèi)/外中斷,可編程串行USART,有起始條件檢測(cè)器的通用串行接口,8路10位具有可選差分輸入級(jí)可編程增益 (TQFP 封裝 )
55、 的ADC,具有片內(nèi)振蕩器的可編程看門(mén)狗定時(shí)器,一個(gè)SPI串行端口,以及六個(gè)可以通過(guò)軟件進(jìn)行選擇的省電模式。 工作于空閑模式時(shí) CPU 停止工作,而 USART、兩線接口、A/D 轉(zhuǎn)換器、 SRAM、T/C、SPI端口以及中斷系統(tǒng)繼續(xù)工作;掉電模式時(shí)晶體振蕩器停止振蕩,所有功能除了中斷和硬件復(fù)位外都停止工作;在省電模式下,異步定時(shí)器繼續(xù)運(yùn)行,允許用戶(hù)保持一個(gè)時(shí)間基準(zhǔn),而其余功能模塊處于休眠狀態(tài);ADC噪聲抑制模式時(shí)終止CPU和除了異步定
56、時(shí)器與ADC以外所有I/O模塊的工作,以降低ADC轉(zhuǎn)換時(shí)的開(kāi)關(guān)噪聲; Standby模式下只有晶體或諧振振蕩器運(yùn)行,其余功能模塊處于休眠狀態(tài),使得</p><p> 本芯片是以Atmel高密度非易失性存儲(chǔ)器技術(shù)生產(chǎn)的。片內(nèi)ISP Flash允許程序存儲(chǔ)器通過(guò)ISP串行接口,或者通用編程器進(jìn)行編程,也可以通過(guò)運(yùn)行于AVR內(nèi)核之中的引導(dǎo)程序進(jìn)行編程。引導(dǎo)程序可以使用任意接口將應(yīng)用程序下載到應(yīng)用Flash存儲(chǔ)區(qū)(Ap
57、plication Flash Memory)。在更新應(yīng)用Flash存儲(chǔ)區(qū)時(shí)引導(dǎo)Flash區(qū)(Boot Flash Memory)的程序繼續(xù)運(yùn)行,實(shí)現(xiàn)了RWW操作。通過(guò)將8位RISC CPU與系統(tǒng)內(nèi)可編程的Flash集成在一個(gè)芯片內(nèi), ATmega16成為一個(gè)功能強(qiáng)大的單片機(jī),為許多嵌入式控制應(yīng)用提供了靈活而低成本的解決方案。</p><p><b> 系統(tǒng)硬件電路構(gòu)成</b></p
58、><p> 圖2.1 系統(tǒng)硬件結(jié)構(gòu)圖 </p><p> 本系統(tǒng)是以單片機(jī)為核心,組成一個(gè)集數(shù)據(jù)的采集、處理、顯示及控制為一身的閉環(huán)控制系統(tǒng),其原理圖如圖2.1所示。系統(tǒng)電路有單片機(jī)、控制鍵盤(pán)、單總線線路、LCD顯示器和iButton模擬器五個(gè)部分組成。</p><p><b> 系統(tǒng)主控制器</b></p><p>
59、 系統(tǒng)的主控制器采用ATMega16單片機(jī),如圖2.2所示。</p><p> 主控制器C口的第0位作為單總線鏈接的I/O口線,其執(zhí)行與掛在總線上的單總線器件進(jìn)行通信,負(fù)責(zé)數(shù)據(jù)的輸入輸出;</p><p> 主控制器的A口高四位的I/O口與顯示器的低四位的數(shù)據(jù)口相連接;而A.2口則鏈接到顯示器的RS口,用于控制著與顯示器交換信息時(shí),數(shù)據(jù)輸入輸出的方向;A.3口連接到顯示器的使能驅(qū)動(dòng)口
60、,用于對(duì)顯示器進(jìn)行使能或否的控制,在系統(tǒng)運(yùn)行期間該口一直是出于使能的。</p><p> 圖2.2 系統(tǒng)主控制器</p><p> 主控制器的B口的第1,2位,作為系統(tǒng)控制鍵盤(pán)的輸入口,用于控制主控制器對(duì)總線上的單總線器件iButton的操作。</p><p><b> 系統(tǒng)顯示器</b></p><p> 圖2
61、.3 系統(tǒng)顯示器</p><p> 該系統(tǒng)使用LM016L型號(hào)的LCD顯示器,如圖2.3所示。LM016L LCD顯示器是一個(gè)2行16列液晶 可顯示2行16列英文字符,有8位數(shù)據(jù)總線D0-D7,RS,R/W,EN三個(gè)控制端口(共14線),工作電壓為5V。沒(méi)背光,和常用的1602B功能和引腳一樣(除了調(diào)背光的二個(gè)線腳),詳細(xì)使用請(qǐng)查看LM016L的使用手冊(cè)。</p><p><b&
62、gt; 系統(tǒng)單總線接線</b></p><p> 本系統(tǒng)的單總線連接線路線路圖如圖2.4所示,由于Proteus6.7這個(gè)軟件里面沒(méi)有iButton的DS1991的仿真元件,在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)采用另一個(gè)ATMega16的AVR單片機(jī)模擬iButton的時(shí)序。</p><p> 使用另個(gè)單片機(jī)模擬iButton工作的過(guò)程中,如果按照單總線的接線方法進(jìn)行接線,即主控制器的C0口
63、通過(guò)上拉電阻,然后接到iButton模擬器上的單總線I/O口中。在這樣的情況下,當(dāng)執(zhí)行總線操作時(shí),當(dāng)主控制器輸出低電平拉低單總線的電平時(shí),由于沒(méi)有真正的地線,所以在iButton模擬器上是感應(yīng)不到電平的下降的,所以如果按照這種接法是無(wú)法實(shí)現(xiàn)單總線操作的。主控制器和iButton模擬器是無(wú)法通信的。</p><p> 為了解決上述的問(wèn)題,利用三極管,如圖2.5的接法,當(dāng)主控制器輸出低電平時(shí),反向器U3 B輸出高電
64、平,這時(shí)三極管Q2的基極也為高電平,三極管導(dǎo)通,iButton模擬器的總線輸入口上的電平給拉低,模擬器就能正確的讀取主控制器的輸出信</p><p> 圖2.4單總線接線圖</p><p> 號(hào);同理當(dāng)主控制器輸出高電平時(shí),由于三極管U3 B為阻斷狀態(tài),模擬器的輸入引腳上的電平也為高電平,這樣就可以實(shí)現(xiàn)單總線上的電平能夠被兩控制器的引腳控制,控制器引腳又可釋放總線,達(dá)到真正進(jìn)行總線操作
65、時(shí)電平的變化效果。</p><p> 系統(tǒng)iButton模擬器</p><p> 在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)由于Proteus這個(gè)軟件里面沒(méi)有iButton的單總線器件,要進(jìn)行調(diào)試時(shí)不得不把程序下載到真實(shí)的硬件開(kāi)發(fā)板上,這樣設(shè)計(jì)起來(lái)不但成本高而且還增加了調(diào)試的難度、降低了設(shè)計(jì)的效率,因?yàn)槭褂糜布_(kāi)發(fā)板進(jìn)行仿真時(shí),又要花時(shí)間制作開(kāi)發(fā)板,每次程序修改都要花時(shí)間下載到開(kāi)發(fā)板上來(lái)進(jìn)行調(diào)試。所以為了方便設(shè)
66、計(jì)利用另一個(gè)單片機(jī)模擬了iButton的輸出時(shí)序,然后就直接在Proteus軟件里面進(jìn)行電腦的仿真和調(diào)試,這樣就方便了很多,不必再去做開(kāi)發(fā)板,而且調(diào)試起來(lái)也特別容易,大大提高了系統(tǒng)的開(kāi)發(fā)。</p><p> 該iButton模擬器的接線圖如圖2.5,僅使用ATMega16這個(gè)單片機(jī)的兩個(gè)I/O端口,其中B7口作為iButton元件在進(jìn)行單總線操作時(shí)的輸出口,而A7口則作為輸入口,在這里是把iButton元件的單
67、獨(dú)的總線I/O口的功能分開(kāi),用兩個(gè)單片機(jī)的端口來(lái)實(shí)現(xiàn)其代替這兩個(gè)功能。</p><p> 圖2.5 iButton模擬器接線圖</p><p><b> 系統(tǒng)控制鍵盤(pán)</b></p><p> 圖2.6 主控制器鍵盤(pán)接線</p><p> 系統(tǒng)中的控制鍵盤(pán)實(shí)現(xiàn)了兩個(gè)功能,讀取在線的iButton元件的ROM和iB
68、utton存儲(chǔ)區(qū)操作時(shí)的密碼驗(yàn)證。鍵R1實(shí)現(xiàn)ROM讀取功能,鍵R2實(shí)現(xiàn)密碼驗(yàn)證功能。具體接線圖如2.6,主控制器的B0口接R2,B1口接R1。</p><p> 以上就是系統(tǒng)的所有硬件接線的介紹,由于是在Proteus里面仿真,所以單片機(jī)的電源,地和晶振的接線都可以忽略。但是在實(shí)物上仿真時(shí)就必須按要求進(jìn)行設(shè)計(jì)。</p><p><b> 軟件設(shè)計(jì)</b></
69、p><p> 軟件設(shè)計(jì)部分主要介紹一下主程序的設(shè)計(jì)方法,模擬器程序的設(shè)計(jì)方法。在開(kāi)始介紹之前先對(duì)開(kāi)發(fā)的語(yǔ)言和環(huán)境進(jìn)行介紹一下。</p><p> 軟件編程是開(kāi)發(fā)單片機(jī)應(yīng)用系統(tǒng)中的一個(gè)重要環(huán)節(jié)。好的程序不僅能擴(kuò)充單片機(jī)的功能而且還能提高系統(tǒng)的可靠性,便于系統(tǒng)的改進(jìn)和功能的擴(kuò)充。</p><p> 對(duì)于AVR系列的單片機(jī),既可以采用匯編語(yǔ)言編程,也可以采用BASIC和
70、C等高級(jí)語(yǔ)言編程。由于匯編語(yǔ)言編寫(xiě)的系統(tǒng)的程序可讀性和可移植性都比較差,因此系統(tǒng)的調(diào)試工作比較困難,產(chǎn)品的開(kāi)發(fā)周期也較長(zhǎng)。為了提高系統(tǒng)應(yīng)用程序的編寫(xiě)效率,縮短產(chǎn)品的開(kāi)發(fā)周期,采用Basic和C等高級(jí)語(yǔ)言進(jìn)行單片機(jī)應(yīng)用程序的設(shè)計(jì)已經(jīng)成為軟件開(kāi)發(fā)的一個(gè)主流,它不僅大大縮短開(kāi)發(fā)周期,而且可以顯著地增加軟件的可讀性,從而便于研制開(kāi)發(fā)更大的系統(tǒng)。實(shí)踐證明,采用高級(jí)語(yǔ)言進(jìn)行單片機(jī)系統(tǒng)程序開(kāi)發(fā)的效率要比使用匯編語(yǔ)言高幾十倍。</p>&
71、lt;p> C語(yǔ)言是一種編譯性的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,它具有簡(jiǎn)單而強(qiáng)大的處理功能,具有運(yùn)行速度快、編譯效率高、移植性好和可讀性強(qiáng)等多種優(yōu)點(diǎn),并且可以實(shí)現(xiàn)對(duì)系統(tǒng)硬件的直接操作,C語(yǔ)言支持自頂向下的結(jié)構(gòu)化程序設(shè)計(jì)方法,并且支持模塊化程序設(shè)計(jì)結(jié)構(gòu)。</p><p> ICC AVR是ImageCraft公司針對(duì)AVR單片機(jī)而開(kāi)發(fā)的一個(gè)C語(yǔ)言編譯器,它采用符合ANSI標(biāo)準(zhǔn)的C語(yǔ)言來(lái)開(kāi)飯單片機(jī)程序,并具有以下幾個(gè)特
72、點(diǎn):</p><p> 支持不帶SRAM的單片機(jī)器件。</p><p> 帶嵌入式的應(yīng)用程序編譯器。</p><p><b> 帶全局優(yōu)化器。</b></p><p> 支持在線編程(STK200/300)。</p><p> 因此本系統(tǒng)采用C語(yǔ)言進(jìn)行設(shè)計(jì),開(kāi)發(fā)環(huán)境為ICC AVR。&l
73、t;/p><p><b> 主控制器設(shè)計(jì)</b></p><p> 主程序設(shè)計(jì)采用的是循環(huán)的方式來(lái)進(jìn)行,工作過(guò)程中不斷查詢(xún)是否控制按鈕被按下。當(dāng)有控制按鈕被按下的時(shí)候,就調(diào)用相應(yīng)的功能模塊的程序以完成操作,進(jìn)行對(duì)總線上的iButton元件的數(shù)據(jù)交換,處理接收到的數(shù)據(jù),并顯示處理結(jié)果。圖3.1所示的主控制器程序的流程框圖。</p><p> 圖
74、3.1 主控制器流程框圖</p><p> LCD顯示器模塊設(shè)計(jì)</p><p> 系統(tǒng)為了更好實(shí)現(xiàn)人機(jī)操作界面,使用兩行16位、型號(hào)為L(zhǎng)M016L的LCD顯示器,它能夠很好的反映系統(tǒng)的運(yùn)行狀態(tài)。顯示器模塊的代碼如下:</p><p> /*===========================================================
75、===</p><p> //函數(shù)功能: 初始化LM016L</p><p> //形參: void</p><p> //返回: void</p><p> ==============================================================*/</p>&l
76、t;p> void LCD_init(void) //LCD顯示器的初始化 </p><p><b> { </b></p><p> LCD_DATA_DDR|=LCD_DATA; //數(shù)據(jù)口方向?yàn)檩敵?</p><p> LCD_EN_DDR|=LCD_EN; //設(shè)置EN方向?yàn)檩敵?</
77、p><p> LCD_RS_DDR|=LCD_RS; //設(shè)置RS方向?yàn)檩敵?</p><p> LCD_write_command(0x28); </p><p> LCD_en_write(); </p><p> delay_nus(40); </p><p> LCD_write_comma
78、nd(0x28); //4位顯示 </p><p> LCD_write_command(0x0c); //顯示開(kāi) </p><p> LCD_write_command(0x01); //清屏 </p><p> delay_nms(2); </p><p><b> } </b></p>
79、<p> /*==============================================================</p><p> //函數(shù)功能: 顯示器使能</p><p> //形參: void</p><p> //返回: void</p><p> =========
80、=====================================================*/</p><p> void LCD_en_write(void) </p><p><b> { </b></p><p> LCD_EN_PORT|=LCD_EN; //設(shè)置LCD的使能端口EN為使能狀態(tài)</
81、p><p> delay_nus(1); </p><p> LCD_EN_PORT&=~LCD_EN; </p><p><b> } </b></p><p> /*==============================================================</p
82、><p> //函數(shù)功能: 顯示器寫(xiě)指令</p><p> //形參: 指令代碼</p><p> //返回: void</p><p> ==============================================================*/</p><p> vo
83、id LCD_write_command(unsigned char command) </p><p><b> { </b></p><p> delay_nus(16); </p><p> LCD_RS_PORT&=~LCD_RS; //RS=0 </p><p> LCD_DATA
84、_PORT&=0X0f; //清高四位 </p><p> LCD_DATA_PORT|=command&0xf0; //寫(xiě)高四位 </p><p> LCD_en_write(); </p><p> command=command<<4; //低四位移到高四位 </p><p
85、> LCD_DATA_PORT&=0x0f; //清高四位 </p><p> LCD_DATA_PORT|=command&0xf0; //寫(xiě)低四位 </p><p> LCD_en_write(); </p><p><b> } </b></p><
86、;p> /*==============================================================</p><p> //函數(shù)功能: LM016L寫(xiě)數(shù)據(jù)</p><p> //形參: unsigned char</p><p> //返回: void</p><p>
87、 ==============================================================*/</p><p> void LCD_write_data(unsigned char data) </p><p><b> { </b></p><p> delay_nus(16); <
88、/p><p> LCD_RS_PORT|=LCD_RS; //RS=1 </p><p> LCD_DATA_PORT&=0X0f; //清高四位 </p><p> LCD_DATA_PORT|=data&0xf0; //寫(xiě)高四位 </p><p> LCD_en_write(); </p
89、><p> data=data<<4; //低四位移到高四位 </p><p> LCD_DATA_PORT&=0X0f; //清高四位 </p><p> LCD_DATA_PORT|=data&0xf0; //寫(xiě)低四位 </p><p> LCD_en_writ
90、e(); </p><p><b> } </b></p><p> void LCD_set_xy( unsigned char x, unsigned char y ) //寫(xiě)地址函數(shù) </p><p><b> { </b></p><p> unsigned char addres
91、s; </p><p> if (y == 0) address = 0x80 + x; </p><p> else address = 0xc0 + x; </p><p> LCD_write_command( address); </p><p><b> } </b></p><
92、p> void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) </p><p> //LCD顯示字符串函數(shù)</p><p><b> { </b></p><p> LCD_set_xy( X, Y ); //向LCD寫(xiě)入要顯示的字符串的顯
93、示地址 </p><p> while (*s) // 寫(xiě)要顯示字符串 </p><p><b> { </b></p><p> LCD_write_data( *s ); </p><p><b> s ++; </b></p><p>
94、;<b> } </b></p><p><b> } </b></p><p> void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data)</p><p> //LCD顯示字符函數(shù)</p><p><
95、;b> { </b></p><p> LCD_set_xy( X, Y ); //向LCD寫(xiě)入藥顯示的字符的地址 </p><p> LCD_write_data( data); //寫(xiě)入要顯示的字符串</p><p><b> } </b></p><p> void delay_1u
96、s(void) //1us延時(shí)函數(shù) </p><p><b> { </b></p><p> asm("nop"); </p><p><b> } </b></p><p> void delay_nus(unsigned int n)
97、 //N us延時(shí)函數(shù) </p><p><b> { </b></p><p> unsigned int i=0; </p><p> for (i=0;i<n;i++) // N次調(diào)用延時(shí)1us函數(shù)</p><p> delay_1us(); </p&
98、gt;<p><b> } </b></p><p> void delay_1ms(void) //1ms延時(shí)函數(shù) </p><p><b> { </b></p><p> unsigned int i; </p><p> for (i=
99、0;i<1140;i++); </p><p><b> } </b></p><p> void delay_nms(unsigned int n) //N ms延時(shí)函數(shù) </p><p><b> { </b></p><p> unsigned int i=0; &l
100、t;/p><p> for (i=0;i<n;i++) //調(diào)用 N 次延時(shí)1ms函數(shù)</p><p> delay_1ms(); </p><p><b> } </b></p><p><b> 總線基本操作模塊</b></p><p
101、> 總線基本操作方面主要是對(duì)單總線上的單總線元件的讀寫(xiě)操作,read_byte()函數(shù)實(shí)現(xiàn)向總線讀一個(gè)字節(jié)的數(shù)據(jù),write_byte()實(shí)現(xiàn)向總線寫(xiě)一個(gè)字節(jié)的數(shù)據(jù)。因?yàn)檎鎸?shí)環(huán)境中iButton元件的總線操作時(shí)隙是很小的,如果使用單片機(jī)模擬iButton元件是無(wú)法達(dá)到正常讀寫(xiě)操作的時(shí)隙的,所以必須在調(diào)試時(shí)延長(zhǎng)讀寫(xiě)操作的時(shí)隙。具體代碼如下:</p><p> /*=====================
102、=========================================</p><p> //函數(shù)功能:從 1-wire 總線上讀取一個(gè)字節(jié)</p><p> //形參:void</p><p> //返回:unsigned char讀到的值</p><p> ======================
103、========================================*/</p><p> unsigned char read_byte(void)</p><p><b> {</b></p><p> unsigned chari;</p><p> unsigned charvalue =
104、 0;</p><p> for(i = 8; i > 0; i--)</p><p><b> {</b></p><p> value >>= 1;//移位</p><p> DDRC |= DQ; </p><p>
105、PORTC &= ~DQ;//拉低總線,引起單總線讀時(shí)序</p><p> delay_us(30); // 延時(shí),等待iButton的響應(yīng)</p><p> //delay_us(3);</p><p> //為了簡(jiǎn)便調(diào)試,使用另一個(gè)單片機(jī)模擬IButton,此處把讀寫(xiě)時(shí)間都延長(zhǎng).</p><p>
106、 PORTC |= DQ; // 端口設(shè)置為輸出</p><p> DDRC &= ~DQ;//釋放總線</p><p> delay_us(100);</p><p> //delay_us(10);</p><p> if(DQ & PINC)
107、 // 暫存讀取的數(shù)據(jù)</p><p> value|=0x80;</p><p> delay_us(100);</p><p> DDRC |= DQ;</p><p> delay_us(5);// 延時(shí),返回繼續(xù)讀取數(shù)據(jù)</p><p><b> }</b>
108、;</p><p> return(value);</p><p><b> }</b></p><p> /*==============================================================</p><p> //函數(shù)功能:向 1-WIRE 總線上寫(xiě)一個(gè)字節(jié)<
109、;/p><p> //形參:value寫(xiě)到總線上的值</p><p> //返回:void</p><p> ==============================================================*/</p><p> voidwrite_byte(unsigned char val
110、ue)</p><p><b> {</b></p><p> unsigned chari;</p><p> DDRC |= DQ; //設(shè)置端口為輸出</p><p> for(i = 8; i > 0; i--)</p><p>
111、<b> {</b></p><p> if(value & 0x01)</p><p><b> {</b></p><p> PORTC &= ~DQ; //拉低總線,引起寫(xiě)1時(shí)序</p><p> delay_us(100); //
112、延時(shí)</p><p> //delay_us(10);</p><p> PORTC |= DQ; // 輸出1</p><p> delay_us(200);</p><p> //delay_us(100);</p><p><b> }</b><
113、/p><p><b> else</b></p><p><b> {</b></p><p> PORTC &= ~DQ;//拉低總線,引起寫(xiě)0時(shí)序</p><p> delay_us(200);</p><p> //delay_us(100);&l
114、t;/p><p> PORTC |= DQ; //輸出0</p><p> delay_us(100);</p><p> //delay_us(10);</p><p><b> }</b></p><p> value >>= 1;
115、//要輸出的字節(jié)右移,準(zhǔn)備輸出下一位</p><p><b> }</b></p><p><b> }</b></p><p><b> 總線主要功能模塊</b></p><p> 本系統(tǒng)總線的主要功能包括讀取在線讀取iButton元件的ROM和驗(yàn)證密碼,void R
116、ead_RomCode()函數(shù)實(shí)現(xiàn)讀取ROM的功能,并將得到的ROM的數(shù)據(jù)進(jìn)行處理后在LCD上顯示給用戶(hù),void Read_Password()函數(shù)實(shí)現(xiàn)讀取DS1991這個(gè)iButton元件的某個(gè)數(shù)據(jù)存儲(chǔ)區(qū)的內(nèi)的64位密碼,對(duì)密碼進(jìn)行驗(yàn)證,如果密碼與預(yù)先設(shè)置的密碼相符的話,執(zhí)行下一步的操作,并在顯示器上顯示驗(yàn)證正確的信息,如果密碼驗(yàn)證錯(cuò)誤的話,則顯示錯(cuò)誤信息,并停止操作。因?yàn)楸驹O(shè)計(jì)是為了實(shí)現(xiàn)單片機(jī)對(duì)iButton的操作功能,所以具體代
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- atmega16畢業(yè)論文外文翻譯
- 基于ATmega16單片機(jī)的流量控制器的開(kāi)發(fā).pdf
- 電子鎖論文 .
- 基于ATmega16的脈象儀設(shè)計(jì).pdf
- 基于atmega16的遙控車(chē)設(shè)計(jì)
- 基于atmega16的溫度測(cè)試系統(tǒng)
- 畢業(yè)設(shè)計(jì)--單片機(jī)控制電子鎖
- 基于atmega16單片機(jī)鬧鐘設(shè)計(jì)
- 基于atmega16單片機(jī)鬧鐘設(shè)計(jì)
- atmega16單片機(jī)數(shù)字頻率計(jì)——畢業(yè)論文
- 基于atmega16的mp3設(shè)計(jì)與實(shí)現(xiàn)
- 基于iButton的電子辦公鎖系統(tǒng).pdf
- 基于單片機(jī)的電子鎖設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 六位電子鎖控制系統(tǒng)(論文)
- 基于atmega16的比賽專(zhuān)用秒表設(shè)計(jì)報(bào)告1
- 基于atmega16的比賽專(zhuān)用秒表設(shè)計(jì)報(bào)告1
- 基于atmega16的mp3的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)---基于atmega16單片機(jī)的音樂(lè)播放器設(shè)計(jì)
- 基于atmega16單片機(jī)閉環(huán)控制的數(shù)控電流源設(shè)計(jì)
- 基于fpga電梯控制器設(shè)計(jì)畢業(yè)論文
評(píng)論
0/150
提交評(píng)論