📄 can_send1.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 + -