📄 lb_2.c
字号:
#include <math.h>
#include <stdio.h>
#include <bios.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <stdlib.h>
#include <io.h>
#define keyQ 0x1051
#define keyq 0x1071
#define line0 18
#define INT10 0x0d /* 0x72 IRQ10, 0x0d IRQ5 */
#define RXACU 0x300
#define RXACD 0x304
#define RYACU 0x308
#define RYACD 0x30c
#define RZACU 0x310
#define RZACD 0x314
#define W273 0x320
#define W2 0x324
#define W3 0x328
#define RD2FX 0x32c /*0x32c*/
#define RD2FY 0x339 /*0x339*/
#define RD2FZ 0x334
#define XLG 0x320
#define YLG 0x324
#define ZLG 0x328
#define CSL 0x318
#define RDWB 0x338
#define RDACLK 0x33a
#define RDTEST1 0x33c
#define RDTESTPC 0x33b
#define RDX6K 0x33d
#define RDY6K 0x33e
#define RDZ6K 0x33f
#define tt2 100 /* Hz/sec */
void interrupt ptr0();
int i1,k1,j1,i2,k2,j2,i3,k3,j3,i4,k4,j4,kk,kk2;
int jm;
unsigned int xf2,yf2,zf2,sxf2,syf2,szf2,dxf2,dyf2,dzf2;
long int l1,l2,l3,l4,l5,count,count1,count2,count3,ss1,n1,pps0;
long int xz0,xac,yac,zac,xac0,yac0,zac0,sxac,syac,szac,xac1,yac1,zac1;
long int xzd0,xacd,yacd,zacd,xacd0,yacd0,zacd0,sxacd,syacd,szacd,xacd1;
long int yacd1,zacd1,xacd10,yacd10,zacd10,xacd2,yacd2,zacd2;
long int xlg,ylg,zlg,xlg0,ylg0,zlg0,xlg1,ylg1,zlg1,xlgs,ylgs,zlgs;
long int lcj10,lcj,lcj0,lcj1,lcjs,lcj2;
long int xlg2,ylg2,zlg2,xac2,yac2,zac2,xlg10,ylg10,zlg10,xac10,yac10,zac10;
long int wb0,wb,swb,wb1,wb2, aclk0,aclk,saclk,aclk1,aclk2;
unsigned char c2016,c273,cw2,cw3,cc;
unsigned int testpc[4],s_testpc,d_testpc,x6k,s_x6k,d_x6k,y6k,s_y6k,d_y6k,
z6k,s_z6k,d_z6k,test1[6],s_test1,d_test1;
long int wb0,wb,swb,wb1,wb2, aclk0,aclk,saclk,aclk1,aclk2;
unsigned char mem1,mem2;
unsigned int numb;
union union1
{
int i;
unsigned int k;
struct struct1
{
unsigned char i_l;
unsigned char i_h;
}s1;
}un;
union union1 un3;
union union2
{
long int l;
struct struct2
{
unsigned int l_l;
unsigned int l_h;
}s2;
struct struct3
{
unsigned char c0;
unsigned char c1;
unsigned char c2;
unsigned char c3;
}s3;
}un2;
int getkey2();
char gc(); /* return 1: GC */
FILE *fp1,*fp2;
void RECEIVEINTWORD(int RAMSEG,char *INTWORD);
long int readbuf[256];
char receintword[4]={0xa5,0x07,0x07,0x07};
int dramseg;
int intnumber;
int send422[20];
/***/
#define INTCOM1 0x0c
#define INTCOM2 0x0b
#define INTCOM3 0x0b
#define uchar unsigned char
void interrupt COM2Isr(void);
void interrupt (*oldCOM2Isr)(void);
void interrupt COM1Isr(void),COM3Isr(void);
void interrupt (*oldCOM1Isr)(void),(*oldCOM3Isr)(void);
void InitKGA();
uchar oldIntBits;
uchar strGPS[256];
float gpsLgi, gpsLti, gpsHgt;
int gpsDone=0, gpsCount=0;
void SysInit();
void SysExit();
void GPSDecode(const char *strGGA, float *lgi, float *lti, float *hgt);
FILE *fp1,*fp2;
/***/
main()
{
int i;
int k,flag;
clrscr();
pps0=0;
cw3=0xff;
flag=0;
fp1=fopen("lb1.dat","w+");
fp2=fopen("lb10.dat","w+");
gotoxy(70,25); printf("Quit !");
disable();
outportb(0x20,0x20);
mem1=inportb(0x21);
mem2=inportb(0xa1);
setvect(INT10,ptr0);
outportb(0x21,mem1&0xdb);
outportb(0xa1,mem2&0xfb);
enable();
SysInit();
count=1;
count3=0;
jm=0;
kk2=0;
while(jm!=keyQ&&jm!=keyq)
{
jm=getkey2();
ss1=count;
if(ss1!=count1)
{
count1=ss1;
disp();
out2();
/* fprintf(fp2,"%ld %ld %ld\n",count1,xlg10,xlgs);*/
if(count1%100==0&&count1>100)
fprintf(fp1,"%ld %ld %ld\n",count1/100-1,xlg,xlgs);
}
}
outportb(0x21,mem1);
outportb(0xa1,mem2);
clrscr();
}
disp()
{
gotoxy(5,10);
printf("Time: %6ld:%2ld",count/tt2,count%tt2);
gotoxy(30,10);
printf("%6ld (%3d) %8ld ",xlg,xf2,xlgs);
}
int getkey2()
{
int far *ptr;
if(*((int far *)0x0040001a)==*((int far *)0x0040001c)) return(0);
ptr=(long int)_ES*0x10000+(long int)(*((int far *)0x0040001a));
*((int far *)0x0040001a)=*((int far *)0x0040001c);
return(*ptr);
}
unsigned int read_c16(int addr)
{
unsigned int i1,i2;
int kk;
c273=c273&0xf7; outportb(W273,c273);
un.s1.i_l=inportb(addr);
c273=c273|0x08; outportb(W273,c273);
un.s1.i_h=inportb(addr);
i1=un.k;
i2=i1+1;
kk=0;
while(i1!=i2)
{
c273=c273&0xf7; outportb(W273,c273);
un.s1.i_l=inportb(addr);
c273=c273|0x08; outportb(W273,c273);
un.s1.i_h=inportb(addr);
i2=i1;
i1=un.k;
if(++kk>3) break;
}
return(un.k);
}
void interrupt ptr0(void)
{
int n1,n2;
++count;
outportb(0x32c,0);
l2=l1+1;
kk=0;
while(l2!=l1)
{
c273=c273&0xd7; outportb(W273,c273); /* off lock and set low byte */
l2=l1;++kk;
un.s1.i_l=inportb(XLG);
c273=c273|0x08; outportb(W273,c273); /* high*/
un.s1.i_h=inportb(XLG);
l1=un.k;
if(kk>3) break;
}
xlgs=xlgs+l1-xlg0;
if(xlg0>40000&&l1<20000)
xlgs=xlgs+0x10000l;
if(xlg0<20000&&l1>40000)
xlgs=xlgs-0x10000l;
xlg0=l1;
xlg10=(xlgs-xlg2);
xlg2=xlgs;
c273=c273|0x20; outportb(W273,c273); /* open lock */
if(count%tt2==0)
{
dzf2=read_c16(RD2FZ);
dxf2=read_c16(RD2FX);
dyf2=read_c16(RD2FY);
xf2=dxf2-sxf2;
yf2=dyf2-syf2;
zf2=dzf2-szf2;
sxf2=dxf2;
syf2=dyf2;
szf2=dzf2;
xlg=(xlgs-xlg1);
xlg1=xlgs;
ylg=(ylg1-ylgs);
ylg1=ylgs;
zlg=(zlg1-zlgs);
zlg1=zlgs;
}
outportb(0x20,0x20);
outportb(0xa0,0x20);
if(kk>2)
++kk2;
}
rd_port(int port)
{
l2=l1+1;
if(kk<=2)
kk=0;
while(l2!=l1)
{
c273=c273&0xf7; outportb(W273,c273); /* set low byte */
l2=l1; ++kk;
un.s1.i_l=inportb(port);
c273=c273|0x08; outportb(W273,c273); /* high */
un.s1.i_h=inportb(port);
l1=un.k;
if(kk>3) break;
}
}
/************************************************************/
void SysInit()
{
/*COM1*/
outportb(0x3fb,0x80);
outportb(0x3f8,0x03); /*0c 9600,03 38.4k bps*/
outportb(0x3f9,0x00);
outportb(0x3fb,0x0b);
outportb(0x3fc,0x0b);
inportb(0x3f8);
outportb(0x3fc,0x0b);
outportb(0x3f9,0x01);
outportb(0x3fb,0x03);
}
callfk()
{
long int i;
char c3;
i=0;
while(i<50000l)
{
c3=inportb(0x3fd)&0x20;
if(c3!=(char)0) break;
++i;
}
}
calljj()
{
long int i;
char c3;
i=0;
while(i<500000l)
{
c3=inportb(0x3fd)&0x01;
if(c3!=(char)0) break;
++i;
}
if(i<500000l) return(0);
else return(1);
}
out2()
{
int i;
unsigned char str1[11],cc;
str1[0]=0xa5;
str1[1]=0x5a;
un.i=xlg10;
str1[2]=un.s1.i_l;
str1[3]=un.s1.i_h;
un.i=xf2;
str1[4]=un.s1.i_l;
str1[5]=un.s1.i_h;
un2.l=xlgs;
str1[6]=un2.s3.c0;
str1[7]=un2.s3.c1;
str1[8]=un2.s3.c2;
str1[9]=un2.s3.c3;
cc=0;
for(i=0;i<10;++i)
cc=cc+str1[i];
str1[10]=cc;
for(i=0;i<11;++i)
{
callfk();
outportb(0x3f8,str1[i]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -