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

📄 demo_20a.c

📁 一个研华古老CAN卡驱动程序
💻 C
字号:
#include <stdio.h>
#include <conio.h>
#include "can841.h"
#include "can841.c"

/* POLLING */
#define	CAN1_IRQ		5       /*12*/
#define	CAN2_IRQ	        7   	/*15*/

#define	PORT1			0
#define	PORT2			1

#define	FAILURE			0
#define	SUCCESS			1


#define REMOTE_ACC_CODE		0


typedef enum{FALSE, TRUE}	BOOL;


void main(void)
{
	UI gSegment = 0xDA00;

	CAN_STRUCT can1, can2;

	MSG_STRUCT smsg,rmsg;

	UI i;

	char c;

	BYTE IsEmpty=1;
	BYTE getdata = 0;
	int nLocalAcpCode;
	unsigned long ulCount = 0;

	printf("Local Acp Code : ");

	scanf("%d", &nLocalAcpCode);

	if (canInitHW(gSegment, CAN1_IRQ, CAN2_IRQ) == FAILURE)
	{
		printf("Hardware initial is error.\n");
		return;
	}
	if( canReset(PORT1) == FAILURE)
	{
		printf("Reset port 1 is error.\n");
		return;
	}
	if (canReset(PORT2) == FAILURE)
	{
		printf("Reset port 2 is error.\n");
		return;
	}

	can1.acc_code = nLocalAcpCode;
	can1.acc_mask = 0xff;
	can1.bt0 = 0x03;
	can1.bt1 = 0x1c;
	can2.acc_code = nLocalAcpCode;
	can2.acc_mask = 0xff;
	can2.bt0 = 0x03;
	can2.bt1 = 0x1c;
	if (canConfig(PORT1, can1) == FAILURE)
	{
		printf("Can controller port 1 configure is error.\n");
		return;
	}

	delay(800);
	if(canConfig(PORT2, can2) == FAILURE)
	{
		printf("Can controller port 2 configure is error.\n");
		return;
	}
	delay(800);
	if(canNormalRun(PORT1) == FAILURE)
	{
		printf("Can controller port 1 setnormal is error.\n");
	}
	if (canNormalRun(PORT2) == FAILURE)
	{
		printf("Can controller port 2 setnormal is error.\n");
		return;
	}
	rmsg.id = 0x15;
	rmsg.dlen=8;
	for(i=0; i<8;i++)
	rmsg.data[i]=i+1;
/*		printf("Good!");*/
	ulCount=0;
	while(1)
	{
		if (kbhit())
		{
			c = getch();
			if (c == 'q')
			{
				break;
			}
		}
	       if(canSendMsg(PORT2,rmsg)==SUCCESS)
	      /* printf("Good");*/
		do
		{
			if (canReceiveMsg(PORT1, &smsg,&IsEmpty) == SUCCESS)
			{
				++ulCount;
				getdata =1;

			}
			else
			{
				getdata = 0;
				break;
			}

		}while(IsEmpty == 0 );
		if(getdata)
		printf("Count = %lu,msg->id =%d,msg->len=%d,data=%x,%x,%x,%x,%x,%x,%x,%x\n",
			ulCount,smsg.id,smsg.dlen,
			smsg.data[0],smsg.data[1],
			smsg.data[2],smsg.data[3],
			smsg.data[4],smsg.data[5],
			smsg.data[6],smsg.data[7]);
	}

	if(canReset(PORT1) == FAILURE)
	{
		printf("Reset port 1 is error.\n");
	}
	if (canReset(PORT2) == FAILURE)
	{
		printf("Reset port 2 is error.\n");
	}

	if (canExitHW() == FAILURE)
	{
		printf("Exit hardware is error.\n");
	}

	printf("Program exit!\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -