COM1和COM2口通信 串口通信

本文介绍了如何使用C语言进行COM1和COM2串口的配置,包括设置波特率、禁止中断、无校验和无停止位。通过inportb和outportb函数进行端口操作,实现数据的发送和接收,通过查询线路状态寄存器(LSR)确保数据传输的正确完成。
AI助手已提取文章相关产品:
#define Com1Base 0x3f8        //定义串口com1的基地址;
#define Com2Base 0x2f8        //定义串口com2的基地址;
void main()
{
   int st,fp,jp,op;
   int d=0;
   outportb(Com2Base+3,0x80);    //允许访问com2的波特率因子寄存器,禁止串口中断,无校验,无停止位;
   outportb(Com2Base+0,0x0c);    //设置com2的波特率低八位;
   outportb(Com2Base+1,0x00);    //设置com2的波特率高八位;
   outportb(Com2Base+3,0x03);    //禁止访问com2口的波特率因子寄存器,禁止串口中断,无校验,无停止位,八位数据;
   outportb(Com2Base+4,0);      //初始化串口com2的MODEM寄存器;
   outportb(Com2Base+1,0);      //初始化com2的中断允许寄存器,屏蔽串口com2
                  的中断;
   outportb(Com1Base+3,0x80);    //允许访问com1的波特率因子寄存器,禁止串口中断,无校验,无停止位;

   outportb(Com1Base+0,0x0c);        //设置com1的波特率低八位;
   outportb(Com1Base+1,0x00);        //设置com2的波特率高八位;
   outportb(Com1Base+3,0x03);        禁止访问com2口的波特率因子寄存器,禁止串口中断,无校验,无停止位,八位数据;

   outportb(Com1Base+4,0);             //初始化串口com2的MODEM寄存器;
   outportb(Com1Base+1,0);             //初始化com2的中断允许寄存器,屏蔽串口com2
                  的中断;

   printf("please transfer a character to com2:/n");
   do{
     do{
  st=inportb(Com2Base+5);
  printf("%x/n",st);
       }while(st&0x20!=0x20);          //查询com2的线路状态寄存器(LSR)的第五位
                   的状态是否为1,即发送保持寄存器是否为空?也就是com2口是否准备好发送数据;若否则循环等待;
     while(1)
     {
       printf("%x/n",d+1);
       outportb(Com2Base,++d);    //从com2口发送数据;
       do{
    fp=inportb(Com2Base+5);
}while((fp&0x20)!=0x20);   //查询等待com2的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器是否为空?若否则循环等待;
       break;           //com2的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器为空,跳出数据发送程序。
     }
     printf("display  the character while was just received from com1/n");
     do
      {
    jp=inportb(Com1Base+5);
 }while((jp&0x01)!=1);          //查询等待com1的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器是否为空?若否则循环等待;

     printf("%x/n",inportb(Com1Base+0));  //com1口读入数据,并在屏幕上显示出来;
    do
     {
  op=inportb(Com1Base+5);
       }while((op&0x01)!=0);    //查询等待com1的线路状态寄存器(LSR)的第五位的状态是否为1,即发送保持寄存器是否为空?若否则循环等待;


      delay(10000);                        //延时;
  }while(!kbhit());             //敲任意键退出程序;

您可能感兴趣的与本文相关内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值