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

📄 can_send1.cpp

📁 这个程序是在BC++3.1 for DOS下开发的一个小的示例程序
💻 CPP
字号:
 #include <iostream.h>
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#define int16 unsigned short int
#define int32 unsigned int
#define P8120Base 0x300

int CanRecv(int32  base,int16 cr[]);
int InitCan(int32 base);
int CanSend(int32 base,int16 ct[],int32 RTR);
int16 btr0=0x5f,btr1=0xff;
int16 ss[13];
int16 r_data[10];
int16 t_data[10];
/*int16 cr0=0,cr1=0,cr2=0,cr3=0,cr4=0,
      cr5=0,cr6=0,cr7=0,cr8=0,cr9=0;
int16 ct0=0,ct1=0,ct2=0,ct3=0,ct4=0,
      ct5=0,ct6=0,ct7=0,ct8=0,ct9=0;
*/
int InitCan(int32 base)
/****************参数说明*****************************/
/*  base:基地址(根据卡上跳线设置)                   */
/*  comno:COM口号。0表示第0号COM口;1表示第1号COM口 */
/*  arc[]:接收码                                    */
/*  arm[]:屏蔽码                                    */
/*  btr0 btr1:设置波特率                            */
/*  control:中断方式的选择                          */
/*            0x00: 无中断使能                       */
/*			  0x02:接收中断                         */
/*			  0x04:发送中断                         */
/*			  0x08: 错误中断                         */
/*			  0x10: 溢出中断                         */
/*  返回值:0初始化失败1初始化成功                   */
/*  记得在全局变量中设置屏蔽码、和设置波特率的设置   */
/*****************************************************/

{
	int16 ctr;
//	base=base+comno*32;
	outportb(base + 0, 0x1);
	outportb(base + 0, 0x1);
	ctr =inportb(base+0);
	if ((ctr & 0x1f) == 0x01)
	{
		outportb(base+31,0x85);
		outportb(base + 4, 0x0);
		outportb(base + 5, 0xff);
		outportb(base + 6, btr0);
		outportb(base + 7, btr1);
		outportb(base + 8, 0x1a);

		outportb(base + 20, 0xff);
		outportb(base + 21, 0xff);
		outportb(base + 22, 0xff);
		outportb(base + 23, 0xff);


		outportb(base + 0, 0x00);
		outportb(base + 0, 0x00);
		ctr = inportb(base);
		if ((ctr & 0x1f) == 0x00)
		{
			//printf("sssssss!!!!\n");
			return 1;
		}
		else
		{
			return 0;
		}
	}
	else
		return 0;

}
int CanSend(int32 base,int16 ct[])
{

	int16 cansta;
	int i=0;
	cansta = inportb(base + 2);
	if ((cansta & 0xcc)==0x0c)
	{
		outportb(base + 17,ct[0]);
		outportb(base + 16, ct[1]);

		for(i=0;i<8;i++)
		{

			outportb(base + 19 + i, ct[i+2]);
			//delay(10);
//			ss[i]=inport(base+12+i);
//			cout << "*"<<ss[i]<<"*";
		}
/*		outportb(base+12,ct2);
		outportb(base+13,ct3);
		outportb(base+14,ct4);
		outportb(base+15,ct5);
		outportb(base+16,ct6);
		outportb(base+17,ct7);
		outportb(base+18,ct8);
		outportb(base+19,ct9);
//		i=1;  */
		outportb(base+1,0x01);
//		outp(base+1,0x01);
  /*		for(i=0;i<8;i++)
		{
			ss[i]=inport(base+12+i);
			cout << "*"<<ss[i]<<"*";

		}                 */
//		outp(base+1,0x04);
//		outp(base+1,0x08);

/*		if(cansta&0xcc==0xc0)
		{
			outp(base+30,0x01);
			for(i=0;i<1000;i++);
			outp(base+30,0);
			InitCan(base);
		}
*/
		if(cansta&0xcc==0x0c)
		{
			return 1;
		}
	}
	return 0;
}
int CanRecv(int32  base,int16 cr[])
{
	int16 cansta;
	long i,j;

	for(j=0;j<100000;j++)
	{
		cansta = inportb(base + 2);
		if ((cansta&0x01)==0x01)
		{
			cr[0] = inportb(base + 17);
			cr[1] = inportb(base + 16);
			for(i=0;i<8;i++)
			{
				cr[i+2] = inportb(base + 21 + i);
				//cout<<cr[i]<<"#";
				//if(i==12)cout<<endl;
			}
/*			cr2=inportb(base+22);
			cr3=inportb(base+23);
			cr4=inportb(base+24);
			cr5=inportb(base+25);
			cr6=inportb(base+26);
			cr7=inportb(base+27);
			cr8=inportb(base+28);
			cr9=inportb(base+29);
*/
			outportb(base + 1, 0x04);
			outportb(base + 1, 0x08);

/*			if(cansta&0x02==0x02)outportb(base+1,0x08);
			if(cansta&0xc0==0xc0)
			{
				outportb(base+30,0x01);
				for(i=0;i<1000;i++);
				outportb(base+30,0);
				InitCan(base);
			}*/
			return 1;
		}
	}
	return 0;
}


void main()
{
	long i,i1;
	char ch;
	int16 trscount=1;
//	int16 a[13];
//	int16 b[13];
	for(i=0;i<10;i++)
	{
		t_data[i]=0;
		r_data[i]=0;
	}

	clrscr();
	if(InitCan(P8120Base))printf("com1 OK!!\n");
//	if(InitCan(P8120Base+32))printf("com2 OK!!\n");

for(;;)
{
  if(kbhit())
  {
	ch=getch();
	if(ch==0x0d)
	{
	if(trscount==10)trscount=1;
	for(i=2;i<10;i++)t_data[i]=trscount;
	t_data[0]=0;t_data[1]=8;
//	ct2=ct3=ct4=ct5=ct6=ct7=ct8=ct9=25;
	cout<<"send data="<<t_data[0]<<"  "
	    <<t_data[1]<<"  "
	    <<t_data[2]<<"  "
	    <<t_data[3]<<"  "
	    <<t_data[4]<<"  "
	    <<t_data[5]<<"  "
	    <<t_data[6]<<"  "
	    <<t_data[7]<<"  "
	    <<t_data[8]<<"  "
	    <<t_data[9]<<"  "<<endl;

	if(CanSend(P8120Base,t_data))
	{printf("trans  OK!!!\n");}
//	printf("starting receive.....\n");
	for(i=0;i<10000;i++);
//	if(InitCan(P8120Base,1,1));
	if(CanRecv(P8120Base,r_data))printf("receive OK!");
	cout<<"receive data="<<r_data[0]<<"  "
	    <<r_data[1]<<"  "
	    <<r_data[2]<<"  "
	    <<r_data[3]<<"  "
	    <<r_data[4]<<"  "
	    <<r_data[5]<<"  "
	    <<r_data[6]<<"  "
	    <<r_data[7]<<"  "
	    <<r_data[8]<<"  "
	    <<r_data[9]<<"  "<<endl;
	    trscount++;
       }
       if(ch==0x1b)break;
       if(ch==0x08)
       {
	outportb(P8120Base+30,1);
	for(i1=0;i1<1000;i1++);
	outportb(P8120Base+30,0);
	InitCan(P8120Base);
       }
//	getch();
   }
}
	printf("press any key to exit...");
	getch();
}

⌨️ 快捷键说明

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