|
核心代码无非是查询串口的状态寄存器。
发送时用查询实现,
核心代码如下
do{
ch=getchar();
do{
flag = inportb(0x3fd);
flag = flag&0x20; /*测试发送保持寄存器是否为空*/
}while(flag==0);
outportb(0x3f8,ch);
}while(ch!=\'@\');
接收方用中断实现,核心代码如下:
mode = getvect(0x0b);
disable(); /*关中断*/
outportb(0x2fc,0x0b); /*out2,dtr,rts信号有效*/
outportb(0x2f9,0x01); /*允许接收中断*/
t = inportb(0x21);
t = t&0xf7; /* t & 1111 0111 ,开放IRQ3,即COM2的中断请求*/
outportb(0x21,t);
setvect(0x0b,char_proc);
enable(); /*开中断*/
while(flag){}
setvect(0x0b,mode);
中断服务程序如下:
void interrupt far char_proc(){
buf = inportb(03f8);
if(strcmp(buf,\'@\')==0)
flag=0;
putchar(buf);
outportb(0x20,0x20);
}
就可以进行字符的发送与接收了。 |
|