#include #include main() { int i,j,k,v; short int l,m,t,u,a,b,c; unsigned char *i1,*i0,*j1,*j0,*k1,*k0,*l1,*l0; float g1,g2,r; i0=&i; i1=i0+1; /* set i1 & i0 to the high & low bytes of i */ j0=&j; j1=j0+1; /* ditto for j0 & j1 */ k0=&k; k1=k0+1; /* set k1 & k0 to the high & low bytes of k */ // l0=&l; l1=l0+1; /* ditto for l0 & l1 */ a=2; b=16; u=210; start: _clearscreen(_GCLEARSCREEN); printf(" State Space Control Program: hit any key to terminate. \n\n\n\r"); printf("The analog signals input to A/D 0 and A/D 1 are combined to produce \n\r"); printf("an output signal. D/A 0 outputs the scaled sum of the 2 signals.\n\r"); printf("(D/A0 = G1*A/D0 + G2*A/D1 + G*R) \n \n\r"); printf("While running, hit any key to reenter gains; 'q' to quit\n\n\r"); printf("Enter G1: "); scanf("%f",&g1); printf("Enter G2: "); scanf("%f",&g2); printf("Enter Hybrid control G*R step size (Volts) \n\r"); printf(" set to 0.0 for Optimal control; G*R: "); scanf("%f",&r); printf("Enter sample period (~msec, >=1) T: "); scanf("%d",&t); printf("\n\rUsing: G1 = %f, G2 = %f, T = %d \n\r",g1,g2,t); // t=10*t; v=(int)(r*204.8); loop: outp(0x301,0); /* select A/D ch. 0, set gain to 1 */ outp(0x302,0); /* start conversion */ // outp(0x305,*k0); outp(0x306,*k1); /* output last value */ while(!(inp(0x300)&0x40)); *i0=inp(0x303); *i1=inp(0x304); /* input voltage */ outp(0x301,1); /* select A/D ch. 1, set gain to 1 */ outp(0x302,0); /* start conversion */ /* outp(0x307,*l0); outp(0x308,*l1); /* output last value */ while(!(inp(0x300)&0x40)); *j0=inp(0x303); *j1=inp(0x304); /* input voltage */ k=g1*i+g2*j + v; if(k>2047)k=2047; if(k<-2048)k=-2048; outp(0x305,*k0); outp(0x306,*k1); /* output last value */ for(l=1;l