CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

VC中读取串口数据的函数是什么?

楼主h_s_h(走遍千里)2000-07-18 13:00:00 在 VC/MFC / 基础类 提问

各位大虾,请教一个问题,两台计算机用串口通讯,在VC中用那些函数读、写消息。先谢谢了。 问题点数:50、回复次数:8Top

1 楼boyhill()回复于 2000-07-18 13:27:00 得分 30

我知道三种:  
  1、windows   API   CreateFile()  
  2、outp()、inp()  
  3、汇编Top

2 楼DragonCheng(飞龙在天)回复于 2000-07-18 13:28:00 得分 0

一般用CreateFile,ReadFile,WriteFile即可Top

3 楼bzjbest(义无反顾)回复于 2000-07-18 13:44:00 得分 20

看看下面的东东,应该有用,此程序可参考,但不必拘泥.  
   
  一、   初   始   化   串   行   通   讯   口    
   
  通   过   计   算   机   串   口   进   行   通   讯   之   前,   必   须   根   据   监   控   设   备   的   有   关   通   讯   参   数,   约   定   双   方   的   通   讯   方   式,   包   括   波   特   率   的   设   置、   奇   偶   位   校   验   及   停   止   位   的   设   立。   确   定   数   据   传   输   帧   格   式,   确   定UART   操   作   方   式。   逐   个   对   线   路   控   制   寄   存   器、   波   特   率   因   子   寄   存   器   和M0DEM   寄   存   器   写   入   操   作。    
   
  先   确   定   计   算   机   的   通   讯   口   地   址   是3F8   还   是2F8(   根   据   用   户   的   不   同   要   求,   可   加   插   卡   而   有3E8、2E8,   甚   至   使   用   多   用   户   卡   而   有3220、3228、4220、4228、5220、5228),   例   中   以2F8   做   为   端   口   地   址。   利   用_outp(PORT,0x0c)   将   波   特   率   设   置   为9600,(_outp(PORT,0x30)   将   波   特   率   设   置   为2400,_outp(PORT,0x18)   将   波   特   率   设   置   为4800)。    
   
  数   据   传   输   格   式   则   由   地   址PORT+3   确   定,   如   选   用   七   位   一   停   止   位   偶   校   验,   则   采   用outp(PORT+3,0x3a)   及outp(PORT+3   ,0x1a)   两   个   语   句;   如   选   用   八   位   一   停   止   位   无   奇   偶   校   验,   则   采   用outp(PORT+3,0x3a)   及outp(PORT+3   ,0x03)   两   个   语   句;   至   于   为   什   么,   可   参   考   有   关   异   步   通   讯   数   据   格   式   方   面   的   书。    
   
  二、   查   询   发   送   流   程    
   
  只   需CPU   检   测   到UART   发   送   器   保   持   寄   存   器   为   空,   即   向UART   输   出   一   个   字   符。   发   送   方   首   先   输   出RTS   和DTR   有   效,   检   测MODEM   寄   存   器,   只   有   收   到DEC   输   入   的CTS、DSR   有   效,CPU   才   向UART   输   出   一   发   送   字   符。    
   
  三、   查   询   接   收   流   程    
   
  只   需CPU   检   测   到UART   接   收   器   数   据   准   备   就   绪,   即   可   从   接   收   器   数   据   寄   存   器   中   读   取   一   字   符。   接   收   方   首   先   输   出   数   据   终   端   就   绪   有   效(DTR=1),   然   后   检   测MODEM   状   态   寄   存   器,   只   有DSR=1,CPU   才   接   收   一   字   符。    
   
  程   序    
  ----   为   了   编   程   的   方   便,   我   把   实   时   监   控   过   程   中   的   串   口   初   始   化、   串   口   接   收、   串   口   发   送   等   以   子   程   序   的   形   式   呈   现。    
   
  确   定   通   讯   口   地   址:int   PORT=0x2F8;  
   
  接   收   字   符   子   程   序:  
   
  char   near   readbyte(void)  
   
  {  
   
  int   time_limit;  
   
  char   sta;  
   
  time_limit=5000;  
   
  while   ((sta=inp(PORT+5)   &   0x01)   !=1)  
   
  {   time_limit--;  
   
  if   (time_limit==0)   {  
   
  /*printf("s=%4xm   ",sta);*/return   0;}  
   
  }  
   
  return   inp(PORT);  
   
  printf("%s",inp(PORT));  
   
  }  
   
  发   送   字   符   子   程   序:  
   
  void   sendbyte(unsigned   char   sdata)  
   
  {  
   
  long   int   time_limit;  
   
  time_limit=50000;  
   
  while   ((inp(PORT+5)   &   0xf0)   !=   0x60)  
   
  {   time_limit--;  
   
  if   (time_limit==0)   break;  
   
  }  
   
  outp(PORT,sdata);  
   
  }  
   
  串   口   初   始   化   子   程   序:  
   
  void   init_com(PORT)  
   
  {  
   
  char   i;  
   
  outp(PORT+3,0x80);  
   
  outp(PORT   ,0x0C);   /*   baud   rate   9600   */  
   
  outp(PORT+1,0);  
   
  /*8bit   1stop   no   even   */  
   
  outp(PORT+3   ,0x3a);  
   
  outp(PORT+3   ,0x03);    
   
  i=inp(PORT+5)   &   0xfe;    
   
  outp(PORT+5,i);  
   
  }  
   
  字   符   串   发   送   子   程   序:  
   
  void   sendstrn(char   *mess)  
   
  {  
   
  for   (;   *mess;   mess++)  
   
  sendbyte(*mess);  
   
  sendbyte(0X0D);  
   
  /*sendbyte(0X0A);   */  
   
  }  
   
  简   单   的   主   程   序:  
   
  init_com(ox2f8);  
   
  sendstrn(PORT,"FUNC");  
   
  j=0;  
   
  line=0;  
   
  do   {  
   
  for(i=0;i<   25;i++)   ttemp[i]='\0';  
   
  if(readbyte(PORT)=='M')   {  
   
  i=0;  
   
  do   {  
   
  ttemp[i]=readbyte(PORT);  
   
  i++;  
   
  }while((ttemp[i-2]!=13)&&(ttemp[i-1]!=10));  
   
  line++;  
   
  dcqd.TextOut(450,line*20+180,ttemp);}  
   
  j++;}  
   
  while((j<   1000)&&(line<   5));  
   
     
  Top

4 楼zzh()回复于 2000-07-18 17:17:00 得分 0

我改写了一个串口类,可以用来收发数据,稍加改造,可加入MODEM控制,如果需要,请来EMAL:zzh1415@21cn.comTop

5 楼a8e(坎坷的菜贩)回复于 2000-07-18 17:41:00 得分 0

不知ActiveX控件合不合你的口味?可以用MsComm控件试试看。Top

相关问题

  • 求助!串口读取数据是读线程函数问题
  • vc++做图像读取!TIFFAdvanceDirectory函数
  • vc串口问题,关于WaitForSingleObject(),这个函数的强解,??
  • 200分求助:如何用vc++函数读取系统时间?
  • 100分 求一个VC++读取csv文件的函数
  • vc++中如何用API函数实现串口编程,谁有源代码???
  • 高分求教:怎么样在vc++中用api函数实现串口通信?
  • vc入门问题:用API函数做串口通信时,如何向串口发送一个回车键,我的函数如下:
  • VC有没有一行一行读取文件的函数,在线
  • 请问一下vc中读取文件大小的函数是哪个?

关键词

  • cpu
  • outp
  • f8
  • inp
  • port
  • 寄存器
  • 口
  • sendbyte
  • uart
  • 字符

得分解答快速导航

  • 帖主:h_s_h
  • boyhill
  • bzjbest

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo