⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kwp.c

📁 用Freescale的8位单片机做的RS232-CAN的通讯转换板.包含固件程序,原理图,PCB图和一个说明文件.
💻 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 + -