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

📄 can_rec1.cpp

📁 这个程序是在BC++3.1 for DOS下开发的一个小的示例程序
💻 CPP
字号:
#include	"can.h"

#define NUM  3600
#define INTMODE   1
#define DISF 1

extern unsigned int PCSCANBaseAddress1;
extern unsigned int PCSCANBaseAddress2;
extern int can1flag;
extern int can2flag;
extern unsigned int irq1;
extern unsigned int irq2;

void  main()
{
  unsigned long waitexit=0;
  int handle,i,key,k,kk;
  int line;

  unsigned char can1sendid=0;
  unsigned char can2sendid=0;
  unsigned char can2snum=0,can2rnum=0;
  unsigned char can1rnum=0,can1snum=0;
  unsigned long can1rerr=0,can2rerr=0;
  unsigned long can2s=0,can2r=0;
  unsigned long can1r=0,can1s=0;
  char intrmode = 0;
  int bau=0;

  PORT_STRUCT ptrStruct;
  CAN_PACKET canpacket;
  CAN_RPACKET can_rpacket;
  can1flag = 0;
  can2flag = 0;
  clrscr();

  printf("Can test program\n");
  //printf("Usage:%s  <CANADR1> <CANADR2> [IRQ1] [IRQ2]\n",argv[0]);

  PCSCANBaseAddress1 = 53248;
//	PCSCANBaseAddress2 = hextoint(argv[2]);
//	printf("%x\n", PCSCANBaseAddress1);
	
		irq1 = 5;
//		irq2 = 11;
		printf("IQR:%d\n",irq1);
		intrmode = 1;
	

  printf("baud rate select:0-1000K 1-800K 2-500K 3-320K 4-250K  5-160K\n");
  printf("baud rate select:6-125K  7-100K 8-80K  9-40K  10-20K  11-10K  12-5K\n");
  printf("please input baud rate:(0-12):");
  scanf("%d",&bau);

  ptrStruct.filter=SINGLE;
  ptrStruct.lis_on=LOFF;
  ptrStruct.test=TOFF;
  ptrStruct.sleep=SOFF;
  ptrStruct.baud_rate=bau;
  ptrStruct.code1=0;
  ptrStruct.code2=0;
  ptrStruct.code3=0;
  ptrStruct.code4=0;
  ptrStruct.mask1=0xff;
  ptrStruct.mask2=0xff;
  ptrStruct.mask3=0xff;
  ptrStruct.mask4=0xff;

  CanConfigPort(PCSCANBaseAddress1,&ptrStruct);        /*  Can port config  */
 // CanConfigPort(PCSCANBaseAddress2,&ptrStruct);        /*  Can port config  */

  #if INTMODE
  if (intrmode == 1)
  {
	GetIrqP();

	Inter_Rece();
	CanEnableReceive(PCSCANBaseAddress1);
//	CanEnableReceive(PCSCANBaseAddress2);
 }
  #endif


  printf("Press ESC quit\n");
		 canpacket.f_pattern=E;
		 canpacket.f_type=D;
		 canpacket.byte_len=EIGHT;
		 canpacket.id1=0x08;
		 canpacket.id2=can1sendid;
		 canpacket.id3=0xcd;
		 canpacket.id4=0xa0;
	/*	 for(i=0;i<8;i++)
			canpacket.data[i]=can2snum;
		 can2snum++;
		 CanSendMsg(PCSCANBaseAddress2,&canpacket);   
		 can1sendid++;
		 can2s++;*/

  while(intrmode)
  {
	 if(Inquiry_IntCanflag(1) == 1)       /*   If can interrupt request be generated  */
	 {
		/*if(can1flag==1)          printf("int1 error\n");*/
		Clear_Canflag(1);       /*  Clear can interrupt flag  */
		line=wherey();
		CanRcvMsg(PCSCANBaseAddress1,&can_rpacket);    /*  Receive can message and display  */
#if DISF
		gotoxy(1,line);   printf("can1 r:");
		gotoxy(10,line);  printf("%x",can_rpacket.ff);
		gotoxy(15,line);  printf("%x",can_rpacket.id1);
		gotoxy(20,line);  printf("%x",can_rpacket.id2);
		gotoxy(25,line);  printf("%x",can_rpacket.id3);
		gotoxy(30,line);  printf("%x",can_rpacket.id4);
		gotoxy(35,line);  printf("%x",can_rpacket.data[0]);
		gotoxy(40,line);  printf("%x",can_rpacket.data[1]);
		gotoxy(45,line);  printf("%x",can_rpacket.data[2]);
		gotoxy(50,line);  printf("%x",can_rpacket.data[3]);
		gotoxy(55,line);  printf("%x",can_rpacket.data[4]);
		gotoxy(60,line);  printf("%x",can_rpacket.data[5]);
		gotoxy(65,line);  printf("%x",can_rpacket.data[6]);
		gotoxy(70,line);  printf("%x\n",can_rpacket.data[7]);
#endif
		
		
		can1r++;

		canpacket.f_pattern=E;
		canpacket.f_type=D;
		canpacket.byte_len=EIGHT;
		canpacket.id1=0x08;
		canpacket.id2=can1sendid;
		canpacket.id3=0xcd;
		canpacket.id4=0xa0;
		for(i=0;i< 8;i++)
			canpacket.data[i]=can1snum;
		can1snum++;
		if (can1s <= NUM)
		CanSendMsg(PCSCANBaseAddress1,&canpacket);       /*   Send can message  */
		can1sendid++;
		can1s++;
	}
	/*if(Inquiry_IntCanflag(2) == 1)       
	 {
		
		Clear_Canflag(2);       
		line=wherey();
		CanRcvMsg(PCSCANBaseAddress2,&can_rpacket);    
#if DISF
		gotoxy(1,line);   printf("can2 r:");
		gotoxy(10,line);  printf("%x",can_rpacket.ff);
		gotoxy(15,line);  printf("%x",can_rpacket.id1);
		gotoxy(20,line);  printf("%x",can_rpacket.id2);
		gotoxy(25,line);  printf("%x",can_rpacket.id3);
		gotoxy(30,line);  printf("%x",can_rpacket.id4);
		gotoxy(35,line);  printf("%x",can_rpacket.data[0]);
		gotoxy(40,line);  printf("%x",can_rpacket.data[1]);
		gotoxy(45,line);  printf("%x",can_rpacket.data[2]);
		gotoxy(50,line);  printf("%x",can_rpacket.data[3]);
		gotoxy(55,line);  printf("%x",can_rpacket.data[4]);
		gotoxy(60,line);  printf("%x",can_rpacket.data[5]);
		gotoxy(65,line);  printf("%x",can_rpacket.data[6]);
		gotoxy(70,line);  printf("%x\n",can_rpacket.data[7]);
#endif
		for(i=0;i< 8;i++)
		{
			if(can_rpacket.data[i]!=can2rnum)
			{
			 can2rerr++;
			 printf("error\n");
			}
		}
		can2rnum++;
		can2r++;

		canpacket.f_pattern=E;
		canpacket.f_type=D;
		canpacket.byte_len=EIGHT;
		canpacket.id1=0x08;
		canpacket.id2=0xcd;
		canpacket.id3=can2sendid;
		canpacket.id4=0xc0;
		for(i=0;i< 8;i++)
			canpacket.data[i]=can2snum;
		can2snum++;
		if (can2s <= NUM)
		CanSendMsg(PCSCANBaseAddress2,&canpacket);      
		can2sendid++;
		can2s++;
	}*/
	if (NUM <= can1s)
	{
	   waitexit++;  //2006.4.30
	   //delay(10);
	   //exit(0);
	}
	if (waitexit > 100)  //2006.4.30
		break;
	if(kbhit())
	{
	  key=getch();
	  if(key == 27)  break;
	  //2006 4.30
	 
	}
  }


  while(!intrmode)  //pool
  {
	 if((canreadb(PCSCANBaseAddress1,2)&0x01)  == 1)
	 {

		line=wherey();
		CanRcvMsg(PCSCANBaseAddress1,&can_rpacket);    /*  Receive can message and display  */
#if DISF
		gotoxy(1,line);   printf("can1 r:");
		gotoxy(10,line);  printf("%x",can_rpacket.ff);
		gotoxy(15,line);  printf("%x",can_rpacket.id1);
		gotoxy(20,line);  printf("%x",can_rpacket.id2);
		gotoxy(25,line);  printf("%x",can_rpacket.id3);
		gotoxy(30,line);  printf("%x",can_rpacket.id4);
		gotoxy(35,line);  printf("%x",can_rpacket.data[0]);
		gotoxy(40,line);  printf("%x",can_rpacket.data[1]);
		gotoxy(45,line);  printf("%x",can_rpacket.data[2]);
		gotoxy(50,line);  printf("%x",can_rpacket.data[3]);
		gotoxy(55,line);  printf("%x",can_rpacket.data[4]);
		gotoxy(60,line);  printf("%x",can_rpacket.data[5]);
		gotoxy(65,line);  printf("%x",can_rpacket.data[6]);
		gotoxy(70,line);  printf("%x\n",can_rpacket.data[7]);
#endif
		for(i=0;i<8;i++)
		{
			if(can_rpacket.data[i]!=can1rnum)
			{
			 can1rerr++;
			 printf("error\n");
			}
		}
		can1rnum++;
		can1r++;

		canpacket.f_pattern=E;
		canpacket.f_type=D;
		canpacket.byte_len=EIGHT;
		canpacket.id1=0x08;
		canpacket.id2=can1sendid;
		canpacket.id3=0xcd;
		canpacket.id4=0xa0;
		for(i=0;i< 8;i++)
			canpacket.data[i]=can1snum;
		can1snum++;
		if (can1s <= NUM)
		CanSendMsg(PCSCANBaseAddress1, &canpacket);       /*   Send can message  */
		can1sendid++;
		can1s++;
	}
	if((canreadb(PCSCANBaseAddress2,2)&0x01) == 1)
	 {
		line=wherey();
		CanRcvMsg(PCSCANBaseAddress2,&can_rpacket);    /*  Receive can message and display  */
#if DISF
		gotoxy(1,line);   printf("can2 r:");
		gotoxy(10,line);  printf("%x",can_rpacket.ff);
		gotoxy(15,line);  printf("%x",can_rpacket.id1);
		gotoxy(20,line);  printf("%x",can_rpacket.id2);
		gotoxy(25,line);  printf("%x",can_rpacket.id3);
		gotoxy(30,line);  printf("%x",can_rpacket.id4);
		gotoxy(35,line);  printf("%x",can_rpacket.data[0]);
		gotoxy(40,line);  printf("%x",can_rpacket.data[1]);
		gotoxy(45,line);  printf("%x",can_rpacket.data[2]);
		gotoxy(50,line);  printf("%x",can_rpacket.data[3]);
		gotoxy(55,line);  printf("%x",can_rpacket.data[4]);
		gotoxy(60,line);  printf("%x",can_rpacket.data[5]);
		gotoxy(65,line);  printf("%x",can_rpacket.data[6]);
		gotoxy(70,line);  printf("%x\n",can_rpacket.data[7]);
#endif
		for(i=0;i< 8;i++)
		{
			if(can_rpacket.data[i]!=can2rnum)
			{
			 can2rerr++;
			 printf("error\n");
			}
		}
		can2rnum++;
		can2r++;

		canpacket.f_pattern=E;
		canpacket.f_type=D;
		canpacket.byte_len=EIGHT;
		canpacket.id1=0x08;
		canpacket.id2=0xcd;
		canpacket.id3=can2sendid;
		canpacket.id4=0xc0;
		for(i=0;i< 8;i++)
			canpacket.data[i]=can2snum;
		can2snum++;
		if (can2s <= NUM)
		CanSendMsg(PCSCANBaseAddress2, &canpacket);       /*   Send can message  */
		can2sendid++;
		can2s++;
	}
	if (NUM <= can1s)
	{
	   waitexit++;  //2006.4.30
	   //delay(10);
	   //exit(0);
	}
	if (waitexit > 100)  //2006.4.30
		break;
	if(kbhit())
	{
	  key=getch();
	  if(key == 27)  break;
	  //2006 4.30
	  #if 0
	  else if(key == 50)           /*  If press "2"  then send can message  */
	  {
		 canpacket.f_pattern=E;
		 canpacket.f_type=D;
		 canpacket.byte_len=EIGHT;
		 canpacket.id1=0x08;
		 canpacket.id2=can1sendid;
		 canpacket.id3=0xcd;
		 canpacket.id4=0xa0;
		 for(i=0;i<8;i++)
			canpacket.data[i]=can2snum;
		 can2snum++;
		 CanSendMsg(PCSCANBaseAddress2,canpacket);       /*   Send can message  */
		 can1sendid++;
		 can2s++;
		 /*printf("can2 send packet\n");*/
	  }
	  #endif
	}
  }

  #if INTMODE
  if (intrmode == 1)
  {
  CanDisableReceive(PCSCANBaseAddress1);
//  CanDisableReceive(PCSCANBaseAddress2);
  Close_Rece();
  }
  #endif
  CanDisableReceive(PCSCANBaseAddress1);
 // CanDisableReceive(PCSCANBaseAddress2);
  Close_Rece();
  //2006 4.30
  //printf("can2 s= %ld can1 r=%ld can1rerror=%ld \n",can2s,can1r,can1rerr);
  //printf("can1 s= %ld can2 r=%ld can2rerror=%ld \n",can1s,can2r,can2rerr);
  if ( (0 == can1rerr) && (NUM <= can1r))
	printf("CAN2--->CAN1 OK\n");
  else
  {
	printf("CAN2--->CAN1 FAIL!! There are %ld error!rec:%ld\n",can1rerr,can1r);
  }
  if ( (0 == can2rerr) && (NUM <= can2r))
	printf("CAN1--->CAN2 OK\n");
  else
  {
	printf("CAN1--->CAN2 FAIL!! There are %ld error!rec:%ld\n",can1rerr,can2r);
  }
  return;
 }

⌨️ 快捷键说明

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