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

📄 s1.cpp

📁 Dos 串口通信例程实现了FiFO ,中断发送中断接受!
💻 CPP
字号:
/**************************************************************************************
/   SBS Science & Technology CO.,LTD of shanghai.
/   http://www.sbs.com.cn
/
/   Compiler:    Turboc C++ (r) version  3.0
/
/   Last update: December  26, 2005
/
/   This file contains procedure and functions used by the sample programs
/   provided with your serial port  The procedures are well documented and should
/   be helpful in learning how to program your serial port
/**************************************************************************************/
#include <stdlib.h>
#include <dos.h>
#include <process.h>
#include <conio.h>
#include <bios.h>
#include <ctype.h>
#include <stdio.h>
#include <fcntl.h>

//#include "serial.h"
#include "s1.inc"

/****************************************************************************************/
/***********************************  主函数  *******************************************/
/****************************************************************************************/
void main()
	{
	int madd;
	long int madld;

	for(;;){
	printf("%s",strings);
	textcolor(132);
	cprintf("1\b");
	Inchar=getch();
	textcolor(4);

	switch(Inchar){
		case 27:
			window(1,1,80,25);
			textbackground(0);
			textcolor(7);
			clrscr();
			exit(0);
		case '2':
			{
			cprintf("%c",Inchar);
			test2in();

			do{
				Init(Saddr,0,Sbps,0x00);
				Init(Raddr,1,Rbps,0x00);
				pesck();
				enableports(Raddr,Rirq,1,0x00);

				flag=0;
				buffin=buffout=0;
				for(;;){
					prch();
					if(kbhit()!=0){
						Inchar=getche();
						outportb(Saddr,Inchar);
						if(Inchar==13) cprintf("\n");
						x2=wherex();y2=wherey();
						delay(5);
						if(Inchar==27||Inchar==60)
							{disableports(Raddr,Rirq);
							break;}
						}
					}
				madd=Saddr;Saddr=Raddr;Raddr=madd;
				madd=Sirq;Sirq=Rirq;Rirq=madd;
				madld=Sbps;Sbps=Rbps;Rbps=madld;
				buffin=buffout=0;
				}while(!(Inchar==27));
			break;}
		case '3':
			{
		      cprintf("%c",Inchar);
			  test2in();
			   do{
			       Init(Saddr,0,Sbps,0xcf);
			       Init(Raddr,1,Rbps,0xcf);
			       pesck();
			       enableports(Raddr,Rirq,1,0xcf);
				buffin=buffout=0;
				flag=0;
				k=0;
				for(;;){
					Fprch();
					if(flag==0){
					for(ff=0;ff<14;ff++);
					  { Inchar=str[k++];
					   if(k>78) k=0;
					   outportb(Saddr,Inchar);
					   cprintf("%c",Inchar);
					   delay(5); }}
					x2=wherex();y2=wherey();
					if(kbhit()!=0){
						Inchar=getch();
						if(Inchar==60||Inchar==27)
							{
							disableports(Raddr,Rirq);
							disableports(Saddr,Sirq);
							break;}
						}
					}
				madd=Saddr;Saddr=Raddr;Raddr=madd;
				madd=Sirq;Sirq=Rirq;Rirq=madd;
				madld=Sbps;Sbps=Rbps;Rbps=madld;


			     }while(!(Inchar==27));
			break;}
		case '4':
			{
			printf("%c\n",Inchar);
			Raddr=0x3f8;Saddr=0x2f8;
			printf("default address COM1 0x3f8,COM2 0x2f8 (Y/N)?Y\b");
			do{
				Inchar=getch();
				}while(!(Inchar=='Y'||Inchar=='y'||Inchar=='N'||Inchar=='n'||Inchar==13));
			printf("%c\n",Inchar);
			if(Inchar=='N'||Inchar=='n')
				{
				printf("Please setup COM1 and COM2 address(Hex):\n");
				scanf("%x %x",&Raddr,&Saddr);
				if(!(Raddr<=0x3ff&&(Raddr%8==0)))
					Raddr=0x3f8;
				if(!(Saddr<=0x3ff&&(Saddr%8==0)))
					Saddr=0x2f8;
				}
			do{
				printf("COM1 and COM2 address are %x and %x.\n",Raddr,Saddr);
				testmodem();
				printf("connect com1 and com2:\n");
				printf("Press any key exit, but ENTER!");
				Inchar=getch();
				}while(Inchar==13);
			break;}
		case '5':
			{
			printf("%c",Inchar);
			test2in();

			rsdisableport(Saddr,Sirq);
			rsdisableport(Raddr,Rirq);
			do{
				pesck();
			  //	outportb(Saddr,6);     //清除发送中断
			    //	while((inportb(Raddr+5)&0x01)==1)   //清除接受中断
			      //	{inportb(Raddr);}
					InitComPort(Raddr,Rirq,Rbps,1,0x00);
					InitComPort(Saddr,Sirq,Sbps,2,0x00);

				buffin=buffout=0;
				flag=0;
				sendflag=0;
				k=0;
				if(Sirq<8)
					geninterrupt(Sirq+8);    //触发一次发送中断
				else
					geninterrupt(Sirq+0x70-8);
				for(;;)
					{
					sendprch();
					prch2();
					if(kbhit()!=0){
						Inchar=getch();
						if(Inchar==60||Inchar==27)
							{
								DisableComPort(Saddr,Sirq,2);
								DisableComPort(Raddr,Rirq,1);

						      break;}
						}
					}
				madd=Saddr;Saddr=Raddr;Raddr=madd;
				madd=Sirq;Sirq=Rirq;Rirq=madd;
				madld=Sbps;Sbps=Rbps;Rbps=madld;
				}while(!(Inchar==27));
			break;}
		default:
			{
			cprintf("1");
			test2in();

			do{
				pesck();
				Init(Saddr,0,Sbps,0x00);
				Init(Raddr,1,Rbps,0x00);
				enableports(Raddr,Rirq,1,0x00);

				buffin=buffout=0;
				flag=0;
				k=0;
				for(;;){
					prch();
					Inchar=str[k++];
					if(k>78) k=0;
					outportb(Saddr,Inchar);
					cprintf("%c",Inchar);
					x2=wherex();y2=wherey();
					delay(5);
					if(kbhit()!=0){
						Inchar=getch();
						if(Inchar==60||Inchar==27)
							{
							disableports(Raddr,Rirq);
							break;}
						}
					}
				madd=Saddr;Saddr=Raddr;Raddr=madd;
				madd=Sirq;Sirq=Rirq;Rirq=madd;
				madld=Sbps;Sbps=Rbps;Rbps=madld;
				}while(!(Inchar==27));
			}
		}
	window(1,1,80,25);
	textbackground(0);
	textcolor(7);
	clrscr();
	}
	}

⌨️ 快捷键说明

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