微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > 基于C语言的RS232串行接口通信设计与实现

基于C语言的RS232串行接口通信设计与实现

时间:12-08 来源:互联网 点击:

ComPortAddr+4,0xob);

  /*set input data ready interrupt mode设置输入数据中断模式*/

  outportb(ComPortAddr+1,Ox01);

  /*set OC interrupt vector设置中断源*/

  disable ();

  OldAsyncInt=getvect(IntVectNum);

  setvect(ImVectNum,AsyncInt);

  enable ();

  /*open interrupt打开中断*/

  maskb=inp(Port8259+1);

  if(IntVectNum一0x0c)outport(Port8259+1,maskbOxef);/*INT4*/

  else outport(Port8259+1,maskb0xf7);/*INT3*/

  }

  2)握手信号控制。

  该函数引入递归调用的方式,很好的解决了以往串口通信过程中,在握手信号方面选择发送指定特定字符(例如“样”)所带来的误传送问题,大大提高了串口通信的成功率。

  void wait(char ch)

  {

  if(ReceiveChar(COM232)==ch)return;//确定对方已经成功接受或者发送,就返回空

  else

  {

  SendChar(ch);//把接受或者发送出去的字符重新发送;

  wait(ch); //递归调用,直到对方确定接受或者发送成功为止;

  )

  )

  3)向串行口发送一个字符

  该函数的思想是先申请占有中断,后进行发送数据通信;

  int SendChar(unsigned char Char)

  {

  do

  {

  printf(“send waiting>>>>>>>>>\n”):

  //在屏幕上提示用户正在等待中断进行。

  }while((inportb(comportaddr+5)0x20)==O);//检查发送端数据线是否准备好

  outportb(comportaddr,Char://发送数据到缓冲区

  return(Char);//返回发送完成的字符

  }

  4)从串行口接受一个字符

  该函数的思想是先取得中断控制,后面进行接收数据通信;

  int ReceiveChar(int port)

  {

  do{

  printf(“receive waiting>>>>>>>>\n”);

  ∥在屏幕上提示用户正在等待中断进行。

  }

  while((inportb(eomportaddr+5)0x01)==0);//检查接收端数据线是否准备好

  return(inportb(pONt);//从接收数据缓冲区取数据

  }

  3 实例

  在企业产品测试平台和嵌入式控制系统之间,约定通信双方的协议相同,首先嵌入式EMB主控机通过串El把控制消息发送给产品测试平台,让产品测试平台根据发送来的指令进行相关操作:同时在产品测试平台上的测试结果信息,测试每个单项目的相关信息也通过串口传输数据到嵌入式EMB主控机;嵌入式EMB主控机把测试相关的有效信息进行整理后,通过网络上传到Server,Server把企业所有 生产线的嵌入式EMB主控机发送来的信息进行整理和分析,在企业资源管理系统ERP上共享,让企业的高级管理人员实时监视企业生产的进行情况,大大提高企业的办公效率,其整体工作原理图如图3所示。

  

  图3企业生产整体工作原理图

  4结论

  本文所阐述的RS232串口通信软件,在具体实践中结合功能需要,综合考虑复杂程度、灵活性等因素,选择了合适的方法,实现了串口通信过程,同时在产品测试平台和嵌入式控制系统之间,该软件得到了充分的应用,有效地提升了企业的生产工作效率。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top