Ⅰ 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
而實際,編寫程序,也沒有你以上的那種做法,不可能只分配內存單元,而不做任何其它事情。我想,你這樣做,無非就是想做個實驗罷了。
Ⅱ KEIL C51 V8.02可以編譯匯編嗎 急!!
可以的,你自己試一試就知道了。
Ⅲ 在keil環境中遍了一段C51的程序後怎麼編譯
樓主如果經常寫c51的話,可以建一個自己的頭文件,每次包涵一個就可以了
比如建一個自己的,取名
my.h
裡面可以寫些
#include
#include
#define
uchar
unsigned
char
//這幾句是簡寫語句,很方便
#define
uint
unsigned
int
#define
ulong
unsigned
long
當然還可以寫些常用延時子程序在內,
只要在主程序中加句#include"my.h"就搞定
但不要再在主程序中重復定義了
這個就是最簡單的了
Ⅳ keil c51 能匯編嗎
可以啊,你就直接在創建初始的時候,將那個「xxx.c」改成 「xxx.asm」那就可以了,這樣的話你就可以直接寫匯編的程序了,只不過不能加上C語言的程序。
Ⅳ 關於c51單片機使用keil編譯器的一些問題
1.如果沒有被調用,就不會被編譯,自然不佔用空間。
2.只要結構體有元素被使用,就要佔據整個結構體的空間。
3.多出來的0.2是位變數,表示你用了兩個bit的變數。
Ⅵ 為什麼用keil寫的這個C51不能編譯
路徑內不要有中文的…
Ⅶ keil C51程序編譯的問題
如果你的H頭文件包含在每個.C文件中,那就是說你的每個.C文件都定義了sbuf[20],KEIL就會提示你說你的sbuff[20]重復定義。我理解的應該是這個問題吧?
解決辦法,要麼用條件編譯區分sbuff的作用域,就是在哪些.c文件中使用。
要麼在一個.c文件中定義sbuff,在H文件中用外部聲明包含進去,比如:
extern unsigned char data char sbuf[20];這樣在其他的.C文件中,sbuff是引用而不是定義了。
一般都是採用第二種方式,H文件只存放外部聲明。
Ⅷ 關於Keil C51編譯的問題
COMMON.C(1): warning C500: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))
好像是說注冊錯誤,要裝破解版;
MAIN.C(9): error C202: 'TRO': undefined identifier第九行錯誤,應是TR0, O與0應區分