主题:请教如何在keil c51生成的HEX中进入main()
近设计一电子称,用KEIL C51进行,过程都PASS,却不知为什么用51汇编得到HEX下载后可执行,而用C语言写的HEX下载后发现没有进入main()执行,请同行高手帮忙看一下,解决问题不胜感谢!
#include<reg52.h>
#include<intrins.h>
#include<math.h>
bit ldchang;
bit sign;
sbit sound= P1^6;
sbit light=P1^7;
sbit ldca= P1^0;
sbit ldwr=P1^1;
sbit ldin=P1^2;
sbit keyprint=P1^5;
sbit keycal=P1^3;
sbit keyxupi=P1^7;
sbit keydanwei=P1^6;
sbit keyjishu=P1^4;
sbit ramcs=P2^7;
sbit ramlk=P2^6;
sbit ramin=P2^5;
sbit ramout =P2^4;
sbit adclk=P3^4;
sbit adin=P3^5;
sbit adout=P3^2;
sbit off=P3^3;
char offer[4],gain[4],thebcd[6],ldram[6],danwei;
long theadc,plig,theadc0;
char code ldtb[16]={0xeb,0x60,0xc7,0xe5,0x06,0xad,0xaf,0xe0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};
void delay10us()
{char i;
for(i=0;i<5;i++);
}
void delayms(char m)
{char j;
for (j=0;j<m;j++)
delay10us();
}
void sounding()
{sound=0;
delayms(20);
sound=1;
}
void quit() interrupt 2 using 1
{
sounding();
off=0;
off=0;
off=0;
off=0;
}
void puttoldram(char n,char dop)
{char i;
for(i=0;i<n;i++)
{ldram[i]=ldtb[thebcd[i]];
if(i==dop)ldram[i]=ldram[i]+0x10;}
}
void ldrun()
{char dop,i=5;
if(danwei==2)dop=4;else if(danwei==3)dop=3;else dop=2;
do
{if(thebcd[i]!=0){puttoldram(i+1,dop);return;}
ldram[i]=0;
i--;
}while(i>dop);
puttoldram(dop+1,dop);
}
void sendlddata(char m,char n)
{do
{if(m^0x80==0)ldin=0;else ldin=1;
ldwr=0;
_nop_();
_nop_();
ldwr=1;
n--;
m<<=1;
}while(n!=0);
}
void showareg(char addr,char regbit4)
{ldca=1;
_nop_();
_nop_();
ldca=0;
sendlddata(0xa0,3);
addr<<=2;
sendlddata(addr,6);
sendlddata(regbit4,4);
}
void flushram()
{char i,addr=9;
for(i=0;i<17;i++)
{showareg(addr,0);addr++;}
}
void displayld()
{char i,addr=14;
light=0;
flushram();
showareg(13,0x10);
if(sign)showareg(9,0x20);
switch(danwei)
{case 0:showareg(12,0x10);break;
case 1:showareg(10,0x80);break;
case 2:showareg(11,0x10);break;
case 3:showareg(11,0x80);break;
}
for(i=0;i<6;i++)
{showareg(addr,ldram[i]);
addr++;
showareg(addr,ldram[i]<<4);
addr++;
}
light=1;
}
void inild()
{ldca=1;
_nop_();
_nop_();
ldca=0;
sendlddata(0x80,3);
sendlddata(0x01,9);
sendlddata(0xe3,9);
sendlddata(0x18,9);
sendlddata(0x29,9);
sendlddata(0x03,9);
light=0;
delayms(200);
sounding();
light=1;
displayld();
ldca=1;
}
void sendadcom(char num)
{char i;
for(i=0;i<8;i++)
{if(num^0x80==0)adin=0;
else adin=1;
adclk=0;
_nop_();
_nop_();
adclk=1;
num<<=1;
}
}
char readaad()
{char i,z=0;
for(i=0;i<8;i++)
{adclk=0;
_nop_();
_nop_();
adclk=1;
z=z|adout;
z<<=1;
}
return z;
}
void readad()
{char i;
theadc=0;
for(i=0;i<4;i++)
theadc=theadc+readaad();
}
void inic5530()
{char i;
for (i=0;i<15;i++)
sendadcom(0xff);
sendadcom(0xfe);
do{
sendadcom(0x03);
sendadcom(0x20);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
delay10us();
delay10us();
sendadcom(0x03);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x0b);
readad();
}while(theadc!=0x10000000);
sendadcom(0x03);
sendadcom(0x02);
sendadcom(0x00);
sendadcom(0x64);
sendadcom(0x00);
}
void cover()
{
sendadcom(0x80);
while(adout);
sendadcom(0x00);
readad();
}
void tobcd(long n)
{char i,j;
long t;
for(i=0;i<6;i++)
{t=1;
for(j=1;j<6-i;j++)
t=t*10;
thebcd[5-i]=(char)(n/t);
n=n%t;
}
}
void dowith()
{long k=theadc>>8;
k=k/plig;
switch(danwei)
{case 0:;break;
case 1:k=k*5; break;
case 2:k=k*161/25;break;
case 3:k=k*179/50;break;
}
tobcd(k);
}
void forcal()
{
cover();
if(theadc!=0)
{ldram[0]=0x8e;
ldram[0]=0x0b;
ldram[0]=0xee;
ldram[0]=0x8b;
displayld();
return;
}
danwei=0;
thebcd[0]=0;
thebcd[1]=0;
thebcd[2]=1;
thebcd[3]=0;
thebcd[4]=0;
thebcd[5]=0;
ldrun();
ldram[2]=ldram[2]-0x10;
displayld();
while(keycal);
cover();
plig=(theadc>>8)/100000;
}
void print()
{}
void dwchang()
{danwei++;
if(danwei%4==0)danwei=0;}
void xupi()
{sendadcom(0x85);
while(adout);
sendadcom(0x09);
readad();
(long)offer=theadc;
}
void jishu()
{long m=theadc;
while(keyjishu);
cover();
m=theadc/m;
tobcd(m);
ldrun();
ldram[2]=ldram[2]-0x10;
danwei=0;
displayld();
keyjishu=1;
while(keyjishu);
}
witchkey()
{if(keycal==0){while(!keycal);forcal();return;}
if(keyprint==0){while(!keyprint);print();return;}
if(keydanwei==0){while(!keydanwei);dwchang();return;}
if(keyjishu==0){while(!keyjishu);jishu();return;}
if(keyxupi==0){while(!keyxupi);xupi();return;}
}
void main()
{light=0;
sounding();
danwei=0;
SCON=0x50;
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TCON=0x45;
IE=0x84;
inild();
inic5530();
do
{cover();
dowith();
ldrun();
displayld();
witchkey();
}while(1);
}
[em7]
#include<reg52.h>
#include<intrins.h>
#include<math.h>
bit ldchang;
bit sign;
sbit sound= P1^6;
sbit light=P1^7;
sbit ldca= P1^0;
sbit ldwr=P1^1;
sbit ldin=P1^2;
sbit keyprint=P1^5;
sbit keycal=P1^3;
sbit keyxupi=P1^7;
sbit keydanwei=P1^6;
sbit keyjishu=P1^4;
sbit ramcs=P2^7;
sbit ramlk=P2^6;
sbit ramin=P2^5;
sbit ramout =P2^4;
sbit adclk=P3^4;
sbit adin=P3^5;
sbit adout=P3^2;
sbit off=P3^3;
char offer[4],gain[4],thebcd[6],ldram[6],danwei;
long theadc,plig,theadc0;
char code ldtb[16]={0xeb,0x60,0xc7,0xe5,0x06,0xad,0xaf,0xe0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e};
void delay10us()
{char i;
for(i=0;i<5;i++);
}
void delayms(char m)
{char j;
for (j=0;j<m;j++)
delay10us();
}
void sounding()
{sound=0;
delayms(20);
sound=1;
}
void quit() interrupt 2 using 1
{
sounding();
off=0;
off=0;
off=0;
off=0;
}
void puttoldram(char n,char dop)
{char i;
for(i=0;i<n;i++)
{ldram[i]=ldtb[thebcd[i]];
if(i==dop)ldram[i]=ldram[i]+0x10;}
}
void ldrun()
{char dop,i=5;
if(danwei==2)dop=4;else if(danwei==3)dop=3;else dop=2;
do
{if(thebcd[i]!=0){puttoldram(i+1,dop);return;}
ldram[i]=0;
i--;
}while(i>dop);
puttoldram(dop+1,dop);
}
void sendlddata(char m,char n)
{do
{if(m^0x80==0)ldin=0;else ldin=1;
ldwr=0;
_nop_();
_nop_();
ldwr=1;
n--;
m<<=1;
}while(n!=0);
}
void showareg(char addr,char regbit4)
{ldca=1;
_nop_();
_nop_();
ldca=0;
sendlddata(0xa0,3);
addr<<=2;
sendlddata(addr,6);
sendlddata(regbit4,4);
}
void flushram()
{char i,addr=9;
for(i=0;i<17;i++)
{showareg(addr,0);addr++;}
}
void displayld()
{char i,addr=14;
light=0;
flushram();
showareg(13,0x10);
if(sign)showareg(9,0x20);
switch(danwei)
{case 0:showareg(12,0x10);break;
case 1:showareg(10,0x80);break;
case 2:showareg(11,0x10);break;
case 3:showareg(11,0x80);break;
}
for(i=0;i<6;i++)
{showareg(addr,ldram[i]);
addr++;
showareg(addr,ldram[i]<<4);
addr++;
}
light=1;
}
void inild()
{ldca=1;
_nop_();
_nop_();
ldca=0;
sendlddata(0x80,3);
sendlddata(0x01,9);
sendlddata(0xe3,9);
sendlddata(0x18,9);
sendlddata(0x29,9);
sendlddata(0x03,9);
light=0;
delayms(200);
sounding();
light=1;
displayld();
ldca=1;
}
void sendadcom(char num)
{char i;
for(i=0;i<8;i++)
{if(num^0x80==0)adin=0;
else adin=1;
adclk=0;
_nop_();
_nop_();
adclk=1;
num<<=1;
}
}
char readaad()
{char i,z=0;
for(i=0;i<8;i++)
{adclk=0;
_nop_();
_nop_();
adclk=1;
z=z|adout;
z<<=1;
}
return z;
}
void readad()
{char i;
theadc=0;
for(i=0;i<4;i++)
theadc=theadc+readaad();
}
void inic5530()
{char i;
for (i=0;i<15;i++)
sendadcom(0xff);
sendadcom(0xfe);
do{
sendadcom(0x03);
sendadcom(0x20);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
delay10us();
delay10us();
sendadcom(0x03);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x00);
sendadcom(0x0b);
readad();
}while(theadc!=0x10000000);
sendadcom(0x03);
sendadcom(0x02);
sendadcom(0x00);
sendadcom(0x64);
sendadcom(0x00);
}
void cover()
{
sendadcom(0x80);
while(adout);
sendadcom(0x00);
readad();
}
void tobcd(long n)
{char i,j;
long t;
for(i=0;i<6;i++)
{t=1;
for(j=1;j<6-i;j++)
t=t*10;
thebcd[5-i]=(char)(n/t);
n=n%t;
}
}
void dowith()
{long k=theadc>>8;
k=k/plig;
switch(danwei)
{case 0:;break;
case 1:k=k*5; break;
case 2:k=k*161/25;break;
case 3:k=k*179/50;break;
}
tobcd(k);
}
void forcal()
{
cover();
if(theadc!=0)
{ldram[0]=0x8e;
ldram[0]=0x0b;
ldram[0]=0xee;
ldram[0]=0x8b;
displayld();
return;
}
danwei=0;
thebcd[0]=0;
thebcd[1]=0;
thebcd[2]=1;
thebcd[3]=0;
thebcd[4]=0;
thebcd[5]=0;
ldrun();
ldram[2]=ldram[2]-0x10;
displayld();
while(keycal);
cover();
plig=(theadc>>8)/100000;
}
void print()
{}
void dwchang()
{danwei++;
if(danwei%4==0)danwei=0;}
void xupi()
{sendadcom(0x85);
while(adout);
sendadcom(0x09);
readad();
(long)offer=theadc;
}
void jishu()
{long m=theadc;
while(keyjishu);
cover();
m=theadc/m;
tobcd(m);
ldrun();
ldram[2]=ldram[2]-0x10;
danwei=0;
displayld();
keyjishu=1;
while(keyjishu);
}
witchkey()
{if(keycal==0){while(!keycal);forcal();return;}
if(keyprint==0){while(!keyprint);print();return;}
if(keydanwei==0){while(!keydanwei);dwchang();return;}
if(keyjishu==0){while(!keyjishu);jishu();return;}
if(keyxupi==0){while(!keyxupi);xupi();return;}
}
void main()
{light=0;
sounding();
danwei=0;
SCON=0x50;
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TCON=0x45;
IE=0x84;
inild();
inic5530();
do
{cover();
dowith();
ldrun();
displayld();
witchkey();
}while(1);
}
[em7]