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

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

?? eeprom_main.c

?? 這個是AVR單片機EPOM的軟件應用
?? C
字號:
本程序簡單的示范了如何使用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一区二区三区免费野_久草精品视频
亚洲成人1区2区| 亚洲精品v日韩精品| 欧美日韩国产区一| 色综合久久久久| 91香蕉视频在线| 色网站国产精品| 欧美日韩小视频| 日韩午夜中文字幕| 欧美成人伊人久久综合网| 日韩精品一区二区三区在线| 精品国产凹凸成av人网站| 26uuu国产一区二区三区| 久久综合九色欧美综合狠狠| 亚洲国产成人私人影院tom| 国产精品午夜免费| 一区二区三区四区中文字幕| 亚洲成av人影院| 国产一区欧美一区| 99久久精品久久久久久清纯| 在线视频国产一区| 日韩一级高清毛片| 国产精品第四页| 久久91精品国产91久久小草| 精品一二线国产| 99久久婷婷国产综合精品| 欧洲精品一区二区| 日韩免费观看高清完整版| 国产精品免费视频观看| 亚洲国产一区二区三区 | 精品国产乱码久久久久久蜜臀| 26uuu亚洲综合色欧美| 国产精品不卡在线| 日韩精品一区第一页| 国产精品正在播放| 欧美性受极品xxxx喷水| 欧美精品一区二区高清在线观看| 国产精品免费丝袜| 麻豆成人久久精品二区三区小说| 成人一区二区三区中文字幕| 欧美日韩不卡在线| 日本一区二区三区高清不卡| 亚洲成av人片| 99视频国产精品| 日韩视频免费观看高清完整版| 亚洲人成精品久久久久| 久久精品国产精品青草| 日本道在线观看一区二区| 久久久国产精品麻豆| 婷婷丁香激情综合| 95精品视频在线| 久久久久久99久久久精品网站| 亚洲成人av一区二区| 91亚洲男人天堂| 久久久精品中文字幕麻豆发布| 午夜国产精品一区| 91在线国内视频| 中文字幕一区二区三区在线观看| 青青国产91久久久久久| 色偷偷一区二区三区| 国产精品久久一卡二卡| 国产毛片精品国产一区二区三区| 4438亚洲最大| 亚洲成国产人片在线观看| 色婷婷精品大视频在线蜜桃视频| 国产精品久久久久三级| 国产高清在线精品| 久久网站最新地址| 国产在线视频一区二区三区| 欧美一区二区在线不卡| 偷拍亚洲欧洲综合| 51午夜精品国产| 肉色丝袜一区二区| 欧美精品第1页| 首页国产丝袜综合| 日韩一区二区精品在线观看| 日本aⅴ精品一区二区三区| 91精品国产高清一区二区三区| 五月激情综合婷婷| 在线电影一区二区三区| 日韩av电影天堂| 日韩美一区二区三区| 麻豆专区一区二区三区四区五区| 欧美一级欧美三级| 激情欧美日韩一区二区| 久久精品视频一区二区三区| 国产白丝网站精品污在线入口| 国产性色一区二区| 成人av综合一区| 一区二区三区精品视频| 欧美丝袜丝交足nylons图片| 婷婷一区二区三区| 日韩精品一区在线| 成人免费视频caoporn| 亚洲色图20p| 欧美精品vⅰdeose4hd| 精品中文av资源站在线观看| 国产精品美女一区二区在线观看| 99精品视频在线观看免费| 亚洲综合网站在线观看| 91精品国产免费| 从欧美一区二区三区| 亚洲国产精品一区二区www在线| 日韩一区二区免费高清| 成人深夜视频在线观看| 亚洲自拍欧美精品| 日韩免费性生活视频播放| 成人综合日日夜夜| 性久久久久久久| 国产欧美日韩不卡| 欧美日韩免费观看一区二区三区| 精久久久久久久久久久| 日韩国产成人精品| 国产午夜精品一区二区三区嫩草 | 国产精品灌醉下药二区| 在线日韩国产精品| 国产一区在线视频| 香蕉成人伊视频在线观看| 国产午夜亚洲精品午夜鲁丝片| 日本韩国一区二区| 国产二区国产一区在线观看| 亚洲午夜久久久久中文字幕久| 久久亚洲二区三区| 91精品久久久久久蜜臀| 91丨九色丨蝌蚪丨老版| 国产精品69久久久久水密桃| 天堂一区二区在线| 亚洲精品乱码久久久久久黑人 | 亚洲欧美另类久久久精品2019| 日韩三级伦理片妻子的秘密按摩| 成人激情图片网| 极品尤物av久久免费看| 日韩黄色小视频| 亚洲人一二三区| 国产精品天干天干在观线| 欧美v国产在线一区二区三区| 欧美体内she精视频| proumb性欧美在线观看| 国产成人综合亚洲91猫咪| 久久精品av麻豆的观看方式| 亚洲高清视频的网址| 亚洲色图清纯唯美| 亚洲情趣在线观看| 国产精品国产馆在线真实露脸| 久久久精品免费网站| 久久先锋资源网| 亚洲精品一区二区在线观看| 日韩欧美一级二级| 欧美一区三区二区| 欧美一区二区精品久久911| 欧美日韩成人一区二区| 欧美巨大另类极品videosbest| 一道本成人在线| 91国在线观看| 欧美三级日韩三级| 欧美精品日韩一本| 91精品国产全国免费观看| 日韩一区二区在线观看视频播放| 欧美日韩第一区日日骚| 欧美疯狂做受xxxx富婆| 欧美一级免费大片| 精品国产一区二区国模嫣然| 欧美精品一区二区蜜臀亚洲| 久久综合久久综合久久综合| 国产欧美一区二区在线| 一色屋精品亚洲香蕉网站| 亚洲人吸女人奶水| 亚洲成人av中文| 久久精品国产秦先生| 国产乱妇无码大片在线观看| 成人国产精品免费观看| 91久久精品日日躁夜夜躁欧美| 欧美三级中文字幕在线观看| 91精品国产入口| 国产欧美日本一区视频| 亚洲精品视频免费看| 五月天激情小说综合| 国内成人自拍视频| 99精品热视频| 欧美一区二区私人影院日本| 国产日韩欧美高清| 亚洲影视在线观看| 国内不卡的二区三区中文字幕| 99久久久久免费精品国产| 欧美精品色综合| 国产午夜精品一区二区三区嫩草| 樱桃国产成人精品视频| 美女被吸乳得到大胸91| 99久久精品免费看| 日韩精品一区国产麻豆| ...av二区三区久久精品| 日韩国产高清在线| av一区二区三区黑人| 91精品国产综合久久精品app | 秋霞电影网一区二区| 成人午夜免费视频| 3751色影院一区二区三区| 欧美国产在线观看| 六月丁香婷婷色狠狠久久| 色综合久久久网| 国产日韩欧美在线一区|