91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

  • 回復
  • 收藏
  • 點贊
  • 分享
  • 發新帖

STC15f內部EEPROM


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 及其使用方法

2STC15F2K60S2系列單片機的內部結構圖

STC15F2K60S2系列單片機的內部結構框圖如下圖所示,STC15F2K60S2系列單片機中包含中央處理器(CPU)、程序存儲器(Flash)、數據存儲器(SRAM)、定時器、IO口、高速A/D轉換、看門狗、UART高速異步串行通信口1/串行通信口2,CCP/PWM/PCA,一組高速同步串行端口SPI,片內高精度R/C時鐘及高可靠復位等模塊,STC15F2K60S2系列單片機幾乎包含了數據采集和控制中的所有單元模塊。


來源:網絡,如侵,刪


全部回復(1)
正序查看
倒序查看
lingyan
LV.8
2
2019-01-09 09:54
學習了
0
回復
主站蜘蛛池模板: 苍溪县| 阿尔山市| 修武县| 江源县| 毕节市| 永川市| 黎平县| 定陶县| 赤水市| 阿合奇县| 屏山县| 白玉县| 南部县| 柘城县| 定南县| 遂昌县| 图木舒克市| 巴中市| 临汾市| 西昌市| 庄河市| 那曲县| 介休市| 齐河县| 台南县| 大连市| 阿拉尔市| 鞍山市| 新疆| 淮滨县| 岳普湖县| 凭祥市| 安化县| 尉氏县| 石景山区| 万源市| 合江县| 顺义区| 萨嘎县| 龙门县| 宜黄县|