存儲器分為程式存儲器(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中設定如下圖:
我們平常使用的STC單片機,有很多型号,具體存儲器大小都要看型号:
【89/90系列的機器周期需要12個或6個時鐘周期】
【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模式。