1.EEPROM我使用的時候查看了使用手冊了解相關寄存器的使用(寄存器設置沒看懂只是看著用) 查看例程只用擦除扇區函數,讀和寫操作,(都是可用的函數拿來就可以用),關閉IAP寄存器操作函數,在進行操作的時候初始化一邊即可多次調用讀寫函數 我遇到的問題1.STC15F2K60S2只有2個扇區每個扇區512個字節,字節數1K,我當時不明白,在進行多個扇區讀寫失敗 用IAP字節讀時EEPROM起始扇區首地址: 0000h;用IAP字節讀時EEPROM結束扇區末地址: 03FFh 2.不明白怎么調用讀寫函數 寫入函數調用 void IapProgramByte( 扇區地址, 寫入的數據)讀寫函數調用 unsigned char IapReadByte(想要讀出數據的扇區地址) 總體而言開始之前我了解EEPROM的作用能做什么,然后我才想怎么開始使用,我看了看數據手冊,看完我不懂,我隨后百度查EERPOM的應用和初始化,以及函數的編寫,最后是調用測試
在使用EEPROM 的時候操作步驟 先開始對EEPROM進行初始化操作 sfr IAP_DATA = 0xC2; //IAP數據寄存器 sfr IAP_ADDRH = 0xC3; //IAP地址寄存器高字節 sfr IAP_ADDRL = 0xC4; //IAP地址寄存器低字節 sfr IAP_CMD = 0xC5; //IAP命令寄存器 sfr IAP_TRIG = 0xC6; //IAP命令觸發寄存器 sfr IAP_CONTR = 0xC7; //IAP控制寄存器 #define CMD_IDLE 0 //空閑模式 #define CMD_READ 1 //IAP字節讀命令 #define CMD_PROGRAM 2 //IAP字節編程命令 #define CMD_ERASE 3 //IAP扇區擦除命令 注具體看使用手冊 然后在進行編寫函數操作 擦除函數(函數的格式是固定的) void IapEraseSector(WORD addr) { IAP_CONTR= ENABLE_IAP; //使能IAP IAP_CMD= CMD_ERASE; //使能IAP命令 IAP_ADDRL= addr; //設置IAP低地址 IAP_ADDRH= addr >> 8; //設置IAP高地址 IAP_TRIG= 0x5a; //寫觸發命令0x5a IAP_TRIG= 0xa5; ///寫觸發命令0xa5 _nop_(); //等待寫ISP/IAP/EEPROM數據完成 IapIdle(); //關閉IAP功能 } 寫入EEPROM區域數據函數(單字節寫入) void IapProgramByte(WORD addr, BYTE dat) { IAP_CONTR= ENABLE_IAP; //使能IAP IAP_CMD= CMD_PROGRAM; //設置IAP命令 IAP_ADDRL= addr; //設置IAP低地址 IAP_ADDRH= addr >> 8; //設置IPA高地址 IAP_DATA= dat; //寫ISP/IAP/EEPROM數據 IAP_TRIG= 0x5a; //寫觸發命令0x5a IAP_TRIG= 0xa5; //寫觸發命令0xa5 _nop_(); //等待寫ISP/IAP/EEPROM數據完成 IapIdle(); //關閉IAP功能 } 讀出單字節EEPROM區域數據 unsigned char IapReadByte(WORD addr) { BYTE dat; //數據緩沖區 IAP_CONTR= ENABLE_IAP; //使能IAP IAP_CMD= CMD_READ; //設置讀取命令 IAP_ADDRL= addr; //設置IAP低八位地址 IAP_ADDRH= addr >> 8; //設置IAP高八位地址 IAP_TRIG= 0x5a; //寫觸發命令(0x5a) IAP_TRIG= 0xa5; //寫觸發命令(0xa5) _nop_(); //等待ISP/IAP/EEPROM操作完成 dat= IAP_DATA; //讀ISP/IAP/EEPROM數據 IapIdle(); //關閉IAP功能 return dat; //返回 } 關閉對IAP寄存器操作函數 void IapIdle() { IAP_CONTR= 0; //關閉IAP功能 寄存器讀寫開關 IAP_CMD= 0; //清除指令待機 IAP_TRIG= 0; //清空觸發器寄存器 IAP_ADDRH= 0x80; //地址寄存器高八位 IAP_ADDRL= 0; //地址寄存器低八位 } 目的: 單片機運行時的數據都存在于RAM(隨機存儲器)中,在掉電后RAM中的數據是無法保留的,那么怎樣使數據在掉電后不丟失呢?這就需要使用內部EEPROM (EEPROM可以擦寫100000次)或FLASHROM 等存儲器來實現。在傳統的單片機系統中,一般是在片外擴展存儲器,單片機與存儲器之間通過IIC 或SPI 等接口來進行數據通信。這樣不光會增加開發成本,同時在程序開發上也要花更多的心思。在STC 單片機中內置了EEPROM(其實是采用ISP/IAP技術讀寫內部FLASH 來實現EEPROM),正是因為有了IAP,從而可以使單片機可以將數據寫入到程序存儲器中,使得數據如同燒入的程序一樣,掉電不丟失。當然寫入數據的區域與程序存儲區要分開來,以使程序不會遭到破壞。這樣就節省了片外資源,使用起來也更加方便。 下面就詳細介紹STC 單片機內置EEPROM 及其使用方法 2.STC15F2K60S2系列單片機的內部結構圖 STC15F2K60S2系列單片機的內部結構框圖如下圖所示,STC15F2K60S2系列單片機中包含中央處理器(CPU)、程序存儲器(Flash)、數據存儲器(SRAM)、定時器、IO口、高速A/D轉換、看門狗、UART高速異步串行通信口1/串行通信口2,CCP/PWM/PCA,一組高速同步串行端口SPI,片內高精度R/C時鐘及高可靠復位等模塊,STC15F2K60S2系列單片機幾乎包含了數據采集和控制中的所有單元模塊。
來源:網絡,如侵,刪
|