怎么用c语言,编写串口的通讯程序(关于com2的)这次给80分
这是一个串口中断的初始化。有谁帮我解释一下?
void v2()
{unsigned char b;
disable( );
inportb(0x3f8);
inportb(0x3fe);void v2()
{unsigned char b;
disable( );
inportb(0x3f8);
inportb(0x3fe);
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08 ¦0x0b);
outportb(0x3f9,0x01);
b=inportb(0x21)&0xef;
outportb(0x21,b);
setvect(0x0c,v1);
enable();}
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08 ¦0x0b);
outportb(0x3f9,0x01);
b=inportb(0x21)&0xef;
outportb(0x21,b);
setvect(0x0c,v1);
enable();}
问题点数:80、回复次数:4Top
1 楼ckc(火)回复于 2002-06-03 16:55:19 得分 60
我仔细看了一下。你这代码很不对头,首先,3F8是串口1的基地址
其次,你的代码在C中都无法通过语法检查
我只好随便看一看。
unsigned char b;
disable( ); 禁止中断
inportb(0x3f8); 从串口1读入1个数据
inportb(0x3fe);void v2()
{unsigned char b;
disable( );
inportb(0x3f8); 这几句没什么意思,从3F8中读数据有清缓冲区的功能
inportb(0x3fe); 这3句读没有任何意思
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08 ¦0x0b); 看不明白
outportb(0x3f9,0x01); 本来应该是初始化波特率的
b=inportb(0x21)&0xef;
outportb(0x21,b); 打开串口中断
setvect(0x0c,v1); 设置串口中断地址
enable();}
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08 ¦0x0b);
outportb(0x3f9,0x01);
b=inportb(0x21)&0xef;
outportb(0x21,b);
setvect(0x0c,v1);
enable();}
Top
2 楼lupao(一点通)回复于 2002-06-05 09:50:32 得分 20
你的代码太乱,但是我可以建议你先看一本书,西安电子科大出版社的,《MODEM 编程》。我很想帮助你,也一直在编写一些串口通信程序。DOS的有
中断和查询都作过,现在用WIN32API。但是我想你先得好好的看一下书才行。Top
3 楼ioh(小宝)回复于 2002-06-06 10:36:09 得分 0
两位,多谢了。我给分了,60和20, 不知道是不是这样给的?(我是个刚来的,不太懂)。
还是每个人都给80 ??????
这样我的分可不够啊 !!!!Top
4 楼ioh(小宝)回复于 2002-06-06 11:18:16 得分 0
上次代码发错了这次在发一次,这是两个过程:一个是中断响应,一个是端口的初始化。有劳两位了。谢谢!
void interrupt v1()
{disable();
if(vz1==1) {out1=inportb(0x3f8); }
else
{out=inportb(0x3f8);
flowp=-flowp;
done=1;}
vz1=-vz1;
outportb(0x20,0x20);
enable();
}
void v2()
{unsigned char b;
disable( );
inportb(0x3f8);
inportb(0x3fe);
inportb(0x3fb);
inportb(0x3fa);
outportb(0x3fc,0x08|0x0b);
outportb(0x3f9,0x01);
b=inportb(0x21)&0xef;
outportb(0x21,b);
setvect(0x0c,v1);
enable();}Top




