導航:首頁 > 操作系統 > 單片機中用c語言進行地址轉移

單片機中用c語言進行地址轉移

發布時間:2022-08-23 21:40:53

❶ 51單片機數據搬運c語言程序

這個很簡單,可以利用單片機的定時器來完成

當有脈沖輸入的時候,啟動定時器,並對定時器的計數值進行清零

每一次脈沖輸入都清零計數值,當脈沖消失後,定時器的計數值達到指定時間則關閉

關閉的同時,調用其它函數,例如你的繼電器控制

需要說明的是,我使用的開發板和你的不見得一樣,所以埠的使用只能你自己修改了

但程序已經經過硬體測試成功,請放心使用,如果滿意記得採納哦

/***************************************************************************/
#include <reg51.h> //51單片機通用頭文件
sbit P24=P1^0; sbit P25=P1^1; sbit P26=P1^2; sbit P27=P1^3;//數碼管位選埠
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管顯示編碼
sbit k=P3^7; sbit KK=P1^4;//定義按鍵和繼電器埠
int t,n,s,fe=0;
/***************************************************************************/
void YS(int hs){int hk;for(;hs>0;hs--){for(hk=100;hk>0;hk--);}}//延時函數
/***************************************************************************/
void XS(int xs)//數碼管顯示
{
char d1,d2,d3,d4;
d1=(xs/1)%10; d2=(xs/10)%10; d3=(xs/100)%10; d4=(xs/1000)%10;
P0=table[d1]; P27=0; YS(5); P27=1;
P0=table[d2]; P26=0; YS(5); P26=1;
P0=table[d3]; P25=0; YS(5); P25=1;
P0=table[d4]; P24=0; YS(5); P24=1;
}
/***************************************************************************/
void main(void)//主函數
{
TMOD=0x01; EA=1; ET0=1; KK=0;//定時器初始化
TH0=(65536-921)/256; TL0=(65536-921)%256;//定時器初值
while(1)
{
XS(t);//調用數碼管顯示函數
if(k==0)//如果按鍵被按下
{
YS(10);//延時去抖動
if(k==0)//如果是有效按鍵
{
TR0=1;//啟動定時器,開始計時
n=0;//每次按鍵都清空定時計數
t++;//按鍵值累加一次
KK=1;//繼電器打開
while(!k){XS(t);}//等待按鍵松開,並調用數碼管顯示,避免黑屏
}
}
if(fe==1)//如果沒按鍵輸入
{
fe=0;t=0;//清空按鍵計數值,並設置標識符
KK=0;//繼電器吸合
}
}
}
/***************************************************************************/
void int1() interrupt 1 //定時器中斷
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;//n等於100時,則為1秒
if(n>1000){TR0=0;n=0;fe=1;}//如果達到指定時間,則關閉定時器,並設置標識符
}

❷ 單片機中用C語言查表和移位問題

先說第一個問題:
比如用查表法將結果保存到變數i中,查表變數為x,則i = table[x],記住C語言裡面數組是從0開始的,比如說上面的0x01就是table[0],0x02是table[1],以此類推。
再說第二個問題:
比如說從P1.0口發送出去,則可以寫為
sbit OUT = P1^0;//定義OUT為P1.0口,這樣今後好寫程序
char i;
for(i = 0;i < 8;i++)
{
OUT = data & 0x80;//因為高位在前,將它寫成二進制就明白了
data <<= 1;
}
上面的程序就能搞定了;
應該是所有的單片機都有CY位(不知道浮點DSP有沒有);
C語言中左移和右移之後低位或高位自動補零,CY位也保持為零(視編譯器而定,這個得看編譯器手冊),有些編譯器提供了循環移位的函數;
還有什麼不明白的補充問題就是

❸ 怎麼用C語言把一塊地址中的數據傳送到另一塊地中中

#include <stdio.h>

void main()
{
memcpy((void *)0x1000, (void *)0x2000, 100);
}

❹ 單片機 用C語言如何往一個指定的地址村數據

。。。。有的單片機可以在EEPROM裡面指定地址存數據,但是在ROM裡面,地址是由編譯器來決定的,你要存儲一個數據,要自己先定義一個變數名稱, 這個變數的地址就是有編譯器來決定的。

❺ 怎麼用80c51用c語言編程,把數據從內部存儲器轉移到外部存儲器

擴展RAM編程基礎
(1)弄清擴展器件的地址
在圖7.2.5中,U3的ABC接單片機A13,A14,A15,所以片選信號對應地址最高位,即:「CBAxxxxx xxxxxxxx」(x為任意)。U4片選接CS1,即Y1,CBA=001,可得U4的地址范圍是0x2000~0x3fff。U5接CS3,即Y3,CBA=011,地址為0x6000~0x7fff。U6接CS4,即Y4,CBA=100,地址為0x8000~0x9fff。知道了器件地址,可以利用直接地址、外部數據指針來訪問存儲器。通過設置,也可以讓編譯器在擴展RAM中自動分配存儲單元。
(2)直接地址訪問
①向U4寫數據:
XBYTE[0x2000+addr]=dat; //addr為U4內部地址,取值為0~0x1fff;dat為數據。
②讀出U4數據:
dat=XBYTE[0x2000+addr];
也可以用頁訪問方式。頁訪問方式,實際就是先把16位地址高8位送P2口,通過低8位地址讀寫。
③按頁讀寫U4:
P2=0x20+page; // page為頁,取值為0x00~0x1F。
PBYTE[addr]=dat; // addr為頁內地址,取值為0x00~0xFF。
dat=PBYTE[addr];
④讀U6
dat=XBYTE[0x8000];//讀U6,地址取0x8000~0x9fff任何值,都一樣。
⑤寫U5
XBYTE[0x6000]=dat; //寫U5,地址取0x6000~0x7fff任何值,都一樣。
(3)數據指針
如,讀寫U4,可以這樣寫:
unsigned char xdata *p=0x3000; //聲明指針p,並初始指向0x3000單元
x=*p; //讀指針所指向的位置
p=p+1; //指針指向下一單元
*p=0x16; //向指針所指向的位置寫入數據
(4)讓編譯器自動分配存儲空間
①為了能讓編譯器自動分配存儲空間,並使用擴展RAM,必須設置擴展RAM地址。在Keil編程軟體中,點擊工具欄快捷圖標「 」,彈出目標選項對話框。按圖7.2.6所示,設置RAM起始地址和長度。
②變數聲明時使用xdata關鍵詞。如:
unsigned char xdata a;//變數a使用擴展RAM空間。
特別注意,擴展RAM直接地址訪問方式與自動分配存儲空間方式最好不要混用,否則可能產生沖突。

❻ 怎麼用C語言操作單片機內部RAM地址啊

//比如用C語言訪問RAM的30H單元
char * pRam; //定義一個個指針
pRam = 0x30; //賦地址給一個指針
*pRam; //解引這個指針就可以訪問了

❼ 單片機 移位操作 右移 C語言

C51系列單片機中_crol_指令是循環左移函數,_cror_是循環右移函數,這是51中特有的指令,別的類型單片機就不能使用了。易於程序的移植和通用性考慮個人比較推薦用<< 左移, 右移>>這兩個C中的移位符號。

❽ 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。

❾ 在單片機C語言中有沒有無條件轉移指令這個指令該怎樣使用goto語句該怎樣使用

c語言標准中,有無條件轉移指令,就是goto語句。單片機的c語言編譯器,大多支持這條語句。
語法:goto label;
e.g.
goto label;
......

label:
.........

❿ 合泰的單片機用C語言如何把一個變數定位到指定ROM地址 比如:const unsigned char mydata @0x300;

ROM是保存指令和常量的地方,不是存變數的地方;
如果是訪問flash之類的可擦寫ROM可以當成是外部RAM使用,一般通過absacc.h
里的XBYTE[addr] 來定義外部地址的。

PS:如果是常量需要保存到ROM的指定地址,查看項目文件下的*.m51文件,裡面有程序段及常數段的地址分配,修改code memory 下的BASE(起始地址、基地址)和LENGTH(長度、位元組數)值,可以指定程序段或常量的ROM地址。

閱讀全文

與單片機中用c語言進行地址轉移相關的資料

熱點內容
程序員抽獎排行 瀏覽:728
扭蛋人生安卓如何下載 瀏覽:712
什麼app文檔資源多好 瀏覽:919
黑馬程序員APP 瀏覽:144
掌閱小說是哪個app 瀏覽:43
如何把u盤的軟體安裝到安卓機 瀏覽:992
php跑在什麼伺服器 瀏覽:122
編譯器怎麼跳轉到下一行 瀏覽:450
嵌入式py編譯器 瀏覽:324
rplayer下載安卓哪個文件夾 瀏覽:298
安卓手機里的電子狗怎麼用 瀏覽:748
pythonspyder入門 瀏覽:764
趣質貓app是什麼 瀏覽:60
皮帶壓縮機經常吸不上 瀏覽:205
西部隨行版怎樣加密 瀏覽:996
釘釘上如何壓縮圖片 瀏覽:924
cad輸入命令不顯示窗口 瀏覽:618
小米視頻加密之後怎麼看 瀏覽:76
超級程序員劉芳閱讀 瀏覽:833
顧家九爺在哪個app 瀏覽:820