『壹』 请问RS232和RS485串口电路一样吗 ,怎么接线的啊
都是 串口通信,应用场合不同:
RS232 -3线全双工,点对点通信,传输距离 25米以内。
RS485 -2线半双工,点对多主从通信,传输距离可达 1200米以上
RS485 -4线全双工,主从通信,传输距离可达 1200米以上
由于工业现场通信节点多,位置分散,通信距离远,要求使用最少的线材完成相应的通信任务。根据相关的要求,人们开发出利用两根导线实现多节点互联的EIA RS-485总线标准。RS-485总线采用差分平衡电路,即一条导线上的电压是另外一条导线的电压的取反值,接收器输入电压为两根导线电压的差值。由于其在两条线路上传递的是大小相同,方向相反的电流,而噪声电压对于线路的影响都是同时出现,两条线路的噪声电压相互抵消,极大的削弱噪声的影响。差分平衡电路不受节点之间的地平电压差的影响,EIA 485没有规定引脚定义,信号功能,只需保持两根信号线相邻,在同一个双绞线中,引脚A,B不能互换就可以了,所以在工业现场使用过程中,RS-485接口没有标准的规范,有可能是DB9,也有可能是RJ45/RJ11,但是用的最多的还是工业接线端子。由于RS-485总线采用差分平衡电路,极大的抑制噪声干扰,有极强的抗共模干扰能力,输入电压检测灵敏度为200毫伏(电压信号可以在极远距离进行恢复),使得RS-485的传输距离可以达到1200米(传输速率在110Kbps情况下)。最大传输速率10Mbps(传输距离12米)。RS-485支持多点通信,多个驱动器和接收器共享一条信号通道,在半双工连接模式下,只能有一个驱动器工作,多个驱动器同时启用,会产生线竞争(导致通信失败),同时容易产生大电流,可能导致芯片烧毁。一般485芯片建议使用限流和过热关闭功能保护芯片。
RS-485看:
http://ke..com/view/542681.htm
RS-232接口有DB25接口和DB9接口两种,现在普通使用的基本上都是DB9接口,DB25接口基本上不再使用,DB9接口定义如下(1.载波检测,2.接收数据,3.发送数据,4.数据终端准备就绪,5.信号地,6.调制解调器就绪,7.请求发送,8.允许发送,9.振铃提示),RS-232串口相互连接分为通过Modem连接和无Modem连接,由于以太网,RS-485总线,CAN总线等总线的普及,通过Modem连接做较长距离通信已经基本上不再使用。无Modem连接即直接连接则分为握手连接和无握手连接,无握手连接直接使用2,3,5三个针脚就可以使用,而握手连接则是必须使用请求发送,允许发送,准备就绪等信号,握手连接又称全信号连接。由于RS-232使用单端非差分电路,多条线路共用一个接地线,长距离传输时,不同节点的接地线电平差异可能会达到几伏,有可能导致信号的误读,从而导致RS-232传输距离不能超过15米,传输速率不能超过110Kbps.
RS-232看:
http://ke..com/view/112004.ht
『贰』 串口监视硬件电路
个人觉得PC需要有两个串口分别来监视AB间的收和发.因为232是全双工,有两条数据线,要监视两条数据线便需要将两个串口RXD分别接入到这两条线.
具体操作方式:PC串口1的RXD接到A的TXD,PC串口2的RXD接到A的RXD,PC串口1和2的GND跟AB的GND短接。
以上只提供了一个思路,未经过测试,有条件的话可以测试一下
『叁』 什么是串口通信
串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。
一般完成这种功能的电路,我们称为串行接口电路。
串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。
(3)串口通信电路扩展阅读:
串口通信的结构:
串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
串口是计算机上一种非常通用的设备通信协议。大多数计算机(不包括笔记本电脑)包含两个基于RS-232的串口。串口同时也是仪器仪表设备通用的通信协议;
很多GPIB兼容的设备也带有RS-232口。同时,串口通信协议也可以用于获取远程采集设备的数据。
『肆』 51单片机和计算机之间实现串口通信的电路图
串口通讯参考程序如下:
来源:深入浅出AVR单片机
#include<reg51.h>
unsignedcharUART_RX;//定义串口接收数据变量
unsignedcharRX_flag;//定义穿行接收标记
/*********************************************************************************************
函数名:UART串口初始化函数
调用:UART_init();
参数:无
返回值:无
结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用)
备注:振荡晶体为12MHz,PC串口端设置[4800,8,无,1,无]
/**********************************************************************************************/
voidUART_init(void){
EA=1;//允许总中断(如不使用中断,可用//屏蔽)
ES=1;//允许UART串口的中断
TMOD=0x20;//定时器T/C1工作方式2
SCON=0x50;//串口工作方式1,允许串口接收(SCON=0x40时禁止串口接收)
TH1=0xF3;//定时器初值高8位设置
TL1=0xF3;//定时器初值低8位设置
PCON=0x80;//波特率倍频(屏蔽本句波特率为2400)
TR1=1;//定时器启动
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口接收中断处理函数
调用:[SBUF收到数据后中断处理]
参数:无
返回值:无
结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)
备注:过长的处理程序会影响后面数据的接收
/**********************************************************************************************/
voidUART_R(void)interrupt4using1{//切换寄存器组到1
RI=0;//令接收中断标志位为0(软件清零)
UART_RX=SBUF;//将接收到的数据送入变量UART_data
RX_flag=1;//标记接收
//用户函数内容(用户可使用UART_data做数据处理)
//SBUF=UART_data;//将接收的数据发送回去(删除//即生效)
//while(TI==0);//检查发送中断标志位
//TI=0;//令发送中断标志位为0(软件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函数名:UART串口发送函数
调用:UART_T(?);
参数:需要UART串口发送的数据(8位/1字节)
返回值:无
结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备注:
/**********************************************************************************************/
voidUART_T(unsignedcharUART_data){//定义串口发送数据变量
ES=0;//禁止穿行中断
SBUF=UART_data;//将接收的数据发送回去
while(TI==0);//检查发送中断标志位
TI=0;//令发送中断标志位为0(软件清零)
ES=1;//打开穿行中断
}
/*********************************************************************************************
函数名:UART串口发送字符串函数
调用:UART_S(?);
参数:需要UART串口发送的数据(8位/1字节)
返回值:无
结果:将参数中的数据发送给UART串口,确认发送完成后退出,采用非中断方式
备注:
/**********************************************************************************************/
voidUART_S(unsignedchar*str)
{
while(1)
{
if(*str=='