1. 單片機 用c語言如何往一個指定的地址村數據
。。。。有的單片機可以在EEPROM裡面指定地址存數據,但是在ROM裡面,地址是由編譯器來決定的,你要存儲一個數據,要自己先定義一個變數名稱, 這個變數的地址就是有編譯器來決定的。
2. c語言中可以定義固定變數的地址嗎
變數就有地址,但是常量不會有地址。
比如
const int * p=&a;
就定義了一個變數指針,指向const int型的變數a
3. 單片機C語言怎樣申請固定地址的變數操作步驟解析
在Keil中有兩種方式申請固定地址的變數:
1、使用CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
比如:dat=DBYTE[0x40];
dat=XBYTE[0x1000];
2、使用_at_
比如:
idata dat _at_ 0x40;
xdata dat _at_0xE000;
4. 單片機C語言怎麼聲明一個可以位定址的變數
是這個樣子的,你只要聲明了位變數,比如bit a;而且這個變數是全局變數,或者是函數內部的靜態變數,那麼,這個位變數的地上就恆不變了,只是地址是多少這個是編譯器隨機分配的,不敢十分確定,但是在以後的運行中,地址肯定是不變的。
如果你聲明的是函數內部的動態變數,比如在函數內部聲明:bit a,那麼,這個位變數是隨著函數的調用變化的,其地址也是變化的。
所以,你只要聲明一個全局的位變數,那麼,這個變數就肯定是地址不變的,當然,不知道其地址具體是多少罷了。
如果你非要知道每個地址是多少,那麼,有兩個辦法:
1 你集中把128個位全部都定義出來。
比如,你在某個C文件里,這樣寫:
bit Bit00 = 0;
bit Bit01 = 0;
bit Bit02 = 0;
bit Bit03 = 0;
一直定義128個,把所有位空間占滿,那麼,這樣,就可以肯定Bit00的地址是0x20的最低位,bit01的地址是0x20的次低位了。
2 用sbit,而不用bit.
比如:unsigned char data B_Var[16] = 0;
sbit Led_Status1 = B_Var[0]^7;那麼,就表示Led_Status 是第20H地址中的最高位。
sbit Led_Status2 = B_Var[6]^3;那麼,就表示Led_Status 是第26H地址中的第3位。
這個其實並不是定義了位變數,只是起了個別名而已。但效果一樣,只是注意,你更改B_Var[6],可能會更改26H的地址第3位,所以,如果你只用位,那麼,就不要操作B_Var[6]這個數組元素。
其實呢,你只要定義個全局變數就行了,沒有必要知道這個bit變數的地址,因為沒有什麼實際意義。
5. 單片機c語言怎麼把一個變數放到固定的地址
int *P;
P = 28h;
*P = 0x1234;
這樣就把變數存在指定的兩個地址單元了
6. 單片機C語言怎樣申請固定地址的變數操作
void delay()
{
unsigned int i;
for(i=0;i<1500;i++)
}
void fun(void)
{
unsigned char i;
for (i=0;i<8;i++)
{
P0=1<<i;
delay();
}
while(--i)
{
P0=1<<i;
delay();
}
}
void main()
{
while(1)
{
fun();
}
}
7. c語言中可以定義固定變數的地址嗎萬分感謝
不能,在一開始創建的時候計算機就會自動分配給它特定的地址,況且有些地址還是不能訪問的。
8. 單片機C編程怎麼對固定地址操作例如 我要給50H這個地址賦值0x00應該怎麼寫
【答1】對內部內存操作:sfr H50=0x50; H50=0;
【答2】對外部RAM操作:xbyte[50H]=0;
【警】不過,警告你,C語言這么干,很危險,很可怕的。建議你調試後,確定此空間不會被任何其他變數以及堆棧空間佔用。
【問】對了,想問問你,你想幹嘛呀?高級語言干低級活,為毛?
9. 51單片機把數據存入指定的地址或在讀指定地址的數據用C語言怎麼寫
1. 絕對宏:
在程序中,用「#include<absacc.h>」即可使用其中定義的宏來訪問絕對地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具體使用可看一看absacc.h便知,例如:
rval=CBYTE[0x0002];指向程序存貯器的0002h地址
rval=XWORD[0x0002];指向外RAM的0002h地址
2. _at_關鍵字
直接在數據定義後加上_at_ const即可,但是注意:
(1)絕對變數不能被初使化;
(2)bit型函數及變數不能用_at_指定。
例如:
idata struct link list _at_ 0x40;指定list結構從40h開始。
xdata char text[25b] _at_0xE000;指定text數組從0E000H開始
提示:如果外部絕對變數是I/O埠等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。
10. 合泰的單片機用C語言如何把一個變數定位到指定ROM地址 比如:const unsigned char mydata @0x300;
ROM是保存指令和常量的地方,不是存變數的地方;
如果是訪問flash之類的可擦寫ROM可以當成是外部RAM使用,一般通過absacc.h
里的XBYTE[addr] 來定義外部地址的。
PS:如果是常量需要保存到ROM的指定地址,查看項目文件下的*.m51文件,裡面有程序段及常數段的地址分配,修改code memory 下的BASE(起始地址、基地址)和LENGTH(長度、位元組數)值,可以指定程序段或常量的ROM地址。