串口通信只能用com1,com2不可用的问题

houzy 2003-08-29 12:53:29
我的程序片断如下:

#define PORT1 0x3F8 /* Port Address Goes Here */
#define PORT2 0x2F8 /* Defines Serial Ports Base Address */

#define INTVECT 0x0C /* Com Port's IRQ here */
/* COM1 - 0x0C */
/* COM2 - 0x0B */
/* COM3 - 0x0C */
/* COM4 - 0x0B */

/*初始化*/
disable();

outportb(PORT1+1 , 0); /* Turn off interrupts - Port1 */
oldport1isr = getvect(INTVECT); /*Save old Interrupt Vector for */
/* later recovery */
setvect(INTVECT, UartInterrupt); /*Set Interrupt Vector Entry */
/* PORT 1 - Communication Settings */

outportb(PORT1+3,0x03); /*8bit 1stopbit even parity*/
outportb(PORT1+4,0xf); /*DTR=1 RTS=1*/
outportb(PORT1+3,inportb(PORT1 +3)¦0x80); /*DLAB=1*/
outportb(PORT1,0x0c); /*9600bps*/
outportb(PORT1+1,0);
outportb(PORT1+3,inportb(PORT1 +3)&0x7f); /*DLAB=0*/
setvect(INTVECT,UartInterrupt);
outportb(0x21,inportb(0x21)&0xef);/*8259 rigister 0x21 BIT4=0*/

outportb(PORT1+1,1); /*只允许RXT中断*/

enable();


/**********************************************************************
* 串口接收中断 *
**********************************************************************/
/*串口中断*/
void interrupt far UartInterrupt (void){ /*中断服务程序*/



if(inportb(PORT1+2)==0x04){

c = inportb(PORT1);

rdata[bufferin]=c;
bufferin++;

sign = 1;

outportb(0x20,0x20);
}


/*发送程序片断*/
for(bufferout=0;bufferout<strlen(test);bufferout++){

c=test[bufferout];
while(!(PORT1+5&&0x20));
outportb(PORT1,c);

}


如果使用PORT1,收发没有问题。当程序中所有PORT1换为PORT2,串口中断INTVECT也相应改为0x0B(也就是使用com2口咯) 就不行了,收发都不行。应该说com1换为com2只需要修改两个参数阿,串口中断INTVECT不用改吧?请大家帮忙看看。

...全文
458 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houzy 2003-08-30
  • 打赏
  • 举报
回复
附带的问题:http://expert.csdn.net/Expert/topic/2205/2205462.xml?temp=.728451

请过去看看!
houzy 2003-08-30
  • 打赏
  • 举报
回复
谢谢你们,我已经搞定。
wangxiangsjz 2003-08-29
  • 打赏
  • 举报
回复
楼上说的对,要开中断。
kingcaiyao 2003-08-29
  • 打赏
  • 举报
回复
串口的中断向量当然要改,你注意你程序中的这两行:
outportb(0x21,inportb(0x21)&0xef);/*8259 rigister 0x21 BIT4=0*/
outportb(PORT1+1,1);
21端口是负现管理鼠标,键盘,串口等中断
你将COM1改成COM2时,却并没有对21端口作出改变,当然会出错。你应该将这一些改成:
outportb(0x21,inportb(0x21)&0xcf)
或者outportb(0x21,inportb(0x21)&0xf7)
不好意思,我已经记不起21端口的8位中每一位所控制的端口各代表是什么,所以我说要么是:
outportb(0x21,inportb(0x21)&0xcf)
要么是:
outportb(0x21,inportb(0x21)&0xf7),所以你要看看到底21端口中到底哪两位用来控制COM1和COM2

wangxiangsjz 2003-08-29
  • 打赏
  • 举报
回复
你的机器有Com2吗?
Visual C++/Turbo C串口通信编程实践 及源代码 第1章 轻松体验串口通信编程与调试 1 1.1 使用串口调试助手来体验串口通信 1 1.2 体验windows环境下的visual c++串口通信编程 4 1.3 体验dos环境下turbo c串口通信编程 12 第2章 多线程串口编程工具cserialport类 16 2.1 cserialport类的功能及成员函数介绍 16 2.2 应用cserialport类编制基于对话框的应用程序 30 2.3 应用cserialport类编制基于单文档的应用程序 35 2.4 对cserialport类的改进 40 2.4.1 改进一:ascii文本和二进制数据发送方式兼容 40 2.4.2 改进二:也许能解决内存泄漏 43 2.4.3 改进三:彻底关闭串口,释放串口资源 44 第3章 控件mscomm串口编程 46 3.1 mscomm控件介绍 46 3.1.1 vc中应用mscomm控件编程步骤 46 3.1.2 mscomm控件串行通信处理方式 47 3.1.3 mscomm 控件的属性说明 48 3.1.4 mscomm控件错误信息 55 3.2 使用mscomm控件的几个疑难问题 56 3.2.1 使用variant 和safearray 数据类型从串口读写数据 56 .3.2.2 mscomm控件能离开对话框独立存在吗 59 3.2.3 如何发送接收ascii值为0和大于128的字符 60 3.2.4 在同一程序中用mscomm控件控制多个串口的具体操作方法 62 3.2.5 解决使用控件编程时程序占用的内存会不断增大的问题 62 3.2.6 在mscomm控件串口编程时遇到的其他问题 63 3.3 在基于单文档(sdi)程序中应用mscomm控件 63 3.4 应用mscomm控件控制多个串口实例 69 3.5 串口与modem拨号应用简例 76 3.5.1 创建工程 76 3.5.2 代码分析 78 3.5.3 应用 85 第4章 windows api串口编程 87 4.1 windows api串口编程概述 87 4.2 api串口编程中用到的结构及相关概念说明 89 4.2.1 dcb(device control block)结构 89 4.2.2 超时设置commtimeouts结构 92 4.2.3 overlapped异步i/o重叠结构 94 4.2.4 通信错误与通信设备状态 95 4.2.5 串行通信事件 96 4.3 windows api串行通信函数 97 4.4 win32 api串口通信编程的一般流程和特殊实例 116 4.4.1 win32 api串口通信编程的一般流程 116 4.4.2 用查询方式读串口 116 4.4.3 同步i/o读写数据 117 4.4.4 关于流控制的设置问题 118 4.5 cserialport类中的api函数编程应用剖析 119 4.6 win32 api串口编程tty(虚拟终端)实例 128 4.6.1 建立程序工程 128 4.6.2 建立串口设置对话框 129 4.6.3 编写ctermdoc类的相关代码 132 4.6.4 小结 141 4.6.5 在ctermview类中字添加符键入处理代码与串口接收处理代码 142 第5章 串口调试助手v2.2编程 147 5.1 建立scomm程序工程实现界面功能 147 5.2 串口的初始化及关闭 150 5.3 串口数据的发送与接收及十六进制数据的处理 151 5.3.1 十六进数据发送处理 152 5.3.2 手动发送处理 152 5.3.3 自动发送处理 153 5.3.4 接收处理及十六进制显示 154 5.4 其他辅助功能的实现 156 5.4.1 接收数据的文件保存 156 5.4.2 实现小文件发送 158 5.4.3 图钉按钮功能使程序能浮在最上层 161 5.4.4 对话框动画图标的实现 162 5.4.5 超链接功能的实现 164 5.4.6 如何打开帮助网页文件 164 第6章 dos环境下的turbo c串口编程及通用实例gserial类 168 6.1 pc机异步通信适配器8250及其编程操作 169 6.1.1 ins8250内部寄存器及其选择方式 169 6.1.2 波特率设置 169 6.1.3 数据位、奇偶校验、停止位等数据格式设置 170 6.1.4 查询i/o方式相关设置 171 6.1.5 中断i/o通信方式相关设置 171 6.1.6 modem寄存器 172 6.2 comrxtx程序实例 173 6.3 通用实例程序gserial类 175 6.4 用gserial类控制多串口 186 6.5 多串口编程pc机高号中断8259a可编程中断控制器的控制 195 第7章 串口通信用户层协议的编制与数据处理方法 197 7.1 通信协议的编制 197 7.1.1 为什么要编制用户通信协议 197 7.1.2 串口通信中用户层协议编制原则 199 7.1.3 在串口通信中几种常用的用户层协议 200 7.2 串口通信数据包处理方法编程实例 202 7.2.1 编程任务 203 7.2.2 编程步骤 203 7.2.3 程序测试 216 第8章 单片机串口通信 218 8.1 单片机串口硬件系统及c51程序开发 218 8.1.1 较典型的单片机硬件系统实例 218 8.1.2 c51语言及程序简介 220 8.1.3 开发c51程序的利器keil c51 uvision2及串口程序仿真 221 8.2 c51单片机串口通信程序实例 226 8.2.1 实例一 226 8.2.2 实例二 227 第9章 串口与网络结合的解决方案及编程 230 9.1 串口与网络结合的硬件解决方案 230 9.2典型串口与联网的设备 231 9.2.1 nport5400系列产品的特点 231 9.2.2 nport 5400系列产品的典型应用介绍 233 9.2.3 nport5400系列产品的设置与编程测试 235 9.3 与access数据库结合的串口通信实例 237 9.3.1 微机网络检测系统说明 237 9.3.2 创建odbc数据源 238 9.3.3 创建工程 239 9.3.4 程序简介 244 9.4 与winsock结合的串口通信实例 246 9.4.1 客户端应用程序 247 9.4.2 服务器应用程序 252 9.5 在已经编好的串口通信程序中加入网络通信功能 260 9.5.1参照mfc appwizard创建winsockets程序 261 9.5.2 利用windows sockets api和第三方提供的类进行编程 262 9.6 串口通信用于遥控操作简例 262 第10章 计算机串口与其他设备通信编程实例 266 10.1通过串口收发短消息 266 10.1.1 sms编码规范及编码与解码例程 266 10.1.2 at命令收发短消息实例 273 10.1.3 "实时"接收短消息的方法 281 10.1.4 用串口收发sms短信编程的一些讨论 283 10.2 计算机与rabbit 2000嵌入式系统通信编程实例 286 10.2.1 rabbit 2000微处理器介绍 286 10.2.2 动态c(dynamic c)语言介绍 287 10.2.3 某车载无线调度系统实例介绍 288 10.3 计算机与plc通信程序实例 294 10.4 matlab环境串口编程通信实例 295 10.4.1 matlab串口类serial应用 295 10.4.2 通过串口使matlab simulink与下位机通讯进行控制 299 10.4.3 xpc目标环境下串口通信实现 299 第11章 串口通信基本概念及标准 302 11.1 串口通信基本概念 302 11.1.1 串行通信概述 302 11.1.2 单工、半双工和全双工的定义 305 11.1.3 同步传送与异步传送 306 11.1.4 串行通信协议 306 11.2 rs-232-c串口标准 309 11.2.1 rs-232-c标准 309 11.2.2 rs-232-c串行通信接线实例 312 11.3 rs-422/485串口标准 314 11.3.1 概述 314 11.3.2 rs-422与rs-485串行接口标准 315 11.3.3 rs-422与rs-485的网络安装注意要点 317 11.3.4 rs-232、rs422、rs485电气参数对比 318 11.4 串口调试注意事项 318 11.5 常用数据校验法 318 11.5.1 奇偶校验 318 11.5.2 循环冗余码校验 319 11.6 串口连接和tcp/ip连接对比 320 11.7 现场总线与rs-232、rs-485的本质区别 320 11.8 modem通信技术 320 11.8.1 modem的基本工作原理 320 11.8.2 modem的功能 322 11.8.3 modem的分类 322 11.8.4 modem的安装 324 11.8.5 modem v.92标准介绍 326 11.8.6 modem的速度 327 11.8.7 modem优化方法 328 11.8.8 modem命令/at命令 329 第12章 不占用串口的串口数据捕捉 338 12.1 驱动程序的基本概念:vxd与wdm 338 12.1.1 虚拟设备驱动程序vxd 338 12.1.2 win32驱动程序模型wdm 340 12.1.3 在不同操作系统下选用哪种驱动程序模式 341 12.2 vxd示例程序介绍--vtoolsd中的commhook 341 12.3 串口数据捕捉实例程序 351 12.3.1 编程任务 351 12.3.2 编程步骤 351 12.4 虚拟串口简介 364 附录a turbo c说明 366 附录b ascii码表 376 不好意思,我只能上传15M文件,分4个压缩包
CommMonitor侦测、拦截、逆向分析串口通信协议,是侦测RS232/422/485串行端口的专业工具软件,是软硬件工程师的最佳助手。CommMonitor 能侦听、拦截、记录、分析串行通信协议,让您对应用程序操作串行端口的过程和细节,让您及时的模拟被侦听程序或设备的数据、控制流,提高工作效率。 1、新增对虚拟串口的监视,改变了原来CommMonitor3.0不能对虚拟串口的监视; 2、无DLL无驱动,不会对全局进程进行HOOK,只对指定的进程进行HOOK; 3、使用纯API全新编写了所有监视模块,安全稳定高效; 4、不会占用串口(COM口),只会对相关的API进行拦截; 5、可以在串口打开后监控,一改有些监控软件只能在打开前监控; 6、能捕获串口(COM口)的打开、读写数据 、关闭操作,并能同时监视指定进程的最多255个串口; 7、可以直接拖动窗口捕获图标到目标进程窗口上选取进程; 8、软件免费,无任何功能限制,操作简易下载打开即可运行,勿须安装; 9、可能会和卡巴斯基或其他杀毒软件发生冲突,卡巴斯基会拦截串口监视精灵的HOOK API线程注入过程,使用时如发现有此问题请关闭卡巴斯基,或将串口监视精灵添加到卡巴斯基的信任列表中,如何添加:打开卡巴斯基,单击[设置]-[保护]-[主动防护]-[程序完整性保护]-[设置]-[关键程序]里添加 串口监视精灵即可。 不要对无关的进程进行HOOK; 10、提供SDK二次开发接口DEMO, DLL文件位置:SDK二次开发接口\bin\PMonitorComm.dll CommMonitor串口监视精灵 v6.1更新:    1.修改部分内存分配问题;    2.新增多种语言OCX Demo;    3.驱动Loader直接封装在EXE中,去掉DLL;    4.增加Inno安装包。
CommMonitor侦测、拦截、逆向分析串口通信协议,是侦测RS232/422/485串行端口的专业工具软件,是软硬件工程师的最佳助手。CommMonitor 能侦听、拦截、记录、分析串行通信协议,让您对应用程序操作串行端口的过程和细节,让您及时的模拟被侦听程序或设备的数据、控制流,提高工作效率。 1、新增对虚拟串口的监视,改变了原来CommMonitor3.0不能对虚拟串口的监视; 2、无DLL无驱动,不会对全局进程进行HOOK,只对指定的进程进行HOOK; 3、使用纯API全新编写了所有监视模块,安全稳定高效; 4、不会占用串口(COM口),只会对相关的API进行拦截; 5、可以在串口打开后监控,一改有些监控软件只能在打开前监控; 6、能捕获串口(COM口)的打开、读写数据 、关闭操作,并能同时监视指定进程的最多255个串口; 7、可以直接拖动窗口捕获图标到目标进程窗口上选取进程; 8、软件免费,无任何功能限制,操作简易下载打开即可运行,勿须安装; 9、可能会和卡巴斯基或其他杀毒软件发生冲突,卡巴斯基会拦截串口监视精灵的HOOK API线程注入过程,使用时如发现有此问题请关闭卡巴斯基,或将串口监视精灵添加到卡巴斯基的信任列表中,如何添加:打开卡巴斯基,单击[设置]-[保护]-[主动防护]-[程序完整性保护]-[设置]-[关键程序]里添加 串口监视精灵即可。 不要对无关的进程进行HOOK; 10、提供SDK二次开发接口DEMO, DLL文件位置:SDK二次开发接口\bin\PMonitorComm.dll CommMonitor串口监视精灵 v6.1更新: 1.修改部分内存分配问题; 2.新增多种语言OCX Demo; 3.驱动Loader直接封装在EXE中,去掉DLL; 4.增加Inno安装包。

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧