COM通讯例子(MS-DOS, TC3.0编译)

原创 2007年09月20日 19:11:00

学习串口通讯时在网上找到的例子,虽然不是很顺利,但总算在这个程序的基础上实现了发送和接受。
下面的代码可能不是最好,但是根据注释,理解COM口的初始化和通讯步骤是没有问题了。

#include <dos.h>  
#include 
<stdio.h>  
#include 
<conio.h>  

#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

#define PORT1 0x3F8  
#define INTVECT 0x0C  

int bufferin = 0;  
int bufferout = 0;  
char ch;  
char buffer[1025];  

void interrupt(*oldportlisr)(__CPPARGS);  

void interrupt PORTINT(__CPPARGS)  
...{
    
int c;
    
do
    
...{
        c 
= inportb(PORT1 + 5);

        
if (c & 1)
        
...{
            buffer[bufferin] 
= inportb(PORT1);
            bufferin
++;

            
if(bufferin == 1024)
            
...{
                bufferin 
= 0;
            }

        }


    }
while(c & 1);

    outportb(
0x20,0x20);
}


void main()
...{  
    
int c;
    FILE 
*fp;
    
    
/**//*clear Screen*/
    clrscr();

    
/**//*turn off interrupt - Port1*/
    outportb(PORT1 
+ 1,0);

    
/**//*save old interrupt Vector of later recovery*/
    oldportlisr 
= getvect(INTVECT);

    
/**//*set interrupt vector entry*/
    setvect(INTVECT,PORTINT);

    
/**//*PORT1 - Communication settings*/
    
/**//*SET DLAB ON*/
    outportb(PORT1 
+ 30x80);

    
/**//*Set Baud rate - divisor latch low byte*/
    
/**//*  
    0x01 = 115200 bps
    0x02 = 57600 bps
    0x06 = 19200 bps
    0x0c = 9600 bps
    0x18 = 4800 bps
    0x30 = 2400 bps
    
*/

    outport(PORT1 
+ 00x01);

    
/**//*Set Baud rate - divesor latch high byte*/  
    outportb(PORT1 
+ 10x00);  

    
/**//*8 bits,no parity ,1 stop bit*/  
    outportb(PORT1 
+ 30x03);  

    
/**//*FIFO Control Register*/  
    outportb(PORT1 
+ 2,0xC7);  

    
/**//*Turn on DTR,RTS,and OUT2*/  
    outportb(PORT1 
+ 4,0x0B);  

    
/**//*Set programmable interrupt controller*/  
    outportb(
0x21,(inportb(0x21& 0xEF));  

    
/**//*iNTERRUPT WHEN DATA RECEIVED*/  
    outportb(PORT1 
+ 1,0x01);  

    printf(
"  Sample Program.Press ESC to quit  ");  

    fp 
= fopen("com.log""wb");
    
    
do  
    
...{  
        
if(bufferin != bufferout)  
        
...{  
            ch 
= buffer[bufferout];  
            bufferout
++;  
            
if(bufferout == 1024)  
            
...{  
                bufferout 
= 0;  
            }
  
            printf(
"%c",ch);  
            fwrite(
&ch, 1,1, fp);
        }
  

        
if(kbhit())  
        
...{  
            c 
= getchar();  
            outportb(PORT1,c);  
        }

    }
while(c != 27);  

    fclose(fp);
    
    
/**//*Turn off interrupts - Port1*/  
    outportb(PORT1 
+ 1,0);  

    
/**//*MASK IRQ using PIC*/  
    
/**//*  
    COM1 (IRQ4) - 0X10  
    COM2 (IRQ3) - 0X08  
    COM3 (IRQ4) - 0X10  
    COM4 (IRQ3) - 0X08  
    
*/
  
    outportb(
0x21,(inportb(0x21| 0x10));  

    
/**//*Restore old interrupt vector*/  
    setvect(INTVECT,oldportlisr);  
}

 

除ms-dos.com病毒

  • 2008年12月19日 14:55
  • 2KB
  • 下载

MS-DOS 命令例子

更多的内容在这里  http://blog.sina.com.cn/s/blog_4b789c36010008wz.html,,,借鉴与这篇 cls清屏move    文件1   某个文件目录   ...
  • xxroger
  • xxroger
  • 2013年01月17日 14:28
  • 690

怀旧一下:用VC(VS2008)编译DOS下TurboC(TC3)的C程序

在嵌入开发板上做了一段时间的C语言开发后,今天突然心血来潮,想起大学时期在TurboC和TC3下写代码的情形。大一时宿舍里有台386(在当时是算比较先进的了),大一大二基本上都在玩DOS和WIN31、...
  • huzgd
  • huzgd
  • 2011年01月16日 02:17
  • 4876

在 Win7 下运行 TC 2.0 / TC3.0 / BC 3.1 / QB 4.5 等 DOS 开发工具

换了win7 有一段时间了,被win7的便捷和系统恢复的强大所深深吸引的同时,不免有许多让人觉得不便的地方,比如win7不支持DOS下的全屏图形模式,这是件很让人蛋疼的事情。据说VS2008+可以实现...

手工编写servlet_MS-DOS编译servlet_Servlet修改后自动载入

(1)手工编写servlet (2)MS-DOS编译servlet (3)Servlet修改后自动载入

elecfans[1].com-tc3.0tc

  • 2011年06月18日 10:19
  • 162KB
  • 下载

C# 3.0 socket通讯程序例子

  • 2011年07月13日 12:12
  • 46KB
  • 下载

TC COM插件接入百宝云注册码系统示例

TC COM插件接入百宝云注册码系统示例 接入之前请注意一下,这个免费的系统亲测能跑80个左右的用户。用户太多请安装升级版。TCDLL接入本系统分三步走: 一、首先安装好web网络验证系统,安装完之后...

TC3.0编译系统编写程序

  • 2009年12月07日 21:45
  • 8KB
  • 下载

C语言编译工具TC 3.0.rar

  • 2015年05月29日 19:14
  • 3.2MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM通讯例子(MS-DOS, TC3.0编译)
举报原因:
原因补充:

(最多只允许输入30个字)