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

          新聞中心

          EEPW首頁 > 元件/連接器 > 設計應用 > OTPROM型單片機內內部存儲器的使用研究

          OTPROM型單片機內內部存儲器的使用研究

          ——
          作者:中國石油大學 馮興田 張加勝 時間:2007-01-26 來源:《EDN電子設計技術》 收藏

          隨著變頻調速以及微機控制技術的發(fā)展,適應電機控制的intel 8xc196mc系列單片機應用越來越廣泛。

          本文引用地址:http://www.ex-cimer.com/article/21368.htm

          與80c196mc相比,87c196mc單片機帶有16 kb的otprom(one tline programmable read-only memory),可以進行片內編程操作,而且可以增強加密功能。對于普通的控制系統來說,其存儲容量足夠大,不必再使用外部擴展。然而87c196mc單片機的otprom存在一個缺點:不可擦除,也就是說只能編程一次,不能實現重復編程,不利于大量普及使用。

          當程序從仿真器移植到單片機的otprom時,并不能保證程序的一次成功性,由于單片機的不可擦除性,若程序脫機一次就使用一片單片機,顯然將造成巨大的資源浪費。另一方面,對于復雜系統,16kb的otprom容量如果不夠,則需要采用擴展外部,為了保證有效實現加密功能,應保留一部分程序在片內otprom,此時便涉及到單片機內、外的銜接問題。

          本文針對intel 87c196mc單片機內部存儲器的不可擦除性,對兩種情況下的使用問題提供了可以有效實現重復編程的方法,并可以推廣至其他任何帶有otprom的單片機系列的編程應用中。

          1 87c196mc單片機內部存儲器的編程方式

          intel 87c196mc單片機支持三種編程方式:自動編程方式(使87c196mc單片機不用eprom編程器即可從外部eprom對自己編程)、從機編程方式(給外部eprom編程器提供了一個標準接口)和實時編程方式(運行中編程方式,可以在軟件控制下實時對單個eprom單元編程)。和其他方式不同,實時編程可以在不進入全eprom編程方式下完成。

          對于intel 87c196mc單片機的otprom只能編程,不能擦除,但在編程時可以驗證是否已確實編程。對0tprom可以采用2種編程方法:在從機編程方式下或在專門的otprom編程方式下編程。otprom為87c196mc單片機提供了輔助的存儲器保護手段,它可以禁止總線控制器執(zhí)行外部取指周期,若企圖把一個外部地址裝載到pc寄存器,芯片將復位。這種自動復位功能對跑飛的代碼也提供了一種額外的恢復手段。使用時應根據實際需要采取不同的編程方式。

          2 87c196mc單片機內部存儲器的重復編程方法

          單片機87c196mc的ea引腳(外部訪問允許端,87c196mc plcc84-36腳)用來控制訪問內部存儲器或外部存儲器。當ea=o時,所有訪問都是對片外存儲器的;當ea=1時,對2000h~5fffh單元的訪問都是對片內otprom/rom的。編程方式下,ea=12.5 v。由于復位時ea的電平被鎖存,難以通過外部硬件電路來實現程序空間的選擇。這里通過應用程序語句來控制程序地址范圍,相當于ea的電平變化作用。本文主要應用了intel匯編語言的長跳轉指令ump來實現控制訪問內、外存儲器的功能,下面介紹兩種常用的方法。

          2.1片內編程操作方法

          所謂87c196mc單片機otprom的不可擦除性,實質上是不可實現從“0”到“1”的編程,而只能完成從“1”到“o”的編程。以下通過簡單的程序實例來介紹這種方法。

          ljmp nextl
          cseg at 2600h
          nextl:……

          上述語句實際上代表的是ljmp2600h.其機器碼為e79c04,當地址2600h變化時,得到一組對應的機器碼,通過對這一組機器碼進行分析,就可以得到該方法的原理,如表1所列。

          機器碼e79c04的后兩個字節(jié)代表了匯編程序語句中的地址(04代表了2600h,14代表了3600h……)。當一個字節(jié)從4位全是“1”變成4位全是“o”,且每次只有一個“l(fā)”變?yōu)椤?”時,可以有多種不同的變法,如表2所列。

          由于87c196mc單片機的otprom只能完成從“1”到“o”的編程,而87c196mc單片機的程序從2000h開始執(zhí)行,因此可以在程序從2000h執(zhí)行一小段后進行跳轉,例如首先跳至4100h(對應的機器碼為e79c1f)再存儲程序的其他部分。下一次使用時,把機器碼e79c1f改為e79c1e(對應地址為4000h),程序則跳至4000h開始執(zhí)行,4100h以后的程序段不再執(zhí)行。再下一次使用時,把機器碼e79c1e改為e79c1c(對應地址為3a00h),程序則跳至3a00h開始執(zhí)行,4000h以后的程序段不再執(zhí)行,以此類推(即機器碼的最后一個字節(jié)變化為f→e→c,對應表2中第一組的變化),即可以重復使用同一片單片機進行多次編程操作。


          這種方法中,單片機87c196mc的引腳ea接高電平。它適用于程序簡短且沒有擴展外部存儲器,只有內部存儲器可用的情況。

          2.2片內、外編程操作方法

          如果內部存儲器容量不夠或因為其他方面需要,要求擴展外部存儲器時,當然可以選擇容量較大的外部存儲器,而不使用內部存儲器,但這樣一來,程序的保密性將難以實現,而且浪費了單片機內部的存儲器空間。使用內、外結合的方法既可以滿足容量需求,叉能方便的實現加密操作。

          鑒于87c196mc單片機的程序從2000h開始執(zhí)行,將單片機87c196mc的引腳麗置“1”,那么單片機程序將從內部2000h開始執(zhí)行??梢栽诔绦驈?000h執(zhí)行一小段后(根據實際需要任意設定)進行跳轉,此處與片內跳轉的操作有所不同,它將直接跳出單片機87c196mc片內otprom的2000h~5fffh單元的范圍。當命令被執(zhí)行時,會自動轉入外部存儲器的地址范圍內,例如:ljmp8000h,其中8000h是外部存儲器的地址入口,這樣就從片內存儲器轉入到外部存儲器了??梢酝ㄟ^修改外部存儲器(可重復擦寫)的程序來進行程序的調試,非常方便。當然,如果需要從外部存儲器轉入內部存儲器時,操作方法是類似的。

          結 語

          本文詳細分析介紹了兩種可以實現可重復編程的單片機的使用方法,而且這兩種方法可以推廣至其他任何帶有0tprom的單片機編程,編程的思路完全相同,具體實驗證實了這兩種方法具有切實可行性。



          關鍵詞: 存儲器

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();