❶ 是用c語言和匯編混合編的程序,在keil里編譯時出現C51 FATAL-ERROR -
程序問題。
LL SEGMENT CODE; // 在程序存儲區中定義段
PUBLIC LED; //聲明函數
FLAG DATA 20H
DPFLAG DATA 22H
RSEG LL; //函數可被連接器放置在任何地方
LED:
NOP
DISP: MOV P1,#0FFH ;顯示函數
MOV P2,#0
MOV DPTR,#TAB
MOV A,DPFLAG
CJNE A,#1,DISP0 ;判斷是否有選擇按鍵
SJMP N1
DISP0:MOV P1,#0F8H
MOV A,R2
MOVC A,@A+DPTR
MOV P2,A
NOP ;弄兩個空指令緩沖下數碼管
NOP
MOV P2,#0
N1: MOV A,DPFLAG
CJNE A,#2,DISP1
SJMP N2
DISP1: MOV P1,#0F9H
MOV A,R3
MOVC A,@A+DPTR
MOV P2,A
NOP
NOP
MOV P2,#0
N2: MOV A,DPFLAG
CJNE A,#3,DISP2
SJMP NEND
DISP2: MOV P1,#0FAH
MOV A,R4
MOVC A,@A+DPTR
MOV P2,A
NOP
NOP
MOV P2,#0
NEND: RET
NOP
RET
TAB: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,40h,0
END
上面是匯編文件,。
#include<reg52.h>
extern void led();
void main()
{
P2=0XFF;
led();
while(1)
{
led();
}
}
這里是C文件。
你試試,我這個工程師可以的
❷ 用keil編譯時出現的問題
*** WARNING L15: MULTIPLE CALL TO SEGMENT
SEGMENT: ?PR?_WRITE_COM?時鍾
CALLER1: ?PR?TIMER0?時鍾
CALLER2: ?C_C51STARTUP
這是說你在『時鍾』這個文本文件中多次調用了『WRITE_COM』這個子程序,而調它的就是『TIMER0』『C_C51STARTUP』。
下面的幾句同樣是這個原因分別調用了WRITE_DATE,WRITE_SFM,WRITE_NYR,也可能是你不正確的調用了它,你注意一下就行了,你沒發數據,我也只能說到這里。
*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
MODULE: D:\KEIL\C51\LIB\C51S.LIB (-----)
LIMIT: 0800H BYTES
Target not created
這個就是一樓說的你的軟體沒有被完全破解,最好到網上去找個注冊碼,用那注冊機太麻煩了,我也就不多說了,最後一句就是目標沒有被創建!