c51編譯
『壹』 C51編譯問題
朋友 仔細看看你的程序,這一行:unsigned char j; 延時
在你的說明字元前 應該加什麼,呵呵 丟了這個 「//」。
『貳』 KEIL C51多文件編譯
首先主函數只能存在於一個文件中,這個文件可以直接取名mian.c這樣比較方便管理。然後按功能分其它文件,分別編寫XX.h和XX.c文件,在XX.h中寫入函數的聲明和全局變數的定義,在XX.c中寫函數的具體內容,並且在XX.c中要include「XX.h」,在mian.c中include所有的.h文件。這樣就可以正常編譯和燒寫了。最終生成的還是一個hex文件
『叄』 C51編譯不通過的問題
你這個是程序代碼里有問題呢
不是提示了嗎,在「*」前面缺少了「;」在文件74JIANCE.c里,好好檢查一下
『肆』 在keil環境中遍了一段C51的程序後怎麼編譯
1 新建一工程;在主菜單project下(.Uv2)
2 新建一文件;如C則存為.c文件,如匯編則存為.asm文件;
3 在左邊窗口中的Target1上右擊,在菜單中選add file to group,再選中你的剛建的
文件,即把它加入到你的工程中。
4 選中主菜單project-->build target(或F7)即可編譯你的程序;
5 選中主菜單debug的第一項,則切換到調試窗口;
6 選中主菜單debug->go(F5)即可運行程序了。
注意:view ->periodic window update 是刷新窗口,這樣結果可以看得更清。
還有不清楚的問我:MSN:[email protected]
公司上QQ不方便,呵呵.
『伍』 c51提供哪3種編譯模式
case 1(0x87): case 2(0x47): case 3(0x27): case 4(0x17): 這樣編譯是沒有問題 但是燒到板子上以後程序是否能達到需要的結果就不是很
『陸』 c51怎麼編譯lib
如何生成LIB庫文件
1.首先准備好生成LIB庫文件對應的.c和.h文件,在這里用到的.c和.h文件分別是:
"reg303.h"
"rjwf303_flash.h"
"rjwf303_flash.c"
"cos_security.h"
"cos_security.c"
2.新建一個項目,將上面的文件添加到項目中,並做以下設置:
選中Create Library
3.編譯之後就可以在項目目錄下生成對應的LIB文件。
『柒』 Keil C51編譯的問題!
你主程序里沒有別的程序代碼了?
單片機在編譯時,首先是進行編譯預處理(頭文件包括指令,宏定義處理,條件編譯,各種偽指令等),然後再進入優化編譯階段,再進行匯編過程,接著是程序鏈接。
你在主程序中定義,unsigned char a[2]={1,2};數組,並分配兩個存儲單元。雖然在語法上是沒有錯,程序也能正確被編譯。但程序在真正進行實質鏈接時,由於你並沒有真正進行功能性的程序指定,編譯時它會生成很多冗餘的匯編代碼,按照你定義的單元。上面生成的匯編,你如果仔細看,很多的條件跳轉語句都是轉到不同的內存單元。如:
DJNZ R7,C:001F //R7寄存器相減為0則轉到001F,否則順序執行。
DJNZ R7,C:004B
DJNZ R7,C:003F
INC DPTR
F2 MOVX @R0,A
INC R0
DJNZ R7,C:004B
而實際,編寫程序,也沒有你以上的那種做法,不可能只分配內存單元,而不做任何其它事情。我想,你這樣做,無非就是想做個實驗罷了。
『捌』 c51編譯錯誤
第一個錯誤:意思是定義的P發生了重復定義,你需要把「sbit P=P3^0; 」裡面的P改掉就行了
第二個錯誤:意思是「Ps_2」「Ps_3」「Ps_4」未定義,從你的代碼中可以看出是被注釋掉了
sbitPs_1=P2^0;/*--------------------------------------------------
sbitPs_2=P2^1;----------------設置這4個埠為按鍵檢測端---------
sbitPs_3=P2^2;--------------------------------------------------
sbitPs_4=P2^3;------------------------------------------------*/
修改成如下就行了:
sbitPs_1=P2^0;//設置這4個埠為按鍵檢測端
sbitPs_2=P2^1;
sbitPs_3=P2^2;
sbitPs_4=P2^3;
同理,你的"Ps_22""Ps_23""Ps_24"也被注釋掉了,只是這段程序中沒有用到,所以沒有提示錯誤。
註:C語言中 /* */注釋會把這兩個符號之間的所有字元串全部注釋掉,包括換行的內容!
『玖』 為什麼C51無法編譯
出現ATTEMPT TO DEFINE AN ALREADY DEFINED LABEL,表示以前已經定義過一個標號,要換一個標號
movc a,@a+dptr
movc a,@a+pc
對於這兩條指令,查了一下網上的兄弟的解釋:
movc a,@a+dptr
從DPTR開始偏移A個地址的數讀取到A中.
DPTR一般為數據段的首地址.
movc a,@a+pc
從PC指令地址開始偏移A個地址的數讀取到A中.
PC為當前指令地址.
這兩個指令都是從程序空間中讀取數據.
貌似我也不大聽懂,得去問問老師
還有對於PUSH A Keil老是編譯出現為什麼編譯說錯,
EXPRESSION TYPE DOSE NOT MATCH INSTRUCTION
網上的兄弟
1.說應該為PUSH ACC
2.是編譯選項不對,應選擇韋福匯編器
3.為什麼不是A,而是ACC?
因為:A表示的是內存地址,ACC表示的是寄存器
51中,可以將寄存器入棧,不可以將內存入棧。
4.在51指令中沒有PUSH A,只有PUSH ACC,同樣對累加器A進行位操作時,沒有A.0,只有ACC.0
A是ACC的縮寫,有些地方不能互換,原因我也不知道,書中是這么寫的,編譯軟體也是這么認的,否則就出錯。
『拾』 單片機c51有哪幾種編譯模式
下面僅對C51在變數定義中注意的問題以及與80C51存儲資源有關的問題作說明,其餘遵循C語言的規定。1.變數聲明在變數的聲明中,可以包括存儲類型和signed或unsigned等屬性。如:(1)chardatavar1;定義字元型變數var1,被分配在內部RAM低128B,編譯後,通過直接定址方式訪問。(2)charcodetext[]=「ENTERPARAMETER」;定義字元數組text[],將其分配到程序存儲區,並賦初始值「ENTERPARAMETER」。編譯後,通過MOVCA,@A+DPTR訪問。(3)unsignedlongxdataarray[100];定義無符號長整型數組array[100],將其分配到外RAM中,編譯後,通過MOVXA,@DPTR訪問。(4)floatidatax,y,z;定義浮點類型變數x,y,z,將其分配到內RAM中,編譯後,通過間接定址方式訪問。(5)unsignedintpdatadimension;定義無符號整型變數dimension,將其分配到外RAM中,編譯後,通過MOVXA,@Ri指令採用分頁的形式訪問。(6)unsignedcharxdatavector[10][4][4];定義無符號字元型數組vector[10][4][4],將其分配到外RAM中,編譯後,通過MOVXA,@DPTR訪問。(7)charbdataflags;定義字元型變數flags,將其分配到可位定址的內部數據存儲器中,可以以位元組方式訪問,也可以以位方式訪問。