Dos环境下串口编程.doc
《Dos环境下串口编程.doc》由会员分享,可在线阅读,更多相关《Dos环境下串口编程.doc(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include /*导入stdio.h头文件*/#include /*导入dos.h头文件夹*/#include /*导入conio.h头文件*/#define SIZE 1024*16 /*定义接收缓冲区大小*/#define PTL 0x01 /*波特率是115200*/unsigned char state;void init_com_interrupt(); /*初始化COM2端口,用于中断*/void init_com_chanxun(); /*初始化COM2端口,用于查询方式*/void send_wait();/*发送等待*/void receive_wait(); /*接收等
2、待*/long file_size(FILE *fp);/*计算文件大小*/void send_ch();/*发送字符,字符串*/void send_file();/*发送文件*/void receive_ch();/*接收字符,字符串*/void receive_file();/*接收文件*/void close_intr();/*关闭中断服务*/void interrupt (*old_int)(void);void interrupt far receive_intr();/*中断服务程序,用于中断接收文件*/void file_begin();int flag=1;/*outputb和
3、inportb对应的函数为_inp和_outp。使用时需要头文件。建议使用_inp和_outp,而不是使用inp和outp。因为_inp和_outp在Debug和Release都可以使用,而inp和outp只能用于Release设置。如果在Debug设置时使用inp和outp,编译时不会错,但会产生链接错误如下: error LINK2001:Unresolved external symbol _inp error LINK2001:Unresolved external symbol _outp fatal error LNK1120:2 Unresolved externals. 以上方
4、法只适用于Win9x,在Windows NT/2000下任何硬件I/O操作均需要通过设备启动程序。你可以借助DDK(如*int _inp( unsigned short port ); int _outp( unsigned short port, int databyte ); _inp原型为:int _inp(unsigned short port);port参数为指定的输入端口号。调用后,它从port参数指定的端口读入并返回一个字节,输入值可以是在0255范围内的任意无符号整数值。_outp原型为:int _outp(unsigned short port, int databyte )
5、; port 参数为指定的输出端口号,databyte 参数为输出的值。调用后,它将databyte参数指定的值输出到port 参数指定的端口并返回该值。databyte 可以是0255范围内的任何整数值。 这两个函数都没有错误值返回。 所在库为bios.h 在Win98下可以直接用, 但在NT下必须要挂driver*/void init_com_chanxun() /*初始化COM2端口*/ /*0x代表16进制*/ outportb(0x2FB,0x80); /*最高位置为1设置波特率*/ outportb(0x2F8,PTL); /*除数的低8位*/ outportb(0x2F9,0x0
6、0); /*除数的高8位*/ outportb(0x2FB,0x0b); /*2FB是通信线路控制寄存器,设置8数据位,一个停止位,有奇偶校验位*/ outportb(0x2FC,0x03); /*设置2FC端口调制解调控制寄存器,使8250输出DTR(数据终端准备好)和RTS(请求发送)*/ outportb(0x2F9,0x00); /*屏蔽所有中断*/void init_com_interrupt() outportb(0x2FB,0x80); /*设置波特率*/ outportb(0x2F8,PTL); outportb(0x2F9,0x00); outportb(0x2FB,0x0b
7、); outportb(0x2FC,0x0b); /*打开中断开关out2,这样8250产生的中断信号可以通过系统总线送给8259中断控制器*/ outportb(0x2F9,0x01); /*允许接收中断*/void send_wait()/*发送等待,检测发送寄存器*/ state=inportb(0x2FD); /*2FD为线路状态寄存器*/ state=state&0x20; /*判断发送寄存器是否为空*/ while(!state) state=inportb(0x2FD); /*循环检测,当state&0x20为1时表示可以发送数据*/ state=state&0x20; void
8、 close_intr()/*关闭中断*/ unsigned char i; disable(); /*关闭中断*/ outportb(0x2F9,0x00); /*恢复原来状态,不允许接收中断*/ outportb(0x2FC,0x03); /*设置MODEM控制寄存器,恢复原来状态*/ i=inportb(0x21); i=i|0x10; /*8259复位原先的IR4的状态*/ outportb(0x21,i); enable(); /*开中断*/ setvect(0x0c,old_int); /*恢复原来的中断向量*/void receive_wait() /*接收等待,检测接受寄存器*
9、/ state=inportb(0x2FD); /*2FD为线路状态寄存器*/ state=state&0x01; /*判断接受数据是否准备好*/ while(!state) state=inportb(0x2FD); state=state&0x01; void send_ch() /*发送字符,字符串*/ unsigned char ch; printf(1 Please input the strings you want to send:);L: send_wait(); /*发送之前查询发送寄存器是否为空*/ ch=getch(); printf(%c,ch); if(ch!=13)
10、 /*输入字符不是回车时继续发送*/ outportb(0x2F8,ch); /*发送字符到接收寄存器*/ goto L; else printf(nnttSend have completed!n);long file_size(FILE *fp)/*计算文件大小*/ long file_len; fseek(fp,0,SEEK_END);/*在文件指针中定位*/ file_len=ftell(fp); fseek(fp,0,SEEK_SET); return file_len; /*返回文件大小*/void send_file() FILE *fp; char bufSIZE; /*缓存*
11、/ char ch; long yiwei4; /*用来存放文件大小的4个字节*/ long count; char filename20; /*文件名*/ long file_len; /*文件大小*/ long size,sizey=0;/*还没有发送的文件长度*/ int i=0; long file=0; double time,time1; /*用于计算发送时间*/ double time2; double speed; /*用于计算发送速度*/ double baifen; float file1; printf(nPlease input the name of the file
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Dos 环境 串口 编程
限制150内