谁用过Int14H 中断写过串口程序,在线
我连初始化端口都有问题,紧急求助!
谢谢!
问题点数:100、回复次数:14Top
1 楼sekelon(罗伦罗亚索龙)回复于 2004-08-03 11:51:11 得分 100
void initport(void)
{
disable();
inportb(portaddr+RXD);
inportb(portaddr+LSR);
inportb(portaddr+MSR);
inportb(portaddr+IIR);
outportb(portaddr+IER,0);
outportb(portaddr+LCR,0x80);
outportb(portaddr+MSB,0);
outportb(portaddr+LSB,speed);
outportb(portaddr+LCR,FORMAT);
inportb(portaddr+RXD);
inportb(portaddr+RXD);
inportb(portaddr+RXD);
enable();
}
Top
2 楼GoldWood()回复于 2004-08-03 12:03:54 得分 0
to sekelon(罗伦罗亚索龙) :不是很明白,我是用如下方法初始化的,
int initSerial(int nPort, int nSpeed)
{
union REGS inregs, outregs;
RESDOG;
inregs.h.ah = 0x04;
inregs.h.al = 0x00; //断开标志
inregs.h.bh = 0x00; //奇偶校验
inregs.h.bl = 0x00; //终止位
inregs.h.ch = 0x11; //字长
switch (nSpeed) { //速率
case 110:
inregs.h.cl = 0x00;
break;
case 150:
inregs.h.cl = 0x01;
break;
case 300:
inregs.h.cl = 0x02;
break;
case 600:
inregs.h.cl = 0x03;
break;
case 1200:
inregs.h.cl = 0x04;
break;
case 2400:
inregs.h.cl = 0x05;
break;
case 4800:
inregs.h.cl = 0x06;
break;
case 9600:
inregs.h.cl = 0x07;
break;
case 19200:
inregs.h.cl = 0x08;
break;
default:
inregs.h.cl = 0x07;
break;
}
inregs.x.dx = nPort - 1; //端口号
int86(0x14, &inregs, &outregs);
return 1;
}
好像有问题,初始化好后无法发数据Top
3 楼GoldWood()回复于 2004-08-03 13:36:56 得分 0
UUUUUUUUUUPTop
4 楼lwj_dxy(豆芽--抵制日货)回复于 2004-08-03 15:11:32 得分 0
up
Top
5 楼sekelon(罗伦罗亚索龙)回复于 2004-08-03 16:21:02 得分 0
我没有用过中断去初始化串口,一般用串口时我就使用上面那个函数通过直接对串口寄存器口进行读写操作来初始化的,函数里的一些大写字母是宏定义,表示各个寄存器的意思,实际上是端口的偏移量,一般串口的端口地址为2F8和3F8,这个地址加上适当的偏移量就是寄存器口了,不晓得你对串口的寄存器是否了解Top
6 楼peter9606( 荷尔蒙一失效 人就清醒了)回复于 2004-08-03 16:39:58 得分 0
markTop
7 楼Behard(我爱天安门)回复于 2004-08-03 18:05:51 得分 0
没有使用过 int 14 去操作
我都是使用 outportb、inportb 的Top
8 楼GoldWood()回复于 2004-08-04 09:38:18 得分 0
我在PIII的机器上为什么调不通dos下的串口程序,什么方法都不行Top
9 楼GoldWood()回复于 2004-08-04 09:41:30 得分 0
to sekelon(罗伦罗亚索龙) :我对串口寄存器不了解,是否有详细资料,谢谢!Top
10 楼sekelon(罗伦罗亚索龙)回复于 2004-08-04 10:00:33 得分 0
我手头上只有书,家里有电子版的,回去后给你Top
11 楼GoldWood()回复于 2004-08-04 10:02:21 得分 0
我的EM:zhbei@sh163a.sta.net.cn
谢谢,希望不是E文的Top
12 楼ckc(火)回复于 2004-08-04 10:48:31 得分 0
中断14不太好用,它要求握手线比较多,无法使用三线制传输。
你检查一下你的通讯线吧Top
13 楼GoldWood()回复于 2004-08-04 11:03:15 得分 0
to ckc(火):?????,要如何连线呢,谢谢
Top
14 楼sekelon(罗伦罗亚索龙)回复于 2004-08-04 11:07:27 得分 0
用inportb(),outportb()就比较方便了,一般的三线就可以了,将两个串口的2,3号线对接(一个的2号接另一个的3号,交叉接线),5号直接连就可以了Top




