使用C語(yǔ)言訪問(wèn)51單片機(jī)中存儲(chǔ)器的核心代碼
使用C語(yǔ)言訪問(wèn)51單片機(jī)中存儲(chǔ)器
1.頭文件
在Keil C51工程中 #include <absacc.h> ,可以直接使用CBYTE, XBYTE, DBYTE, PBYTE
absacc.h 的部分內(nèi)容如下:
#ifndef __ABSACC_H__ #define __ABSACC_H__ #define CBYTE ((unsigned char volatile code *) 0) #define DBYTE ((unsigned char volatile data *) 0) #if !defined (__CX2__) #define PBYTE ((unsigned char volatile pdata *) 0) #endif #define XBYTE ((unsigned char volatile xdata *) 0) #define CWORD ((unsigned int volatile code *) 0) #define DWORD ((unsigned int volatile data *) 0) #if !defined (__CX2__) #define PWORD ((unsigned int volatile pdata *) 0) #endif #define XWORD ((unsigned int volatile xdata *) 0)
code data pdata xdata 均為存儲(chǔ)器類型,下節(jié)將詳敘,此處用T替代:
unsigned char volatile T * 為指向存儲(chǔ)器T中無(wú)符號(hào)整型數(shù)的指針類型
((unsigned char volatile T * ) 0) 對(duì)0做強(qiáng)制類型轉(zhuǎn)換
2.code data pdata xdata
code data pdata xdata均為存儲(chǔ)器類型
- code:用于存儲(chǔ)常數(shù)和函數(shù),使用16位地址訪問(wèn),可位于片內(nèi)或片外
- ROMdata:用于存儲(chǔ)變量,使用8位地址,位于片內(nèi)RAMp
- data:用于存儲(chǔ)變量,使用8位地址,位于片外RAMx
- data:用于存儲(chǔ)變量,使用16位地址,位于片外RAM
3.CBYTE、DBYTE、PBYTE和XBYTE的區(qū)別
注意:以下存儲(chǔ)地址范圍均指理論上可訪問(wèn)的最大范圍,具體操作時(shí)需根據(jù)存儲(chǔ)器大小調(diào)整
從存儲(chǔ)器類型的區(qū)別中可以得出本節(jié)四者的區(qū)別:
CBYTE
CBYTE 是用于訪問(wèn)代碼存儲(chǔ)器的,即ROM部分。
rval = CBYTE[adress]; //訪問(wèn)到代碼存儲(chǔ)器中的內(nèi)容
其中代碼存儲(chǔ)器地址(adress)范圍是 0X0000--0xFFFF ,大小為16K。
DBYTE
DBYTE 是用于訪問(wèn)片內(nèi)數(shù)據(jù)存儲(chǔ)器的,即片內(nèi)RAM部分,
DBYTE[adress] = 0XFB; //寫(xiě)數(shù)據(jù) rval = DBYTE[adress]; //讀數(shù)據(jù)
其中片內(nèi)存儲(chǔ)器地址(adress)范圍是 0x00--0xFF ,大小為256byte。
XBYTE
XBYTE 是用于訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器的,即片外RAM部分,但是XBYTE只能讀數(shù)據(jù)不能寫(xiě)數(shù)據(jù)到片外RAM。
rval =XBYTE[adress]; //讀數(shù)據(jù)
片外數(shù)據(jù)存儲(chǔ)器的寫(xiě)可以使用下面這條語(yǔ)句:
char xdata x1 _at_ 0x30 ; //x1為char型全局變量,地址位于xdata區(qū)地址0x30 x1 = 0x01; //給片外存儲(chǔ)器地址賦值
地址范圍為 0x0000--0xFFFF,大小為16K。
PBYTE
PBYTE也用來(lái)訪問(wèn)擴(kuò)展ram,但只能訪問(wèn)開(kāi)始的256字節(jié)。
4.CWORD、XWORD、DWORD和PWORD
上節(jié)所述四者為單字節(jié)訪問(wèn),對(duì)應(yīng)雙字節(jié)訪問(wèn)使用CWORD、DWORD、XWORD和PWORD。
5.參考
https://wenku.baidu.com/view/fe5a4b09f61fb7360a4c659c.html
到此這篇關(guān)于使用C語(yǔ)言訪問(wèn)51單片機(jī)中存儲(chǔ)器的文章就介紹到這了,更多相關(guān)C語(yǔ)言51單片機(jī)存儲(chǔ)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合
這篇文章主要為大家詳細(xì)介紹了opencv2基于SURF特征提取實(shí)現(xiàn)兩張圖像拼接融合,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03
C++實(shí)現(xiàn)停車(chē)場(chǎng)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)停車(chē)場(chǎng)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
Qt編寫(xiě)地圖之實(shí)現(xiàn)跨平臺(tái)功能
這篇文章主要介紹了如何利用Qt編寫(xiě)地圖應(yīng)用時(shí)實(shí)現(xiàn)跨平臺(tái)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-02-02
詳解C語(yǔ)言中telldir()函數(shù)和seekdir()函數(shù)的用法
這篇文章主要介紹了詳解C語(yǔ)言中telldir()函數(shù)和seekdir()函數(shù)的用法,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
OpenCV實(shí)現(xiàn)簡(jiǎn)易標(biāo)定板
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)簡(jiǎn)易標(biāo)定板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
基于VC 6.0使用C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了基于VC 6.0使用C語(yǔ)言實(shí)現(xiàn)俄羅斯方塊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06

