亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? avr 內部eeprom讀寫范例.txt

?? AVR 內部EEPROM讀寫范例
?? TXT
字號:
/***********************************************  
****      AVR 內部EEPROM讀寫范例              ***  
****                                         ***  
**** 作者:  HJJourAVR                        ***  
**** 編譯器:WINAVR20050214                   ***  
****                                         ***  
****    www.OurAVR.com   2005.9.24           ***  
***********************************************/   
/*  
本程序簡單的示范了如何使用ATMEGA16的EERPOM  
     EEPROM的簡介  
     EEPROM的寫操作  
     EEPROM的讀操作  
  
出于簡化程序考慮,各種數據沒有對外輸出,學習時建議使用JTAG ICE硬件仿真器  
    在打開調試文件到JTAG后,  
    打開Debug -> JTAG ICE Options菜單,  
    然后在JTAG ICE Properties中點擊Dbug頁面,將preserve eeprom選項選中。  
    在每次仿真調試時候,就保護EEPROM內容了。  
    否則,會按照默認設置擦除EEPROM的內容。   
      
    由于定義了EEPROM變量,JTAG調試時會詢問是否初始化EEPROM,請選擇[否]  
      
    EEPROM的數據也可以在view->memory,選Eeprom窗口下察看  
*/   
   
#include <AVR io.h>    
#include <AVR eeprom.h>    
////時鐘定為內部1MHz,F_CPU=1000000  時鐘頻率對程序的運行沒什么影響    
/*  
GCCAVR(avr-libc)里面自帶了EEPROM的讀寫函數。  
下面列舉部分常用函數(原型)  
  
#define eeprom_is_ready() bit_is_clear(EECR, EEWE)  
檢測EEPROM是否準備好。OK返回1(返回EEWE位)  
  
#define eeprom_busy_wait() do {} while (!eeprom_is_ready())  
等待EEPROM操作完成  
  
extern uint8_t eeprom_read_byte (const uint8_t *addr);  
讀取指定地址的一個字節8bit的EEPROM數據  
  
extern uint16_t eeprom_read_word (const uint16_t *addr);  
讀取指定地址的一個字16bit的EEPROM數據  
  
extern void eeprom_read_block (void *buf, const void *addr, size_t n);  
讀取由指定地址開始的指定長度的EEPROM數據  
  
extern void eeprom_write_byte (uint8_t *addr, uint8_t val);  
向指定地址寫入一個字節8bit的EEPROM數據  
  
extern void eeprom_write_word (uint16_t *addr, uint16_t val);  
向指定地址寫入一個字16bit的EEPROM數據  
  
extern void eeprom_write_block (const void *buf, void *addr, size_t n);  
由指定地址開始寫入指定長度的EEPROM數據  
  
但不支持部分AVR,原文如下:  
\note This library will \e not work with the following devices since these  
    devices have the EEPROM IO ports at different locations:  
  
    - AT90CAN128  
    - ATmega48  
    - ATmega88  
    - ATmega165  
    - ATmega168  
    - ATmega169  
    - ATmega325  
    - ATmega3250  
    - ATmega645  
    - ATmega6450  
*/   
   
/*  
在程序中對EEPROM 操作有兩種方式  
方式一:直接指定EERPOM 地址  
    即讀寫函數的地址有自己指定,用于需要特定數據排列格式的應用中  
方式二:先定義EEPROM 區變量法  
    在這種方式下變量在EEPROM 存儲器內的具體地址由編譯器自動分配。  
    相對方式一,數據在EEPROM 中的具體位置是不透明的。  
    為EEPROM 變量賦的初始值,編譯時被分配到.eeprom 段中,  
    可用avr-objcopy 工具從.elf文件中提取并產生ihex 或binary 等格式的文件,  
    從而可以使用編程器或下載線將其寫入到器件的EEPROM 中。  
    實際上WINAVR 中MFILE 生成的MAKEFILE 已經為我們做了這一切。  
    它會自動生成以 “.eep” 為后綴的文件,通常它是iHex 格式  
    (這次測試發現 分配地址是從0x0000開始的,故增加了一個EEPROM變量Evalvoid[16])  
      
如果同時使用方式1和2,請注意防止地址重疊,自己指定的地址應該選在后面。  
*/   
   
//全局變量    
unsigned char EDATA;   
   
unsigned char ORGDATA[16]={0x00,0x02,0x04,0x06,0x08,0x0A,0x0C,0x0E,   
                           0x01,0x03,0x05,0x07,0x09,0x0B,0x0D,0x0F};    //原始數據    
   
unsigned char CMPDATA[16];                                              //比較數據    
   
//仿真時在watch窗口,監控這些全局變量。    
   
//EEPROM 變量定義    
unsigned char Evalvoid[16] __attribute__((section(".eeprom"))); //這個沒用到    
unsigned char Eval[16] __attribute__((section(".eeprom")));   
   
int main(void)   
{   
    eeprom_write_byte (0x40,0xA5);      //向EEPROM的0x40地址寫入數據 0xA5    
    EDATA=eeprom_read_byte (0x40);      //讀出,然后看看數據對不對?    
    //上面兩句編譯是有如下警告,但不必理會    
    //EEPROM_main.c:103: warning: passing arg 1 of `eeprom_write_byte' makes pointer from integer without a cast    
    //EEPROM_main.c:104: warning: passing arg 1 of `eeprom_read_byte' makes pointer from integer without a cast    
       
    eeprom_write_block (&ORGDATA[0], &Eval[0], 16);     //塊寫入    
    //看看EEPROM數據是否是能失電永久保存,可以注釋上面這句程序(不寫入,只是讀出),然后編譯,燒寫,斷電(一段時間),上電,調試。    
    eeprom_read_block (&CMPDATA[0],&Eval[0], 16);       //塊讀出,然后看看數據對不對?    
       
    while (1);       
}   
   
/*  
ATmega16 包含512 字節的EEPROM 數據存儲器。  
它是作為一個獨立的數據空間而存在的,可以按字節讀寫。  
EEPROM的壽命至少為100,000 次擦除周期。  
EEPROM的訪問由地址寄存器EEAR、數據寄存器EEDR和控制寄存器EECR決定。  
也可以通過ISP和JTAG及并行電纜來固化EEPROM數據  
  
EEPROM數據的讀取:  
    當EEPROM地址設置好之后,需置位EERE以便將數據讀入EEDR。  
    EEPROM數據的讀取需要一條指令,且無需等待。  
    讀取EEPROM后CPU 要停止4 個時鐘周期才可以執行下一條指令。  
注意:用戶在讀取EEPROM 時應該檢測EEWE。如果一個寫操作正在進行,就無法讀取EEPROM,也無法改變寄存器EEAR。  
  
EEPROM數據的寫入:  
1 EEPROM的寫訪問時間(自定時時間,編程時間)  
    自定時功能可以讓用戶軟件監測何時可以開始寫下一字節。(可以采用中斷方式)  
    經過校準的1MHz片內振蕩器用于EEPROM定時,不倚賴CKSEL熔絲位的設置。  
    改變OSCCAL寄存器的值會影響內部RC振蕩器的頻率因而影響寫EEPROM的時間。  
    EEPROM自定時時間約為8.5 ms 即1MHz片內振蕩器的8448個周期  
注意:這個時間是硬件定時的,數值比較保險,其實真正的寫入時間根本就用不了8.5mS那么長,而且跟電壓有關,但芯片沒有提供其他的檢測編程完成的方法   
     這個問題表現在舊版的AT90S系列上面,由于沒有自定時,數值定得太短,ATMEL給人投訴到頭都爆,呵呵!  
參考: 《用ATmega8535替換AT90S8535》文檔里面的  
     寫EEPROM定時的改進  
     在AT90S8535中寫EEPROM的時間取決于供電電壓,通常為2.5ms@VCC=5V,4ms@VCC=2.7V。  
     ATmega8535中寫EEPROM的時間為8448個校準過的RC振蕩器周期 (與系統時鐘的時鐘源和頻率無關)。  
     假定校準過的RC振蕩器為1.0MHz,則寫時間的典型值為8.4ms,與VCC 無關。  
       
2 為了防止無意識的EEPROM 寫操作,需要執行一個特定的寫時序  
     (如果使用編譯器的自帶函數,無須自己操心)  
    寫時序如下( 第3 步和第4 步的次序并不重要):  
    1. 等待EEWE 位變為零  
    2. 等待SPMCSR 中的SPMEN 位變為零  
    3. 將新的EEPROM 地址寫入EEAR( 可選)  
    4. 將新的EEPROM 數據寫入EEDR( 可選)  
    5. 對EECR 寄存器的EEMWE 寫"1",同時清零EEWE  
    6. 在置位EEMWE 的4 個周期內,置位EEWE  
    經過寫訪問時間之后,EEWE 硬件清零。  
    用戶可以憑借這一位判斷寫時序是否已經完成。  
    EEWE 置位后,CPU要停止兩個時鐘周期才會運行下一條指令。  
  
  
注意:  
    1:在CPU 寫Flash 存儲器的時候不能對EEPROM 進行編程。  
      在啟動EEPROM 寫操作之前軟件必須檢查 Flash 寫操作是否已經完成  
      步驟(2) 僅在軟件包含引導程序并允許CPU對Flash 進行編程時才有用。  
      如果CPU 永遠都不會寫Flash,步驟(2) 可省略。  
        
    2:如果在步驟5 和6 之間發生了中斷,寫操作將失敗。  
      因為此時EEPROM 寫使能操作將超時。  
      如果一個操作EEPROM的中斷打斷了另一個EEPROM操作,EEAR 或EEDR寄存器可能被修改,引起EEPROM 操作失敗。  
      建議此時關閉全局中斷標志I。  
      經過寫訪問時間之后,EEWE 硬件清零。用戶可以憑借這一位判斷寫時序是否已經完成。  
      EEWE 置位后,CPU要停止兩個時鐘周期才會運行下一條指令。  
       
  
在掉電休眠模式下的EEPROM寫操作  
    若程序執行掉電指令時EEPROM 的寫操作正在進行, EEPROM 的寫操作將繼續,并在指定的寫訪問時間之前完成。  
    但寫操作結束后,振蕩器還將繼續運行,單片機并非處于完全的掉電模式。因此在執行掉電指令之前應結束EEPROM 的寫操作。  
      
防止EEPROM數據丟失  
    若電源電壓過低,CPU和EEPROM有可能工作不正常,造成EEPROM數據的毀壞(丟失)。  
      **這種情況在使用獨立的EEPROM 器件時也會遇到。因而需要使用相同的保護方案。  
    由于電壓過低造成EEPROM 數據損壞有兩種可能:  
        一是電壓低于EEPROM 寫操作所需要的最低電壓;  
        二是CPU本身已經無法正常工作。  
    EEPROM 數據損壞的問題可以通過以下方法解決:  
        當電壓過低時保持AVR RESET信號為低。  
        這可以通過使能芯片的掉電檢測電路BOD來實現。如果BOD電平無法滿足要求則可以使用外部復位電路。  
        若寫操作過程當中發生了復位,只要電壓足夠高,寫操作仍將正常結束。  
         (EEPROM在2V低壓下也能進行寫操作---有可以工作到1.8V的AVR芯片)  
          
掉電檢測BOD的誤解  
        AVR自帶的BOD(Brown-out Detection)電路,作用是在電壓過低(低于設定值)時產生復位信號,防止CPU意外動作.  
        對EEPROM的保護作用是當電壓過低時保持RESET信號為低,防止CPU意外動作,錯誤修改了EEPROM的內容  
          
        而我們所理解的掉電檢測功能是指 具有預測功能的可以進行軟件處理的功能。  
        例如,用戶想在電源掉電時把SRAM數據轉存到EEPROM,可行的方法是   
           外接一個在4.5V翻轉的電壓比較器(VCC=5.0V,BOD=2.7V),輸出接到外部中斷引腳(或其他中斷)  
           一但電壓低于4.5V,馬上觸發中斷,在中斷服務程序中把數據寫到EEPROM中保護起來  
    注意: 寫一個字節的EEPROM時間長達8mS,所以不能寫入太多數據,電源濾波電容也要選大一些  
*/ 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久免费看| 欧美人妇做爰xxxⅹ性高电影| 亚洲国产精品久久久久秋霞影院| 国产精品福利在线播放| 欧美国产精品劲爆| 中文字幕欧美激情一区| 日本一区二区三区高清不卡| 国产日韩欧美综合在线| 国产精品久久影院| 最新日韩av在线| 亚洲另类中文字| 亚洲国产精品天堂| 青青青伊人色综合久久| 国产毛片一区二区| www.av精品| 欧美丝袜丝交足nylons| 欧美日本一区二区| 2023国产精品视频| 国产精品人成在线观看免费| 亚洲日本在线天堂| 婷婷开心久久网| 国内精品视频一区二区三区八戒| 国产传媒久久文化传媒| 91天堂素人约啪| 欧美一区二区三区在| 久久综合一区二区| 一区二区在线观看av| 日本中文一区二区三区| 国产成都精品91一区二区三| 91久久免费观看| 欧美www视频| 亚洲六月丁香色婷婷综合久久| 蜜臀久久99精品久久久画质超高清| 精品一区二区免费| 色婷婷av一区| 久久综合色鬼综合色| 亚洲男人的天堂在线aⅴ视频| 奇米一区二区三区| 91在线视频免费91| 日韩免费福利电影在线观看| 亚洲女人小视频在线观看| 久久精品国产久精国产爱| 色综合色综合色综合色综合色综合| 91精品久久久久久蜜臀| 中文字幕亚洲区| 国产一区二区三区不卡在线观看 | 亚洲香蕉伊在人在线观| 久久精工是国产品牌吗| 日本精品一区二区三区高清| 国产亚洲精品精华液| 五月天久久比比资源色| heyzo一本久久综合| 精品日韩欧美在线| 亚洲自拍欧美精品| 99免费精品在线观看| 久久综合九色综合欧美98| 天堂久久久久va久久久久| 白白色 亚洲乱淫| 久久久久久久精| 精品一区二区三区在线观看国产| 欧洲一区二区三区在线| 亚洲日本青草视频在线怡红院 | 成人av动漫网站| 日韩精品中文字幕一区二区三区| 亚洲主播在线观看| 色av成人天堂桃色av| 国产精品入口麻豆九色| 国产成人亚洲综合a∨婷婷| 欧美va天堂va视频va在线| 日日骚欧美日韩| 欧美二区在线观看| 亚洲午夜久久久久久久久电影网| 一本一道波多野结衣一区二区| 中国av一区二区三区| 国产成a人无v码亚洲福利| 久久综合五月天婷婷伊人| 极品少妇一区二区| 久久五月婷婷丁香社区| 久久99久久久欧美国产| 精品国产乱码久久久久久久| 国内精品免费在线观看| 国产亚洲综合在线| 成av人片一区二区| 亚洲日本电影在线| 欧美色视频在线| 五月激情丁香一区二区三区| 欧美一区二区女人| 韩国av一区二区三区四区 | 91丨porny丨户外露出| 成人欧美一区二区三区黑人麻豆| 成人成人成人在线视频| 亚洲人成影院在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲123区在线观看| 国产精品久久综合| 91啪亚洲精品| 亚洲午夜久久久久| 欧美不卡激情三级在线观看| 国产一区二区在线视频| 日韩理论电影院| 91 com成人网| 国产精品1区二区.| 亚洲精品久久嫩草网站秘色| 欧美日韩dvd在线观看| 国模大尺度一区二区三区| 日韩毛片视频在线看| 欧美一区二区三区免费观看视频 | 国产精品热久久久久夜色精品三区| jizzjizzjizz欧美| 日精品一区二区三区| 久久精品在线免费观看| 欧美日韩综合色| 国产精品一区二区在线播放| 亚洲天堂成人在线观看| 精品粉嫩超白一线天av| 日本精品一区二区三区四区的功能| 日本视频一区二区三区| 国产精品久线观看视频| 欧美一级黄色录像| 91国产福利在线| 国产福利精品一区二区| 日韩精品一二三四| 亚洲丝袜另类动漫二区| 精品剧情在线观看| 欧美专区在线观看一区| 国产a精品视频| 石原莉奈一区二区三区在线观看| 国产精品第13页| 精品国产一区二区三区忘忧草| 色综合欧美在线| 国产91精品露脸国语对白| 日本成人在线一区| 亚洲欧美激情小说另类| 国产日韩欧美一区二区三区综合| 欧美精品三级在线观看| av在线一区二区| 国产成人av一区二区三区在线| 蜜臀久久99精品久久久久久9| 亚洲高清不卡在线| 亚洲伦理在线精品| 国产精品电影一区二区| 日本一区二区三区四区在线视频 | 欧美色大人视频| 色婷婷狠狠综合| 色婷婷一区二区三区四区| 成人短视频下载| 不卡在线视频中文字幕| 国产成人免费视频精品含羞草妖精| 精品一区二区三区免费| 久久99深爱久久99精品| 蜜臀av一区二区| 精品一区二区综合| 韩国欧美一区二区| 国产一区二区三区日韩| 国产高清一区日本| 国产精品456露脸| 成人深夜视频在线观看| 成人黄色在线看| 99精品久久免费看蜜臀剧情介绍| 成人午夜免费视频| 91在线看国产| 欧美日韩国产综合一区二区三区| 精品视频在线免费观看| 91精品中文字幕一区二区三区| 91精品国产综合久久精品app | 久久久久久久久岛国免费| 国产欧美一区二区精品性色超碰| 国产色一区二区| 国产精品的网站| 亚洲成人av在线电影| 免费视频最近日韩| 国产成人亚洲综合色影视| 99精品视频一区二区三区| 欧美偷拍一区二区| 欧美一级生活片| 欧美高清在线一区二区| 亚洲免费av网站| 日韩成人伦理电影在线观看| 精品无码三级在线观看视频| 成人黄色电影在线| 欧美色网一区二区| 久久这里只精品最新地址| 中文字幕免费不卡| 国产99久久久国产精品 | 一区二区三区四区亚洲| 天天综合日日夜夜精品| 国内外成人在线| 在线观看视频91| 精品动漫一区二区三区在线观看| 国产精品人妖ts系列视频| 亚洲成人资源网| 国产高清成人在线| 欧美日韩在线一区二区| 国产午夜精品一区二区三区视频| 一区二区三区精品视频在线| 激情五月婷婷综合| 欧美视频一区在线观看| 久久婷婷国产综合精品青草| 亚洲成av人片在www色猫咪| 成人a区在线观看|