溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用C語言訪問51單片機(jī)中存儲(chǔ)器的核心代碼怎么寫

發(fā)布時(shí)間:2022-01-17 15:35:00 來源:億速云 閱讀:152 作者:kk 欄目:開發(fā)技術(shù)

使用C語言訪問51單片機(jī)中存儲(chǔ)器的核心代碼怎么寫,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

C語言是什么

C語言是一門面向過程的、抽象化的通用程序設(shè)計(jì)語言,廣泛應(yīng)用于底層開發(fā),使用C語言可以以簡(jiǎn)易的方式編譯、處理低級(jí)存儲(chǔ)器。

使用C語言訪問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中無符號(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位地址訪問,可位于片內(nèi)或片外

  • ROMdata:用于存儲(chǔ)變量,使用8位地址,位于片內(nèi)RAMp

  • data:用于存儲(chǔ)變量,使用8位地址,位于片外RAMx

  • data:用于存儲(chǔ)變量,使用16位地址,位于片外RAM

3.CBYTE、DBYTE、PBYTE和XBYTE的區(qū)別

注意:以下存儲(chǔ)地址范圍均指理論上可訪問的最大范圍,具體操作時(shí)需根據(jù)存儲(chǔ)器大小調(diào)整
從存儲(chǔ)器類型的區(qū)別中可以得出本節(jié)四者的區(qū)別:

CBYTE

CBYTE 是用于訪問代碼存儲(chǔ)器的,即ROM部分。

rval = CBYTE[adress];    //訪問到代碼存儲(chǔ)器中的內(nèi)容

其中代碼存儲(chǔ)器地址(adress)范圍是 0X0000--0xFFFF ,大小為16K。

DBYTE

DBYTE 是用于訪問片內(nèi)數(shù)據(jù)存儲(chǔ)器的,即片內(nèi)RAM部分,

DBYTE[adress] = 0XFB;   //寫數(shù)據(jù)
rval = DBYTE[adress];   //讀數(shù)據(jù)

其中片內(nèi)存儲(chǔ)器地址(adress)范圍是 0x00--0xFF ,大小為256byte。

XBYTE

XBYTE 是用于訪問片外數(shù)據(jù)存儲(chǔ)器的,即片外RAM部分,但是XBYTE只能讀數(shù)據(jù)不能寫數(shù)據(jù)到片外RAM。

rval =XBYTE[adress]; //讀數(shù)據(jù)

片外數(shù)據(jù)存儲(chǔ)器的寫可以使用下面這條語句:

char  xdata  x1  _at_ 0x30 ;  //x1為char型全局變量,地址位于xdata區(qū)地址0x30 
x1  =  0x01; //給片外存儲(chǔ)器地址賦值

地址范圍為 0x0000--0xFFFF,大小為16K。

PBYTE

PBYTE也用來訪問擴(kuò)展ram,但只能訪問開始的256字節(jié)。

4.CWORD、XWORD、DWORD和PWORD

上節(jié)所述四者為單字節(jié)訪問,對(duì)應(yīng)雙字節(jié)訪問使用CWORD、DWORD、XWORD和PWORD。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI