中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-01 13:24
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 郭桓兄求助,我的串口中断接受程序怎么不好用啊!!! 查看 1,027 回复 2
楼 主 郭桓兄求助,我的串口中断接受程序怎么不好用啊!!! 发表于 2005-04-19 00:00 ·  中国 辽宁 丹东 联通
中级用户
★★
积分 316
发帖 74
注册 2004-03-04 00:00
22年会员
UID 19167
性别 男
状态 离线
我想采用中断方式从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();

}


2 发表于 2005-04-21 00:00 ·  中国 广东 深圳 电信
中级用户
积分 225
发帖 39
注册 2004-10-06 00:00
21年会员
UID 32162
性别 男
状态 离线
(1)在main()主程序中data_i是局部变量,而comm2_handle()函数中data_i是全
局变量,所以您永远都是打印出“data_i init”这句话了(2)comm2_handle()函数是硬件中断,别忘了outportb(0x20, 0x20);(3)对于COMM口的初始化,请参考相关书籍。
----------------------------------------------------------------------
学习是无止境的,我不是活字典,跟大家一样,在DOS、Windows、Linux面前,自己是
多么的渺小。我只相信一个信念,“人的生命是有限的,模仿、借鉴是一切创新的源泉!”。
3 发表于 2005-04-23 00:00 ·  中国 辽宁 丹东 联通
中级用户
★★
积分 316
发帖 74
注册 2004-03-04 00:00
22年会员
UID 19167
性别 男
状态 离线
郭桓兄:我的Data_i是全局变量,已在头文件重申明,如果能够拦截到中断,应该可以打印出递增的数值,这个 outportb(0x20, 0x20);我不太明白,应该如何假如到我的程序里???
论坛跳转: