#include#include#include#include#include#define CLK1 0x04 /* Clock Pulse High*/#define CLK0 0xfb /* Clock Pulse Low*/#define CS10x01 /* Chip Select high to deactivate DAC*/#define CS0 0xfe /* Chip Select low to activate DAC*/#define DATA1 0x02 /* Data Pulse High*/#define DATA0 0xfd /* Data Pulse low*/int c[16],dport,ACTUALDATA,out,k;/*Global Declarations*/float VOUT;/*DAC OUTPUT-p.htm" target="_blank" title="OUTPUT貨源和PDF資料">OUTPUT*/void d2b(unsigned int x, int*c)/*Routine for Decimal to Binary Conversion*/{int i;for(i=0;i<=15;i )*(c )=(x>>i) & 0x1;}float ftov()/*Hertz to DAC output Conversion Routine*/{int HERTZ;printf("\n \nEnter the frequencywithin 0 to 10000Hz:");scanf("%d",&HERTZ);VOUT=0.00040955*HERTZ;printf("\n VOUT=%f\n",VOUT);return VOUT;}void CLOCK_DAC(void)/*Routine for clocking the DAC*/{out|=CLK1;outportb(dport,out);/*Setting the clock high*/delay(1);out&=CLK0;outportb(dport,out);/*Setting the clock low*/delay(1);}void LOAD_DACDATA(int*c)/*Routine for loading actual data into the DAC*/{out|=CS1;outportb(dport,out);/*Chip Select high to disable DAC*/delay(1);out&=CS0;outportb(dport,out);/*Chip Select low to enable DAC*/delay(1);printf("\nDATA loaded into the DAC=");for(k=15;k>=0;k--){out|=c[k];outportb(dport,out);printf("%d",c[k]);delay(1);CLOCK_DAC();}out|=CS1;outportb(dport,out);delay(1);}main(){int v,inc;float y;unsignedint x;double fraction, integer, number;clrscr();printf("\tUse Your Printer Port as a Programmable Frequency Generator");printf("\n\t\t\t by\n");printf("\tK.Suresh,MSD,IGCAR,Kalpakkam,TamilNadu-603102,India");dport= peek(0x40,8);/*Check up for availability of Printer Port*/if (dport==0){printf("\n\n LPT NOT AVIAILABLE! EXITING........");exit(1);}printf("\n\nAddress of the printer port found =0x%X",dport);ftov();y=(VOUT*8192)/(2.5*1.6384);v=y/1;number=y;fraction = modf(number, &integer);if (fraction<0.44)inc=0;else inc=1;ACTUALDATA=16384 v inc; /*Actual data including the Control Word for DAC*/d2b(ACTUALDATA,c);LOAD_DACDATA(c);return 0;}