📄 kwp.c
字号:
#include "kwp.h"
unsigned char bLinked;
unsigned char bLinking;
void InitKWP(void)
{
bLinked = 0;
bLinking = 0;
}
//每十秒钟一次
unsigned char uLowTimer;
unsigned char uUpTimer;
void KWPTime(void)
{
if(bLinking == 0)
{
if(SCI_RXD == 0)
{
bLinking = 1;
return;
}
}
else if(bLinking == 1)
{
if(SCI_RXD == 0)
{
uLowTimer++;
}
else
{
if(uLowTimer > 22 && uLowTimer < 27)
{
bLinking = 2;
return;
}
else
{
bLinking = 0;
uLowTimer = 0;
}
}
}
else if(bLinking == 2)
{
if(SCI_RXD == 0)
{
bLinking = 0;
uLowTimer = 0;
}
else
{
uUpTimer++;
if(uUpTimer + uLowTimer > 50)
{
StartWriteSci();
}
}
}
}
__interrupt void SCIRecisr(void)
{
static unsigned char len; //接收数据的长度
static unsigned char crc; //校验和
unsigned char i;
unsigned char temp;
temp = SCS1;
cSCITimer = 0;
if(0 == startpos) //第一个数据
{
LED1 = 1;
len = SCDR;
if(len < 3)
return;
if(len > SCIMAXLENGTH + 2)
{
SCIState_RecError = 1;
startpos = 0;
return;
}
else
{
crc = len;
startpos++;
return;
}
}
if( startpos >= len - 1) //数据接收完成
{
if(crc == SCDR)
{
if(SCIState_RecFull) //发生数据
{
SCIState_RecOver = 1; //数据溢出
}
else //正确收到一个数据包
{
for(i = 0; i < len - 2; i++)
{
cSCIRecBuf[i] = cSCIRecTemp[i];
}
}
SCIState_RecFull = 1;
cSCIRecLen = len - 2;
LED1 = 0;
startpos = 0;
}
else
{
SCIState_RecCRC = 1; //数据校验错误
startpos = 0;
}
}
else //在接收数据
{
temp = SCDR;
cSCIRecTemp[startpos - 1] = temp;
crc += temp;
startpos++;
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -