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

單片機如何編譯

發布時間:2022-05-10 02:51:29

① 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的值被函數使用了,編程者不必恢復調用前的值。

② 單片機是怎樣編程的

在電腦上敲進去代碼,一般用C語言或者匯編,然後讓編譯器編譯,然後現在驗證。

③ 利用單片機,如何才能正確的編寫出一段程序,編寫的步驟是什麼

51之類的入門級單片機搭建的小程序可以用Keil來編比較方便,C語言記得導入頭文件reg51.h或者reg52.h,然後後面用類似普通的C語言語法,注意這里的Keil C51和普通的C不同,比如sbit之類的,因為是交叉編譯,所以要注意各個介面,深入學習一定需要看書的。KeilC步驟:1、下載Keil42、project選擇晶元類型3、導入頭文件4、編程

④ 往51單片機里寫程序,用C語言寫,寫好後用什麼軟體編譯並且寫進去

用keil軟體寫程序,編輯、編譯、運行。程序沒有問題後,用STC_ISP_V479下載程序

⑤ 單片機程序是用哪種語言編譯的

你要看是哪種呀,我們一般的支持C和匯編,一般我們常見是都是這種。有少數的幾個支持C++。
你想知道多一點的話,找幾個論壇看看。
目前用於單片機開發的語言有:C,匯編,Basic,其他很少。
作為低級語言,匯編毫無疑問是最適合開發硬體的語言,因為利用生產單片機的廠家提供的指令系統和開發工具能開發出性能最佳的產品。
但是用匯編語言有個前提,你必須是非常熟悉指令系統,但目前來看達到這個程度的人少之又少,所以,一般人都直接採用高級語言開發單片機,這樣可以降低開發難度,減少軟體失誤造成的損失。
C語言移植性非常好,基本上所有單片機都有C語言介面,而一般人只要有C語言基礎就能很快上手,開發效率明顯高於用匯編語言。所以,如果你是初學者,建議你打好C語言基礎。
C++是C的超集,在一定環境下可以代替C語言。由於採用面向對象的設計方法,程序員可以集中精力於單片機的性能而不是單片機的指令流程。這里不是說C語言不如C++,而是說這兩種語言不是對立的關系,而是遞進的關系。你如果有過開發單片機系統的經驗的話,會有很深的感觸的。據我所知,AVR單片機的開發環境WINAVR支持C++語言。其他好像有Basic開發的,不過我沒用過,不太了解。

⑥ 單片機:怎麼從asm文件編譯出hex文件,用keil

用KEIL建立工程,設置工程
選項卡
的options
fot
target
再點OUTPUT選項卡,把Creat
hex前打勾,然後將你的ASM文件添加到工程中進行編譯構造目標,在ASM的文件夾里就會產生你要的
HEX文件

linux下怎麼編譯單片機c代碼,怎麼下載到51單片機上呢

1.編譯軟體用sdcc
2.sdcc不支持keil51c 的一些語法。要做以下修改:
sbitled1=P1^0; 改為 #define led1 P1_0
中斷函數interrupt改為__interrupt
單個位 P1^0 改為P1_0
若vim安裝插件YCM的話,要在.ycm_extra_conf.py加入以下兩個路徑
/usr/share/sdcc/include
/usr/share/sdcc/include/mcs51
沒創建一個工程都要拷貝一份.ycm_extra_conf.py到該工程的目錄下。

3.編譯用命令
` sdcc 目標文件
4.燒錄軟體用stcflash.py,該軟體只能支持stc89c52rc,不支持stc89c52。我自己親自試過。
sudo python ./stcflash.py 目標文件

閱讀全文

與單片機如何編譯相關的資料

熱點內容
java線程啟動線程的方法 瀏覽:252
兩位數互補演算法 瀏覽:781
甲骨文雲伺服器登錄 瀏覽:776
程序員那麼可愛在哪裡可以免費觀看 瀏覽:566
台灣伺服器地址大全 瀏覽:192
安卓自動美顏怎麼關 瀏覽:960
java手動釋放內存 瀏覽:868
迷你世界怎麼自己創伺服器 瀏覽:811
cmd命令不能運行 瀏覽:298
最新pdf閱讀 瀏覽:756
c語言中的排序演算法 瀏覽:597
php原生鏈接資料庫 瀏覽:45
web前端後端程序員 瀏覽:25
萬能zip的壓縮包怎麼解壓 瀏覽:41
國內動漫用什麼app看 瀏覽:354
樹莓派高級編程 瀏覽:929
30歲學編程晚嗎 瀏覽:69
解壓專家怎麼打開 瀏覽:87
php開源留言板 瀏覽:50
新鄉市區疫情怎麼查詢app 瀏覽:159