第一个延时函数只有申明,没有实体,编译时就会报警,延时函数无法定位,所以链接以后该地址仍为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++);
} |