單片機多項子程序編譯
① 關於C語言編譯C51單片機程序的一點疑問
問題1)你所謂的同時工作是指led亮的同時數碼管也在顯示,是這樣的嗎?單片機跑的程序都是單線程的,所以函數可能會受到中斷的影響
問題2)理論上,位選和段選是不要求順序的,如果交換順序會出現不一樣的效果,說明你的程序寫的有問題,根據你說的現象,我認為你段選和位選沒設置好
② 寫單片機程序,變數太多了,無法編譯,但是使用的單片機,RAM是很大的,怎麼辦
加入ABSACC.H頭文件,使用XBYTE關鍵字將部分變數定義到1024位元組的XRAM中。
這樣你就有1024位元組的RAM空間使用了。
③ 單片機:在keil里從新建工程——書寫程序——編譯——生成HEX文件,步驟是這樣的越詳細越好!拜託了各位大
第1步:打開Keil uVision2/3
第2步:新建工程
project->new project
將彈出 creat new project框,寫入工程名稱,例如 test。為了便於集中管理建議新建一個文件夾(上面第二個圖標)。
點擊確定後 彈出一個晶元選擇項,你可以選一個。例如選atmel AT89C51。很多單片機,上面可能沒有列舉,我們任意選一個即可,51單片機選AT89C51代表即可。
然後 彈出一個框,選擇「否」
第3步:新建文件。
file--new
將彈出一個文本框,你可以寫入程序。例如
#include <reg51.h>
main()
{
P1=0XAA;
}
然後保存這個文件
file--save
彈出框save as 填寫你要保存的文件名。例如main.c。注意一定要帶上後綴.c。切記
第4步:載入程序。把我們編寫的c文件載入進入
看到左邊 source group1,點擊右鍵,選擇倒數第四項 「add files....」進入add框,選擇你剛才保存的main.c文件,然後add
看到 左邊source group1下面是不是載入上main.c了
第5步:編譯。
編譯前要進行一個重要的操作。生成HEX文件。
右邊 target 1 右鍵彈出框,找到output,再找到creat hex fi:前面復選框選中 OK
開始編譯了,
project--build target或者按F7或者看到上面圖標(一個圖標有兩個方向向下的箭頭)
編譯的時候,你會發現最先面編譯結果,0 Errors
恭喜你,你已經成功編譯了程序。
打開你先前建立的test文件夾,你會發現有個test.hex文件
記住步驟,慢慢就很熟練了,用快捷方式或圖標更方便
祝好
④ 單片機C51程序如何分成好幾個.c和.h文件
.c文件是整個程序中的一個或幾個函數組成,在別的.C文件里可以調用它,不只是在主函數中。這樣做可以增強程序的模塊化,提高程序的可讀性。當編制好一個模塊時你可以保存在一個工程下,文件名改為**.C。這樣在另一個.C文件中的文件頭處只要你對它進行說明就可以調用它。比如#include
string.c
那麼你就可以在你說明了的.C文件中調用它,這樣一個模塊可以在很多處調用,使得編程復雜度降低。程序編譯時把你所說明的文件復制到你調用處程序就可以運行了。
.H文件是對單片機一些埠及一些常用的程序的庫說明,
比如我們在程序中用到埠一即P1,我們能夠用它是因為在庫中已對它進行了說明,對P1賦予了一個埠地址,這樣程序編譯是才不會出錯,不然會提示你UNDIFINED
.C文件一般是自己創建的。而.H文件是系統自帶,不過自己也可以創建.H文件,主要對用到的一些標號進行說明,其中也可以包括一些常用的函數
用戶自己創建的.C文件是放在工程目錄下,.H文件一般放在編譯器的某個目錄下,程序編譯的時候從默認目錄中搜索,如果找到則復制到程序開頭處。
⑤ 單片機程序是用哪種語言編譯的
你要看是哪種呀,我們一般的支持C和匯編,一般我們常見是都是這種。有少數的幾個支持C++。
你想知道多一點的話,找幾個論壇看看。
目前用於單片機開發的語言有:C,匯編,Basic,其他很少。
作為低級語言,匯編毫無疑問是最適合開發硬體的語言,因為利用生產單片機的廠家提供的指令系統和開發工具能開發出性能最佳的產品。
但是用匯編語言有個前提,你必須是非常熟悉指令系統,但目前來看達到這個程度的人少之又少,所以,一般人都直接採用高級語言開發單片機,這樣可以降低開發難度,減少軟體失誤造成的損失。
C語言移植性非常好,基本上所有單片機都有C語言介面,而一般人只要有C語言基礎就能很快上手,開發效率明顯高於用匯編語言。所以,如果你是初學者,建議你打好C語言基礎。
C++是C的超集,在一定環境下可以代替C語言。由於採用面向對象的設計方法,程序員可以集中精力於單片機的性能而不是單片機的指令流程。這里不是說C語言不如C++,而是說這兩種語言不是對立的關系,而是遞進的關系。你如果有過開發單片機系統的經驗的話,會有很深的感觸的。據我所知,AVR單片機的開發環境WINAVR支持C++語言。其他好像有Basic開發的,不過我沒用過,不太了解。
⑥ 51單片機程序錯誤,無法編譯怎麼搞好STC15F
#include <intrins.h>
添加這個頭文件就可以了。因為你用到了
_nop_();
_nop_();這個叫內嵌匯編
⑦ 單片機程序,程序沒問題,編譯不出來怎麼回事
單片機的內存地址0003H是中斷子程序入口,你從000H開始編輯程序,然後接了個SJMP跳轉到START,但是你的START程序沒有另起地址,假設SJMP是兩個位元組指令的話,那麼你的START程序段的地址就是0003H,把中斷子程序入口堵住了,所以你的程序就產生了警告。