串口通信只能用com1,com2不可用的问题
houzy 2003-08-29 12:53:29 我的程序片断如下:
#define PORT1 0x3F8 /* Port Address Goes Here */
#define PORT2 0x2F8 /* Defines Serial Ports Base Address */
#define INTVECT 0x0C /* Com Port's IRQ here */
/* COM1 - 0x0C */
/* COM2 - 0x0B */
/* COM3 - 0x0C */
/* COM4 - 0x0B */
/*初始化*/
disable();
outportb(PORT1+1 , 0); /* Turn off interrupts - Port1 */
oldport1isr = getvect(INTVECT); /*Save old Interrupt Vector for */
/* later recovery */
setvect(INTVECT, UartInterrupt); /*Set Interrupt Vector Entry */
/* PORT 1 - Communication Settings */
outportb(PORT1+3,0x03); /*8bit 1stopbit even parity*/
outportb(PORT1+4,0xf); /*DTR=1 RTS=1*/
outportb(PORT1+3,inportb(PORT1 +3)¦0x80); /*DLAB=1*/
outportb(PORT1,0x0c); /*9600bps*/
outportb(PORT1+1,0);
outportb(PORT1+3,inportb(PORT1 +3)&0x7f); /*DLAB=0*/
setvect(INTVECT,UartInterrupt);
outportb(0x21,inportb(0x21)&0xef);/*8259 rigister 0x21 BIT4=0*/
outportb(PORT1+1,1); /*只允许RXT中断*/
enable();
/**********************************************************************
* 串口接收中断 *
**********************************************************************/
/*串口中断*/
void interrupt far UartInterrupt (void){ /*中断服务程序*/
if(inportb(PORT1+2)==0x04){
c = inportb(PORT1);
rdata[bufferin]=c;
bufferin++;
sign = 1;
outportb(0x20,0x20);
}
/*发送程序片断*/
for(bufferout=0;bufferout<strlen(test);bufferout++){
c=test[bufferout];
while(!(PORT1+5&&0x20));
outportb(PORT1,c);
}
如果使用PORT1,收发没有问题。当程序中所有PORT1换为PORT2,串口中断INTVECT也相应改为0x0B(也就是使用com2口咯) 就不行了,收发都不行。应该说com1换为com2只需要修改两个参数阿,串口中断INTVECT不用改吧?请大家帮忙看看。