1. 程式人生 > >51微控制器儲存器小結

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中設定如下圖:


我們平常使用的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模式。

相關推薦

51微控制器儲存器小結

儲存器分為程式儲存器(ROM)和資料儲存器(RAM),兩種又都可以分為片內和片外,片外即需要自己在微控制器外部擴充套件。 8051微控制器的片內程式儲存器有4K,片內資料儲存器有256個位元組,其中又分為高128位元組位特殊功能暫存器區,真正使用者能用的RAM只有低128位

51微控制器儲存器擴充套件 學習筆記

                                                                                                        8051微控制器儲存器擴充套件         以AT89C51為

51微控制器初瞭解(9)

跑馬燈效果的實現------8顆LED,7亮1滅,滅的移動 0x7f(01111111) 0xbf(10111111) 0xdf(11011111)   C語言按位取反:~表示對一個數字按位取反。01111111~10000000   #include <reg51.h

51微控制器----基礎知識

基礎: 1. 點亮二極體的壓降為 1.6–1.7V,工作電流為3–10 mA;低電平點亮 2.線與指的是它們任意一開關只要對地導通,這根線就一定是低電平。 3.微控制器I/O預設輸入高電平; LED 燈點亮 電路圖: # include<reg5

51微控制器自學--完美的單擊、雙擊、長按、中斷消抖

完整的單擊、雙擊、長按程式碼。 工作原理:當有按鈕第一次按下時,設定第一個標誌An,當按鈕第一次釋放後,進入中斷消抖延時計數,假如在計數範圍內第二次按鈕按下,設定第二標誌Aa,這樣就把單擊和雙擊區分開,而且是可靠的邏輯標誌,長按為大於1秒的判斷. 中斷消抖及按鈕單擊、雙擊、長按處理

51微控制器入門_使用keil新建工程以及串列埠驅動下載和程式燒寫教程

        51微控制器是很簡單的一款微控制器,適合於新手的入門學習,但是也只能作為初學者繼續往上學習的一個墊腳石。這篇部落格我主要的目的是寫給我們學校社團的萌新閱覽的,方便他們入門51,繼續堅持學習下去。假如你有一個51微控

51微控制器學習筆記()

一、關於標頭檔案 在輸入標頭檔案時,新手容易出錯 比如: #include "reg52.h" 由於不仔細以及對標頭檔案不夠了解,會出現錯誤,如: #include "reg.52“ #include "reg.52.h" 此情況下編譯會出錯,顯示打不開該檔案,如下圖

51微控制器之忽略的東西

P0口將作為匯流排的低8位地址線和8位資料線使用 P2口將作為匯流排的高8位地址線使用 如果十六進位制數以字母ABCDEF中的某一個開頭,必須在前面加一個0.譬如,MOV P1, #0BFH ORG 00H 表示的是偽指令,作用幫助彙編器彙編指令,並不是微控制器指令的一部分,因此

51微控制器的模擬棧(模擬棧/可重入棧)

51微控制器的模擬棧(模擬棧/可重入棧) 51微控制器的模擬棧(又叫模擬棧、或者可重入棧)。 首先來看,51的系統棧(又叫系統棧,或者硬體棧),就是SP所指向的棧,他是一個滿增棧(註釋1),位於片內RAM的128 bytes之中,上電之後系統堆疊指標SP的初值等於多少呢?這個要從51

MCS-51微控制器 原理 整理

1 書籍 《MCS-51微控制器原理、系統設計與應用_12015401.pdf》 MCS-51 Intel 公司 的 8051 核心技術 MSC-51微控制器(有史以來,最簡單易懂教程).pdf 《新編MCS-51微控制器應用設計.pdf》 ---- good 2 MCS-51

2-物聯網開發標配方案(51微控制器程式介紹+WIFI程式介紹)

  上一節  https://www.cnblogs.com/yangfengwu/p/9944438.html 購買雲伺服器安裝MQTT就不用說了,以前寫過文章介紹   https://www.cnblogs.com/yangfengwu/p/8758733.html&

51微控制器的初瞭解(11)

靜態數碼管顯示數字 1、數字編碼(段碼)的獲取 要顯示的數字            數碼管的LED            段碼二進位制       

51微控制器使用定時器中斷模擬PWM控制埠電壓

  最近應實驗室需求寫一篇51微控制器產生PWM的文章供參考.   微控制器晶片STC89C52,晶振12MHz,編譯環境Keil5.   分析:若使微控制器埠為高電平, 則微控制器輸出電壓為恆值5V. 反之低電平輸出電壓為0V. 但是我們如果在週期為T的時間內

基於51微控制器的矩陣計算器設計

      當初本科的畢業設計不是很完美,一直想把它完善一下,這學期剛開始有點時間,就以一個小專案的方式,綜合自己這一年多來的程式碼閱讀收穫,重寫了這個工程。 一,平臺的重新搭建 Ø  在win7上重新安裝了proteus7.8用於模擬階段的測試,並從以前

51微控制器——控制步進電機加速、減速及反轉

加速: #include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 uchar phasecw[4] =

51微控制器——控制直流電機加減速

#include <reg52.h> #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit dianji=P1^7; sbit jia_key=P3^6; sbit jian_key=P3^7;

51微控制器——利用DS12C887實現時鐘

#include<reg52.h> #include<define.h> void delay(uint z)//延時函式 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void di(

51微控制器——流水燈

//流水燈,同時蜂鳴器響 #include <reg51.h> #include <intrins.h> unsigned char i,j,k,t; sbit beep=P2^3; void delay10ms() { for(i=100;i>

51微控制器——利用1602液晶顯示時鐘

#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit rs=P3^5; sbit lcden=P3^4; sb

51微控制器——利用DS18B20測溫

#include <reg52.H> #include <intrins.H> #include <math.H> #define uchar unsigned char #define uint unsigned int sbit dula = P