⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intead.cpp

📁 大学微型计算机接口技术实验源代码,直接就可以运行,包含了C++和asm代码,比较前面.
💻 CPP
字号:
#include<dos.h>
#include<stdio.h>
#include<conio.h>
int choose_channel();

#ifdef      __cplusplus     //if in C++ mode
    #define __CPPARGS ...
#else
    #define __CPPARGS
#endif
int flag  = 0;
int pa=999;
void interrupt handler(__CPPARGS)  //数据采集中断服务程序
{
	disable();
	flag =1;
	outportb(0xa0,0x62);//向从片8259发EOI命令
	outportb(0x20,0x20);//向主片8259发EOI命令
	enable();
}
void main(void)
{
	int ch,i,status;
	void interrupt (*oldhandler)(__CPPARGS);
	clrscr();
	printf("Please input the a/d channel NO(0--7):");
	ch=choose_channel();
	printf("During the process, press any key to exit!\n");
	outportb(0x303,0x88);   //初始化8255
	outportb(0x300,ch);   //送通道号

	outportb(0x303,0x03);              //pc1置1锁存地址
	delay(50);
	outportb(0x303,0x02);

	oldhandler=getvect(0x72);//获取原中断向量
	setvect(0x72,handler);//设置新中断向量
	//enable();
	status=inportb(0xa1);
	outportb(0xa1,status&0xfb);//打开IRQ10(OCW1)
	status=inportb(0x21);
	outportb(0x21,status&0xfb);//打开IRQ2(OCW1)
	delay(100);

	outportb(0x303,0x98);//重新初始化8255
	outportb(0x303,0x01);			//	使PC0置高*/
	delay(50);
	outportb(0x303,0x00);			//	使PC0置低*/
	do
	{
			
		if(1 == flag)
		{
			outportb(0x303,0x05);              //*pc2=1,允许读转换结果*/
			delay(1);
			pa = inportb(0x300);
			flag =0;
			outportb(0x303,0x01);				//*使PC0置高*/
				delay(50);
			outportb(0x303,0x00);				//*使PC0置低*/
			printf("%d\n", pa);
		}
	}while(!kbhit());

	setvect(0x72,oldhandler);//恢复原中断向量	status=inportb(0xa1);

	outportb(0xa1,status|0x04);//屏蔽IRQ10(OCW1)
	status=inportb(0x21);
	outportb(0x21,status|0x04);//屏蔽IRQ2*/
}


int choose_channel()
{
	int c;
	do{
		c=getchar();
		c=c-48;
		if(c<0||c>7)  printf("\nThe ad channel NO is wrong! \nBe sure it is between 0 and 7!\nPlease input the NO again!:");
		else break;
		}while(1);
	return(c);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -