版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、是时间上还需要额外的开销。而串行通信的突出的优点是仅仅需要数量很少的传输线,特别适合远距离传输。此外,对于PIC单片机而言,串行通信的另一个优点就是,需要占用的引脚的资源较少。 PIC16F87X单片机内部集成了两个类型不同的串行通信模块,即通用同步/异步收发器USART(Universal Synchronous/Asynchronous Receiver Transmitter)模块和主控同步串行端口MSSP(Master Synchronous Serial Port)模块。前者的主要应用目标是系统之间的远距离串行通信,此项技术的应用历史比较久远。而后者的主要应用目标是系统内部近距离的串
2、行扩展。 串行通信的实现,在制式、种类、形式、规范、标准、编码、检错、纠错、帧结构、组网方式、调制方式等方面,存在着多种类型、变化、选择和解决方案。例如,Philips公司发明的I2C总线,Intel等公司提出的SMBUS总线,Freescale公司首先应用的SPI接口,美国国家半导体公司(NSC)公司首先应用的MicroWire接口,达拉斯公司推出的1-Wire总线,美国电子工业协会推荐标准RS-232、RS433、RS-485接口,Intel等公司提出的USB总线,苹果公司提出的IEEE-1394总线,博世公司提出的CAN总线,现场总线基金推出的FF总线,Motorola公司联合东芝公司共
3、同开发的LONworks总线等,都是用来实现与串行通信功能相关的技术和规范。 图8.1 串行通信系统 在数据通信、计算机网络以及分布式工业控制系统中,经常采用串行通信来交换数据和信息。1969年,美国电子工业协会(EIA)公布了RS-232C作为串行通信接口的电气标准,该标准定义了数据终端设备(DTE)和数据通信设备(DCE)间按位串行传输的接口信息,合理安排了接口的电气信号和机械要求,在世界范围内得到了广泛的应用。但它采用单端驱动非差分接收电路,因而存在着传输距离不太远(最大传输距离15m)和传送速率不太高(最大位速率为20Kb/s)的问题。远距离串行通信必须使用Modem,增加了成本。在分
4、布式控制系统和工业局部网络中,传输距离常介于近距离(20m)和远距离(2km)之间的情况,这时RS-232C(25脚连接器)不能采用,用Modem又不经济,因而需要制定新的串行通信接口标准。 1977年EIA制定了RS-449。它除了保留与RS-232C兼容的特点外,还在提高传输速率,增加传输距离及改进电气特性等方面作了很大努力,并增加了10个控制信号。与RS-449同时推出的还有RS-422和RS-423,它们是RS-449的标准子集。另外,还有RS-485,它是RS-422的变形。RS-422、RS-423是全双工的,而RS-485是半双工的。 RS-422标准规定采用平衡驱动差分接收电路
5、,提高了数据传输速率(最大位速率为10Mb/s),增加了传输距离(最大传输距离1200m)。 RS-423标准规定采用单端驱动差分接收电路,其电气性能与RS-232C几乎相同,并设计成可连接RS-232C和RS-422。它一端可与RS-422连接,另一端则可与RS-232C连接,提供了一种从旧技术到新技术过渡的手段。同时又提高位速率(最大为300Kb/s)和传输距离(最大为600m)。 RS-485为半双工的,当用于多站互连时可节省信号线,便于高速、远距离传送。许多智能仪器设备均配有RS-485总线接口,将它们联网也十分方便。串行通信由于接线少、成本低,在数据采集和控制系统中得到了广泛的应用,
6、产品也多种多样。8.1.1 RS-232C接口规格接口规格 RS-232C其中RS是Recommended Standard的缩写,代表标准,232是标识符,C代表RS-232的最新一次修改(1969年),在这之前,有过RS-232A、RS-232B标准,它规定连接电缆和机械、电气特性、信号功能及传送过程。现在,计算机上的串行通信端口(RS-232)是标准配置端口,已经得到广泛应用,目前计算机上一般都12个标准RS-232C串口,即通道COM1和COM2。1RS-232C标准的电气特性 EIA-RS-232C对电器特性、逻辑电平和各种信号线功能都作了明确规定。在TXD和RXD引脚上电平定义:逻
7、辑1(MARK) -3V-15V;逻辑0(SPACE) 315V 在RTS、CTS、DSR、DTR 和DCD等控制线上电平定义:信号有效(接通,ON状态,正电压)+3V+15V;信号无效(断开,OFF状态,负电压)=-3V-15V 对于数据(信息码):逻辑“1”的传输的电平为-3V-15V,逻辑“0”传输的电平为+3V+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V+15V,断开状态(OFF)即信号无效的电平为-3V-15V,也就是当传输电平的绝对值大于3V 时,电路可以有效地检查出来;而介于-3+3V之间的电压即处于模糊区电位,此部分电压将使得计算机无法准确判断传输信号的意义
8、,可能会得到0,也可能会得到1,如此得到的结果是不可信的,在通信时候体现的是会出现大量误码,造成通信失败。因此,实际工作时,应保证传输的电平在(315)V 之间。 目前,大部分计算机的RS-232C通信接口都使用了DB9连接器,主板的接口连接器有9根针输出,也有些比较旧的计算机使用DB25连接器输出,表8.1为RS-232C串口引脚定义表。表8.1 RS-232C串口引脚定义表 RS-232C 规定的逻辑电平与一般微处理器、单片机的逻辑电平是不同的,例如RS-232的逻辑“1”是以-3-15V来表示的,而单片机的逻辑“1”是以+5V来表示的,两者完全不同。因此,单片机系统要和电脑的RS-232
9、接口进行通信,就必须把单片机的信号电平(TTL电平)转换成计算机的RS-232C电平,或者把计算机的RS-232C电平转换成单片机的TTL电平,通信时必须对两种电平进行转换。实现这种转换的方法可以使用分立元件,也可以使用专用RS-232电平转换芯片。目前较为广泛地使用专用电平转换芯片,如MC1488、MC1489、MAX232等电平转换芯片来实现EIA到TTL电平的转换。下面介绍MAXIM公司的单电源电平转换芯片MAX232及接口电路。 如图8.2中所示,MAX232是单电源双RS-232发送/接收芯片,采用单电源(+5V)供电,外接只需4个电容,便可以构成标准的RS-232通信接口,硬件接口
10、简单,所以被广泛采用。 图8.2 MAX232实物及芯片引脚排列8.1.2 接续方法 单片机和计算机RS-232接口电路如图8.3所示,图中的C1、C2、C3、C4是电荷泵升压及电压反转部分电路,产生V+、V-电源供EIA电平转换使用,C5是VCC对地去耦电容,其值为0.1UF,电容C1C5安装时必须尽量靠近MAX232芯片引脚,以提高抗干扰能力。 图8.3 采用MAX232CPE 芯片的PC机与单片机串行通信接口电路 图8. 4是一个采用分立元件构成的简易RS-232串行通信接口电路,使用三极管进行电平转换,由于简单的通信,对于通信稳定性要求较高的应用,不建议使用分立元件,因为分立元件电路的
11、稳定性,误码率较高,不能完全满足RS-232C的全部技术指标。分立元件组成的电路优点是成本低廉,部分网站上介绍的产品就分立元件构成。图8. 4 采用分立元件的简易RS-232C通信接口电路8.1.3 PIC串行通信设计实例串行通信设计实例 当 PIC单片机不具备片上硬件 USART或者USART不够用时,可以利用软件模拟实现异步串行通信。Microchip公司推出的 PIC系列单片机PIC16C711具有运行速度快、低功耗、价格低、体积小等优点。因为,不具备硬件 USART时需要用一般 I/O口来模拟串行口。1串行接口硬件电路串行接口硬件电路 如图 8. 5所示,RB0为接收脚,RB5为发送脚
12、。RB0除作为一般 I/O引脚外,还可以作为外部中断输入引脚,引起中断的方式分为上跳沿和下跳沿两种方式。设置下跳沿引起中断。当起始位到来时,RB0上出现下跳沿,引起中断,如果不是干扰信号则开始接收数据。 RS- 485标准的特点是抗干扰能力强,传输速率高、传送距离远。它规定了双端(平衡式)电气接口特性。当单片机与具有 RS-485接口的PC机通信时,需要进行信号形式的转换。从单片机发送到 PC机的信号首先转换成平衡信号,再送往 PC机。从PC机发送到单片机的信号先转换成非平衡信号,再输入单片机。信号形式的转换工作由RS-485接口芯片 SN75176完成。SN75176差分总线收发器工作在半双
13、工方式,当工作于发送方式时,发送使能引脚DE为高电平,接收使能引脚RE也为高电平。当工作于接收方式时,发送使能引脚 DE为低电平,接收使能引脚RE也为低电平。这样,可以将 DE与RE连接在一起,由 RB6引脚输出控制信号,控制 SN75176的发送和接收使能。为了减少线路上信号的反射,需要匹配线路的特性阻抗。由于通信载体是双绞线,它的特性阻抗为120左右,所以线路设计时,在 RS- 485网络传输线的始端和末端各应接1只 120的匹配电阻,R1为单片机一侧的匹配电阻。由于 RS485芯片的特性,接收器的灵敏度为 200mV,即差分输入端 VA-VB200mV时,输出逻辑“1”;VA- VB-2
14、00 mV时,输出逻辑“0”。当VA-VB200 mV时,输出不确定。因此,当 A、B无信号输入时,可能造成接收引脚R上出现低电平,这会误认为通信帧起始位到来而引起工作不正常。为了避免这种情况发生,可以人工的让 A端电位高于 B端电位,使 R引脚在RS485总线不发送期间呈现唯一的高电平,单片机不会被误中断而接收到乱字符。通过在 A、B接上拉、下拉电阻 R3、R2可解决这个问题。 图 8. 5PIC16C711与 PC机之间的接口电路2单片机通信程序框图单片机通信程序框图 PIC单片机与 PC机之间的通信方式为半双工方式。一帧数据包括一位起始位、8位数据位、一位停止位和无奇偶校验位。设发送和接
15、收数据的波特率为9600 b/s,则每一位占用的时间td为19600s,约为104s。单片机晶振频率为 4MHz,单片机执行一条指令耗费时间 1s。 单片机接收数据程序框图 PIC16C711单片机的 RB0引脚具备外部引脚跳变沿中断功能,向 RB0引脚送一个上跳沿或下跳沿信号,则 INTCON寄存器的外部引脚跳变沿中断标志位 INTF被置 1。如果总中断和外部引脚跳变沿中断都使能,并且此时单片机没有执行其他中断服务子程序,程序进入 INT中断服务子程序。根据异步串行通信的特点,通信线路空闲时单片机接收的是高电平,起始位到来时单片机接收到低电平,因此空闲位和起始位之间是一个下跳沿。单片机接收到
16、下跳沿即起始位后,马上进入中断服务子程序,准备接收一帧数据。因此在主程序中设置由下跳沿引起外部引脚跳变沿中断。下面将主要分析接收子程序即中断服务子程序。单片机接收数据程序框图如图8. 6所示。 进入中断服务子程序后,首先保护中断现场,然后检测起始位是否是“真的”。由于可能存在的各种干扰,PIC单片机有可能接收到的干扰信号正好是一个下跳沿,而实际上此时根本没有数据到来,从而造成误接收数据。因此检测起始位的真实性是有必要的。采取的方法是在52s(起始位的中点)后,检测一次 RB0上的信号。程序框图中是延时47s后检测 RB0上的信号,原因是保护中断现场的几条指令要耗费几个s。如果是低电平,则起始位
17、是“真的”,否则为干扰信号,单片机清 INTF标志位,然后退出中断服务子程序,回到主程序。若起始位是“真的”,则准备接收数据。设计规定数据位为 8位,故首先设置接收计数器R_CNT内容为 8。然后将 STATUS寄存器中的 C位清零,并右移接收数据寄存器RCV_R。C的内容即 0移入 RCV_R最高位,接下来接收数据位。为尽量保证数据的准确性,应该在每位数据的中点检测该位数据。因此,检测第一位数据的时刻距离检测起始位的时刻应该是一位数据所占的时间即 104s,此后的每一位数据检测时刻之间也是如此。此时又要用到延时程序。因为每两次检测时刻之间除了延时之外,指令 (C清零、右移等指令)还要占用时间
18、,这些指令占用 56s,因此,为了尽量保证在每一位的中心位置检测数据,延时时间定为 98s。如果检测得到的数据位为1,则置 RCV_R最高位为 1。如果数据位为 0,则不必改变最高位,因为 C为 0且已经移入 RCV_R的最高位。然后,将接收计数器内容减 1。8位数据接收完毕后,清 INTF标志。最后,退出中断服务子程序。至此,8位数据接收全部存放于 RCV_R中。 单片机发送数据程序框图 用RB5引脚作为发送引脚,单片机发送数据程序框图如图8. 7所示。当有数据要从单片机发往PC机时,单片机调用发送子程序。在发送子程序中,首先设置发送计数器内容为 8,然后发送起始位,起始位应持续 104s。
19、因此要调用延时子程序,延时子程序执行完后,RB5上的信号并未立刻变成第一位数据的值,这是因为还要执行几条指令,如右移 TRS_R、置位等 RB5上的信号才会变化。假设延时 104s,那么加上几条指令的执行时间,起始位就比 104s宽了。因此,延时子程序少于 104s,根据具体的程序定为 97s。然后,右移发送数据寄存器 TRS_R,将其最低位即要发送的数据位移入 C中,再根据 C中的内容将RB5清零或置 1,然后将发送计数器内容减 1,并判断其是否为 0。若为 1,则说明未发送完毕,继续发送;否则,发送停止位。最后,退出发送子程序。 图 8.6单片机接收数据程序框图 图 8.7单片机发送数据程
20、序框图 USART带有一个8位波特率发生器BRG(Baud Rato Generator),BRG支持USART的同步和异步工作方式。用SPBRG寄存器控制一个独立的8位定时器的周期。在异步方式下,发送状态/控制寄存器TXSTA的BRGH位(即D2)也被用来控制波特率(在同步方式下忽略BRGH位)。 向波特率寄存器SPBRG写入一个新的初值时,都会使BRG定时器复位清零,由此可以保证BRG不需要等到定时器溢出后就可以输出新的波特率。 对USART方式进行初始化的程序如下: BSF STATUS,RP0 ;将指针指向数据存储器的第1页 MOVLW 0 x19 MOVWF SPBRG ;设置波特率
21、为9600 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 CLRF RCSTA ;将接收控制和状态寄存器清零 BSF RCSTA,SPEN ;串口允许 CLRF PIR1 ;清除中断标志 BSF STATUS,RP0 ;将指针指向数据存储器的第1页 CLRF TXSTA ;将发送控制和状态寄存器清零 BSF TXSTA,BRGH ;设置为异步、高速波特率 BSF TXSTA,TXEN ;允许发送 BCF STATUS,RP0 ;将指针指向数据存储器的第0页 BSF RCSTA,CREN ;允许接收 初始化完成后,即可发送或接收数据。在发送或接收数据时,通过查询发送/接收中断标志
22、位即可判断是否发送完一个数据/接收到一个数据。 送/接收中断标地不需要也不有用软件复位。 在异步串行发送的过程中,只要TXREG寄存器为空,中断标志TXIF就置位。因此,TXIF为1并不是发送完毕的标志,但仍可以用TXIF标志来判断。因此当TXREG为空时,将数据送入后,数据会保留在TXREG寄存器中,直到前一个数据从发送移位寄存器中移出,即前一个数据发送。8.2.2 串行接口芯片串行接口芯片8251A 8251的管脚和内部结构如图8. 8所示。1同同CPU的连接信号的连接信号 RESET:当这个引脚上出现一个6倍时钟宽的高电平信号时,芯片被复位,使芯片 处于空闲状态。这个空闲状态将一直保持到
23、由编程确定了新状态才结束。在系统中 使用此芯片时,总是把复位端与系统的复位线相连,使它受到加电自动复位和人工 复位的控制。 CLK:是为芯片内有关电路工作提供时钟的输入端。这个时钟的频率与数据速率并 无直接关系,但是,为了电路工作可靠,在同步方式下最好使这个频率比数据速率 大30倍以 上。在异步方式下,大4.5倍。 、 :是CPU对8251A中的寄存器读、写时的控制信号输入端。 C/ :是一个决定CPU对芯片读写内容的控制输入端。如果输入为高电平,CPU 对芯片就是写控制字或读状态字;反之,读写的内容就是数据。通常,将该端与地址 线的最低位相接。于是,8251A就占有两个端口地址,偶地址为数据
24、口地址,而奇 地址为控制口地址。 :片选输入端。该引脚输入低电平时,芯片可以与CPU之间传输数据;反之, 芯片的8个数据引脚处于悬空状态。 WRRDDCS图图8.8 8251A 芯片引脚芯片引脚 D0D7:双向8位数据线,同片内数据总线缓冲器相连,CPU通过D0D7向8251A 写数据和控制字,以及读数据和状态字。 2MODEM控制信号控制信号 8251A还提供了四个与MODEM相连的控制信号,信号的含义与RS232C标准相同。 (Data Terminal Ready):数据终端准备好(输出,低电平有效)。这是 一个通用的输出信号,可由命令字的位1置“1”,而变为有效,用以表示CPU准备就绪
25、。DTR (Data Terminal Ready):数据终端准备好(输出,低电平有效)。这是 一个通用的输出信号,可由命令字的位1置“1”,而变为有效,用以表示CPU准备就绪。 (Request To Send):请求发送(输出,低电平有效)。此信号用于通知 调制器,CPU已准备好发送。它可由命令字的位5置“1”而变为有效(低电平有效)。 (Clear To Send):清除发送信号(输入,低电平有效)。这是调制解凋器 或其它外设送到8251A中的调制解调器控制器的信号。当其有效时,表示允许USART 发送数据。 上述四个信号在使用时应按规定引脚连接。信号在传输过程中,由MODEM输入后存放
26、在8251A的状态字节中,芯片内对此并不作处理,只有当CPU读状态后才可能给出响应。CTS也是从MODEM送来的信号,如果为低电平。且8251A中已经设置了允许发送命令,芯片就可以向MODEM送出串行数据。如果在数据传送中,出现了某个条件不满足 的情况,那么,在传输完当前的字节后,即行停止。和都是由CPU写命令时给8251A设置的,为使两个引脚有效(低电平),对寄存器中这两位应写入“1”。3发送器有关信号发送器有关信号 TxD:发送数据。发送缓冲器从数据总线上接收数据,转换成串行数据,并按要求 插入附加字符或附加位后,在时钟 的下降沿按位从TxD上发送出去。 xRDY:发送器准备好信号。如果该
27、信号有效,就表示发送缓冲器已空,CPU可以向 芯片送入新的数据。这个信号的状态要受到命令字中TxEN位(允许发送)的控制。 如果 把TxRDY信号作为向CPU请求数据的中断信号,TxEN位就可以看作是中断控 制的屏蔽 位。在8251A的状态字中有一位TxRDY,CPU也可以用查询的方式判断 是否可以送数据。DSRRTSCTS TxE:发送缓冲器空标志。不管发送时是处于等待还是发送状态,只要发送缓冲器 中没有再要发送的字符,这个标志就变高。当从CPU送入一个数据字符时,该位标 志就被复位。 这个标志可以用来表示一段数据传输的结束。如果是半双工工作, 这个标志可以用作从发到收的转换。同步工作时,如
28、果临时出现TxE,就意味着数据 发送出现空缺,芯片会自动插补同步字符。 :输人控制发送器数据速率的时钟。每个数据的移位输出,是在TxC的下降 沿实现的。异步方式下, 的频率可以是数据速率的1、16或64倍。同步方式时, 的频率与数据速率相同。4接收器有关信号接收器有关信号 RxD:接收数据。用来接收外设送来的串行数据,按规定检查有关字符或有关位后, 经串一并转换送入数据总线缓冲器,RxD在时钟上升沿采样输入。 RxRDY:接收器准备好标志。如果该位为高电乎,接收缓冲器中就已经有组装好了 的一个数据字符,可通知CPU将它取走。与TxRDY相似,RxRDY也可用作中断请 求信号,也可以通过读状态字
29、了解接收器状态。一旦CPU读走这个数据字符,RxRDY 被复位。要是CPU没有及时取走数据,新接收数据将覆盖数据,使一个数据丢失, 出现溢出错误,并反映在状态字中。 :接收时钟输入端。当时钟处在上升沿时,才可能把数据取样输入。时钟速率 的规定与 相同。实际上, 和 往往连接在一起,用同一个时钟源。 TxCTxCTxCRxCTxCTxCRxC SYNDET/BRKDET:同步和间断检测。芯片在同步方式工作时,用作同步检测端; 异步时则用作间断检测输出。芯片可以由编程确定是内同步还是外同步。如果是内 同步,就由 芯片内电路搜索同步字符,一旦找到,就由该端输出一个高电平。 如果是外同步,当片外检测电
30、路找到同步字符后,就可以从该引脚输入一个高电平 信号,使8251A正式开始接收。一旦开始正常接收数据,同步检测端恢复低电平输 出。 异步方式工作中,通常在线路上无数据时以高电平表示。在8251A中也可以由程序控制,使无数据的间断时间内线路上呈现低电平,即发送一个字符长度的全“0”码。接收端具有对这种间断码检测的能力,如果检测到间断码,将从该端输出一个高电平。为了避免接收器对尚未正式开始工作的线路低电平误认为间断状态,8251A在复位后总是要在检测到一次高电平输入后,才开始对间断状态的检测。 对于8251A它有三个字,一个方式指令字、命令指令字、状态字,其中方式指令字和命令字都是要写入到控制口里
31、的,而状态字是从控制口读出来的,如果读和写能够区别,也就是状态字和指令字这两个可以区别,但指示字里是方式指示字还是命令指示字,这个关系必须要注意,它们的关系应是在开机时、在复位时以及完成后,先给的字认为是方式指示字。给完了方式指示字后再给的自动认为是命令指令字,就不会把后面给的当作方式字进行保存,而当作命令控制操作。8.2.3 USART应用通信编程实例应用通信编程实例1概述概述 要在PIC16F877与 PC机间进行数据交换,这里可应用USART来实现。在编写程序时首先要设置好USART异步通讯模块工作模式及相关寄存器,PIC16F877的USART与其他具有USART的 PIC单片机一样,
32、可以被设置成为与 PC机进行全双工异步通讯,它是利用PORTC口的RC6和RC7两个引脚作为通讯的2线制串行通讯接口。为了把PORTC口的RC6和 RC7两个引脚分别设置成串行通讯接口的发送(TX)脚和接收(RX)脚,必须要把USART的接收状态和控制寄存器 RCSTA 的 bit7(SPEN)位和TRISC寄存器的bit7置“1”,把TRISC寄存器的bit6置“0”。为了使USART分别工作于接收或发送状态,就必须设置相应的状态寄存器和控制寄存器。在设置接收器时,要注意接收脚对接收信号的采样。接收脚 RX上的数据被采样3次,通过一个三中取二逻辑检测电路来判断 RX脚上的电平是高还是低,以作
33、为采样取值。另外,要使USART工作在异步通讯方式,就必须要设置通讯的传送、接收速率即波特率,USART的波特率设置是通过控制独立的一个8位波特率发生器BRG实现的。 在异步工作方式下,串行通讯接口USART采用标准的不归0(NRZ)格式(即1位起始位、8位或9位数据位及1位停止位),最常用的数据格式是8位。PIC16F877片内的8位波特率发生器BRG可以用来驱动振荡器的时钟,产生标准的波特率频率。PIC16F877的 USART发送和接收顺序是从最低位(LSB)开始。USART发送器和接收器在功能上是完全独立的,但是它们所用的数据格式和波特率必须是相同的。波特率发生器可以根据发送状态和控制
34、寄存器TXSTA的 bit2(BRGH)位设置产生2种不同的移位速度:对系统时钟16分频和64分频的波特率时钟,即设置该位在异步通讯模式为1时表示通讯为高速,为0时表示通讯为低速。要使USART工作于异步通讯模式,可通过对发送状态和控制寄存器TXSTA的bit4(SYNC)位设置清“0”。 由上可知,PIC16F877的USART异步工作设置主要包括对以下部件的设置:波特率发生器BRG、采样电路、异步发送器、异步接收器等。这里关于PIC16F877的USART异步工作有两点需要说明:一是USART硬件不支持奇偶效验,但可以用软件实现(并可作为第9位数据传输);二是在CPU处于休眠工作方式时,U
35、SART不能工作在异步通讯方式。 2. USART波特率发生器波特率发生器BRG设置设置 在异步通讯方式下,波特率发生器BRG需要设置一个初值,以使BRG输出一个合适的波特率。在BRG设置时,其工作在高速还是低速是由发送状态寄存器和控制寄存器 TXSTA的 bit2(BRCH)位进行设置的。在 PIC16F877内部时钟工作模式下,设置BRG波特率寄存器 SPBRG在低速和高速初值的计算公式如下: BRGH=0(低速) 异步波特率=FOSC/ (64(X+1) BRGH=1(高速) 波特率=FOSC/ (16(X+1) 其中,X为SPBRG寄存器的值(0255)。 实际应用中,上式用于高速方式
36、(BRGH=1)下计算波特率可以减小误差。另外,在向波特率寄存器SPBRG写入一个新值时会使BRG定时器复位(清零),由此就可保证波特率发生器BRG不需要等到定时器溢出后就可输出新的波特率。3. USART异步通讯的寄存器设置异步通讯的寄存器设置 实现USART异步通讯的寄存器主要有:发送状态寄存器和控制寄存器 TXSTA、接收状态和控制寄存器RCSTA、波特率发生器存器SPBRG、发送数据寄存器 TXREG、接收数据寄存器 RCREG、外围接口中断使能寄存器 PIE1 和外围接口标志寄存器 PIR1等。 发送状态和控制寄存器(表8.2) 表8.2 发送状态和控制寄存器 bit7 CSRC:异
37、步方式未用。 bit6 TX9:发送数据长度选择位。1 =选择9位数据;0=选择8位数据。 bit5 TXEN:发送允许位。1=允许发送;0=关闭发送。 bit4 SYNC:USART同步/异步方式选择位。1 =选择同步方式;0=选择异步方式。 bit3 此位未用。 bit2BRGH:高速波特率使能位。1 =高速;0 =低速。 bit1 TRMT:发送移位寄存器(TSR)“空”标志位。1=TSR空;0=TSR满。 bit0 TX9D:发送数据的第9位。 接收状态和控制寄存器(表8.3)表8.3 接收状态和控制寄存器 bit7 SPEN:串行口使能位。1=允许串行口工作(把RC7和 RC6设置成
38、串行口引脚;0 =禁止止串行工作; bit6 RX9:接收数据长度选择位。1 =选择接收9位数据;0=选择接收8位数据。 bit5 SREN:单字节接收允许位。异步方式此位未用。 Bit4 CREN:连续接收选择位。1 =允许连续接收;0=禁止连续接收。 bit3ADDEN:地址匹配检测使能位。1=允许地址匹配检测,允许中断并且当RSR的D8被置1时读接收缓冲器数据;0=禁止地址匹配检测,接收所有字节,第9位被看作奇偶效验位。 bit2 FERR:帧格式错标志位。1=帧格式错(读RCREG寄存器可对该位刷新并且准备接收下一个有效位);0=无帧格式错。 bit1OERR:越位溢出错标志位。1=有
39、溢出错,清CREN位可将此位清零;0=无溢出错。 bit0 RX9D:接收数据的第 9 位,可作奇偶效验位。 外围接口中断使能寄存器(表8.4) 表8.4外围接口中断使能寄存器 bit5 RCIE:串行异步通讯接口接收中断使能位。1=允许USART接收中断;0 =禁止US2ART接收中断。 bit4 TXIE:串行异步通讯接口发送中断使能位。1=允许USART发送中断;0=禁止USART发送中断。 其余位在异步通讯中未用。 外围接口中断标志寄存器(表8.5)表8.5 外围接口中断标志寄存器 bit5 RCIF:异步串行通讯(USART)接口接收中断标志位;1=USART接收缓冲区满;0 = U
40、SART接收缓冲区空。 bit4 TXIF:异步串行通讯(USART)接口发送中断标志位;1= USART发送缓冲区空;0= USART发送缓冲区满。 其余位在异步通讯中未用。 其他寄存器波特率 发生器存器 SPBRG的设置可以参考USR2TA波特率发生器BRG的设置内容,在设置该寄存器就是根据单片机工作时钟频率确定传输数据的波特率,只要将其初值写入SPBRG寄存器即可。 发送数据寄存器 TXREG是将单片机需要发送的数据存放的寄存器,在单片机未发送之前就必须要将备发送的数据装入该寄存器。接收数据寄存器RCREG是将单片机接收到外界数据后存放数据的寄存器,在单片机确定接收的数据无误后,将其数据
41、存放到该寄存器中。 4PIC16F877单片机与单片机与PC机实现电平转换机实现电平转换 PC机的串行接口是符合 EIA RS- 232C规范的外部总线标准接口。RS- 232C采用的是负逻辑,即逻辑”1”:- 5- 15 V;逻辑”0”:+5 +15 V。而CMOS电平为:逻辑“1”:4.99 V,逻辑“0”:0.01 V;TTL电平的逻辑“1”和“0”则分别为2.4 V和0.4 V。因此在用RS-232C总线进行串行通信时需外接电路实现电平转换。在发送端用驱动器将 TTL 或CMOS电平转换为RS- 232C电平,在接收端用接收器将 RS-232C电平再转换为TTL 或 CMOS电平。这里
42、选用了MAXIM公司的MAX232来作电平转换。MAX232属于MAXIM公司的通用串行接收/发送驱动器芯片。其外围电路简单,只需外接4个0.1F的电容即可,其系统硬件电路如图8. 9所示。图中MAX232将PIC16F877的TX输出的TTL电平信号转换为RS-232C电平,输入到 PC机,并将 PC机输出的 RS-232C 电平转换为 TTL 电平,输出到PIC16F877单片机的RX引脚。5. PC机支持与机支持与 PIC16F877 进行数据交换的PC机可与PIC16F877可以编程实现,其实现功能如下:PC机和单片机均可发送和接收数据,由 PC机决定是发送还是接收;程序设定当 PC机
43、键盘输入发送指令时,PC机分别显示PC机发送的数据和单片机会送的数据;当 PC机键盘输入接收指令时,PC机将接收单片机发送过来的数据,并将其数据显示。在编程中,必须要注意设置 PC机与PIC16F877单片机在进行数据交换时的数据传输格式相同。通常采用的通讯协议如下:波特率为9 600 bps,8位数据位,1位停止位,无奇偶效验位。PC机发送命令给单片机,键盘输入发送命令时,控制单片机接收数据,当PC机键盘输入接收命令时,控制单片机发送数据给PC机。PC机与PIC16F877单片机进行数据交换的程序编制流程如图8.10所示。 图8.9PIC16F877与PC接口原理图源程序如下:1)初始化设置
44、部分COUNTEQU 0X20TEMPEQU0X21J0EQU0X22ORG0NOPSTARTGOTOMAINORG0X05MAINBANKSEL TRISCMOVLWB10000000MOVWF TRISCMOVLW0X30 ;将RAM单元初始化MOVWF FSRBCF STATUS,RP0MOVLW0X22MOVWFCOUNTBCF PIR1,RCIFBSF PIR1,TXIFINTRAMMOVFCOUNT,0MOVWF INDFINCFCOUNT,1INCF FSR,1BTFSS FSR,7GOTO INTRAM 图8.10数据交换程序流程框图BANKSEL TXSTAMOVLW0X19
45、MOVWF SPBRG ;波特率设置为9 600 bpsMOVLW0X04MOVWF TXSTA ;异步高速方式BCF STATUS,RP0MOVLW0X80MOVWF RCSTA ;串行口使能MOVLW0X30MOVWF FSRBSF RCSTA,CREN ;接收允许BSF STATUS,RP0BSF TXSTA,TXEN ;发送允许BCF STATUS,RP02)接收并返回数据部分WAITBTFSSPIR1,RCIFGOTO WAIT ;接收PC机命令MOVF RCREG,0MOVWF TEMPMOVWF INDFINCF FSRDECFSZTEMP ;接收到的数据为1,则接收GOTO T
46、XW ;否则发送数据MOVLW0X06MOVWF TEMPWAIT1BTFSS PIR1,RCIFGOTO WAIT1 ;接收一个数据MOVF RCREG,0MOVWFCOUNTMOVWF TXREGLOOPTXBTFSSPIR1,TXIF ;将接收到的数据送回PC机GOTOLOOPTXMOVFCOUNT,0MOVWF INDFINCF FSRDECFSZTEMPGOTO WAIT1GOTOOVER ;处理完毕TXWMOVLW0X09 ;向PC机发送9个数据MOVWF TEMPMOVLWD00MOVWFJ03) 发送数据部分TXW0MOVF J0,0MOVWF TXREGINCFJ0 ;单片机
47、发送的数据为08和一位存储数据TXW1BTFSS PIR1,TXIFGOTO TXW1DECFSZTEMPGOTO TXW0OVERBCF RCSTA,CREN ;通信任务完成,关接收和发送允许 要实现PIC单片机与PC机间的数据通讯,不仅是要连接硬件电路和对单片机进行编程,同时还需要在PC上编写数据收发的程序。通常,对于单片机与PC机间的数据通讯交换调试时,可以串口通讯调试工具,同时也可以自编调试程序。程序编写好后,再与上述 PIC16F877一起进行操作,即可实现简易通讯数据交换。 这里特别需要注意的是:当 PC机与单片机系统通信时,单片机数据存储区( RAM )内的数据是十六进制,在信号
48、线上传输的是十六进制数的ASCII码的二进制形式;而Windows系统下使用的是ANSI码,ANSI码仅在前126个与ASCII码相同,即在 Windows下接收到的是十六进制数的ASCII码的字符串,可先转换为ANSI码后再在Windows下还原为十六进制数。由于USB支持热插拔,即插即用的优点,所以USB接口已经成为计算机的标准接口。USB目前有两个版本,USB1.1的最高数据传输率为12Mbps,USB2.0则提高到480Mbps。二者的物理接口完全一致,数据传输率上的差别完全由PC的USB host控制器以及USB设备决定。USB还可以通过连接线为设备提供最高5V,500mA的电力。
49、现标准中将UBS统一为USB2.0,分为: (1) High-speed,传输速率25Mbps400Mbps(最大480Mbps) (2) Full-speed ,传输速率500Kbps10Mbps(最大12Mbps) (3) Low-speed,传输速率10Kbps100Kbps(最大1.5Mbps) USB 的优点: USB 具有真正的“即插即用”特性,用户可以很容易地对外设进行安装和拆卸, 主机可按外设的增删情况自动配置系统资源,同时用户可以在不关机的情况下 进行外设的更换,外设装置的驱动程序的安装删除将实现自动化。 USB 具有很强的连接能力。 低成本。 空间的节省。 USB与ETDM
50、特性可以支持诸如 ISDN 等高速数字电话信息通路接口。 连接电缆轻巧,电源体积缩小。 USB 一种开放性的不具专利版权的理想工业标准。 8.3.1 USB接口规范接口规范 目前USB支持3种数据信号速率,USB设备应该在其外壳或者有时是自身上正确标明其使用的速率。USB-IF进行设备认证并为通过兼容测试并支付许可费用的设备提供基本速率(低速和全速)和高速的特殊商标许可。 1.5 Mbit/s (183 KByte/s)的低速速率,主要用于人机接口设备(Human Interface Devices ,HID)例如键盘、鼠标、游戏杆。 12 Mbit/s (1.4 MByte/s)的全速速率,
51、在USB 2.0之前是曾经是最高速率,后起的更高速率的高速接口应该兼容全速速率。多个全速设备间可以按照先到先得法则划分带宽;使用多个等时设备时会超过带宽上限也并不罕见。所有的USB Hub支持全速速率。 480 Mbit/s (57 MByte/s)的高速速率,并非所有的USB 2.0设备都是高速的。高速设备插入全速hub时应该与全速兼容。而高速hub具有所谓Transaction Translator(事务翻译器)功能,能够隔离全速、低速设备与高速之间数据流,但是不会影响供电和串联深度。 1机械和电气标准机械和电气标准 图8.11 标准USB接口 标准USB接口如图8.11所示,其电气特性见
52、表8.6。 USB信号使用分别标记为D+和D-的双绞线传输,各自使用半双工差分信号并协同工作,以抵消长导线的电磁干扰。 USB的电缆有四根线,两根传送的是5V的电源,有一些直接和电源HUB相连的设备可以直接利用它来供电。另外的两根是数据线,数据线是单工的,在整个的一个系统中的数据速率是一定的,要么是高速,要么是低速,没有一个可以中间变速的设备来实现数据码流的变速.在这一点上,USB和1394有明显的差别。 USB的总线可以在不使用的时候被挂起,这样一来就可以节约能源。 在有些时候的总线还有可能挡机(stall),比如说象数据传送的时候突然被打断,这个时候通过host的重新配置可以实现总线的重新
53、工作。表8.6 标准USB电气特性表2编码方式编码方式 USB标准采用NRZI方式(翻转不归零制)对数据进行编码。翻转不归零制(non-return to zero,inverted),电平保持时传送逻辑1,电平翻转时传送逻辑0。3. 软件架构软件架构 一个USB主机通过hub链可以连接多个设备。由于理论上一个物理设备可以承担多种功能,例如路由器同时也可以是一个SD卡读卡器,USB的术语中设备(device)指的是功能(functions)。集线器(hub)由于作用特殊,按照正式的观点并不认为是function。直接连接到主机的hub是根(root)hub。 4. 端点端点 设备/功能(和集线
54、器)与管道(pipe)(即逻辑通道)联系在一起,管道把主机控制器和被称为端点的逻辑实体连接起来。管道和比特流(例如UNIX的pipeline)有着相同的含义,而在USB词汇中术语端点经常和管道混用,甚至在正式文档中。 端点(和各自的管道)在每个方向上按照0-15编号,因此一个设备/功能最多有32个活动管道,16个进,16个出。两个方向的端点0总是留给总线管理,占用了32个端点中的2个。在管道中,数据使用不同长度的包传递,端点可以传递的包长度上限一般是长度的2n字节,所以USB包经常包含的数据量依次有8、16、32、64、128、256、512或者1024字节。 一个端点只能单向(进/出)传输数
55、据,自然管道也是单向的。每个USB设备至少有两个端点/管道:它们分别是进出方向的,编号为0,用于控制总线上的设备。按照各自的传输类型,管道被分为4类: 控制传输一般用于短的、简单的对设备的命令和状态反馈,例如用于总线控制的0 号管道。 等时传输按照有保障的速度(可能但不必然是尽快地)传输,可能有数据丢失, 例如实时的音频、视频。 中断传输用于必须保证尽快反应的设备(有限延迟),例如鼠标、键盘。 批量传输使用余下的带宽大量地(但是没有对于延迟、连续性、带宽和速度的 保证)传输数据,例如普通的文件传输。 一旦设备(功能)通过总线的hub附加到主机控制器,主机控制器就给它分配一个主机上唯一的7位地址
56、。主机控制器通过投票分配流量,一般是通过轮询模式,因此没有明确向主机控制器请求之前,设备不能传输数据。 为了访问端点,必须获得一个分层的配置。连接到主机的设备有且仅有一个设备描述符(device descriptor),而设备描述符有若干配置描述符(configuration descriptors)。这些配置一般与状态相对应,例如活跃和节能模式。每个配置描述符有若干接口描述符(interface setting),用于描述设备的一定方面,所以可以被用于不同的用途:如一个相机可能拥有视频和音频两个接口。接口描述符有一个缺省接口设置(default interface setting)和可能多个
57、替代接口设置(alternate interface settings),它们都拥有如上所述的端点描述符。一个端点能够在多个接口和替代接口设置之间复用。5. USB接头接头 接头是由USB协会所指定,接头的设计一方面为了支持众多USB的基本需求,另一方面也避免以往许多类似串行接头所出现的问题。接头设计的相当耐用。许多以往使用的接头较脆弱,即使受力不大,有时针脚或零件也会折弯甚至断裂。而USB接头的金属导电部份周围有塑料作为保护,而且整个连接部份被金属的保护套围住,因此USB接头不论插拔,都不容易受损。不可能把USB接口插错。这是防呆设计,方向相反的插头不可能插到插座里,方向正反很容易感觉出来。
58、接头能相对便宜地大量生产。 在USB网络中,接头被强制使用定向拓扑。USB不支持环形网络,因此不兼容的USB设备之间接口也不兼容。不像其他通讯系统(如RJ-45电缆)不能使用转换插头,防止环形USB网络产生。 适度的插拔力。USB电缆和小型USB设备能被插口卡住(不需要夹子、螺丝或者其他接口那样的锁扣)。允许通过适当力量插拔,连接器要方便困难环境和残障人士使用。 由于接头的构造,在将USB插头插入USB座时,插头外面的金属保护套会先接触到USB座内对应的金属部份,之后插头内部的四个触点才会接触到USB座。金属保护套会连接到系统的地点,提供路径使静电可以放电,避免因静电通过电子零件而造成损坏。
59、8.3.2 USB数据传输模式数据传输模式1HCD 包含主机控制器和根HUB的硬件为程序员提供了由硬件实现定义的接口主机控制器设备(HCD)。而实际上它在计算机是就是端口和内存映射。 1.0和1.1的标准有两个竞争的HCD实现。康柏的开放主机控制器接口 (OHCI)和Intel的通用主机控制器接口(UHCI)。VIA威盛采纳了UHCI;其他主要的芯片组多使用OHCI。主要区别是UHCI更加依赖软件驱动,因此对CPU要求更高,但是自身的硬件会更廉价。它们的并存导致操作系统开发和硬件厂商都必须在两个方案上开发和测试,从而导致费用上升。 因此 USB-IF在USB 2.0的设计阶段坚持只能有一个实现
60、规范,这就是扩展主机控制器接口 (EHCI)。因为EHCI只支持全速传输,所以EHCI控制器包括四个虚拟的全速或者慢速控制器。这里同样是 Intel和Via使用虚拟UHCI,其他一般使用OHCI控制器。2. USB 封包格式封包格式 USB 的封包格式和早期的internet封包格式非常相似,要了解USB连接原理就一定要先了解封包格式。 USB packet format OFFSET TYPE SIZE VALUE 0 HeaderChksum 1 Checksum of the header by adding the header bytes, excluding the header
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东外语外贸大学南国商学院《交际口语(Ⅲ)》2023-2024学年第一学期期末试卷
- 广东体育职业技术学院《劳动经济学(双语)》2023-2024学年第一学期期末试卷
- 广东司法警官职业学院《生化分离与分析技术》2023-2024学年第一学期期末试卷
- 广东食品药品职业学院《管理学概论》2023-2024学年第一学期期末试卷
- 广东省外语艺术职业学院《环境流体力学》2023-2024学年第一学期期末试卷
- 广东轻工职业技术学院《环境影响评价A》2023-2024学年第一学期期末试卷
- 广东农工商职业技术学院《创业文案写作》2023-2024学年第一学期期末试卷
- 广东梅州职业技术学院《新闻传播调查方法与写作》2023-2024学年第一学期期末试卷
- 广东茂名健康职业学院《全网规划与部署》2023-2024学年第一学期期末试卷
- 广东茂名农林科技职业学院《先进材料科技进展》2023-2024学年第一学期期末试卷
- 2024年人教版八年级生物上册期末考试卷(附答案)
- JGJ120-2012建筑基坑支护技术规程-20220807013156
- 江苏省镇江市八年级生物下册 第22章 第2节 生物的变异教案2 (新版)苏科版
- 2024年叉车租赁合同经典版(四篇)
- 小学科学青岛版(六三制)六年级上册全册教案(共25课)(2022秋)
- 2024焊接工艺规程
- 外研版(2024新版)七年级上册英语期末复习Unit1~6共6套学业质量检测试卷汇编(含答案)
- 药理学期末试卷
- 小学高年级课后服务 scratch3.0编程教学设计 一阶第27课 植物大战僵尸-僵尸来袭教学设计
- 2024年人民日报社招聘应届高校毕业生85人笔试高频难、易错点500题模拟试题附带答案详解
- 中西医结合科工作制度
评论
0/150
提交评论