Arduino UNO R3主處理器ATMega328P的芯片內部擁有3種存儲器:數據存儲器,程序存儲器和電可擦寫可編程存儲器;它們各自有不同的用途。
1.數據存儲器
數據存儲器是一塊2KB大小的靜態隨機存儲器(SRAM)。其中一部分空間分配給了通用寄存器和I/O寄存器,其余部分一般用于存儲全局變量,堆棧數據和支持動態內存分配。它的存取速度快,但掉電后數據會丟失。
2.程序存儲器
程序存儲器是一塊32KB大小的閃存(Flash),其中0.5KB用于引導程序。它可以多次擦寫,掉電后數據不會丟失,一般用于存儲程序。
3.電可擦可編程只讀存儲器
電可擦寫可編程只讀存儲器(EEPROM)是一塊1KB大小的獨立數據存儲空間。它和程序存儲器一樣可以用于保存程序運行中的數據,但在掉電后數據不會丟失。
Arduino IDE提供了幾個EEPROM的示例,eeprom_write示例將0引腳上的模擬信號轉換為數字信號,并將轉換結果以字節的形式保存到EEPROM中:
1 // eeprom_write.ino
2 #include 3 4 int addr = 0; 5 6 void setup() { 7 } 8 9 void loop() { 10 int val = analogRead(0) / 4; 11 12 EEPROM.write(addr, val); 13 14 addr = addr + 1; 15 if (addr == EEPROM.length()) { 16 addr = 0; 17 } 18 19 delay(100); 20 } 和eeprom_write示例相反,eeprom_read示例將EEPROM中的數據以字節的形式讀出,并打印到串口0上: 1 // eeprom_read.ino 2 #include 3 4 int address = 0; 5 byte value; 6 7 void setup() { 8 Serial.begin(9600); 9 while (!Serial) { 10 ; 11 } 12 } 13 14 void loop() { 15 value = EEPROM.read(address); 16 17 Serial.print(address); 18 Serial.print("t"); 19 Serial.print(value, DEC); 20 Serial.println(); 21 22 address = address + 1; 23 if (address == EEPROM.length()) { 24 address = 0; 25 } 26 27 delay(500); 28 } 與EEPROM相關的Arduino庫函數有: EEPROM.write(address, val):向EEPROM指定地址寫入一個字節的數據 address:指定數據寫入的地址 val:寫入的數據 EEPROM.read(address):從EEPROM指定地址讀出一個字節的數據 address:指定數據讀取的地址 函數返回讀取的一個字節數據 EEPROM.length():獲取EEPROM大小 函數返回EEPROM的大小 ATMega328P的EEPROM由3個寄存器控制,EEPROM地址寄存器(EEARH和EEARL)和EEPROM數據寄存器EEDR分別用于在寫入或讀取EEPROM時保存地址信息和數據信息。EEPROM控制寄存器EECR的結構如下圖所示: EEPM1 EEPM0 EERIE EEMPE EEPE EERE 將EEPROM主機寫使能位EEMPE置1后,4個時鐘周期內將EEPROM寫使能位EEPE置1,就可以數據寫入EEPROM的指定地址中;向EEPROM讀使能位EERE寫入1,則可以將EEPROM指定地址的數據讀入EEDR寄存器中。 通過直接訪問寄存器改寫以上程序為: 1 // eeprom_write_reg.ino 2 #include 3 4 int addr = 0; 5 void eeprom_write(int address, byte val); 6 7 void setup() { 8 } 9 10 void loop() { 11 int val = analogRead(0) / 4; 12 13 eeprom_write(addr, val); 14 15 addr = addr + 1; 16 if (addr == EEPROM.length()) { 17 addr = 0; 18 } 19 20 delay(100); 21 } 22 23 void eeprom_write(int address, byte val) { 24 while (EECR & (1 << EEPE)); 25 EEAR = address; 26 EEDR = val; 27 EECR |= (1 << EEMPE); 28 EECR |= (1 << EEPE); 29 } 30 31 // eeprom_read.ino 32 #include 33 34 int address = 0; 35 byte value; 36 byte eeprom_read(int address); 37 38 void setup() { 39 Serial.begin(9600); 40 while (!Serial) { 41 ; 42 } 43 } 44 45 void loop() { 46 value = eeprom_read(address); 47 48 Serial.print(address); 49 Serial.print("t"); 50 Serial.print(value, DEC); 51 Serial.println(); 52 53 address = address + 1; 54 if (address == EEPROM.length()) { 55 address = 0; 56 } 57 58 delay(500); 59 } 60 61 byte eeprom_read(int address) { 62 while (EECR & (1 << EEPE)); 63 EEAR = address; 64 EECR |= (1 << EERE); 65 return EEDR; 66 }
上一篇:AVR開發 Arduino方法(五) 模數轉換子系統
下一篇:AVR開發 Arduino方法(七) 嵌入式操作系統FreeRTOS
推薦閱讀
史海拾趣
經過多年的發展,Continental Industries已經成為電子行業中的佼佼者。公司不斷追求創新和發展,積極拓展新的業務領域和市場空間。未來,隨著電子行業的不斷發展和變革,Continental Industries將繼續保持敏銳的市場洞察力和強大的技術實力,努力成為行業的領導者。
這五個故事展示了Continental Industries在電子行業中的發展歷程和取得的成就。雖然無法涵蓋公司的全部發展細節,但通過這些故事,我們可以感受到公司在技術創新、市場拓展、合作共贏、應對挑戰以及持續發展等方面的努力和成果。
Excelics Semiconductor自創立之初,就致力于半導體技術的研發與創新。在公司成立的初期,他們成功研發了一款高性能、低功耗的芯片,這一技術突破迅速贏得了市場的認可。隨著技術的不斷迭代和升級,Excelics Semiconductor逐漸在半導體領域建立了自己的技術壁壘,成為了行業的領軍者。
品質是公司發展的基石。Compostar Technology Co Ltd始終堅持嚴格的品質管理,從原材料采購到生產過程的每一個環節都進行嚴格的把控。同時,公司還注重品牌建設,通過統一的品牌形象和宣傳策略,不斷提升品牌知名度和美譽度。這些舉措使得公司在激烈的市場競爭中始終保持領先地位。
英特爾(Intel)的成立與發展與微處理器的發明密不可分。在20世紀70年代初,英特爾的工程師們開始研發一種能夠將計算機的中央處理器(CPU)集成到單一芯片上的技術。經過數年的努力,他們成功推出了世界上第一款微處理器——Intel 4004。這一創新不僅改變了計算機行業,也為英特爾的崛起奠定了堅實基礎。
廣東奧科公司深知品質是企業生存和發展的關鍵。因此,公司始終將品質管理放在首位,從原材料采購到生產流程控制,再到產品出廠檢驗,每一個環節都嚴格把控品質。同時,公司還建立了完善的品質管理體系和持續改進機制,通過不斷優化生產工藝和提升產品質量,確保每一款產品都能滿足客戶的期望和需求。
兩快單片機A和B通信 通過無線收發模塊 A要產生一個啟動信號 待B受到確認后 B就發送數據給A 我用單片機A一個并行口引腳p2.7接無線發射模塊數據輸入端 那么這個啟動信號怎么用呢 邏輯是怎么樣呢 能不能實現A和B的握手呢 謝謝各位高手指導 謝謝… 查看全部問答∨ |
|
在wince6下面寫一個應用程序,要訪問物理地址,發現不能用VirtualCopy,返回錯誤時87,表示參數錯誤 代碼如下: LPVOID VIDEO_BUFFER=VirtualAlloc( 0, ...… 查看全部問答∨ |
硬件工程師 1 人 職位描述: 1. 設計和優化電路,制作樣機,配合其他軟硬件工程師完成調試 2. 分析問題、解決問題,改進設計,提高質量 3. &nb ...… 查看全部問答∨ |
在msp430f149 只供電的的情況下,其晶振的兩管腳輸出電壓約為 2.5v 1.9v 當焊入2m晶振時,用示波器觀察,晶振兩腳對地的電壓是2.5v 1.9v ,晶振兩腳間為50hz的方波,高低電平并不規則,這是怎么回事啊???… 查看全部問答∨ |
|
求Altera USB Blaster下載線 一個 USB的 本帖最后由 ddllxxrr 于 2016-1-7 16:58 編輯 求Altera USB Blaster下載線 一個 USB的剛開始學習,貴的買不起,帶價格,謝謝 本下載電纜適用于ALTERA CPLD/FPGA芯片的下載調試,支持JTAG、AS、PS下載模式。 USB Blaster下載電纜 ...… 查看全部問答∨ |