nilabwindowscvi串口编程rs232教程

上传人:大米 文档编号:489251411 上传时间:2023-07-31 格式:DOCX 页数:6 大小:28.30KB
返回 下载 相关 举报
nilabwindowscvi串口编程rs232教程_第1页
第1页 / 共6页
nilabwindowscvi串口编程rs232教程_第2页
第2页 / 共6页
nilabwindowscvi串口编程rs232教程_第3页
第3页 / 共6页
nilabwindowscvi串口编程rs232教程_第4页
第4页 / 共6页
nilabwindowscvi串口编程rs232教程_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《nilabwindowscvi串口编程rs232教程》由会员分享,可在线阅读,更多相关《nilabwindowscvi串口编程rs232教程(6页珍藏版)》请在金锄头文库上搜索。

1、在介绍具体的RS-232函数库之前,本节先简要介绍RS-232C接口。美国电子工业协会(EIA)公布的RS-232C是用的最多的一种串行通信标准,它是从CCITT远程通信标准中导出的,用于数据终端设备(DTE和数据通信设备(DEC之间的接口。该标准包括按位串行传输的电气和机械方面的规定。一、 接口信号RS-232C的机械指标规定:RS-232C接口通向外部的连接器(插针插座)是一种“D”型25针插头。由于25芯中有许多是不常用的,IBM-PC对其进行了简化,取了其中的常用的9芯,构成了9芯RS-232C串行接口,使其成为一种事实上的串行接口标准配置。RS-232C的“D型9针插头引脚定义如图4

2、-13所示。RS-232C标准接口中的主要信号是“发送数据”和“接收数据”,它们用来在两个系统或设备之间传送串行信息。对于异步通信,传输的串行位数据信息的单位是字符。二、 数据传送格式和电气特性图4-14示出了RS-232C以位串行方式传输数据的格式,这是微机系统中最通用的格式。7位ASCII码数据的连续传送由最低有效数字位开始,而以奇偶校验位结束。应当指出,RS-232C标准接口并不限于ASCII数据,事实上还可有5到8个数据位,后加一奇偶校验位,并有1或2位停止位。在电性能方面,这一标准使用负逻辑。逻辑1电平是在-15V到-5V范围内,逻辑0电平则在+5V至15V范围内。它要求RS-232

3、C接收器必须能识别低至+3V的信号作为逻辑0,而识别高至-3V的信号作为逻辑1,这意味着有2V的噪声容限。RS-232C进行数据传输的最高速率为20KB/S,通信距离最长为15叶RS-232函数库概述LabWindows/CVI提供的RS-232函数库主要包括以下几类函数:串行口打开/关闭(Open/Close)函数,串行口输入/输出(Input/Output)函数,串行口控制(Control)函数,串行口状态查询(Status函数,串行口事件处理(Callbacks函数。列表如下:RS-232编程举例利用LabWindows/CVI的RS-232函数库进行串行口应用编程时,主要包括以下几个步

4、骤:首先要打开一个串行口并对其进行配置,然后用户就可以利用该串行口收发数据,程序结束之前则应当关闭该串行口。本节结合一个实例介绍RS-232函数库的使用方法。读者能在目录下找到该例子。该实例利用计算机的串行口1实现了“自发自收”和“串行口事件检测”的功能。所谓“自发自收”指的是从计算机串行口发送出去的信息又被本计算机收到,而“串行口事件检测”的意思是当计算机的串行口检测到特定的字符时就弹出提示对话框。该例子虽然简单,但它非常有助于用户掌握串行口编程的基本思路和RS-232相关函数的使用方法。以下将分步骤介绍该该例程的实现方法。步骤一:编写界面,生成程序框架首先,用户应按照图4-15所示编写软面

5、板。为方便用户编写软面板,表4-28列出了软面板上各控件的基本属性设置。图4-15软面板示意图表4-28软面板主要控件基本属性设置软面板编完以后,用户就可以利用LabWindows/CVI自动生成程序框架,并进入步骤二。步骤二:打开串行口1并进行配置此部分代码添加在主函数中,如下所示:intmain(intargc,char*argv)if(InitCVIRTE(0,argv,0)=0)/*InitializeCVIlibraries*/return-1;/*outofmemory*/if(gPanelHandle=LoadPanel(0,PANEL)0)return-1;if(gHelpPa

6、nelHandle=LoadPanel(0,HELP_PANEL)0)return-1;OpenComConfig(1,9600,0,8,1,512,512);/*打开串行口1并进行配置*/SetCTSMode(1,LWRS_HWHANDSHAKE_OFF);/*禁止硬件握手*/FlushInQ(1);/*清空串行口1的输入队列*/FlushOutQ(1);/*清空串行口1的输出队列*/*弹出窗口提示用户输入待检测的事件字符*/PromptPopup(EventCharcter,EntertheEventCharacter,gEventChar,1);/*为串行口1设置一个回调函数,使得串行口

7、1收到待检测字符时就调用回调函数Event_Char_Detect_Func给出提示*/InstallComCallback(1,LWRS_RXFLAG,0,(int)gEventChar0,Event_Char_Detect_Func,0);DisplayPanel(gPanelHandle);/*显示主界面*/RunUserInterface();/*运行用户界面*/CloseCom(1);/*在退出程序之前关闭串行口1*/DiscardPanel(gPanelHandle);DiscardPanel(gHelpPanelHandle);return0;上述代码中用到了函数OpenComC

8、onfig,该函数的功能是:打开一个串行口并对该串行口进行配置。函数原型:intOpenComConfig(intCOM_Port,charDevice_Name,longBaud_Rate,intParity,intData_Bits,intStop_Bits,intInput_Queue_Size,intOutput_Queue_Size);参数说明:COM_Port整型变量,用于指定要打开的端口号,有效范围为1-1000。Device_Name:字符型数组,用ASCII字符串表示的串行口名,该参数一般默认为空。Baud_Rate:长整型变量,串行口的波特率,标准的波特率有:110、300

9、、600、1200、2400、4800、9600、19200等。应当指出,利用串行口进行通讯时,通讯双方的波特率必须一致。此外,包括通讯双方的奇偶校验模式、数据位位数、停止位位数等也必须一致。Parity:整型变量,用于指定奇偶校验模式。0表示无奇偶校验,1表示奇校验,2则表示偶校验,另有两种不太常用的校验模式,此处不作介绍。Data_Bits:整型变量,用于指定每帧信息中数据位的位数,可选的位数为5、6、7和8。Stop_Bits:整型变量,用于指定每帧信息中停止位的位数,可选的位数为1和2。Input_Queue_Size:整型变量,用于指定串行口输入队列的大小。Output_Queue_

10、Size:整型变量,用于指定串行口输出队列的大小。因此,OpenComConfig(1,9600,0,8,1,512,512)的作用是打开串行口1,并对串行口1配置如下:波特率为9600,无奇偶校验,8位数据位,一位停止位,输入/输出队列的大小均为512字节。函数FlushlnQ(1)和FlushOutQ(1)的作用分别为清空串行口1的输入队列和输出队列。上述代码中还用到了一个关键性的函数lnstallComCallback,该函数的功能是:为指定的串行口设置一个回调函数,当有相应的事件(比如串行口收到了特定的字符)发生时,就调用指定的回调函数。函数原型:intlnstallComCallba

11、ck(intCOM_Port,intEvent_Mask,intNotify_Count,intEvent_Character,ComCallbackPtrCallback_Function,void*Callback_Data);参数说明:Event_Mask:整型变量,用于指定一个事件,当该事件发生时,就调用指定的回调函数,如果要禁止回调函数的调用,该参数填0。不同的常量名代表不同的事件,以下将几个常用的常量名解释如下:常量名串行口事件LWRS_RXCHA串行口收到任意的字符LWRS_RXFLA串行口收到特定的字符LWRS_TXEMPT串行口的发送序列为空LWRS_RECEIV串行口输入队

12、列中的字符数已达到指定的数量Notify_Count:整型变量,使LWRS_RECEIV事件能够发生的输入队列内的最小字节数。Event_Character:整型变量,用于指定触发LWRS_RXFLA事件(串行口收到特定的字符)的字符值。Callback_Function:用于指定被调用的回调函数名,而且回调函数必须按以下格式定义:voidvoidCVICALLBACKCallbackFunctionName(intportNo,inteventMask,*callbackData)Callback_Data:该参数可以是指向某个数据的指针,也可以是一个整形变量,它将被传给上述的回调函数Cal

13、lback_Function。一般该参数填为0即可。由以上的叙述可知,InstallComCallback(1,LWRS_RXFLAG,0,(int)gEventChar0,Event_Char_Detect_Func,0)函数的作用是:当串行口1收到特定的字符时就调用函数Event_Char_Detect_Func,提示用户串行口1收到了某个特定的字符。函数Event_Char_Detect_Func的代码如下:voidCVICALLBACKEvent_Char_Detect_Func(intportNo,inteventMask,void*callbackData)charoutMessa

14、ge256;Fmt(outMessage,%s%s%s%s,TheCharacter,gEventChar,wasdetected);MessagePopup(InstallCommCallback,outMessage);/*弹出一个消息框给出提示信息*/return;步骤三:利用串行口收发数据在本例中,串行口发送数据是通过该命令按钮“SendData”对应的回调函数SendData()实现的,代码如下:intCVICALLBACKSendData(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventDat

15、a2)charinfo20;switch(event)caseEVENT_COMMIT:SetCtrlVal(gPanelHandle,PANEL_OUTOUT_STRING,0);/*info中*/将“MessagetoSend”字符串控件内的信息的存到数组1输出*/,其作用在于将数组info/*清空“MessageReceived”字符串*/函数原型:intComWrt(intCOM_Port,charBuffer,intCount);参数:Buffer:字符型数组,欲输出的信息存在该数组中。Count:整型变量,用于指定要输出的字节数。串行口收数据则是通过命令按钮“ReceiveData”对应的回调函数ReceiveData()实现的,其代码如下:intCVICALLBACKReceiveData(intpanel,intcontrol,intevent,void*callbackData,inteventData1,inteventData2)charreadBuf20=0;intstrLen;switch(event)caseEVENT_COMMIT:strLen=Get

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号