STC8A4K系列微控制器EEPROM程式設計

2021-10-03 17:59:16 字數 1806 閱讀 3434

這段時間在弄stc8a系列微控制器做乙個設計,遇到一些問題,第一次寫部落格,把遇到的問題寫下來分享一下。

遇到的問題就是eeprom不能正確的讀取到儲存的資料。資料存入eeprom後,讀取出來的資料不正確。我看了微控制器文件但是並沒有提到這個點。下面就詳細的講一下這個點,希望有問題的小夥伴遇到問題可以參考一下。

先看一下stc8a系列的eeprom基本資訊:

老手或者著急的老哥直接跳去末尾。

eeprom的訪問方式主要由兩種:mov和iap,具體的歷程官方文件給的有,我主要使用的是iap的方式,先看一下eeprom記憶體大小,不同微控制器型號不一樣,注意不要超出範圍了。

我是用的是圖中這一款,有32k 64個扇區,這裡需要注意一下:讀、寫和擦除,其中擦除操作是以扇區為單位進行操作,每扇區為 512 位元組,即每執行一次擦除命令就會擦除乙個扇區,而讀資料和寫資料都是以位元組為單位進行操作的,即每執行一次讀或者寫命令時只能讀出或者寫入乙個位元組。所以存資料盡量放在乙個扇區內。

下面進入乾貨區(擼**)

首先下面是暫存器的基礎配置,這裡主要檢視相關文件來配置,具體的檢視參考手冊。

void

iapidle()

上面的可有可無:主要是下面幾個函式。

//讀取資料函式,入口引數是位址

char

iapread

(int addr)

//寫入函式,資料和位址,注意要是用16進製制資料

void

(int addr,

char dat)

上面的幾個函式主要是就是基本操作,老手可以忽略,可以直接到最末尾。主要得問題是下面的乙個函式:

//擦除扇區內容  這個函式很重要

void

iaperase

(int addr)

該函式是擦除扇區內容,為什麼要重點說明呢,因為問題就出在這裡。

先看一下我的問題程式:

void

eeprom_write()

void

eeprom_read()

這兩個就是讀取和寫入的函式了,分別將adc兩個引數寫入0x400和0x420的記憶體空間,按照這個程式資料可以存進去,但是無法正確讀出來,測試的時候,資料時準時不准,查閱很多地方都找不到答案。最終在一片帖子上發現了問題:

就是剛剛那個函式,擦除函式。

iaperase

(0x0400

);

好!先看**,跟著**去學習。更正過後的程式如下:

void

eeprom_write()

void

eeprom_read()

問題就出在**,程式整個思路是ok的,問題就是:

stc微控制器的eeprom在寫入的時候必須擦除整個扇區,否則就會出現我這個錯誤,讀出資料不正確。

這裡注意一下為什麼只清除0x400開始的記憶體呢? 認真讀過的老哥應該知道,前面說過清除是清除整個扇區,每個扇區512位元組,所以 只需要寫最開始的那一段就可以了。

好的就是這麼個問題,這可能就是常識,才疏學淺,老司機不要嫌棄。

STC系列51微控制器延時程式彙總

答應大家得福利來啦,這一期我就給大家分享一下stc系列51微控制器得延時程式彙總。11.0592mhz晶振 延時1ms 1 y1指令集 適用於sct89c系列,stc90c系列 stc89le系列 stc90le系列 void delay1ms while i 2 y3指令集 適用於stc12c系列...

STC8微控制器的低功耗詳解

上圖是我採用的型號 stc8f2k08s2 我們開發產品要求如下 1.兩節1號電池供電半年。2.紅外傳送接收資料。上位機傳送指令和讀取資料 3.自帶時間。4.eeprom,掉電儲存資料。5.成本低 在這個專案中,主要問題是成本和功耗。之前採用的是stm8l系列功耗的確很低,但是今年 飛漲,實在傷不起...

STC15系列微控制器SPI使用教程(三)

stc15系列微控制器spi使用教程 一 資料型別重定義 ifndef uchar define uchar unsigned char endif ifndef uint define uint unsigned int endif io埠定義 sbit miso p2 2 主機讀從裝置 主入從出...