免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4811 | 回复: 19
打印 上一主题 下一主题

[!求助!] 纯DOS 下串口中断程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-11-19 10:13 |只看该作者 |倒序浏览
做中断涉及到dos.h之类的硬件部分,

请教在VC环境下,怎么做呢?

TC 下的中断语句,在VC下编译通不过阿,咋办。
  void           interrupt(*oldvects[2])();
  void   interrupt com_int(void)

偶被困在这里了 :(

如果那位有现成的纯dos下中断接受串口数据的程序就最好了~~~~

论坛徽章:
0
2 [报告]
发表于 2003-11-19 10:26 |只看该作者

[!求助!] 纯DOS 下串口中断程序

如果只是要从串口读写数据的话可以用相关的API做,通过windows消息驱动。
如果是些特殊的硬件之类的,可能只有写一个驱动程序了吧,vc里是不能象DOS下面那样直接改中断向量表的,这不是能自已找函数替代的问题,而是体系结构上的区别。

论坛徽章:
0
3 [报告]
发表于 2003-11-19 10:30 |只看该作者

[!求助!] 纯DOS 下串口中断程序

纯DOS下的程序可能在VC上用不起来的,不过在win9x下通过倒是可以直接操作IO端口,这倒是和DOS下差不多。在2000下也能找到支持端口操作的函数库,但不管是2000还是9x,想自已钩中断就麻烦多了。

论坛徽章:
0
4 [报告]
发表于 2003-11-19 10:30 |只看该作者

[!求助!] 纯DOS 下串口中断程序

纯DOS下的程序可能在VC上用不起来的,不过在win9x下VC倒是可以直接操作IO端口,这倒是和DOS下差不多。在2000下也能找到支持端口操作的函数库,但不管是2000还是9x,想自已钩中断就麻烦多了。

论坛徽章:
0
5 [报告]
发表于 2003-11-19 12:32 |只看该作者

[!求助!] 纯DOS 下串口中断程序

原帖由 "qjlemon" 发表:
如果只是要从串口读写数据的话可以用相关的API做,通过windows消息驱动。
如果是些特殊的硬件之类的,可能只有写一个驱动程序了吧,vc里是不能象DOS下面那样直接改中断向量表的,这不是能自已找函数替代的问题,而?.........


谢谢,我做的程序是在没有WINDOWS的系统上运行的,还能用windows 消息驱动吗?

论坛徽章:
0
6 [报告]
发表于 2003-11-19 12:49 |只看该作者

[!求助!] 纯DOS 下串口中断程序

Window下串口操作基本API:
CreateFile();
ReadFile();
WriteFile();
用法请自己看MSDN.

论坛徽章:
0
7 [报告]
发表于 2003-11-19 13:02 |只看该作者

[!求助!] 纯DOS 下串口中断程序

原帖由 "carol1980" 发表:


谢谢,我做的程序是在没有WINDOWS的系统上运行的,还能用windows 消息驱动吗?
那我就不明白了,你说的是在VC环境下怎么做,可程序却不是在windows下运行? 不会和我一样只是用VC当编辑器吧?

论坛徽章:
0
8 [报告]
发表于 2003-11-19 13:49 |只看该作者

[!求助!] 纯DOS 下串口中断程序

[quote]原帖由 "qjlemon"]俏揖筒幻靼琢耍?闼档氖窃赩C环境下怎么做,可程序却不是在windows下运行? 不会和我一样只是用VC当编辑器吧?[/quote 发表:


哈哈,没错,就是一个编辑器而已,我要做的东西最好是纯C的

没有人用C写过DOS下的中断吗?

论坛徽章:
0
9 [报告]
发表于 2003-11-19 14:05 |只看该作者

[!求助!] 纯DOS 下串口中断程序

  1. void interrupt CommIntHandle1(void)
  2. {
  3.         unsigned char Temp; int IntType;

  4.         IntType = inportb((CommDri[0].PortPara).IntIndPort);
  5.         while(1){
  6.                 switch(IntType){
  7.                 case 2:/*发送数据*/
  8.                         break;
  9.                 case 4:/*接收数据*/
  10.                         if((inportb((CommDri[0].PortPara).StatusPort)&0x01)!=0x01) break;
  11.                         Temp = inportb((CommDri[0].PortPara).DataPort);

  12.                         if((CommDri[0].RcvQueue).Tail==((CommDri[0].RcvQueue).Head+1)%QUEUE_MAX_LEN)
  13.                                 (CommDri[0].RcvQueue).Tail = ((CommDri[0].RcvQueue).Tail+1)%QUEUE_MAX_LEN;
  14.                         (CommDri[0].RcvQueue).Data[(CommDri[0].RcvQueue).Head] = Temp;
  15.                         (CommDri[0].RcvQueue).Head = ((CommDri[0].RcvQueue).Head+1)%QUEUE_MAX_LEN;

  16.                         break;
  17.                 default:break;
  18.                 }

  19.                 /*判断有无更低级的中断需处理*/
  20.                 IntType = inportb((CommDri[0].PortPara).IntIndPort);
  21.                 if(IntType==1) break;
  22.         }

  23.         outportb(0x20,0x20);
  24. }
复制代码

论坛徽章:
0
10 [报告]
发表于 2003-11-19 14:46 |只看该作者

[!求助!] 纯DOS 下串口中断程序

[quote]原帖由 "Qiya"]代码。。。[/quote 发表:


谢谢,类似这样的代码我也有,请问你的程序是在什么环境下编译的?TC or VC,

VC 下好想是认不了 interrupt.

有没有其他方式不用VC, 来搞这段程序呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP