導航:首頁 > 操作系統 > 51單片機編譯

51單片機編譯

發布時間:2025-02-15 19:45:32

❶ 51單片機編程問題

1:C51編譯器如何區分位地址和位元組地址
是靠預定義實現的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者聲明了P0埠地址位於0x80,後者說明了P0埠的bit0,即P0.0位於位地址空間0x80處。這2個0x80具有完全不同的含義,靠關鍵字sfr和sbit來區別。這樣當程序被編譯時,編譯器會依此編譯成相應的匯編語言。例如:

C51語句: P0 = 1;

P0聲明為sfr,因此編譯成:mov 80h,01h,將把0x01數據送入0x80單元,由於0x80單元物理上對應P0埠,因此,P0.0腳將輸出高電平(其實是呈現高阻態,P0口獨有的),其他.1-.7腳輸出低電平。

C51語句: P0_0 = 1;

P0_0聲明為sbit,因此編譯成:setb 80h,這將把位地址空間的0x80地址的bit的值置1。這個位正是P0口的bit0,執行後,P0.0將輸出高阻態。而P0.1-.7不會變化。

2:C51為什麼要嵌套匯編
51單片機一個顯著優點就是指令執行時間固定,因此可以適應時序要求嚴格的場合。例如符合ISO7816協議的cpu卡的讀寫,對時序要求比較嚴格。其實就是用io腳做出來的同步半雙工串口。支持cpu卡的程序一般比較龐大,需要用c51來組織,但是由於c編譯的不確定性,必須把底層程序封裝成匯編語言模塊嵌入到工程中。這就帶來幾個問題:如何聲明函數、參數如何傳遞等。限於篇幅,不能說得很細。下面舉例:

匯編程序單獨保存一個文件,加入到工程中,函數如下:

_proc_a:

mov a, r7

inc a

mov r7, a

ret

用c語言在.h文件中聲明: extern unsigned char proc_a(unsigned char val);

調用時形如: retvalue = proc_a(0x11);

說明:

a:匯編程序如果帶參數,則需要在匯編程序前多加一個下劃線。而聲明它的地方不用加(偉福編譯器這么要求的)。

b:函數的形參中第一參數用R7傳遞,函數返回值用R7返回,這是C51的通用規范。其他參數都有相應規定。函數可以返回一個位,用psw的c位返回。c:上面的語句,執行順序是把0x11給R7,然後跳轉子程序,子程序將它加1後送回。

d:函數跳轉到匯編程序時,本區的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考慮調用後是否要恢復這些常規資源。上例中,A的值被函數使用了,編程者不必恢復調用前的值。

❷ 51單片機出編譯出錯,錯在哪裡

用 ^ 定義位是不能用define的需要改成sbit

直接用define就相當於P3^(5=0);常量不能給常量賦值,所以就會報錯


#define LCM_RS P3^5
#define LCM_E P3^4

改成

sbit LCM_RS= P3^5;
sbit LCM_E = P3^4;

sbit LCM_RW = P3^1;

即可

❸ 51單片機能否用ICC AVR編譯軟體編程

ICC AVR只能用來編譯AVR單片機,51單片機通常是用KEIL來編譯。兩種單片機結構、指令都不一樣,所以編譯軟體也不能混用。

❹ 主流C51單片機編譯器比對

int short 的大小是因機器而異嘛(准確點應該是編譯器)。你都說了人家規定的是「最小」為16位,又不是只能是16位,也沒有說兩者應該相等(事實上是short不超過int就OK啦)。所以當然可以short類型為半個機器字長,而int類型則為一個機器字長的啦。

「C++標准規定了每個算術類型的最小存儲空間,但他並不自知編譯器使用更大的存儲空間 」

說簡單點就是C++規定了個最小的值,但是將你的代碼編譯成機器碼的編譯器則確定了你這個長度值為多少。因為C++是一種語言,一個規范,或者說只是一種規定,然後要將你按這種規范寫的代碼編譯成能在機器上運行的代碼的是編譯器。而在不同的機器上運行的程序的實際結構是不一樣的,比如單片機與PC相差就很大。要將按相同規范寫的程序在各種各樣亂七八糟的機器上運行,就需要相應的編譯器了。所以實際的大小是由你編譯代碼的編譯器確定的。

PS:當然當前一般的PC上int都是32位,short16位的。因為現在32位的機子是主流嘛。如果你不寫什麼單片機的程序可以不用太在意這個問題。但是寫單片機程序時就要注意了,因為一般一個單片機的編譯器可以編譯很多種型號晶元的代碼,而這些型號有可能從8位到32位都有……

❺ 51單片機能編譯多少行

取決於51單片機上的Flash存儲器大小。
一般不用多少行來描述,而是能編譯多少Kb程序。通常51單片機只有2~8Kb,因此程序容量不大。有些可以達到64Kb,可以做很大的程序和處理較大的數據量。
2Kb大約不超過200行,8Kb能到500行,64Kb基本無限制了。此後看軟體是否有限制,通常沒有注冊的只能編譯大約8Kb~32Kb的。

❻ 51單片機c語言是指哪些

單片機C語言編程是基於C語言進行單片機開發的一種方法。其中,C51編譯器是開發單片機C語言程序的主要工具,它能夠幫助開發者編寫高效、簡潔的程序代碼。

使用C51編譯器編寫的C語言程序具有多個優點。首先,由C51編譯器生成的目標代碼長度較短,運行速度較快,這對於資源有限的單片機系統尤為重要。其次,C51編譯器支持C語言的ANSI標准,使得開發者能夠利用熟悉的C語言特性進行編程。此外,C51編譯器生成的代碼遵循Intel目標文件格式,這使得C51程序能夠與A51匯編語言或PL/M51語言編寫的程序兼容,從而方便了代碼的混合使用。

總的來說,C51編譯器為單片機開發提供了一種強大的編程工具。它不僅能夠生成高效、緊湊的代碼,還支持標准C語言特性,同時具備良好的兼容性,使得開發者能夠更加靈活地進行單片機應用開發。

❼ 51單片機如何編譯成程序

1、首先在電腦上用proteus軟體打開目標文件。然後用滑鼠左鍵雙擊51單片機圖標,如圖所示。然後在出現的窗口中,點擊下圖中的文件夾圖標。然後在電腦文件夾中找到編譯好的HEX文件導入。

2、keil里編譯時,設置輸出文件為.HEX文件格式。然後在proteus中打開CPU屬性,在程序設定欄填入HEX文件路徑及名稱(也可以通過後面的瀏覽按鈕找到該文件,選中即可)。然後運行即可。

3、proteus里,雙擊單片機,跳出一對話框,點擊programFile邊上的文件夾按鈕,找到你的那個HEX文件,就可以載入。

4、先在keil中把程序編好,在PROTEUS中雙擊單片機,之後出現這個頁面在對話框中找到你keil編寫的程序的文件即可。

5、,用keil生成.hex文件,在isis中右擊at89c51,再左擊,出現相應元件的屬性對話框「ProgramFile」一項中選擇要加入的.hex文件。

6、工具/原料windowsXPPROTEUS生成的HEX文件方法/步驟PROTEUS安裝好後,默認不會在桌面上產生快捷方式。

閱讀全文

與51單片機編譯相關的資料

熱點內容
什麼app看nba直播 瀏覽:402
ic卡無加密和有加密的區別 瀏覽:667
51子系列單片機機型 瀏覽:168
java創建文件代碼 瀏覽:660
天下pdf 瀏覽:327
產後緩解壓力的瑜伽 瀏覽:241
單片機音樂盒按鍵系統 瀏覽:108
魅族最強程序員 瀏覽:993
java賦值null 瀏覽:54
數控程序員考試 瀏覽:260
單片機0x 瀏覽:451
dhsp伺服器是什麼 瀏覽:690
網路監測命令 瀏覽:206
redis隊列java 瀏覽:221
php商城項目思路 瀏覽:461
反編譯程序集能修改嗎 瀏覽:1002
小盒課堂app哪個好用 瀏覽:535
pdf剪裁工具 瀏覽:43
多人協同伺服器地址 瀏覽:665
wifi恢復出廠設置怎麼加密 瀏覽:337