RS-232 接口,RS-232 接口是什么意思
RS-232的最初标准建议将电缆长度限制在50 ft以内,对于≤20 000 b/s的数据传输速度,可以使用任何类型的电缆。
后来的标准是在接收器规定了一个最大的电容2500 pF。这个数值包括了接收器的电容、电缆中连接器之间的动态电容以及导线与电缆屏蔽之间,或者在非屏蔽电缆中,导线和地线之间的电容。电容限制了回转速度,或者在输出切换的时候的电压变化速度。一个较高的电容导致一个较低的回转速度和较慢的跃迁。一个较高的电容还意味着一个电压变化需要更大的电流来对电容充电,因此驱动器总的电能消耗要更大一些。在导线之间的电容还能导致干扰。如果想要使用一个超出了电容限制的连接,可能仍旧能够进行通信,但是以更低的波特率。利用短电缆及相应的更小的电容,如果发送和接收端硬件都支持更高的速度,则可以比20 000 b/s更快的速度进行通信。
5.1) 非屏蔽电缆
对于非屏蔽电缆,计算非屏蔽电缆的电缆长度的公式如下:
??电缆长度=(2500—接收器输入电容)/(电缆电容×1.5)?
? 电缆长度的单位是ft,输入电容的单位是pF,电缆电容的单位是pF/ft。
带状电缆的典型电容是15 pF/ft,假定接收器的输人电容是100 pF,电缆最长可以达到106 ft((2500—100)/(15×1.5) )。一个单根非屏蔽双绞线的典型电容是12 pF/ft。仍然假定输入电容为100 pF, 则最大电缆长度为133ft。
5.2) 屏蔽电缆
为电缆增加屏蔽缩短了最大长度,但是屏蔽有时对于阻止噪声混入电缆或者从电缆中“溢出”是需要的。对于屏蔽的双绞线,建议将导线到导线电容乘以3以便把导线到屏蔽的电容考虑在内。
? 因此计算屏蔽导线的电缆长度的公式如下:
? 电缆长度=(2500—接受器输入电容)/(电缆电容×3)
? 电缆长度的单位为ft,输入电容的单位是pF,电缆电容的单位是pF/ft。
这就将屏蔽双绞线电缆的最大长度削减到66 ft。
5.3) 双绞线
为了减少干扰,可以对RS-232使用双绞线电缆和多个接地线。每一根信号线应和一个接地线绞在一起。
5.4) 电缆测试结果
RS-232-C标准规定,在码元畸变小于4%的情况下,传输电缆长度应为50 英尺(约15米),其实这个4%的码元畸变是很保守的,在实际应用中往往按码元畸变10-20%的范围工作的,所以最大距离会远超过15米。
美国DEC公司曾在允许码元畸变为10%得出下面实验结果。其中1 号电缆为屏蔽电缆,型号为DECP. NO. 9107723,内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。2 号电缆为不带屏蔽的电缆。型号为DECP. NO. 9105856-04是22#AWG 的四芯电缆。DEC 公司的实验结果
波特率bps | 1号电缆传输距离(米) | 2号电缆传输距离(米) |
110 | 1500 | 900 |
300 | 1500 | 900 |
1200 | 900 | 900 |
2400 | 300 | 150 |
4800 | 300 | 75 |
9600 | 75 | 75 |
6. 串口通信功能的实现
单片机实现串口通讯一般使用UART接口或利用GPIO口模仿异步串行通讯数据格式,外加驱动芯片连接RS-232口。
在PC机上一般直接调用Window API中的一系列标准的串口通信函数,来实现异步串行通讯,控制RS-232口。一般常用VC++或VB来编程。常用的串口通信函数:
CreatFile()函数:实现串口初始化并打开串口;
ReadFile()函数:接收串口传递过来的二进制流并返回数据到接收缓冲区中
WriteFile()函数:把应用程序发出的指令送到发送缓冲区以供串口接收
1. 打开串口
以下程序用于以同步方式打开串口COM1;
HANDLE hCom;
DWORD dwErrorHcomm="CreateFile"(“COM1”,GENERIC_READ|GENERIC_WRITE
,0, NULL,OPEN_EXISTING, 0, NULL);
if (hComm==(HANDLE)0Xffff)
{
dwError=GetLastError();
MessageBox(dwError);
}
2. 配置串口
配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:
DCB dcb
dcb.BaudRate=9600;//波特率为9600bps
dcb.ByteSize=8;//数据位8位
dcb.Parity=EVENPARTTY;//有校验
dcb.StopBits=ONESTOPRTT; //一个停止位
SetCommState(hCom,&dcb);
3. 数据读写
对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:
bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);
if(!bReadStatus)
{
if(GetLastError()=ERROR_IO_PENDING)
{
WaitForSingleObject(m_lpOverlapped,hEvent,1000);
return((char)length);
}
return 0;
}
//写入函数程序为:
bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)
if(!bWriteStatus)
{
if(GetLastError()=ERROR_IO_PENDING)
{
WaitForSingleObject(m_lpOverlapped, hEvent,
RS-232接 相关文章:
- 什么是RS-232接口(12-15)
- 解决RS-232接口通讯速率不足办法(12-12)
- 单片机与PC机通信的RS-232接口的几点注意(11-26)
- RS-232接口定义及连线(09-12)
- 变频器在流量控制中的使用(02-26)
- RS-232接口与单片机串行通信程序(01-15)