分不多,但是问题困扰好久了,请大侠帮忙看一下
void T0_time() interrupt 1
{
TH0=(65536-N)/256;
TL0=(65536-N)%256;
pulse=~pulse;
count++;
if(count>=count_1)
{
SBUF = 0x06; //当走完那么多脉冲的时候,发送0x06,也就是ACK给电脑
while(!TI);
TI=0;
TR0=0;
}
}
void jiaodu()
{ uint m,n;
SBUF = 0x66;
TI=0;
TR0=0;
count=0;
m=getcrc(recv,8);
crc[0]=m/256;
crc[1]=m%256;
if(recv[8]==crc[0]&&recv[9]==crc[1])
{send[0]=0x06;
send[1]=0x28;
n=getcrc(send,2);
send[2]=n/256;
send[3]=n%256;
runjiaodu=1;
qi_d=0;
danbu=0;
//需要发送的脉冲数
count_1=(recv[3]*256+recv[4])*65536+recv[5]*256+recv[6];
count_1=2*count_1;
count=0;
N=(uint)(((float)jc_t*11059200.0)/(maichong_c*12.0));
pulse=1;
//ES=0;
TR0=1;
}
else
{send[0]=0x15;
send[1]=0x28;
n=getcrc(send,2);
send[2]=n/256;
send[3]=n%256;
for(i=0;i<4;i++)
{
SBUF=send[i]; //串口写信息
while(!TI);
TI=0;
}
}
}
void seri_run()
{
if(flag==1)
{
k=0;
//ES=0;
switch(command)
{
case 0x28: jiaodu(); break;
case 0x30: kaishi(); break;
}
flag=0;
//ES=1;
}
}
void serial() interrupt 4 //串口读信息
{
RI=0;
recv[k]=SBUF;
k++;
if(k==(uint)recv[2]+6) //总字节数,电脑向单片机发送报文,其中recv[2]第三个字节就是存放的这次报文的总字节
{
command=recv[1]; //第一个字节存放命令类别
flag=1;
k=0;
seri_run();
}
}
void main()
{
init();
while(1)
{
for(i=0;i<10000;i++);
i=0;
}
}