從資料儲存型別來說,8051系列有片內、片外程式儲存器,片內程式儲存器還分直接定址區和間接定址型別,以及根據51系列特點而設定的pdata型別。使用不同的儲存器,將使程式的執行效率不同,在編寫c51程式時,最好指定變數的儲存型別,這樣將有利於提高程式執行效率。與ansi-c稍有不同,它只分samll、compact、large模式,各種不同的模式對應不同的實際硬體系統,也將有不同的編譯結果。
在51系列中data,idata,xdata,pdata的區別:
data: 固定指前面0x00~0x7f的128個ram,可以用acc直接讀寫的,速度最快,生成的**也最小。
idata: 固定指前面0x00~0xff的256個ram,其中前128個ram和data的128個ram完全相同,只是因為訪問的方式不同。idata是用類似c中的指標方式訪問的。彙編中的語句為:mox acc,@rx.(不重要的補充:c中idata做指標式的訪問效果很好)
xdata:外部擴充套件ram,一般指外部0x0000~0xffff空間,用dptr訪問。
pdata:外部擴充套件ram的低256個位元組,位址出現在a0-a7上時讀寫,用movx acc,@rx讀寫。這個比較特殊,而且c51好像對此有bug,建議少用。(這是2023年的記錄,不知以後是否有改進)
微控制器c語言中unsigned char code table code是什麼作用?
code的作用是高速微控制器,我定義的資料要放在rom(程式儲存區)裡面,寫入後就不能再更改。因為c語言中沒辦法詳細描述存入的是rom還是ram,所以在軟體中新增了這乙個語句代替彙編指令的作用,對應的還有data是存入ram的意思。
程式可以簡單的分為code(程式)和data(資料)區,code區在執行的時候是不可以隨便更改的,data區放全域性變數和臨時變數,是要不斷的改變的,cpu從code區讀取指令,對data區的資料進行運算處理,因此code區儲存在什麼介質上並不重要,像以前的電腦程式儲存在卡片上,code區也可以放在rom裡面,也可以放在 ram裡面,也可以放在flash裡面(但是執行速度要慢很多,主要是讀flash比讀ram要費時間), 因此一般的做法是將程式放在flash裡面,然後load到ram裡面執行的,放到rom裡面改動不了。
bdata如何使用呢?若程式需要8個或者更多的bit變數,如果你想一次性給8個變數賦值的話就不方便了,又不可以定義bit陣列,只有乙個方法。
char bdata mode
; sbit mode_7
=mode^7
; sbit mode_6
=mode^6
; sbit mode_5
=mode^5
; sbit mode_4
=mode^4
; sbit mode_3
=mode^3
; sbit mode_2
=mode^2
; sbit mode_1
=mode^1
; sbit mode_0
=mode^0
;
8個bit變數mode_n就定義好了。這是定義語句,keil c的特殊資料型別。記住一定要sbit而不能用bit mode_0 =mode^0;賦值語句要是這麼寫c語言就視為異或運算。keil生成的檔案
注釋.plg
編譯器編譯結果
.hex和.bin
可執行檔案
.map和.lst
鏈結檔案
.o目標檔案
.crf 、.inp、.d和.axf
除錯檔案
.opt
儲存工程配置資訊
.bak
工程備份檔案
m51檔案
startup檔案。
普通51系列微控制器儲存空間資源分布情況:空間名
位址範圍
說明data
d:00h~7fh
片內ram直接定址區
bdata
d:20h~2fh
片內ram位定址區
idata
i:00h~ffh
片內ram間接定址區
xdata
x:0000h~ffffh
64k片外ram資料區
code
c:0000h~ffffh
64k片內外rom**區
bank0~31
b0~b31:0000h ~ ffffh
分組**區,最大可擴充套件32x64k rom
hdata (新)
x:0000h~ffffffh
16m擴充套件片外rom資料區
hconst(新ecode)
c:0000h~ffffffh
16m擴充套件片外rom常數區(對dallas390可用作**區)
詳解51微控制器
例如 at89s51 stc89c51 stc89c52 stc90c516等等這些微控制器核心都為80c51,所以核心為80c51的微控制器都屬於51微控制器。微控制器是一種數字整合晶元,數位電路中只有兩種電平 高電平和低電平 計算機串列埠使用的是rs232電平 點亮led燈只需要控制io口輸出相...
51微控制器 RAM 資料儲存區
ram 是程式執行中存放隨機變數的資料空間。在 keil 中編寫程式,如果當前模式為small模式,如果總的變數大小未超過128b 則未初始化的變數的初值預設為 0.如果所有的變數超過微控制器small模式下的128b 大小,則必須對變數進行初始化,否則超過 ram大小變數的值是不確定的,在smal...
51微控制器
數碼管顯示幾乎是每次藍橋杯微控制器設計與開發組競賽的必考部分,相對於使用lcd1602作為顯示裝置,使用數碼管來顯示能夠更好的考察參賽選手的微控制器基本功,因為ct107d開發平台的設計使得數碼管的顯示不僅牽扯到數碼管顯示的 基本內容,還涉及到74hc573鎖存器,74hc02異或門,74hc138...