7.1 串行通信基本知识7.2 串行口及应用7.3 RS-232C标准接口总线 及串行通信硬件设计7.4 89C51与89C51点对点异步通信7.5 89C51与PC机间通信软件的设计7.6 PC机与多个单片机间的通信本章将介绍89C51串行口的结构及应用PC机与89C51间的双机通信一台PC机控制多台89C51前沿机的分布式系统,以及通信接口电路和软件设计,并给出设计实例,包括接口电路、程序框图、主程序和接收/发送子程序.
上传时间: 2013-10-27
上传用户:firstbyte
自动检测80C51串行通讯中的波特率:本文介绍一种在80C51 串行通讯应用中自动检测波特率的方法。按照经验,程序起动后所接收到的第1 个字符用于测量波特率。这种方法可以不用设定难于记忆的开关,还可以免去在有关应用中使用多种不同波特率的烦恼。人们可以设想:一种可靠地实现自动波特检测的方法是可能的,它无须严格限制可被确认的字符。问题是:在各种的条件下,如何可以在大量允许出现的字符中找出波特率定时间隔。显然,最快捷的方法是检测一个单独位时间(single bit time),以确定接收波特率应该是多少。可是,在RS-232 模式下,许多ASCII 字符并不能测量出一个单独位时间。对于大多数字符来说,只要波特率存在合理波动(这里的波特率是指标准波特率),从起始位到最后一位“可见”位的数据传输周期就会在一定范围内发生变化。此外,许多系统采用8 位数据、无奇偶校验的格式传输ASCII 字符。在这种格式里,普通ASCII 字节不会有MSB 设定,并且,UART总是先发送数据低位(LSB),后发送数据高位(MSB),我们总会看见数据的停止位。在下面的波特率检测程序中,先等待串行通讯输入管脚的起始信号(下降沿),然后起动定时器T0。在其后的串行数据的每一个上升沿,将定时器T0 的数值捕获并保存。当定时器T0溢出时,其最后一次捕获的数值即为从串行数据起始位到最后一个上升沿(我们假设是停止位)过程所持续的时间。
上传时间: 2014-08-22
上传用户:dajin
单片机温度采集器与PC104分站的串行通信:用PC104 模块组建的矿井变电所采集分站,具有强大的以太网和CAN 总线通信功能。在PC104模块底板上,设计了一个基于89C2051 单片机的温度采集器,用于采集温度传感器监测值并通过串口将该监测值传送到PC104 分站。该设计简化了变电所环境温度监测的软、硬件,并且编程简单,充分利用了PC104 的空闲串口资源。关键词:温度采集器; 单片机; 串行通信; PC104
上传时间: 2013-11-24
上传用户:wangchong
本文介绍一种实现TMS320F240 DSP与C51单片机串行通讯的方法。详细说明了TMS320F240 DSP与C51单片机的硬件构成和软件设置等问题。
上传时间: 2013-11-24
上传用户:1234567890qqq
RS232C串行通信在控制领域里应用得很广泛但在实际应用中又会因所控制的对象所解决的问题不同而各具特点本文所涉及的是传输距离不超过15米所传输数据量较小的PC机和单片机的通信如PC机对IC卡的读写PC机对单片机烧写器的数据转输以及其它一些具有类似特点的智能化仪器和仪表中的数据通信
上传时间: 2014-12-28
上传用户:6546544
基于AT89C51应用系统的串行通信设计:介绍了基于AT89C51应用系统中的串行通信软硬件设计方法和实现过程,在基于红外成像技术的电力设备状态检测系统中,将红外测温仪检测到设备的温度数据传给控制电路,进行数据格式的转换后,在RAM 中存储,同时上传给PC机。系统利用MAX232实现RS 232C的EIA 电平与单片机的TTI 电平之闻转换,利用通用串口芯片8251A扩展串行接13',实现PC机与单片机之问的串行通信。 关键词:串行通信;单片机;接口;RS232C
上传时间: 2014-12-21
上传用户:aeiouetla
SPI接口读写串行EEPROM:93C46为采用3线串行同步总线SPI接口方式的EEPROM,其芯片引脚名称和功能描述如图1-1:
上传时间: 2013-11-19
上传用户:taozhihua1314
串行编程器源程序(Keil C语言)//FID=01:AT89C2051系列编程器//实现编程的读,写,擦等细节//AT89C2051的特殊处:给XTAL一个脉冲,地址计数加1;P1的引脚排列与AT89C51相反,需要用函数转换#include <e51pro.h> #define C2051_P3_7 P1_0#define C2051_P1 P0//注意引脚排列相反#define C2051_P3_0 P1_1#define C2051_P3_1 P1_2#define C2051_XTAL P1_4#define C2051_P3_2 P1_5#define C2051_P3_3 P1_6#define C2051_P3_4 P1_7#define C2051_P3_5 P3_5 void InitPro01()//编程前的准备工作{ SetVpp0V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=0; Delay_ms(20); nAddress=0x0000; SetVpp5V();} void ProOver01()//编程结束后的工作,设置合适的引脚电平{ SetVpp5V(); P0=0xff; P1=0xff; C2051_P3_5=1; C2051_XTAL=1;} BYTE GetData()//从P0口获得数据{ B_0=P0_7; B_1=P0_6; B_2=P0_5; B_3=P0_4; B_4=P0_3; B_5=P0_2; B_6=P0_1; B_7=P0_0; return B;} void SetData(BYTE DataByte)//转换并设置P0口的数据{ B=DataByte; P0_0=B_7; P0_1=B_6; P0_2=B_5; P0_3=B_4; P0_4=B_3; P0_5=B_2; P0_6=B_1; P0_7=B_0;} void ReadSign01()//读特征字{ InitPro01(); Delay_ms(1);//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(20); ComBuf[2]=GetData(); C2051_XTAL=1; C2051_XTAL=0; Delay_us(20); ComBuf[3]=GetData(); ComBuf[4]=0xff;//----------------------------------------------------------------------------- ProOver01();} void Erase01()//擦除器件{ InitPro01();//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 C2051_P3_3=1; C2051_P3_4=0; C2051_P3_5=0; C2051_P3_7=0; Delay_ms(1); SetVpp12V(); Delay_ms(1); C2051_P3_2=0; Delay_ms(10); C2051_P3_2=1; Delay_ms(1);//----------------------------------------------------------------------------- ProOver01();} BOOL Write01(BYTE Data)//写器件{//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //写一个单元 C2051_P3_3=0; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; SetData(Data); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); Delay_us(20); C2051_P3_4=0; Delay_ms(2); nTimeOut=0; P0=0xff; nTimeOut=0; while(!GetData()==Data)//效验:循环读,直到读出与写入的数相同 { nTimeOut++; if(nTimeOut>1000)//超时了 { return 0; } } C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return 1;} BYTE Read01()//读器件{ BYTE Data;//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 //读一个单元 C2051_P3_3=0; C2051_P3_4=0; C2051_P3_5=1; C2051_P3_7=1; Data=GetData(); C2051_XTAL=1; C2051_XTAL=0;//一个脉冲指向下一个单元//----------------------------------------------------------------------------- return Data;} void Lock01()//写锁定位{ InitPro01();//先设置成编程状态//----------------------------------------------------------------------------- //根据器件的DataSheet,设置相应的编程控制信号 if(ComBuf[2]>=1)//ComBuf[2]为锁定位 { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=1; C2051_P3_7=1; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); } if(ComBuf[2]>=2) { C2051_P3_3=1; C2051_P3_4=1; C2051_P3_5=0; C2051_P3_7=0; Delay_us(20); SetVpp12V(); Delay_us(20); C2051_P3_2=0; Delay_us(20); C2051_P3_2=1; Delay_us(20); SetVpp5V(); }//----------------------------------------------------------------------------- ProOver01();} void PreparePro01()//设置pw中的函数指针,让主程序可以调用上面的函数{ pw.fpInitPro=InitPro01; pw.fpReadSign=ReadSign01; pw.fpErase=Erase01; pw.fpWrite=Write01; pw.fpRead=Read01; pw.fpLock=Lock01; pw.fpProOver=ProOver01;}
上传时间: 2013-11-12
上传用户:gut1234567
串行下载线的原理图 SI Prog - Serial Interface for PonyProg
上传时间: 2013-11-09
上传用户:zhishenglu
RS-232-C 是PC 机常用的串行接口,由于信号电平值较高,易损坏接口电路的芯片,与TTL电平不兼容故需使用电平转换电路方能与TTL 电路连接。本产品(转接器),可以实现任意电平下(0.8~15)的UART串行接口到RS-232-C/E接口的无源电平转接, 使用非常方便可靠。 什么是RS-232-C 接口?采用RS-232-C 接口有何特点?传输电缆长度如何考虑?答: 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式。由于串行通讯方式具有使用线路少、成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用。 在串行通讯时,要求通讯双方都采用一个标准接口,使不同 的设备可以方便地连接起来进行通讯。 RS-232-C接口(又称 EIA RS-232-C)是目前最常用的一种串行通讯接口。它是在1970 年由美国电子工业协会(EIA)联合贝尔系统、 调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。它的全名是“数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”该标准规定采用一个25 个脚的 DB25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。(1) 接口的信号内容实际上RS-232-C 的25 条引线中有许多是很少使用的,在计算机与终端通讯中一般只使用3-9 条引线。(2) 接口的电气特性 在RS-232-C 中任何一条信号线的电压均为负逻辑关系。即:逻辑“1”,-5— -15V;逻辑“0” +5— +15V 。噪声容限为2V。即 要求接收器能识别低至+3V 的信号作为逻辑“0”,高到-3V的信号 作为逻辑“1”(3) 接口的物理结构 RS-232-C 接口连接器一般使用型号为DB-25 的25 芯插头座,通常插头在DCE 端,插座在DTE端. 一些设备与PC 机连接的RS-232-C 接口,因为不使用对方的传送控制信号,只需三条接口线,即“发送数据”、“接收数据”和“信号地”。所以采用DB-9 的9 芯插头座,传输线采用屏蔽双绞线。(4) 传输电缆长度由RS-232C 标准规定在码元畸变小于4%的情况下,传输电缆长度应为50 英尺,其实这个4%的码元畸变是很保守的,在实际应用中,约有99%的用户是按码元畸变10-20%的范围工作的,所以实际使用中最大距离会远超过50 英尺,美国DEC 公司曾规定允许码元畸变为10%而得出附表2 的实验结果。其中1 号电缆为屏蔽电缆,型号为DECP.NO.9107723 内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。2 号电缆为不带屏蔽的电缆。 2. 什么是RS-485 接口?它比RS-232-C 接口相比有何特点?答: 由于RS-232-C 接口标准出现较早,难免有不足之处,主要有以下四点:(1) 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL 电路连接。(2) 传输速率较低,在异步传输时,波特率为20Kbps。(3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。(4) 传输距离有限,最大传输距离标准值为50 英尺,实际上也只能 用在50 米左右。针对RS-232-C 的不足,于是就不断出现了一些新的接口标准,RS-485 就是其中之一,它具有以下特点:1. RS-485 的电气特性:逻辑“1”以两线间的电压差为+(2—6) V 表示;逻辑“0”以两线间的电压差为-(2—6)V 表示。接口信号电平比RS-232-C 降低了,就不易损坏接口电路的芯片, 且该电平与TTL 电平兼容,可方便与TTL 电路连接。2. RS-485 的数据最高传输速率为10Mbps3. RS-485 接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。4. RS-485 接口的最大传输距离标准值为4000 英尺,实际上可达 3000 米,另外RS-232-C接口在总线上只允许连接1 个收发器, 即单站能力。而RS-485 接口在总线上是允许连接多达128 个收发器。即具有多站能力,这样用户可以利用单一的RS-485 接口方便地建立起设备网络。因RS-485 接口具有良好的抗噪声干扰性,长的传输距离和多站能力等上述优点就使其成为首选的串行接口。 因为RS485 接口组成的半双工网络,一般只需二根连线,所以RS485接口均采用屏蔽双绞线传输。 RS485 接口连接器采用DB-9 的9 芯插头座,与智能终端RS485接口采用DB-9(孔),与键盘连接的键盘接口RS485 采用DB-9(针)。3. 采用RS485 接口时,传输电缆的长度如何考虑?答: 在使用RS485 接口时,对于特定的传输线经,从发生器到负载其数据信号传输所允许的最大电缆长度是数据信号速率的函数,这个 长度数据主要是受信号失真及噪声等影响所限制。下图所示的最大电缆长度与信号速率的关系曲线是使用24AWG 铜芯双绞电话电缆(线 径为0.51mm),线间旁路电容为52.5PF/M,终端负载电阻为100 欧 时所得出。(曲线引自GB11014-89 附录A)。由图中可知,当数据信 号速率降低到90Kbit/S 以下时,假定最大允许的信号损失为6dBV 时, 则电缆长度被限制在1200M。实际上,图中的曲线是很保守的,在实 用时是完全可以取得比它大的电缆长度。 当使用不同线径的电缆。则取得的最大电缆长度是不相同的。例 如:当数据信号速率为600Kbit/S 时,采用24AWG 电缆,由图可知最 大电缆长度是200m,若采用19AWG 电缆(线径为0。91mm)则电缆长 度将可以大于200m; 若采用28AWG 电缆(线径为0。32mm)则电缆 长度只能小于200m。
上传时间: 2013-10-11
上传用户:时代电子小智