再问!
以下c程序和汇编程序使用同样的keil51设置,但他们生成的hex文件不同:
1。汇编程序:
MAIN: SETB P1.0;
LCALL DELAY;
CLR P1.0;
LCALL DELAY;
AJMP MAIN;
DELAY:MOV R7,#250;
D1:MOV R6,#250;
D2:DJNZ R6,D2;
DJNZ R7,D1;
RET
END
汇编的hex文件:
:10000000D29012000CC29012000C01007FFA7EFA0E
:05001000DEFEDFFA2214
:00000001FF
2。同样的程序用c写:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P10=P1^0;
void delay(uint i)
{ uint j;
for(;i>0;i--)
{for(j=0;j<125;j++)
{;}
}
}
void main()
{ for(;;)
{P10=1;
delay(500);
P10=0;
delay(500);
}
}
相应的hex文件却是:
:10800000D3EF9400EE94004015E4FDFC0DBD00019B
:0E8010000CED647D4C70F5EF1F70E51E80E2F4
:01801E00223F
:10801F00D2907FF47E01128000C2907FF47E011215
:04802F00800080EC61
:0300000002803348
:0C803300787FE4F6D8FD75810702801FFD
:00000001FF
怎样才能该0x8000到0x0000呢?应为烧写器是找不到0x8000这样的地址的。
发表时间:2001年12月14日12:44:00