中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 郭桓兄求助,我的串口中断接受程序怎么不好用啊!!!
作者:
标题: 郭桓兄求助,我的串口中断接受程序怎么不好用啊!!! 上一主题 | 下一主题
boblhh9999
中级用户




积分 316
发帖 74
注册 2004-3-4
状态 离线
『楼 主』:  郭桓兄求助,我的串口中断接受程序怎么不好用啊!!!

我想采用中断方式从COM2口接受数据,但不管怎么试也不好使,望高手指点一二 我的程序如下:如有错误清大侠们不吝赐教 void Init(void) { outportb(0x2fb,0x80); outportb(0x2f8,0x0c); outportb(0x2f9,0x00); outportb(0x2fb,0x03); outportb(0x2fc,0x08|0x0b); outportb(0x2f9,0x0f); }//COM2口初始化 void interrupt far (* old_com2)(...); void interrupt far com2_handler(...) { Data_i++; if(Data_i>1000) Data_i=0;//就是看看是否拦截到COM2口中断 void com2_on(void) { char s; s=inportb(0x21); s=s&0xf7; outportb(0x21,s); old_com2=getvect(0x0b); setvect(0x0b,com2_handler); } void com2_off(void) { setvect(0x0b,old_com2); } void main(void) { int Data_i=0; com2_on(); for(; { if(Data_i/10==0) printf("com2 int"; } com2_off(); } [em06]

[此贴子已经被作者于2005-4-21 11:53:41编辑过]



2005-4-19 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
郭恒
中级用户




积分 225
发帖 39
注册 2004-10-6
状态 离线
『第 2 楼』:  

(1)在main()主程序中data_i是局部变量,而comm2_handle()函数中data_i是全 局变量,所以您永远都是打印出“data_i init”这句话了(2)comm2_handle()函数是硬件中断,别忘了outportb(0x20, 0x20);(3)对于COMM口的初始化,请参考相关书籍。 ---------------------------------------------------------------------- 学习是无止境的,我不是活字典,跟大家一样,在DOS、Windows、Linux面前,自己是 多么的渺小。我只相信一个信念,“人的生命是有限的,模仿、借鉴是一切创新的源泉!”。


2005-4-21 00:00
查看资料  发送邮件  访问主页  发短消息  网志   编辑帖子  回复  引用回复
boblhh9999
中级用户




积分 316
发帖 74
注册 2004-3-4
状态 离线
『第 3 楼』:  

郭桓兄:我的Data_i是全局变量,已在头文件重申明,如果能够拦截到中断,应该可以打印出递增的数值,这个 outportb(0x20, 0x20);我不太明白,应该如何假如到我的程序里???


2005-4-23 00:00
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: