这是一个串口接收带校验的测试程序,在checksum中,当运行到return 1时就从头开始了而不是进入if,请问大家这是什么原因?
void main()
{
char i=0;
SCON=0x50;
PCON=0x00;
TMOD = 0x20;
TL1 = 0xfd;
TH1 = 0xfd; //2¨ìØÂêÎa9600
AUXR=0x00;
TR1 = 1;
ES = 1;
EA = 1;
while(1)
{
SendData(0x01);
if(checksum(card)<0)
SendData(0x02);
SendData(0x07);
for(i=0;i<14;i++)
{
SendData(card[i]);
}
}
//SendString("STC15F2K60S2
Uart Test !
");
}
uchar Asc2Hex(char i)
{
char temp1;
if((i&0xf0)==0x30)temp1=i&0x0f;
else if((i&0xf0)==0x40)temp1=(i&0x0f)|0x08;
else if(((i&0xf0)!=0x30)&&((i&0xf0)!=0x40))
return 0;
return temp1;
}
uchar checksum(volatile uchar *s)
{
//s++;
char i;
char arrayH[6],arrayL[6],arraysum[6];
SendData(0x03);
for(i=0;i<=5;i++)
{
arrayH[i]=Asc2Hex(s[2*i+1])<<4;
}
SendData(0x05);
for(i=0;i<=5;i++)
{
arrayL[i]=Asc2Hex(s[2*i+2]);
}
SendData(0x04);
for(i=0;i<=6;i++)
{
arraysum[i]=arrayH[i]+arrayL[i];
}
SendData(0x06);
if(arraysum[5]==arraysum[0]^arraysum[1]^arraysum[2]^arraysum[3]^arraysum[4])
return 0;
//while(busy);
return 1;
}
此帖出自
小平头技术问答
可以的,checksum的返回值与0比较呀。就是在用keil中的软件调试时,单步操作的情况下看到的。当执行完return 1后,应该是直接跳转到if中的。但现实却没有,而是将checksum函数执行完,再从main函数直接开始(即从头开始)
恩恩,现在只是测试,所以返回值就设为1 了。看门狗就没有开.
一周热门 更多>