天天看點

51單片機存儲器小結

存儲器分為程式存儲器(ROM)和資料存儲器(RAM),兩種又都可以分為片内和片外,片外即需要自己在單片機外部擴充。

8051單片機的片内程式存儲器有4K,片内資料存儲器有256個位元組,其中又分為高128位元組位特殊功能寄存器區,真正使用者能用的RAM隻有低128位元組。

8052單片機有8K片内程式存儲器,而資料存儲器除了低128位元組外還有擴充的高128位元組,位址上跟特殊功能寄存器一樣,但實體上是獨立的,尋址方式不一樣,擴充的高128位元組隻能間接尋址。

Keil中變量的存儲類型:

存儲類型 說明
code 程式空間(無需改變的變量)
data 直接通路的内部資料存儲器(速度最快)
idata 間接通路的内部資料存儲器(可以通路全部256位元組RAM)
bdata 可位尋址的内部資料存儲器
xdata 外部資料寄存器(最大64K)
pdata 分頁的外部資料寄存器(最大256位元組,少用)

【如無使用關鍵字,系統則按預設處理(根據存儲模式)】

Keil中的存儲模式:

存儲模式 說明
Small 變量預設為data型,最大128位元組
Compare 變量預設為pdata型,最大256位元組
Large 變量預設為xdata型,最大64K

Keil中設定如下圖:

51單片機存儲器小結

我們平常使用的STC單片機,有很多型号,具體存儲器大小都要看型号:

51單片機存儲器小結

【89/90系列的機器周期需要12個或6個時鐘周期】

51單片機存儲器小結

【12/15系列的機器周期隻需要1個時鐘周期】

51單片機上的FFT算法

最近用增強型51單片機做了一個簡易的點陣音樂頻譜顯示器,最主要是自己剛學完信号處理課程,想自己寫一個FFT算法。現将已經能夠在51單片機上運作的FFT算法供需要的夥伴們參考。

在51單片機上運作FFT算法,需要注意一下幾點:

由于51單片機的記憶體RAM很小,隻有128位元組,52有256位元組,而16點的浮點數輸入,就需要2*4*16=128位元組的記憶體開銷,是以隻有256位元組的做多隻能做16點的FFT運算。而且必須要用idata定義才能将其定義在高128位元組。是以要做16點以上的FFT運算,必須選用有内部擴充RAM的51系列單片機,然後用xdata定義,并且要将存儲模式設為LARGE模式。

繼續閱讀