簡介:本文介紹了AVR單片機的EEPROM讀寫數據時間問題,并分析了3個方法的各自優缺點。
由于AVR的EEPROM寫周期比較長(一般為毫秒級),因此在編程使用過程中要特別注意.對于讀EEPROM沒什么好說的,讀一個字節的數據要耗費4個時鐘周期,可以忍受,寫就比較麻煩了,雖然放在EEPROM的數據都不是頻繁訪問的;雖然可以用讀-比較-寫的機制降低EEPROM的寫操作頻度,但在寫入過程中,過長的寫入周期還是會造成一些問題,下面就分析一下幾種方式的EEPROM寫操作.
1. 循環查詢式
將地址和數據寫入EEPROM相關的寄存器,置寫標志后就循環不斷查詢寫完成標志,直到寫完成,退出循環,順序執行其他程序.在置寫入標志到寫完成的這段時間,程序除了不斷查詢寫完成標志和響應硬件中斷之外什么也不干,這段時間就這么浪費了,如果是個實時性要求比較高的應用,浪費的就不僅是時間了,很可能在這段時間里I/O狀態的變化不能得到及時的響應,如果一下子要進行多個字節的EEPROM的寫入操作,那情況會更糟.針對這種情況,有種解決辦法就是,這個寫完成查詢放在軟件的死循環中(無操作系統的情況下,系統啟動后都要進入一個死循環),每循環一次查詢一次寫完成標志,這樣就不必一直等待寫操作完成而可以干別的事情了,但是這樣會帶來兩個問題.一是,如果死循環周期無法保證,則每一次的EEPROM寫操作的完成標志查詢也得不到保證,從而進行一次EEPROM寫操作的周期也無法保證(最長延遲時間就是一個死循環周期的最長時間);二是,在執行一次EEPROM寫入操作到寫完成這段時間里死循環里其它的子程序不能進行EEPROM讀寫操作.第一個問題如果能保證最大循環周期在延遲允許范圍內就不是問題了,否則就得采取下面講到的方式二了;第二個問題的解決方法是每次EEPROM讀寫操作都要在其中加入對EEPROM寫完成標志寄存器的判斷,如果有數據正在寫入,則等待或退出,但等待和退出又會造成等待延遲和寫入操作不成功的問題,解決辦法是先放入一個數據緩沖區,待上一次寫入操作完成,再從緩沖區里拽出一個字節進行下一次寫入周期,但這又會涉及到選擇合適的緩沖區大小以及的問題,這個問題在下面中斷式操作里繼續討論.
2.定時查詢式
在寫入EEPROM地址和數據寄存器置寫標志后啟動定時器,定時查詢寫完成標志,這種方法繼承了方式1的大部分優缺點,唯一的進步就是能夠確定寫操作延遲時間為定時周期.
3.中斷式
編寫EEPROM寫完成中斷子程序,設置一個FIFO緩沖區,要寫入的數據先放入這個FIFO,如果EEPROM操作空閑,則從FIFO中揪一字節數據出來寫EEPROM,置完寫完成標志就返回,然后去干別的事情,EEPROM寫完成產生一個中斷,在中斷服務程序中再從FIFO中揪一個字節去寫EEPROM,如此循環直到FIFO空,這種方式雖然能在第一時間完成一次寫操作,但是還是有個和和方式1中提到一樣的問題,怎么選擇這個FIFO的大小.小了,待寫入數據可能溢出丟失,大了,多大算大,1K夠不夠,10K夠不夠,硬件上有這么多RAM空間么,這就需要根據實際資源和系統需求來定了.如果EEPROM寫操作頻率很低,比一次EEPROM寫操作間隔還要長得多,那么幾個單位的FIFO就足夠了;如果EEPROM寫操作頻率可能很高或一次大批量連續寫入數據就要求很大的FIFO,達到能夠保證數據不丟失,這就要根據批量數據大小和寫頻率來定了,另外還要考慮可用RAM空間的限制來找出最佳值,同時有FIFO溢出一定要制定相應的應對措施.
最后注意兩點:
1. 讀寫之前一定要檢測是否已經有EEPROM寫操作;在寫完成之后一定要再讀出寫入的數據校驗寫入操作是否成功,不成功則EEPROM損壞,要做好應對措施.
2.如果要保存一個16位的數據,一定要保證在這16位數據分成的兩字節都成功寫入了EEPROM再去讀該數據,否則在剛寫完一個字節就去讀該數據,得到的數據顯然不是你想要的,如果該數據是一重要參數,后果可想而知.
上一篇:用AVR單片機實現多功能數顯電子秤的設計方案
下一篇:關于AVR中斷的優先級
推薦閱讀
史海拾趣
面對快速變化的電子市場和技術趨勢,ECO始終保持著敏銳的市場洞察力和創新精神。公司不斷投入研發資源,探索新的技術方向和產品應用。同時,ECO還積極拓展新的業務領域,如物聯網、智能家居等。這些努力為公司的未來發展奠定了堅實的基礎,使ECO能夠在激烈的市場競爭中保持領先地位。
隨著技術的不斷進步,Antiference公司開始將目光投向國際市場。公司積極參與國際電子展,展示其先進的電磁干擾抑制技術,并成功吸引了眾多國外客戶的關注。通過與國外知名企業的合作,Antiference的產品逐漸打入國際市場,品牌知名度也大幅提升。
面對日益激烈的市場競爭,Antiference公司深知單打獨斗難以取得長久發展。因此,公司積極尋求與其他企業和研究機構的合作,共同推動電磁干擾抑制技術的創新與發展。通過合作創新,Antiference不僅提升了自身的技術實力和市場競爭力,還推動了整個行業的進步和發展。
這些故事基于電子行業的一般情況和趨勢構建,旨在展示一個虛構的公司在發展過程中可能遇到的挑戰和機遇。每個故事都圍繞Antiference公司的不同發展階段和關鍵事件展開,旨在呈現一個全面而真實的發展畫卷。
AIE公司始終將品質管理作為企業發展的核心。公司建立了嚴格的質量管理體系,從原材料采購到產品生產、銷售等各個環節都進行嚴格的監控和管理。同時,AIE還注重與客戶的溝通和反饋,及時了解客戶的需求和意見,不斷改進產品和服務。這種對品質的執著追求和對客戶的尊重贏得了客戶的廣泛信任和支持。
冠西電子(COSMO)公司成立于1981年,起初便專注于光電元件產品的制造。公司創始人憑借對電子技術的深刻理解和市場需求的敏銳洞察,逐步將冠西電子打造成光電元件領域的專業制造商。通過不斷的技術創新和產品質量提升,冠西電子逐漸在電子行業中嶄露頭角。
進入21世紀,冠西電子不斷加大在研發方面的投入,成功突破了一系列技術難題,特別是在光耦合器和繼電器領域取得了顯著成果。這些技術突破不僅提升了冠西電子產品的競爭力,也為其贏得了更多國際大廠的信賴。同時,冠西電子積極拓展市場,其產品廣泛應用于電源、互聯網設備、電腦系統和相關系統、家電、工業、安防系統等領域,為全球客戶提供優質的產品和服務。
STC89S52和AT89S52功能一樣嗎?STC89S52可以替換AT89S52嗎? 我認為應該是可以的 但是我的認為和實際卻相悖! 我有個學習板,上面支持STC的串口下載和支持AT的usb下載 我自己搭了一個電路,晶振用3.5M的。 我通過學習板把hex文件下載到STC單片 ...… 查看全部問答∨ |
|
最近有部分用戶咨詢:為何編譯程序沒有問題,可是燒錄不進去,或者燒錄成功了無法運行 需要注意的問題: 1,CMD:F2812與別的器件不同,在調試過程中使用的一般是對于SRAM的定義,編譯一個SRAM.CMD,所以調試的時候沒有問題,但是燒寫FLASH的時候 ...… 查看全部問答∨ |
我剛開始學習51單片機,在用Keil軟件進行單步調試時,出現的是匯編語言界面,在C程序上不能添加斷點,只能在匯編界面上加斷點,但看郭天祥的視頻是可以在C程序上直接添加斷點的,請問這種情況該如何解決,非常感謝~… 查看全部問答∨ |
顯示U盤圖像這個例程在軟件包的 LTDC_AnimatedPictureFromUSB子目錄 下。當然,還準備OTG-USB線,帶有符合格式的圖像的 U盤。 先有根OTG-USB線,象這樣的: 我買的這根也不太貴,只是想能用就行。 在例程的Media子目錄下有一些圖像,拷貝到U ...… 查看全部問答∨ |
|
用proteus給msp430仿真是沒回都出現這問題,請問是咋回事,不論是進行什么實驗 本帖最后由 你儂我儂 于 2014-5-9 08:53 編輯 C:\\Users\\Lenovo\\Desktop… 查看全部問答∨ |
本帖最后由 季夏木槿 于 2014-7-28 23:29 編輯 我DIY的手機終于要完工了。。。 最開始,由于缺少部分硬件,于是我先把顯示界面和主菜單寫好了 &nb ...… 查看全部問答∨ |