【求助】串口通讯 点击:1197 | 回复:4



kanezz

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 9回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2005年5月16日
发表于:2005-08-25 09:19:00
楼主
哪位大侠有 DOS下串口通讯的源代码啊 ?? 能否给小弟发一份 啊? (我去龚建伟的主页上下,可是现在下不了了) 帮帮忙啊! mail: kzztju@163.com



周公

  • 精华:10帖
  • 求助:0帖
  • 帖子:119帖 | 5549回
  • 年度积分:0
  • 历史总积分:6446
  • 注册:2002年11月26日
发表于:2005-08-25 18:54:00
1楼
什么语言?

kanezz

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 9回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2005年5月16日
发表于:2005-08-25 22:32:00
2楼
TC 3.0 您有吗??

gongkongedit

  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2005-11-12 15:23:00
3楼
PCMCIA串口卡(笔记本串口卡)是个选择之一

[img]http://www.peijian.com.cn/ebusiness/images/sp320_100_100.gif[/img]

1 USB转串口,兼容性稍差,价格便宜,不能连接PLC等,可满足部分需求。
2 端口复制器、扩展圬兼容性好,价高。
3 PCMCIA串口卡,兼容性好,可连接PLC等工控设备,性价比高:)

[url]http://www.peijian.com.cn[/url] 上有介绍,你可以去看看

叶帆

  • 精华:1帖
  • 求助:0帖
  • 帖子:18帖 | 88回
  • 年度积分:0
  • 历史总积分:239
  • 注册:2003年9月03日
发表于:2005-12-02 23:26:00
4楼
//这是基于嵌入式DOS系统,可以参考一下
//*************************************************************************
//**函 数 名:InitUART
//**输    入:BaudIdx - 波特率设定
//**        :           1:  115.2kbps
//**        :           2:  57.6kbps
//**        :           3:  38.4kbps
//**        :           6:  19.2kbps
//**        :           12: 9600bps
//**输    出:int - 0 成功  -1 失败
//**功能描述:端口初始化(默认COM2)
//**全局变量:
//**调用模块:
//**作    者:叶帆
//**日    期:2005-11-25 23:41:17
//**修 改 人:
//**日    期:
//**版    本:V1.0.0
//*************************************************************************
int InitUART( int BaudIdx )
{
   int intValue;

   tport = 0x2f8;
   outportb(tport + LCR, 0x80);   // DLAB = 1, set baud reg access
   outportb(tport + BRDH, BaudIdx>>8);
   outport(tport + BRDL, BaudIdx);
   outportb(tport + LCR, 0x1b);   // 8bit 1stop even_parity
   outportb(tport + IER, 0x03);   // set IER value
   outportb(tport + MCR, 0x08);   // set MCR value

   intValue = (int)inportb(tport + LSR);    // clear any line status interrupt
   if( intValue == -1 ) return -1;

   inportb(tport + RDR);         // clear any receive interrupt
   inportb(tport + IIR);         // clear any transmitter interrupt
   inportb(tport + MSR);         // clear any modem status interrupt
   outportb(tport + FCR, 0);      // disable FIFO in 16C550
   outportb(tport + IER, 0);      // some clones require this!?
   outportb(tport + IER, 0x01);

   IBufGetIdx = 0;
   IBufPutIdx = 0;
   OBufGetIdx = 0;
   OBufPutIdx = 0;

   return 0;
}

//*************************************************************************
//**函 数 名:COM2_ISR
//**输    入:__CPPARGS
//**输    出:无
//**功能描述:COM2口中断程序
//**全局变量:
//**调用模块:
//**作    者:叶帆
//**日    期:2005-11-25 23:41:17
//**修 改 人:
//**日    期:
//**版    本:V1.0.0
//*************************************************************************
void interrupt COM2_ISR(__CPPARGS)
{
   int             intValue;
   unsigned int    i;
   unsigned char   status;

   enable( );

   status = inportb(tport + IIR) & 7;
   while( status != 1 )
      {
      intValue = inportb(tport + LSR);
      switch (status)
     {
     case 0:                 // MODEM status change
          inportb(tport + MSR);
          break;
     case 2:                 // THR empty   发送数据,一个一个的发送
          StartSend:         // 标签
          //--------
          intValue = GetOutputData( );
          if( intValue != -1 )
          {
         outportb( tport+THR, intValue );
          }
          else
          {
         // disable THR interrupt as no data any more
         outportb( tport+IER, inportb(tport+IER) & 0xd);
         // wait transmit shift register empty
         for( i=0; i<10000; i++ )
         {
            if( (inportb(tport + LSR)&0x60) == 0x60 ) break;
         }
         // disable RS485 data send by RTS=0, DTR=0
         outportb( tport+MCR, 0x08);


          }
          break;
          //---------
     case 4:                 // received data available
          PutInputData( inportb( tport+RDR ) );
          break;
     case 6:                 // Line status change
          break;
     }
      status = inportb(tport + IIR) & 7;
      }

   // These ugly two lines are here because some PC clones will not give you the
   // THR empty interrupt if there is a simultaneous RX available interrupt.
   if( (inportb(tport + IER)&2) && (inportb(tport + LSR) & 0x20) )
    {
       goto StartSend;
    }
   outportb( 0x20, 0x63 );    // specific EOI command for IRQ3
}

//*************************************************************************
//**函 数 名:GetOutputData
//**输    入:无
//**输    出:int - -1 缓冲区无数据 ,非 -1 实际数据
//**功能描述:COM2口中断程序
//**全局变量:
//**调用模块:
//**作    者:叶帆
//**日    期:2005-11-25 23:41:17
//**修 改 人:
//**日    期:
//**版    本:V1.0.0
//*************************************************************************
int GetOutputData( )

    if (OBufGetIdx < OBufPutIdx)
    {
       return (int)OutputBuf[OBufGetIdx++];
    } 
    return -1;    
}

热门招聘
相关主题

官方公众号

智造工程师