`
mmdev
  • 浏览: 12949961 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

DOS下串口通信程序来传送文件的源代码。

阅读更多

我们PC/104系统只能装DOS,并且只有串口。平时调试很不方便,需要将电脑里的程序写到软盘,然后
再通过软盘复制到开发装置。可怜软驱还不争气,到现在已经坏了好多软盘了。而且调试间和办公室离得比较远。到了调试间软盘读不出来,很郁闷。

这些天任务不是很重,就利用现有资源把串口程序整理了一下。做了一个DOS下的文件传送程序。在短距离下调试通过,不过长距离或者现场干扰较大的话,就不能保证传送的正确了。毕竟程序里没有校验文件功能,等以后再加吧。以后还要加一个传送整个文件夹的功能。
抛砖引玉。

接收程序:

#include<dos.h>
#include
<fstream.h>
#include
<conio.h>
#include
<stdio.h>
#include
<stdlib.h>
#include
<math.h>
#defineRXD0//接收
#defineTXD0//发送
#defineLSB0//波特率调节低8位
#defineMSB1//波特率调节高8位
#defineIER1//中断起用寄存器
#defineIIR2//中断标识寄存器
#defineLCR3//线路控制寄存器
#defineMCR4//调制解调器控制寄存器
#defineLSR5//线路状态寄存器
#defineMSR6//调制解调器状态寄存器
#defineIERV1
#defineOUT20x08
#defineERTS2
#defineEDTR1
#defineEMPTY0X20
#defineREADY0X30
#defineICREG0X20
#defineIMASKREG0X21
#defineEOI0X20
#defineWAITCOUNT5000
#defineBUFFLEN2048//用于存储字符的数组的界
#defineALTE0X12
#defineALTQ0X10
#defineSER_BAUD_120096
#defineSER_BAUD_240048
#defineSER_BAUD_96000x0C
#defineSER_BAUD_192006
#defineSER_STOP_10/*/1stopbitpercharacter*/
#defineSER_STOP_24/*/2stopbitspercharacter*/
#defineSER_BITS_50/*/send5bitcharacters*/
#defineSER_BITS_61/*/send6bitcharacters*/
#defineSER_BITS_72/*/send7bitcharacters*/
#defineSER_BITS_83/*/send8bitcharacters*/
#defineSER_PARITY_NONE0/*/noparity*/
#defineSER_PARITY_ODD8/*/oddparity*/
#defineSER_PARITY_EVEN24/*/evenparity*/
intport;
intComNum;
unsignedportaddr;
unsignedportf;
unsigned
intbaudtable[]=...{0x180,0xc0,0x60,0x30,0x18,0x0c,0x06};
unsigned
charparitytable[]=...{0x08,0x18,0x00,0x28,0x38};
unsigned
charbuffer[BUFFLEN];//recvbuf
intbuffin=0;
intbuffout=0;
intincount=0;
intoutcount=0;
voidinterrupt(*vect_com)(...);


voidputb(unsignedcharch)//writeachartotherecvbuf将中断得到的数据写到缓冲区
...{
inttemp;
temp
=buffin;
if(++buffin==BUFFLEN)
buffin
=0;
if(buffin!=buffout)
...{buffer[buffin]=ch;
//printf("bufferin[%d]=%c",buffer[buffin]);
//getch();
}

else
buffin
=temp;
}
;
unsigned
chargetb()//readacharfromtherecvbuf
...{
if(buffout!=buffin)
...{
if(++buffout==BUFFLEN)
buffout
=0;
//printf("bufferout[%d]=%c",buffout,buffer[buffout]);
return(buffer[buffout]);
}

else
return(0xff);
}
;
/**//*unsignedcharsender(unsignedcharch)
{

outportb(portaddr2+TXD,ch);
printf(" senderoutportdata=%c ",ch);
outcount++;
return(1);

};
*/

voidinterruptreceiver(...)
...{
unsigned
charch;
ch
=inportb(portaddr+RXD);
putb(ch);
incount
++;//记录接收了多少个数据。
outportb(ICREG,EOI);
}
;
voidSerInit(intbaud,intconfiguration)
...{
disable();
outportb(portaddr
+LCR,0x80);
outportb(portaddr
+LSB,baud);
outportb(portaddr
+MSB,0x00);
outportb(portaddr
+LCR,configuration);
enable();
}
;
voidSerOpen(void)
...{
vect_com
=getvect(portf+8);
disable();
inportb(portaddr
+RXD);
inportb(portaddr
+MSR);
inportb(portaddr
+LSR);
inportb(portaddr
+IIR);
outportb(portaddr
+IER,IERV);
outportb(portaddr
+MCR,OUT2|ERTS|EDTR);
outportb(IMASKREG,inportb(IMASKREG)
&(~(1<<portf)));
setvect(portf
+8,receiver);
enable();
}
;
voidSerClose(void)
...{
disable();
outportb(portaddr
+IER,0);
outportb(portaddr
+MCR,0);
outportb(IMASKREG,inportb(IMASKREG)
|(1<<portf));
enable();
setvect(portf
+8,vect_com);
}
;
voidGetportaddr(intport)
...{
switch(port)
...{
case0:portaddr=0x3F8;break;
case1:portaddr=0x2F8;break;
case2:portaddr=0x3E8;break;
case3:portaddr=0x2E8;break;
}

portf
=(port==0)?4:3;
}
;

voidInt()
...{
unsigned
charkey,key2;
port
=ComNum-1;
if(peek(0x40,port*2)==0)
...{
printf(
"havenospecialcom. ");
exit(
1);
}

else
...{
printf(
"Theusedportis:COM%d ",ComNum);
}
;
Getportaddr(port);
//得到串口地址
SerInit(SER_BAUD_9600,SER_PARITY_EVEN|SER_BITS_8|SER_STOP_1);//初始化串口,设置波特率等
SerOpen();
do
...{

if(kbhit())
...{
key2
=getch();
if(key2==27)...{break;}

}
;
key
=getb();
if(key!=0xff)
...{
printf(
"%x ",key);
FILE
*fp;
fp
=fopen("C:\Receivedata.dat","ab");//可选择接收数据的存放文件路径和文件名
if(fp==NULL)printf("Fileopenerror!");
//fputc(key,fp);
fwrite(&key,sizeof(unsignedchar),1,fp);
fclose(fp);

}


}
while(key2!=27);
SerClose();


//printf("%dcharhasbeenreceived ",incount);
//printf("%dcharhasbeensended ",outcount);
//printf(" sum=%d ",sum);
}


voidmain()//com1receive
...{
printf(
"PleaseinputthereceiveCOMnum:(1~4) ");
cin
>>ComNum;
printf(
"thecurrentcomsetis:9600,even,databits8,stop1,");
Int();

printf(
" OVER ");
exit(
0);
}
;

---------------
发送文件程序

#include<dos.h>
#include
<bios.h>
#include
<stdio.h>
#include
<math.h>
#include
<conio.h>
#include
<graphics.h>
#ifdef__cplusplus
#define__CPPARGS...
#else
#define__CPPARGS
#endif
#defineSER_RBF0
#defineSER_THR0
#defineSER_IER1
#defineSER_IIR2
#defineSER_LCR3
#defineSER_MCR4
#defineSER_LSR5
#defineSER_MSR6
#defineSER_DLL0
#defineSER_DLH1

#defineSER_BAUD_120096
#defineSER_BAUD_240048
#defineSER_BAUD_960012
#defineSER_BAUD_192006
#defineSER_GP028
#defineCOM_10x3F8
<img al
分享到:
评论

相关推荐

    DOS下串口通信程序来传送文件的C源代码.rar_DOS_c 串口通信_dos rs232传输_dos 串口_serial do

    DOS下串口通信程序来传送文件的C源代码,能实现文件传送

    Visual C++/Turbo C串口通信编程实践及源代码-3

    Visual C++/Turbo C串口通信编程实践及源代码 第1章 轻松体验串口通信编程与调试 1 1.1 使用串口调试助手来体验串口通信 1 1.2 体验windows环境下的visual c++串口通信编程 4 1.3 体验dos环境下turbo c串口通信...

    Visual C++/Turbo C串口通信编程实践 及源代码-1

    Visual C++/Turbo C串口通信编程实践 及源代码 第1章 轻松体验串口通信编程与调试 1 1.1 使用串口调试助手来体验串口通信 1 1.2 体验windows环境下的visual c++串口通信编程 4 1.3 体验dos环境下turbo c串口通信...

    Visual C++/Turbo C串口通信编程实践及源代码-2

    Visual C++/Turbo C串口通信编程实践及源代码 第1章 轻松体验串口通信编程与调试 1 1.1 使用串口调试助手来体验串口通信 1 1.2 体验windows环境下的visual c++串口通信编程 4 1.3 体验dos环境下turbo c串口通信...

    visual C++_Turbo C串口通信编程实践

    1.6体验DOS环境下Turbo C串口通信编程 第2章 VC多线程串口编程工具CSerialPort类 2.1 类功能及成员函数介绍 2.2 应用CSerialPort类编制基于对话框的应用程序 2.3 应用CSerialPort类编制基于单文档的应用程序 ...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 第二版 电子版

    本书从编程实践的角度详细介绍了Windows环境下和DOS环境下的串口通信的基本方法,并根据当前串口与网络结合发展的趋势,介绍了串口与网络TCP/IP、远程控制与监测相结合的一些解决方案和编程要点。由于编程步骤详尽...

    Visual C++_Turbo C 串口通信编程实践.(电子工业.龚建伟.熊光明) 源码光盘

    本书从编程实践的角度详细介绍了Windows环境下和DOS环境下的串口通信的基本方法,并根据当前串口与网络结合发展的趋势,介绍了串口与网络TCP/IP、远程控制与监测相结合的一些解决方案和编程要点。由于编程步骤详尽...

    Linux指令一周通 (技术图书大系).azw3

    1.34 indent指令:调整C原始代码文件的格式 1.35 less指令:一次显示一页文本 1.36 lha指令:压缩或解压缩文件 1.37 ln指令:链接文件或目录 1.38 locate指令:查找文件 1.39 lpd指令:打印管理程序 1.40 lpq 指令:...

    windows驱动开发技术详解-part2

    要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。  2.1 Windows操作系统概述  2.1.1 Windows家族  2.1.2 Windows特性  2.1.3 用户模式和内核模式  2.1.4 操作系统与...

    Windows驱动开发技术详解的光盘-part1

    同时,还针对流行的PCI驱动程序、USB驱动程序、虚拟串口驱动程序、摄像头驱动程序、SDIO驱动程序进行了详细的介绍,本书最大的特色在于每一节的例子都是经过精挑细选的,具有很强的针对性。力求让读者通过亲自动手...

    数据采集系统芯片ADuC812原理与应用

    3.5 I2C接口通信程序举例 第四章 ADμC812的C语言编程 4.1 C语言源程序的创建与编译 4.1.1 μVision-51开发环境设置 4.1.2 创建项目 4.1.3 编写C语言源文件 4.1.4 C-源程序编译 4.2 C-源代码仿真 4.2.1 设置...

    RED HAT LINUX 6大全

    9.1.2 自己构造源代码 156 9.2 服务器运行配置的设置 157 9.2.1 编辑httpd.conf文件 158 9.2.2 .htaccess文件和访问限制 160 9.3 虚拟主机 161 9.3.1 基于地址的虚拟主机 161 9.3.2 基于名字的虚拟主机 162 9.4 日志...

    ELDK使用与开发手册

    还免费提供了所有的源代码,包括全部补丁、扩展文件、以及用于编译开发工具使用的程序和脚本。安装包都是基于RPM包管理器。 3.1 获取ELDK 可以通过以下方式获得ELDK。 ·DENX计算机系统光盘 ·从以下服务器中下载 ...

    1345个易语言模块

    伟业极速文件传输服务器.ec 伟 业超级列表框列宽尺寸自动调整.ec 伟业高级表格列宽尺寸自动调整.ec 传世注册.ec 低级功能模块.ec 供应商管理模 块.ec 保存图片(1.0).EC 保存图片1.0.ec 保存扩展界面设置.ec 保护.ec ...

    1350多个精品易语言模块

    伟业极速文件传输服务器.ec 伟 业超级列表框列宽尺寸自动调整.ec 伟业高级表格列宽尺寸自动调整.ec 传世注册.ec 低级功能模块.ec 供应商管理模 块.ec 保存图片(1.0).EC 保存图片1.0.ec 保存扩展界面设置.ec 保护.ec ...

    都是想要的考试题 速度下载

    8. RS-232C接口是常用的串行通信接口,这个接口可用地址总线寻址。 ( ) 9. 8086/8088在当前指令执行完且IF=1的情况下可以响应一个外部INTR中断请求。( ) 10. 8086被复位后,寄存器Flag、IP、CS的内容分别是0000 ...

Global site tag (gtag.js) - Google Analytics