第一個延時函數只有申明,沒有實體,編譯時就會報警,延時函數無法定位,所以鏈接以后該地址仍為0000,這樣主程序執行第一條命令LED=0以后,又跳回0000重新開始,于是反復執行第一條指令。
C:0x0000 020017 LJMP STARTUP1(C:0017)
4: void main(void)
5: {
6: while(1)
7: {
8: led=0;
C:0x0003 C2A1 CLR led(0xA0.1)
9: delay(20000)
C:0x0005 7F20 MOV R7,#0x20
C:0x0007 7E4E MOV R6,#0x4E
C:0x0009 120000 LCALL C_STARTUP(C:0000)
第二個圖的程序也不能通過編譯,因為延時函數頭后面多了個“ ;”,變成了函數申明
void delay(unsigned int i);
{
unsigned int x;
for(x=0;x<i;x++);
} |