- //PC机基本AD转换
- #defineTRUE1
- #defineFALSE0
- #defineEND_OF_INT0x20
- #defineN80
- #include<process.h>
- #include<stdlib.h>
- #include<ctype.h>
- #include<dos.h>
- intstart,ch,flag;
- voidinterruptint9();
- voidon_intr9();
- voidenairq9();
- voiddisirq9();
- intad[641];
- inti;
- char*ab;
- main()
- {
- charc;
- clrscr();
- printf("PleaseinputA/Dchannelnumber(0~47)");
- ch=choice_channel();
- on_intr9();
- i=0;
- do
- {
- clrscr();
- flag=0;
- enairq9();
- i++;
- ad[i]=ab;
- if(i==640)
- {
- for(i=1;i<=640;i++)
- printf("%d",ad[i]);
- i=0;
- printf("pressqkeytoquit");
- c=getch();
- if(c=='q')
- break;
- continue;
- }
- }while(1);
- disirq9();
- printf("/n/r");
- exit(0);
- }
- intchoice_channel()/*选择A/D输入通道器*/
- {
- intc;
- staticchartem[4]={0,0,0,0};
- i=0;
- do
- {
- tem[i]=getch();
- if(isdigit(tem[i]&&(i<2)))/*若是数字且少于2位*/
- {
- i++;
- gotoxy(48+i,1);
- printf("%c",tem[i-1]);/*打印出来*/
- continue;
- }
- else
- if(tem[i]=0x0d)/*若是回车*/
- {
- c=atoi(tem);/*转换成整数*/
- if(c>=0&&(c<=47))/*若不是0—47通道号*/
- break;/*重新输入*/
- }
- i=0;
- sound(1000);
- delay(200);
- nosound();
- }while(1);
- returnc;
- }
- voidon_intr9()
- {
- disable();
- setvect(0x0a,int9);
- enable();
- }
- voidinterruptint9(bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,flags)
- {
- intj,a,b;
- disable();
- if(start)
- {
- start=FALSE;
- for(j=0;i<N;j++);/*时间延迟*/
- a=inportb(0x304);/*取低8位数*/
- for(j=0;j<N;j++);
- a=inportb(0x305);/*取高4位数*/
- ab=(b&0x0f)*256+a;/*得到12位A/D转换后的数*/
- outportb(0x20,END_OF_INT);/*发硬中断结束命令*/
- enable();
- flag=1;/*中断标志置1*/
- }
- }
- voidenairq9()
- {
- inta;
- enable();
- start=TRUE;
- outportb(0x303,0);/*清A/D中断寄存器*/
- for(a=0;a<N;a++);
- outportb(0x300,ch);/*送A/D通道号*/
- for(a=0;a<N;a++);
- outportb(0x301,1);/*启动A/D转换*/
- }
- voiddisirq9()
- {
- start=FALSE;
- outportb(0x303,0x00);/*A/D中断寄存器*/
- }
PC机基本AD转换
最新推荐文章于 2024-03-15 16:55:47 发布