① C語言中,關鍵字data是什麼意思
這是單片機C語言中特有的關鍵字,表示數據存儲區,標准C語言中是沒有的,如
int data x ;
表示將 x 定義在數據存儲區。
單片機的C語言採用C51編譯器。由C51產生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言PL/M51語言目標代碼混合使用。
(1)51單片機data擴展閱讀:
單片機的C語言:
單片機軟體設計使用C語言作為編程開發軟體,採用模塊化的程序結構,設計了按鍵模塊程序、RFID模塊程序、日歷時鍾模塊程序、GPRS模塊程序、顯示存儲模塊程序等,並編寫系統主程序,將五個程序模塊組合在一起,實現單片機控制系統的整體功能。
51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數據類型及運算符豐富,並具有良好的程序結構,適用於各種應用的程序設計,是使用較廣的單片機編程語言。
單片機的C語言採用C51編譯器(簡稱C51)。有C51產生的目標代碼短,運行速度高,所需存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言或PL/M51語言目標代碼混合使用。
② 51單片機燒錄串口打開時瞬間跳轉
@ 無條件轉移指令(共4條)
LJMP addr16 ; PC〈—— addr16
AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11
SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+rel
JMP @A+DPTR ; PC〈—— A+DPTR
第一條指令稱為長轉移指令(Long Jump);
第二條指令叫作絕對轉移指令(Absolute Jump);
第三條指令稱作短轉移指令(Short Jump);
第四條指令是變址定址轉移指令(散轉指令)。
顯然,每條指令均以改變程序計數器PC(Program Counter)中的內容為宗旨。
#(1)長轉移指令(64KB范圍內轉移指令)
長轉移指令的功能是:把指令碼中的目標地址addr16裝入程序計數器PC,使機器執行下一條指令時無條件轉移到addr16處執行程序,不影響任何標志。由於addr16是一個16位二進制地址(地址范圍為0000H—FFFFH),因此長轉移指令一條可以在64KB范圍內轉移的指令。為了使程序設計方便易編,addr16常採用標號地址(如:LOOP、LOOP1、MAIN、START、DONE、NEXT1……)表示,只有在上機執行前才被匯編(或代真)為16位二進制地址。
長轉移指令為三位元組,雙周期指令。
#(2)絕對轉移指令(2KB范圍內的轉移指令)
絕對轉移指令是一條雙位元組雙周期指令,11位地址addr11(a10—a0)在指令中的分布是:
a10 a9 a8 0 0 0 1|a7 a6 a5 a4 a3 a2 a1 a0,其中,00001B是操作碼。在程序設計中,11位地址也可以用符號表示,但在上機執行前必須按照上述指令格式加以代真。
絕對轉移指令執行時分為兩步:
第一步是取指令操作,程序計數器PC中內容被加1兩次;
第二步是把PC加2後的高5為地址PC15—PC11和指令代碼中低11位構成目標轉移地址:PC15—PC11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0
其中,a10—a0的地址范圍是全「0」——全「1」。因此,絕對轉移指令可以在2KB范圍內向前或向後跳轉。
如果把單片機64KB定址區分成32頁(每頁2KB),則PC15—PC11(00000B—11111B)稱為頁面地址(即:0頁—31頁),a10—a0稱為頁內地址,但應注意:AJMP指令的目標轉移地址不是和AJMP指令地址在同一個2KB區域,而是應和AJMP指令取出後的PC地址(即:PC+2)在同一個2KB區域。例如:若AJMP指令地址為2FFEH,則PC+2=3000H,故目標轉移地址必在3000H—37FFH這2KB區域中。
#(3)短轉移指令(-126—+129范圍內的轉移指令)
短轉移指令的功能是先使程序計數器PC加1兩次(即:取出指令碼),然後把加2後的地址和rel相加作為目標轉移地址。因此,短轉移指令是一條相對轉移指令,是一條雙位元組雙周期指令,指令碼格式為:80H rel(操作碼 地址偏移量),這里,80H是SJMP指令的操作碼;rel是地址偏移量,在程序中也常採用符號地址,上機運行前才被代真成二進制形式。
遇到具體問題時,頭腦中一定要清楚一個關系式:目標轉移地址=源地址+2+rel
#(4)變址定址轉移指令(只能在256個存儲器單元內轉移)
這是一條單位元組雙周期無條件轉移指令。
在指令執行之前,用戶應預先把目標轉移地址的基地址送入DPTR,目標轉移地址對基地址的偏移量放在累加器A中。在指令執行時,MCS-51單片機把DPTR中基地址和累加器A中地址偏移量相加,以形成目標轉移地址送入程序計數器PC中。
通常,DPTR中基地址是一個確定的值,常常是一張轉移指令表的起始地址,累加器A中之值為表的偏移量地址,機器通過變址定址轉移指令便可實現程序的分支轉移
原文鏈接:https://..com/question/391202121358751485.html
打開CSDN,閱讀體驗更佳
51單片機匯編語言指令匯總_C.L.R的博客_51匯編
一、數據傳送類指令 1.以累加器為目的操作數指令 MOV A,Rn MOV A,@Ri MOV A,direct MOV A,#data 2.以Rn為目的操作數的指令 MOV Rn,A MOV Rn,direct MOV Rn,#data 3.以直接地址為目的操作數指令 MOV direct,A MOV direc...
51單片機匯編入門基礎代碼-流水燈_TC肖的博客
2、跳轉指令 1.短轉移類指令AJMP addr11 2.長轉移類指令LJMP addr16 3.相對轉移指令SJMP rel 它們都用於指令跳轉,從當前位置跳轉到後面的地址位(一般為自己擬了名字的地址如DELAY:)。(它們的差別在於跳轉的范圍:LJMP一下能跳64Kb。...
單片機跳轉指令學習
基於pic16f87x單片機的跳轉指令學習
51單片機的匯編語言
51單片機的匯編語言操作指令總結 1.指令格式 【標號:】操作碼 目的操作數 ,源操作數;注釋 如:LOOP:MOV A, 33H;將33H輸入到累加器A中 2.ORG xxxxH命令 是指向程序不同功能固定入口,如: 0000H----系統復位入口 0013H—外中斷1入口 0003H—外部中斷0入口 001BH—T1溢出中斷入口 000BH—T0溢出中斷入口 0023H串口中斷入口 3.控制轉移類指令 (1)無條件轉移指令—執行到該指令時無條件跳轉 LJMP長轉移指令:三位元組指令提供16位目
繼續訪問
51單片機指令詳解_凌煙慕魚的博客
51單片機指令詳解 數據傳遞類指令 1 以累加器為目的操作數的指令 MOV A,Rn MOV A,direct MOV A,@Ri MOV A,#data 第一條指令中,Rn代表的是R0-R7。第二條指令中,direct就是指的直接地址,而第三條指令中,就是我們剛才講過的...
第3 章 MCS-51 單片機指令系統_楊丙寅的博客
定址方式——計算機指令中說明操作數所在地址的方法。MCS-51 單片機的指令系統有 7 種定址方式,分別為立即定址、直接定址、寄存器定址、 寄存器間接定址、基址加變址定址、相對定址和位定址。
編程 ul 不能一行顯示 跳到下行_數控編程代碼及其使用方法—「UG編程」
G代碼代碼名稱-功能簡述G00------快速定位G01------直線插補G02------順時針方向圓弧插補G03------逆時針方向圓弧插補G04------定時暫停G05------通過中間點圓弧插補G07------Z 樣條曲線插補G08------進給加速G09------進給減速G20------子程序調用G22------半徑尺寸編程方式G220-----系統操作界面上使用G2...
繼續訪問
最新發布 51的指令系統
51單片機共有111條指令。可以大致分為以下五類: (1)數據傳送類(29條) (2)算術操作類(24條) (3)邏輯運算類(25條) (4)控制轉移類(17條) (5)位操作類(17條) 可用的指令是固定的、每種指令對應一個物理電路的實際運行過程,如果指令是指令集中不存在的,電路內部無法實現,指令就會出錯。 數據傳送類指令 一般形式為 MOV <目的操作數> , <源操作數> 操作碼包括MOV、MOVC、MOVX、PUSH、POP、XCH、XCHD、SWAP。 (1)首先是MOV
繼續訪問
51單片機原理及匯編教程(二)之匯編常用指令數,數據傳輸指令及定址方式...
1、MOV指令 ① MOV R0 , #20H #後面是立即數,要和地址區分開,20H是一個16進制的數。這句話的意思是將20H這個數送入寄存器R0中。直接定址 ② MOV 30H , @R0 R0裡面放的數,以這個數位地址,將這個地址裡面的數...
51單片機學習__X2的博客
51單片機指令集 *51指令不區分大小寫 1個機器周期=12個時鍾振盪周期 只有乘除兩條指令的執行時間為4個機器周期 指令由兩部分組成:操作碼+操作數 指令系統的定址方式 共7種定址方式 寄存器定址方式 ...
條件跳轉指令總結
指令 全稱 cmp a,b flag條件 jz/je jump if zero/equal a=b ZF=1 jnz/jne jump if not zero/equal a!=b ZF=0 jb/jnae/jc jump if below/not above or equal/carry a<b,無符號數 CF=1 ja/jnbe jump if above/not below or equal a>b,無符號數 jna/jbe jump if not ab...
繼續訪問
條件跳轉指令
條件跳轉指令 指令 條件 指令 條件 ja CF=0 AND ZF=0 jnc CF=0 jab CF=0 jne ZF=0 jb CF=1 jng ZF=1 OR SF!=OF jbe CF=1 OR ZF=1 jnge SF=OS jc CF=1 jnl SF=OF jcxz CX=0 jn
繼續訪問
單片機c語言有沒有跳轉指令,51單片機跳轉指令
@ 無條件轉移指令(共4條)LJMP addr16 ; PC〈—— addr16AJMP addr11 ; PC〈—— PC+2 , PC10-0〈—— addr11SJMP rel ; PC〈—— PC+2 , PC 〈—— PC+relJMP @A+DPTR ; PC〈—— A+DPTR第一條指令稱為長轉移指令(Long Jump);第二條指令叫作絕對轉移指令(Absolute...
繼續訪問
51單片機匯編指令
注: Rn與Ri中n=0 ~ 7,i=0 ~ 1 內部數據傳送指令 助記符 作用 定址方式 機器周期 位元組數 MOV A,Rn 將Rn的內容傳送給A 寄存器 1 1 MOV A,direct direct是一個地址單元,將該地址的內容傳送給A 直接 1 2 MOV A @Ri Ri中存儲了一個地址,將該地址的內容傳送給A 寄存器間接 1 1 MOV A #data 將data傳送到A 立即數 1 2 ...
繼續訪問
匯編指令長度計算
指令長度與定址方式有關系,規律或原則如下: 一、沒有操作數的指令,指令長度為1位元組。如 es: ds: cbw xlat 等。 二、操作數只涉及寄存器的指令,指令長度為2位元組。如 mov al,[si] mov ax,[bx+si] mov ds,ax 等。 三、操作數涉及內存地址的指令,指令長度為3位元組。如 mov al,[bx+1] mov ax,[bx+si+3] lea di,[1234] mov [2345],ax 等。 四、操作數涉及立即數的指令,指令長度為:寄存器類型+2。 8位寄存器,寄存器
繼續訪問
C51單片機匯編程序問題解決:
C51匯編程序出錯解決最近開始學習了一點匯編語言,剛好應課程要求,就來編一些簡單的C51程序,結果在定時器中斷跳轉的時候出錯了,錯誤截圖如下:demo.asm(8): error A51: TARGET OUT OF RANGE源程序代碼塊是報錯在CJNE指令這里ORG 000BH INC R1 CJNE R1,#4000,MAINLOOP
繼續訪問
單片機iap跳轉(超詳細教程,簡單好學,看了秒懂)
iap跳轉的作用:使用boot作為app升級,通常使用串口ymodem協議進行更新app,boot一般是佔用很小的flash 大約可以設置16kb,然後設置app的地址,設置相對的偏移地址後跳轉到app ymodem協議:https://mp.csdn.net/mp_blog/creation/editor/122768524 幾個注意的點: 1.關閉中斷之後,進入app要開啟中斷 2.看門狗被開啟之後,將永遠不會被關閉,所以要做好喂狗的處理 3.一般存在設置向量表的函數,跳轉之後要設置相關的向
繼續訪問
51單片機c語言訪問外部rom,51單片機資源擴展:從片內ROM跳轉到片外ROM
源於一年前想自己動手給51寫個OS,編譯選Large模式,調試時整個流程都跑的好好的,可是燒寫到片上後得不到預期的效果,後來查書才知道51單片機片上只有4KRom,如果沒有擴展片外Rom,當訪問4K以外的程序空間,程序指針又會回到最開始執行。參考手冊擴展片外Rom後,能訪問達64K的程序空間。網上能搜索到的擴展方式都是將EA引腳接地,讓MCU上電後從外部ROM開始執行。但查看晶元手冊,明明說EA為...
繼續訪問
c語言的程序跳轉,單片機中用c語言如何編寫跳轉程序
這個要用到軟體的pwm,因為51的沒有硬體的pwm所以只好自己寫軟體的了。首先,要做一個軟體三角波發生器子程序,頻率自己定,就是變亮變暗的周期。此函數的返回值作為pwm的輸入值。再做一個pwm的模擬程序,占空比(0-100)是三角波發生器的輸出,pwm模擬程序控制某個埠輸出1和0的占空比來控制燈 的明暗。pwm的思路是:檢查設置值是否不等於0,是則埠置1,程序開始加1計數,計數後檢查計數值是否...
繼續訪問
C51 main 函數學習以及函數跳轉
1.C51main函數深入學習,有如下代碼: #include "reg52.h" /************* 本地變數聲明 **************/ typedef void (*pFunction)(void); pFunction Jump_To_Application; unsigned int JumpAddress; unsigned int a=0; char i; v
繼續訪問
熱門推薦 51單片機之控制轉移指令SJMP、LJMP等
文章目錄前言一、無條件轉移指令LJMP addr16AJMP addr11SJMP relJMP @A + DPTR關於SJMP、AJMP、LJMP的選擇二、條件轉移指令JZ rel 前言 控制指令是將程序跳轉到某個指定的地址,在順序執行 控制指令是通過修改PC的內容來實現跳轉的功能 PC的內容是將要執行的下一跳指令的地址 一、無條件轉移指令 LJMP英文全稱:Absolute Jump AJ...
繼續訪問
8051單片機原理學習
8051單片機原理學習單片機結構框圖參考 單片機結構框圖 51單片機的結構框圖如下所示 51單片機主要組成部件有: 8bit微處理器(CPU): 主要進行算術運行和邏輯控制 片內4KB程序存儲器(4KB ROM): 用以可執行程序,只讀數據和表格 片內256B數據存儲器(256B RAM): 用於存放可讀寫數據,如算術運行的中間值和最終值等 4個8位並行I/O口(輸入/輸出口) P0 ~ P3: 每個並口可以用作輸入,也可以用作輸出 2個定時/計數器:每個定時/計數器可以設置為計數方式,也可以設置為定時
繼續訪問
c51語言主函數,C51 main 函數學習以及函數跳轉
C51main函數深入學習,有如下代碼:#include "reg52.h"/*************本地變數聲明**************/typedefvoid (*pFunction)(void);pFunctionJump_To_Application;unsigned int JumpAddress;unsigned int a=0;char i;void test(){while(...
繼續訪問
學 Win32 匯編[28] - 跳轉指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
跳轉指令分三類: 一、無條件跳轉: JMP; 二、根據 CX、ECX 寄存器的值跳轉: JCXZ(CX 為 0 則跳轉)、JECXZ(ECX 為 0 則跳轉); 三、根據 EFLAGS 寄存器的標志位跳轉, 這個太多了. 根據標志位跳轉的指令: JE ;等於則跳轉 JNE ;不等於則跳轉 JZ ;為 0 則跳轉 JNZ ;不為 0 則跳轉 JS...
繼續訪問
匯編語言轉換c51語言,51單片機匯編語言:控制轉移指令有哪些?
跳轉指令短跳指令 AJMP addr11PC←addr11,跳轉范圍2k長跳指令 LJMP addr16PC←addr16,跳轉范圍64k間接跳轉指令 JMP @A+DPTRPC←(A)+(DPTR)相對轉移指令 SJMP rel條件轉移指令JZ rel ;(A)=0,轉移JNZ rel ;(A)≠0,轉移JC rel ;
③ 51單片機Tx_Data是什麼
這是函數帶有的形參(形式參數),用一個變數Tx_Data表示,在調用這個函數時,調用語句是,Send(23);這是假設的一個數,就是調時要帶一個具體的數,叫實參(實際參數),那麼這么實參就傳送給形參Tx_Data了,Tx_Data=23,在執行子函數時,就有SBUF=23;
④ 51單片機定義變數時默認是存儲到哪裡的
未顯式聲明的情況下,變數會根據Memory Model的設置,默認分配在指定的存儲區。
Small模式:默認分配在data區
Compact模式:默認分配在pdata區
Large模式:默認分配在xdata區
新建工程默認都是Small模式,所以未顯式聲明存儲區域的變數都會分配在data區的。所以才會容易出現data區擠爆、編譯器跳著腳讓你把變數分到idata區去……
⑤ 51單片機中的data和xdata總共容量是 多少
不能確定,不同牌子及不同型號的單片機,其帶的ram和擴展內存都各不相同,依實際情況而定
一般的,data都有128位元組 晶元內置ram至少128位元組 至多也只256位元組,具體多少可查相關的手冊,data固定指最開頭的128位元組,內置的256位元組內存又稱為idata(包含data),高於128位元組的ram不一定存在
擴展內存為xdata,部分型號的晶元內置有少量的擴展內存,如內置512節字xdata 或1K byte xdata比較常見,如果接外置的擴展內存,則xdata最大可以到640K,實際有多少你得查手冊
⑥ 51單片機在申請變數時總是有data,idata,xdata等限定詞,可以不用嗎有什麼好處嗎為什麼別的單片機沒有
data: 固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idata: 固定指前面0x00-0xff的256個RAM,其中前128和dATa的128完全相同,只是因為訪問的方式不同。idata:是用類似C中的指針方式 訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:c中idATa做指針式的訪問效果很好)
xdata: 外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdata: 外部擴展RAM的低256個位元組,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG, 建議少用。
⑦ 51單片機的數據類型怎麼用
按存儲類型分的話,51單片機有data,idata,xdata,pdata四種數據類型。
dATa:
固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idATa:
固定指前面0x00-0xff的256個RAM,其中前128和dATa的128完全相同,只是因為訪問的方式不同。idATa是用類似C中的指針方式
訪問的。匯編中的語句為:mox
ACC,@Rx.(不重要的補充:c中idATa做指針式的訪問效果很好)
xdATa:
外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdATa:
外部擴展RAM的低256個位元組,地址出現在A0-A7的上時讀寫,用movx
ACC,@Rx讀寫。
⑧ 51單片機DATA什麼意思
一種單片機的數據類型,在直接定址片內數據存貯區,訪問速度快。還有位定址區(bdata)、間接定址區(idata)、代碼存貯區(code)、外部存儲區(xdata)
⑨ 51單片機的data idata怎麼使用
默認的數據存儲類型為data,存儲在內部低128Byte地址空間里,如果該空間不夠用,就要把某些變數或者數組定義為idata,利用其高內部128位元組空間(52單片機有),如果仍不夠用,就要用外擴存儲器,這時要用Xdata來修飾。
⑩ C51中的data和idata有什麼區別,謝謝了
1、作用機理不一樣:
data:直接定址的片內RAM區低128B(00H~7FH)。
idata::單片機間接訪問的片內RAM區,允許訪問全部片內RAM。
2、使用的方向不一樣:
data:計算機中程序、文稿、數字、圖像、聲音等信息。
idata:idata是51系列單片機能識別的存儲器類型之一,固定指前面0x00-0xff的256個位元組的片內RAM,其中前128位元組和data的128位元組完全相同,只是因為訪問的方式不同。
(10)51單片機data擴展閱讀:
C51中的data和idata的應用方向:
data:直接定址的片內RAM區低128B(00H~7FH)。
bdata:片內RAM的可位定址區(20H~2FH),允許位元組和位混合訪問。
idata:單片機間接訪問的片內RAM區,允許訪問全部片內RAM。
pdata:Ri間接訪問的片外RAM的低256B(00H~FFH)。
xdata:用DPTR間接訪問的片外RAM,允許訪問全部64KB片外RAM(0000H~FFFFH)。
code:單片機的64KB程序存儲區ROM。
data:所謂數據就是描述事物的符號。在我們的日常生活中,數據無所不在。數字、文字、圖表、圖象、聲音等都是數據。人們通過數據來認識世界,交流信息。dos命令:
計算機用語:在51單片機中,DATA表示data area,數據區。DATA並不是修改日期命令