版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章串行通信
串行通信基础一ATmega16异步串行通信接口二单片机I/O口模拟串行通信三项目设计四第6章串行通信串行通信基础一AT在实际中外部设备与单片机之间或单片机与单片机之间、单片机与计算机之间交换数据,可以只通过2条线甚至一条线就完成数据的传输与交换。这时数据位排成一串,在数据线上传输,每个时间段只能传输一个比特位,且时间间隔为规定长度,这就是串行通信。第6章串行通信在实际中外部设备与单片机之间或单片机与单片机之间、单6.1.1串行通信与并行通信6.1串行通信基础 前面所讨论的AVR单片机I/O口,其数据传输是按字节进行,一个字节8个比特位分别与I/O口位线相对应,同时从8个I/O口输入、输出,一个字节传输只需要时间T即可完成,这是数据的并行传输,如图6-1所示。并行传输具有传输线多、速度快、编程简单、通信距离短的特点。6.1.1串行通信与并行通信6.1串行通信基础 前面所讨论6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础 在串行数据传输中,一个字节8个比特数据排成一串,可以高位(MBS)在前,也可以低位在前(LBS),依次在数据线上进行传输。如果其传输速度与并行通信的速度相等且都为T,则串行通信中传输完一个字节所需要时间为8T,传输n个比特位则需要nT时间,如图6-2所示。串行通信具有传输线少、成本低等特点,比较适合远通信。6.1.1串行通信与并行通信6.1串行通信基础 在串行数据6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础6.1.2串行通信方式6.1串行通信基础根据串行通信的组成形式和数据传输方向,串行通信有3种通信方式:单工、半双工、全双工。6.1.2串行通信方式6.1串行通信基础根据串行通6.1.2串行通信方式6.1串行通信基础 单工通信如图6-3a所示。单工通信只允许数据在一个方向上传输,发送端只能发送数据,接收端只能接收数据。 半工通信如图6-3b所示。半双工通信数据可以在两个方向传输,但不能同时进行数据收、发。发送端在发送数据的同时,接收端只能接收数据,反之亦然。通过开关切换,可以将收发端功能互换,原来的接收端发送数据,原来的发送端接收数据。 全双工通信分别有独立的接收线和独立的发送线,数据的收发可以同时进行,且互不影响,如图6-3c所示。在单片机系统中,三种串行通信方式都有应用。6.1.2串行通信方式6.1串行通信基础 单工通信如图6-6.1.3同步通信与异步通信6.1串行通信基础1.同步通信SYNC(SynchronousCommunication)同步通信以数据块为传输单元,一个数据块中包含了若干个数据字符(比如数据字节),仅在数据块首部设置有1~2个同步字符,用以进行数据通信。一旦建立数据同步,就可以进行数据字符的传输,中间无需再同步,数据块中的数据字符长度可定义,如图6-4。6.1.3同步通信与异步通信6.1串行通信基础1.同步6.1.3同步通信与异步通信6.1串行通信基础1.同步通信由于同步通信是以数据块为传输单元,冗余数据信息少,因此同步通信的通信速度很高,可达到Mbps以上。在单片机系统中,采用同步串行通信时可以取消数据块前面的同步字符,用专门的时钟线来传递同步信号,以保证收发端数据的严格同步。因此,在单片机的同步通信中,单工或半双工的通信硬件连接时需要两条线,一条传输数据,另一条专用于传输时钟信号,而在全双工通信中则需要3条线,1条数据输入、1条数据输出、1条时钟线。6.1.3同步通信与异步通信6.1串行通信基础1.同步6.1.3同步通信与异步通信6.1串行通信基础2、异步通信异步通信以字符为传输单位,通信中两个字符的时间间隔不固定(异步),而字符中的两个相邻的比特位的时间是固定的(同步)。在异步通信中,没有专门的、独立的同步时钟信号,典型的异步通信的数据帧格式如图6-5所示,由起始位、数据位、奇偶校验位、停止位所组成。起始位为一固定时间长度的低电平,表示一帧数据的开始,接着就是传输的数据,其长度有5位、6位、7位、8位、9位等。数据位后面是奇偶校验位,指示数据通信的出错情况。校验位后面是1位或2位停止位。停止位为高电平,表示这一帧数据的结束。6.1.3同步通信与异步通信6.1串行通信基础2、异步通6.1.3同步通信与异步通信6.1串行通信基础2、异步通信数据帧后面跟着几位保证数据可靠传输的空闲位。异步通信数据帧的间隔时间不同,通信时数据是一帧一帧进行传输,每帧通过起始位来同步。由于异步通信中没有专门的时钟同步信号,因此在芯片内部需要专门的时序还原电路从异步数据帧中提取时钟信号,以保证接收的数据被正常还原。6.1.3同步通信与异步通信6.1串行通信基础2、异步通6.1.3同步通信与异步通信6.1串行通信基础3、波特率(BaudRate) 波特率是表示串行通信传输数据快慢的物理参数,其定义为单位时间内传输的二进制bit数,用位/秒(BitperSecond)表示,或写成bps。如串行通信中的数据传输波特率为128bps,意为每秒钟传输128个bit,合计16个字节,传输一个比特所需要的时间为:1/128bps=0.0078秒=7.8毫秒。传输一个字节的时间为:7.8×8=62.4毫秒。在异步通信中,常见的波特率通常有1200、2400、4800、9600等,其单位都是bps。高速的可以达到19200bps。异步通信中允许收发端的时钟(波特率)误差不超过5%。6.1.3同步通信与异步通信6.1串行通信基础3、波特率6.1.4同步通信与异步通信6.1串行通信基础 由于串行通信方式能实现较远距离的数据传输,因此在远距离控制时或在工业控制现场通常使用串行通信方式来传输数据。由于远距离数据传输时普通的TTL或CMOS电平无法满足工业现场的干扰和各种电气性能,因此不能用于直接进行远距离的数据传输。国际电气工业协会EIA推出了RS-232、RS485等接口标准。6.1.4同步通信与异步通信6.1串行通信基础 由于串行6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口 RS-232C是1969年电子工业协会(EIA)制定的在数据终端设备DTE和数据通讯设备(DCE)之间的串行的二进制数据交换的接口,全称是EIA-RS-232-C协议,实际中常称RS-232,也称EIA-232,最初采用DB-25作为连接器,包含双通道,但是现在也有采用DB-9的单通道接口连接,其端口定义见表6-1所示。在实际中,DB9由于结构简单,仅需要3根线就可以完成全双工通信,所以在实际中使用比较多,应用广泛。6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口
6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口
6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口 RS-232采用负逻辑电平,用负电压表示数字信号逻辑‘1’,用正电平表示数字信号的逻辑‘0’。规定逻辑‘1’的电压范围为-5—-15V,逻辑‘0’的电压范围为+5V-—+15V。 RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范RS-485为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-485定义了一种平衡通信接口,将传输速率提高到10Mbps,传输距离延长到4000英尺(速率低于100kbps时),并允许在一条平衡线上连接最多10个接收器。RS-485是一种单机发送、多机接收的单向、平衡传输规范,为扩展应用范围,随后又为其增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,其特点可以总结为:6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范(1)差分平衡伟输;(2)多点通信;(3)驱动器输出电压(带载):≥|1.5V|;(4)接收器输入门限:±200mV;(5)-7V至+12V总线共模范围;(6)最大输入电流:1.0mA/-0.8mA(7)最大总线负载:32个单位负载(UL);(8)最大传输速率:10Mbps;(9)最大电缆长度:4000英尺(3000米)。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。RS-485的电气特性是用传输线之间的电压差表示逻辑信号,逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。 RS-232-C接口在总线上只允许连接1个收发器,即一对一通信方式。而RS-485接口在总线上是允许不只一个收发器存在,总线允许最多128个收发器存在,具备多站能力,基于RS-485接口可以方便的组建设备网络,实现组网传输或组网控制。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范由于RS-485接口具有良好的抗噪声干扰性,使之成为远传输距离、多机通信的首选串行接口。RS-485允许总线存在多主机负载,其仅仅是一个电气接口规范,只规定了平衡驱动器和接收器的物理层电特性,而对于保证数据可靠传输和通信的连接层、应用层等协议在RS-485中并没有定义,需要用户在实际使用中予以定义。Modbus、RTU等是基于RS-485物理链路的常见的通信协议。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(1)TTL/CMOS电平与RS-232电平转换 TTL/CMOS电平采用的是0-5V的正逻辑,即0V表示逻辑0,5V表示逻辑1,而RS-232采用的负逻辑,逻辑0用+5V-+15V表示,逻辑1用-5V--15V表示。在TTL/CMOS的单片机系统中,如果使用RS-232串行口进行通信,必须进行电平转换。MAX232是一种常见的RS-232电平电平转换芯片,单芯片解决全双工通信方案,单电源工作,外围仅需少数几个电容器即可,其逻辑图和应用原理见图6-7、6-8所示。6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(1)TTL/CMOS电平与RS-232电平转换
6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(2)TTL/CMOS电平与RS-485电平转换 RS-485电平是平衡差分传输,而TTL/CMOS是单极性电平,需要经过电平转换才能进行信号传输。常见的RS-485电平转换芯片有MAX485、MAX487等。MAX485为8个脚的芯片,支持半双工通信,RO为数据接收引脚,RI为数据发送引脚,RE#为接收使能端,DE为发送使能端。见图6-9所示。6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(2)TTL/CMOS电平与RS-485电平转换6.1.4同步通信与异步通信6.1串行通信基础3.串6.2.1串行通信接口特点6.2ATmega16异步串行通信接口(1)全双工通信操作,独立收发单元,2级FIFO;(2)支持异步或同步通信方式;(3)具有高精度的专用波特率发生器;(4)数据位长度支持5、6、7、8、9位数据,(5)硬件奇偶判决功能;(6)具有数据过速检测功能;(7)具有帧错误检测功能;(8)三个独立的中断源:发送结束中断,发送数据寄存器空中断,以及接收结束中断;(9)支持多处理器通讯模式。6.2.1串行通信接口特点6.2ATmega16异步串6.2.2串行通信接口组成6.2ATmega16异步串行通信接口 ATmega16串行接口主要由数据寄存器、控制寄存器、波特率发生器、发送移位寄存器、接收移位寄存器、奇偶校验电路等电路组成,见图6-10。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(1)数据寄存器UDRUDR数据寄存器分为接收数据寄存器和数据发送寄存器。(2)控制寄存器分别为UCSRA、UCSRB、UCSRC,通过对控制寄存器的编程,以实现对串行通信口的工作模式、波特率、数据格式等进行设置。(3)波特率发生器 ATmega16具有专用的波特率发生器器件,其工作时钟来源于系统时钟fosc,经过如图6-11所示的时钟电路产生数据收、发电路所需要的时钟信号。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口ATmega16的串行口通过编程可以实现4种时钟模式,分别为正常的异步模式、倍速异步模式、主机同步模式、从机同步模式。通过对控制寄存器的相关位进行编程,可以设定串行口工作在全双工异步模式或移位寄存器的同步模式。无论是串行口工作与同步模式或异步模式,其波特率均可是可以编程的。在异步模式中,波特率具有倍增功能,在不改变任何参数、数据前提下,通过设置相关位可以使波特率时钟提高1倍,以应用于更高通信速度的场合。在同步模式中,同步时钟源可以编程选择来自于主机或来自于从机。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(4)发送移位寄存器发送移位寄存器的功能是将发送的数据进行转换,将发送数据寄存器UDR中数据在时钟信号的作用进行移位,每一个时钟数据向前移一位,最后将UDR中的并行数据变成一串串行数据从数据发送引脚TXD发送出去。(5)接收移位寄存器接收移位寄存器的功能是将接收到的串行数据进行转换,在时钟信号作用下,数据接收引脚RXD每收到一个数据移位寄存器向前移动移位,实现将接收的串行数据转变成并行数据的功能,收到的数据被放入数据接收寄存器UDR中。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(6)奇偶校验电路奇偶校验电路是完成对收发数据的奇偶校验。奇偶校验是检测数据通信出错的常用手段,简单易于实现。当发送数据寄存器UDR中二进制数1的个数为奇数个时,则将相应的奇偶标志位置1,连同数据位、启停位构成数据帧一并发送。接收端接收到以后,如果接收寄存器中UDR二进制数1的个数为奇数个,则奇偶标志位不变,依旧为‘1’。因此通过判别对比收发端奇偶标志可以快速检测数据在传输过程中是否出错,这种规则称为“寄校验”,反之如果1的个数为偶数个则将奇偶标志置1的称为“偶校验”,在控制寄存器中可以编程选择“奇校验”还是“偶校验”。6.2.2串行通信接口组成6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口1.UDR数据寄存器 接收器和发送器使用的寄存器都是UDR寄存器,但是仅名字相同,他们是两个完全独立的数据寄存器。当对UDR写操作时数据通过TXB发送出去,当执行UDR读操作时将RXB接收的数据读出来。当数据长度不足8bit时如5、6、7bit,未被使用的数据位被发送器忽略,而接收器则将它们直接置为0。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口1.UDR数据寄存器对UDR执行写操作前应该先检查UDR是否为空,即UDR里面的数据是否被发送结束,同访问控制寄存器的标志位实现。若写UDR时其不为空即数据发送还未结束,新写入的数据无效。接收缓冲器UDR包含一个两级FIFO,接收的数据被置于FIFO中。读UDR会影响FIFO的状态,但FIFO空时同样会在控制寄存器中产生相应标志位。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR波特率发生器工作寄存器UBRR中的内容决定其产生的波特率值大小。波特率与UBRR寄存器取值关系如表6-2所示6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR表中fosc表示系统晶振频率大小,B为通信波特率,UBRR为波特率寄存器。常用的波特率有1200bps、2400bps等,在已知波特率和fosc前提下通过应用表6-x中的公式可以计算出UBRR寄存器取值。UBRR寄存器为16位寄存器,分成高位UBRRH和低位UBRRL两部分。在ICCAVR编译器使用C语言编程时,可以将一个16位的数直接写入UBRR寄存器即可。但需要注意的是,UBRR的取值必须在0-4095之间。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器控制和状态寄存器是用来对串行口进行编程以及保存串行口的工作各种工作状态,在使用时至关重要。ATmega16有三个控制与状态寄存器,分别为UCSRA、UCSRB、UCSRC。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
RXC位(Bit7):接收结束标志位。接收器已成功接收一个数据并置于接收缓冲器中,此时RXC置位。RXC标志可用来产生接收结束中断,执行完程序后自动清零。对该位写1清零会导致一次重复接收错误。TXC位(Bit6):发送结束标志位。 发送缓冲器(UDR)中的数据发送完成UDR为空,此时TXC置位,TXC标志可用来产生发送结束中断。执行完程序后该标志位自动清零,对该位写1清零会导致一次重复发送错误。UDRE位(Bit5):数据寄存器空标志位。(1)控制与状态寄存器UCSRA6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
FE(bit4):帧错误位。DOR(Bit3):数据溢出标志位。UPE(Bit2):奇偶校验错误标志位。U2X(Bit1):波特率倍增控制位。MPCM(Bit0):多处理器通信模式标志位。 帧错误位(FE)、数据溢出标志位(DOR)、奇偶校验错误标志位(UPE)与UDR中的内容有关,当对UDR进行读写操作时会影响这些标志位,因此读UDR数据之前应先将这三个标志位的内容读取出来。这三个标志位不会触发CPU产生中断。(1)控制与状态寄存器UCSRA6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
RXCIE位(Bit7):接收结束中断使能位。TXCIE位(Bit6):发送结束中断使能位。UDRIE位(Bit5):串行口数据寄存器空中断使能。RXEN位(Bit4):接收使能位。置位后启动USART接收器。PD0的I/O口功能不可用,将作为RXD数据接收专用引脚使用。该位清零禁止接收器。TXEN位(Bit3):发送使能位。UCSZ2位(Bit2):与UCSRC中的UCSZ0、UCSZ1位一同使用。(2)控制与状态寄存器UCSRB6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
RXB8位(Bit1):接收数据位8。 RXB8与UDR组成9位串行数据帧,接收到的第9位数据被置于RXB8中。在对9位数据进行读取之前应先读RXB8的数据位,再读UDR中的低位数据。TXB8位(Bit0):发送数据位8。 TXB8与UDR组成9位串行数据帧,发送的第9位数据被置于TXB8中。在对9位数据进行读取发送前应先将第9位数据写入TXB8中,再将余下数据写入UDR。(2)控制与状态寄存器UCSRB6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问,需要注意其数据取值。URSEL位(Bit7):寄存器选择位。通过该位选择访问UCSRC寄存器或UBRRH寄存器。URSEL位为1时对UCSRC进行读或写操作,因此写入UCSRC的值应该大于等于80H(0x80)。而URSEL位为0时对波特率寄存器的高位UBRRH进行操作,写入UBR寄存器数不能超过4095。UMSEL位(Bit6):UMSEL=0,异步模式,UMSEL=1同步模式。(3)控制与状态寄存器UCSRC6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
UPM位(Bit5:4):奇偶校验模式位,校验方式如表6-3所示。(2)控制与状态寄存器UCSRB6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
USBS位(Bit3):停止位选择位,USBS=0,1位停止位,USBS=1选择2位停止位。UCSZ位:数据字符长度选择位,分别为UCZS0、UCZS1、UCZS2三个位,用来设定串行通信数据字符的长度,见表6-4所示。(3)控制与状态寄存器UCSRC6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
(2)控制与状态寄存器UCSRB6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口【例6-1】按要求完成串行通信口寄存器的初始化操作,系统时钟为8M。(1)设置同步通信模式,波特率30000bps;(2)设置8位异步通信模式,波特率设为2400bps;
解:(1)UCSRA寄存器无需编程,UCSRB寄存器中的RXEN、TXEN位置位开启接收和发送器,UCSRC寄存器中的URSEL位置位选择对UCSRC寄存器操作,UMSEL位置位选则同步模式,计算波特率寄存器初始值:编程如下:6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口(2)UCSRA寄存器无需编程,UCSRB寄存器中的RXEN、TXEN位置位开启接收和发送器,UCSRC寄存器中的URSEL位置位选择对UCSRC寄存器操作,UCSZ0、UCSZ1置位选择8位数据模式,波特率不增倍的寄存器值计算公式如下:编程如下:6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口思考:设置串行通信参数为数据位为9位,异步通信模式,波特率设为9600bps,1位停止位,无奇偶校验位,使用中断方式完成数据收发,该如何对寄存器编程?6.2.3串行通信接口寄存器6.2ATmega16异步6.2.4串行通信接口使用6.2ATmega16异步串行通信接口
voidUSART_Init(unsignedintbaud){/*设置波特率*/UBRRH=(unsignedchar)(baud>>8);UBRRL=(unsignedchar)baud;/*接收器与发送器使能*/UCSRB=(1<<RXEN)|(1<<TXEN);/*设置帧格式:8个数据位,2个停止位*/UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);}1初始化6.2.4串行通信接口使用6.2ATmega16异步串6.2.4串行通信接口使用6.2ATmega16异步串行通信接口1发送数据(8位)
voidUSART_Transmit(unsignedchardata){/*等待发送缓冲器为空*/while(!(UCSRA&(1<<UDRE)));/*将数据放入缓冲器,发送数据*/UDR=data;}6.2.4串行通信接口使用6.2ATmega16异步串6.2.4串行通信接口使用6.2ATmega16异步串行通信接口2发送数据(字符串)voidUSART_Transmit_String(unsignedchar*data){while(*data!=‘\0’)/*检查数组结束标志*/{while(!(UCSR0A&(1<<UDRE0)))/*检查发送FIFO空*/;UDR0=*data;data++;}return;}6.2.4串行通信接口使用6.2ATmega16异步串6.2.4串行通信接口使用6.2ATmega16异步串行通信接口3接收数据(8位)unsignedcharUSART_Receive(void){/*等待接收数据*/while(!(UCSRA&(1<<RXC)));/*从缓冲器中获取并返回数据*/returnUDR;}6.2.4串行通信接口使用6.2ATmega16异步串6.2.4串行通信接口使用6.2ATmega16异步串行通信接口3接收数据(8位)unsignedintUSART_Receive(void){unsignedcharstatus,resh,resl;/*等待接收数据*/while(!(UCSRA&(1<<RXC)));/*从缓冲器中获得状态、第9位及数据*/status=UCSRA;resh=UCSRB;resl=UDR;/*如果出错,返回-1*/if(status&(1<<FE)|(1<<DOR)|(1<<PE))return-1;/*过滤第9位数据,然后返回*/resh=(resh>>1)&0x01;return((resh<<8)|resl);}6.2.4串行通信接口使用6.2ATmega16异步串6.3单片机I/O口模拟串行通信串行传输具有连接简单、使用方便的特点,因此在实际中被广泛使用。使用串行接口的器件和芯片可以节约单片机的I/O口,降低系统复杂性,使系统设计更为简洁。而包括Atmega16在内的单片机,其串行通信口的数量有限,因此使用单片机的I/O来模拟串行口的工作过程是一种常用办法。使用I/O口可以方便的扩展同步串行通信、异步串行通信等。由于同步通信具有独立的同步时钟线,因此使用I/O口模拟操作简单。而异步串行通信没有独立的同步时钟线,需要通过对协议的解码提取时钟信号后再提取数据,因此其收发均要复杂。6.3单片机I/O口模拟串行通信串行传输具有连接简6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信1.移位寄存器74HC595 74HC595是常见的74系列的8位移位数据寄存器。输入的是串行数据,输出的是并行数据。74HC595还带锁存功能,8个输出端的数据可以同步更新,与单片机连接只需要3个脚即可,单片机3个I/O口引脚接到74HC59之后就可以输出扩展出8个I/O口。当更多的74HC595芯片级联以后可以扩展更多的I/O口出来,以满足需要I/O控制口比较多的场合,比如LED点阵屏驱动等。6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信1.移位寄存器74HC595
6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信1.移位寄存器74HC595
Q0-Q7:并行数据输出,Q7S用于多片74HC595芯片的级联,OE#:为芯片使能端,OE#必须为低电平有效。MR#:为芯片复位引脚。DS、SHCP、STCP三个引脚为74HC595的串行数据输入引脚,他们之间的时序关系如图6-13所示。DS为串行数据输入引脚,SHCP为同步移位时钟,DS在每个SHCP的上升沿期间将数据移入芯片。当8个数据移位完成后数据在STCP的上升沿作用下同步输出到Q0-Q7输到引脚6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信2.使用单片机I/O口驱动74HC595单片机可以使用3个I/O口分别模拟DS、SHCP、STCP的工作时序即可将一个字节数据通过串口输出到达74HC595芯片内部,并由Q0-Q7引脚输出。在CPU内部,数据是并行的,将并行数据变成串行数据并送DS端使用移位运算符实现。将欲通过串行口发送的数据存放在变量x中,将x与0x80进行按位与运算,若结果为0x80则发送数据‘1’,从DS输出高电平,并控制SHCP端产生一个上升沿移位时钟将该位数据移位到595,将x中数据向左移动1位并重复刚才的过程,直到8位数据发送完毕为止。这种方法是先发送数据的最高位(MSB),最后才发送数据的最低位(LSB)。此时的数据仅保存在移位寄存器中,并未输到数据引脚Q0-Q7端,从STCP端产生一个上升沿脉冲将数据从移位寄存器输到Q0-Q7引脚上即可。6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信2.使用单片机I/O口驱动74HC595【例6-2】使用1片74HC595扩展8个I/O输出口,驱动8个发光二极管。解:设PA0接SHCP端,PA1接DS端,PA2接STCP端,故PA0、PA1、PA2设置为输出口,在proteus中绘制原理图如图6-146.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信2.使用单片机I/O口驱动74HC595编写程序如下6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串行通信6.3.1单片机模拟串行口输出6.3单片机I/O口模拟串6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串行通信使用串行口读入外部器件或芯片数据可以节约很多I/O引脚。在理解使用单片机模拟串行口输出的基础上,对串行口得输入模拟就变得相对容易。1.TLC2551串行A/D采样芯片 TLC2551是一片单芯片12bit转换精度A/D采样芯片,内部集成了采样保持器,如图6-15所示。转换的数据结果通过3条串行总线输出给主机。TLC2551只有8个引脚,其中AIN为数模信号输入引脚,VDD为单5V供电电源端,VREF为外接参考电压,FS为与帧同步控制引脚,多芯片级联时使用,单芯片时该引脚接高电平。6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串行通信1.TLC2551串行A/D采样芯片 SCLK、CS#、SDO为三总线串行通信接口,SCLK为移位时钟,CS#为芯片片选端,SDO为数据输出端,三者之间时序见图6-16。6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串行通信1.TLC2551串行A/D采样芯片
转换结束的数字量结果出现SDO端,高位在前,低位在后,对应SCLK的下降沿期间,即每一个SCLK脉冲出现一个数据位,12个脉冲后此次转换结果全国输出完毕。对TLC25551进行操作只能在CS#为低电平期间进行。6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串行通信2.使用单片机I/O读取TLC2551转换数据图6-16所示的时序图可知,在CS#为低电平期间读取TLC2551的结果,使用单片机的I/O模拟时序,假设读取的数据存放在整型变量x中,在读取SDO数据前,先从SCLK产生一个下降沿信号,使数据位出现在SDO线上。将SDO引脚读入单片机,若得其为高电平则将变量x的最低端并上数值1,否则在最低位与上数字0,并将变量x向左移动1位,完成一位数据的读取,重复12次后TLC2551的转换结果便被读入变量x中。6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串行通信2.使用单片机I/O读取TLC2551转换数据【例6-3】在Atmega16单片机系统中扩展一片12bit的串口A/D转换芯片TLC2551,将其结果读入并保存在变量x中。 解:PA0、PA1、PA2三个引脚与TLC2551的CE#、SDO、SCLK三个引脚相连,PA1设为输入口,其他设为输出口,编程如下6.3.2单片机模拟串行口输入6.3单片机I/O口模拟串第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件6.4.1双机串行通信6.4项目设计1.项目设计要求两个CPU之间进行通信,采用全双工异步通信方式实现,双机通信参数设置为:数据位为8位,1个起始位1个停止位,无奇偶校验位,波特率设置为9600bps,系统时钟8M。实现的任务为CPU1给CPU2发字符‘A’,CPU2接收确认为字符‘A’后控制PA0口红色LED亮,并给CPU1反馈字符‘Y’,否则控制PA1的蓝色LED闪并给CPU1反馈字符‘N’。CPU1如果收到Y控制PA0口红色灯亮,收到N控制PA1口蓝色灯闪。 CPU1接收到字符‘B’后控制PA口红色LED亮,否则PA1口蓝色LED闪,分别使用查询判断和中断方式实现。6.4.1双机串行通信6.4项目设计1.项目设计要求6.4.1双机串行通信6.4项目设计2.项目分析(1)2个CPU串行通信接口采用相同的波特率及数据传输格式,因此初始化程序完全一样;(2)CPU1先发送数据给CPU2,CPU2接收数据之后判断是否是字符‘A’,如果是则亮红灯,并发字符‘Y’给CPU1;如果不是字符‘A’则灯闪烁,并发字符‘N‘给CPU1;(3)CPU1接收数据,并判断接收到的数据是否等于字符‘Y’,如果是,红灯亮,如果不是则蓝灯闪。6.4.1双机串行通信6.4项目设计2.项目分析6.4.1双机串行通信6.4项目设计3.项目实现 根据项目分析,绘制程序流程图如图6-17所示,原理图如图6-18所示。6.4.1双机串行通信6.4项目设计3.项目实现第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件6.4.1双机串行通信6.4项目设计4.项目调试 修改CPU1程序,发送字符‘A’,运行程序观察结果,此时两个CPU亮红灯,说明通信正常。再次修改CPU程序,发送非‘A’字符比如‘a’,运行程序,此时两个CPU的蓝灯闪烁,表示通信失败。6.4.1双机串行通信6.4项目设计4.项目调试6.4.2字符串收发通信6.4项目设计1.项目设计要求 设计一个串行数据收发项目,实现单片机与虚拟终端之间的字符串收发。单片机系统时钟为8M,通信参数设置为:数据位为8位,1个起始位1个停止位,无奇偶校验位,设置波特率为19200bps。6.4.2字符串收发通信6.4项目设计1.项目设计要求6.4.2字符串收发通信6.4项目设计1.项目设计要求
6.4.2字符串收发通信6.4项目设计1.项目设计要求6.4.2字符串收发通信6.4项目设计1.项目设计要求 虚拟终端向单片机发送字符串,字符串长度在程序中定义。单片机接收完所有字符串之后将其发送给虚拟终端,虚拟终端会将收到的数据显示出来。单片机接收到的字符串放在指针p所指的起始地址,其长度不定。当接收完所有字符之后单片机启动字符串发送程序,将接收到的字符串发送给虚拟机,如图6-19所示。6.4.2字符串收发通信6.4项目设计1.项目设计要求6.4.2字符串收发通信6.4项目设计2.项目分析(1)初始化串行口,设置控制与状态寄存器USRCA-USRCC。(2)计算波特率,将结果存放在UBRR寄存器中,波特率不倍增。(3)设置中断,使能全局中断,使能发送中断和接收中断。(4)开始接收数据,接收数据长度存放在变量size中,每接收到一个数据存放在指针变量p所指的地址单元,然后修改指针p以存放下一个接收到的数据。当size规定长度内的数据接收完成后接收程度返回指针p的首地址。(5)启动发送程序,将指针p所指的长度为size的字符串发送出去。6.4.2字符串收发通信6.4项目设计2.项目分析6.4.2字符串收发通信6.4项目设计3.项目实现 通过对项目的分析,设计程序流程图如图6-20所示,编写程序如下。6.4.2字符串收发通信6.4项目设计3.项目实现第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件第6章串行通信AVR单片机应用技术项目化教程课件6.4.2字符串收发通信6.4项目设计4项目调试 在源程序中设置size长度,比如设置其长度为5,双机虚拟终端,按图6-21设置其参数,主要是波特率,一定要和单片机波特率一直,否则无法收发数据。6.4.2字符串收发通信6.4项目设计4项目调试6.4.2字符串收发通信6.4项目设计4项目调试
运行程序,自动弹出虚拟终端调试界面,如图6-22所示。如果不能自动弹出鼠标右单击虚拟终端,选择“”手动打开即可。用鼠标左单击图6-22界面激活虚拟终端发送功能,随机输入5个字符发送给单片机,单片接收到以后会发回给虚拟终端,并在图6-22的窗口显示。6.4.2字符串收发通信6.4项目设计4项目调试第6章串行通信
串行通信基础一ATmega16异步串行通信接口二单片机I/O口模拟串行通信三项目设计四第6章串行通信串行通信基础一AT在实际中外部设备与单片机之间或单片机与单片机之间、单片机与计算机之间交换数据,可以只通过2条线甚至一条线就完成数据的传输与交换。这时数据位排成一串,在数据线上传输,每个时间段只能传输一个比特位,且时间间隔为规定长度,这就是串行通信。第6章串行通信在实际中外部设备与单片机之间或单片机与单片机之间、单6.1.1串行通信与并行通信6.1串行通信基础 前面所讨论的AVR单片机I/O口,其数据传输是按字节进行,一个字节8个比特位分别与I/O口位线相对应,同时从8个I/O口输入、输出,一个字节传输只需要时间T即可完成,这是数据的并行传输,如图6-1所示。并行传输具有传输线多、速度快、编程简单、通信距离短的特点。6.1.1串行通信与并行通信6.1串行通信基础 前面所讨论6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础 在串行数据传输中,一个字节8个比特数据排成一串,可以高位(MBS)在前,也可以低位在前(LBS),依次在数据线上进行传输。如果其传输速度与并行通信的速度相等且都为T,则串行通信中传输完一个字节所需要时间为8T,传输n个比特位则需要nT时间,如图6-2所示。串行通信具有传输线少、成本低等特点,比较适合远通信。6.1.1串行通信与并行通信6.1串行通信基础 在串行数据6.1.1串行通信与并行通信6.1串行通信基础6.1.1串行通信与并行通信6.1串行通信基础6.1.2串行通信方式6.1串行通信基础根据串行通信的组成形式和数据传输方向,串行通信有3种通信方式:单工、半双工、全双工。6.1.2串行通信方式6.1串行通信基础根据串行通6.1.2串行通信方式6.1串行通信基础 单工通信如图6-3a所示。单工通信只允许数据在一个方向上传输,发送端只能发送数据,接收端只能接收数据。 半工通信如图6-3b所示。半双工通信数据可以在两个方向传输,但不能同时进行数据收、发。发送端在发送数据的同时,接收端只能接收数据,反之亦然。通过开关切换,可以将收发端功能互换,原来的接收端发送数据,原来的发送端接收数据。 全双工通信分别有独立的接收线和独立的发送线,数据的收发可以同时进行,且互不影响,如图6-3c所示。在单片机系统中,三种串行通信方式都有应用。6.1.2串行通信方式6.1串行通信基础 单工通信如图6-6.1.3同步通信与异步通信6.1串行通信基础1.同步通信SYNC(SynchronousCommunication)同步通信以数据块为传输单元,一个数据块中包含了若干个数据字符(比如数据字节),仅在数据块首部设置有1~2个同步字符,用以进行数据通信。一旦建立数据同步,就可以进行数据字符的传输,中间无需再同步,数据块中的数据字符长度可定义,如图6-4。6.1.3同步通信与异步通信6.1串行通信基础1.同步6.1.3同步通信与异步通信6.1串行通信基础1.同步通信由于同步通信是以数据块为传输单元,冗余数据信息少,因此同步通信的通信速度很高,可达到Mbps以上。在单片机系统中,采用同步串行通信时可以取消数据块前面的同步字符,用专门的时钟线来传递同步信号,以保证收发端数据的严格同步。因此,在单片机的同步通信中,单工或半双工的通信硬件连接时需要两条线,一条传输数据,另一条专用于传输时钟信号,而在全双工通信中则需要3条线,1条数据输入、1条数据输出、1条时钟线。6.1.3同步通信与异步通信6.1串行通信基础1.同步6.1.3同步通信与异步通信6.1串行通信基础2、异步通信异步通信以字符为传输单位,通信中两个字符的时间间隔不固定(异步),而字符中的两个相邻的比特位的时间是固定的(同步)。在异步通信中,没有专门的、独立的同步时钟信号,典型的异步通信的数据帧格式如图6-5所示,由起始位、数据位、奇偶校验位、停止位所组成。起始位为一固定时间长度的低电平,表示一帧数据的开始,接着就是传输的数据,其长度有5位、6位、7位、8位、9位等。数据位后面是奇偶校验位,指示数据通信的出错情况。校验位后面是1位或2位停止位。停止位为高电平,表示这一帧数据的结束。6.1.3同步通信与异步通信6.1串行通信基础2、异步通6.1.3同步通信与异步通信6.1串行通信基础2、异步通信数据帧后面跟着几位保证数据可靠传输的空闲位。异步通信数据帧的间隔时间不同,通信时数据是一帧一帧进行传输,每帧通过起始位来同步。由于异步通信中没有专门的时钟同步信号,因此在芯片内部需要专门的时序还原电路从异步数据帧中提取时钟信号,以保证接收的数据被正常还原。6.1.3同步通信与异步通信6.1串行通信基础2、异步通6.1.3同步通信与异步通信6.1串行通信基础3、波特率(BaudRate) 波特率是表示串行通信传输数据快慢的物理参数,其定义为单位时间内传输的二进制bit数,用位/秒(BitperSecond)表示,或写成bps。如串行通信中的数据传输波特率为128bps,意为每秒钟传输128个bit,合计16个字节,传输一个比特所需要的时间为:1/128bps=0.0078秒=7.8毫秒。传输一个字节的时间为:7.8×8=62.4毫秒。在异步通信中,常见的波特率通常有1200、2400、4800、9600等,其单位都是bps。高速的可以达到19200bps。异步通信中允许收发端的时钟(波特率)误差不超过5%。6.1.3同步通信与异步通信6.1串行通信基础3、波特率6.1.4同步通信与异步通信6.1串行通信基础 由于串行通信方式能实现较远距离的数据传输,因此在远距离控制时或在工业控制现场通常使用串行通信方式来传输数据。由于远距离数据传输时普通的TTL或CMOS电平无法满足工业现场的干扰和各种电气性能,因此不能用于直接进行远距离的数据传输。国际电气工业协会EIA推出了RS-232、RS485等接口标准。6.1.4同步通信与异步通信6.1串行通信基础 由于串行6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口 RS-232C是1969年电子工业协会(EIA)制定的在数据终端设备DTE和数据通讯设备(DCE)之间的串行的二进制数据交换的接口,全称是EIA-RS-232-C协议,实际中常称RS-232,也称EIA-232,最初采用DB-25作为连接器,包含双通道,但是现在也有采用DB-9的单通道接口连接,其端口定义见表6-1所示。在实际中,DB9由于结构简单,仅需要3根线就可以完成全双工通信,所以在实际中使用比较多,应用广泛。6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口
6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口
6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础1、RS-232接口 RS-232采用负逻辑电平,用负电压表示数字信号逻辑‘1’,用正电平表示数字信号的逻辑‘0’。规定逻辑‘1’的电压范围为-5—-15V,逻辑‘0’的电压范围为+5V-—+15V。 RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。6.1.4同步通信与异步通信6.1串行通信基础1、RS-6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范RS-485为弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-485定义了一种平衡通信接口,将传输速率提高到10Mbps,传输距离延长到4000英尺(速率低于100kbps时),并允许在一条平衡线上连接最多10个接收器。RS-485是一种单机发送、多机接收的单向、平衡传输规范,为扩展应用范围,随后又为其增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,其特点可以总结为:6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范(1)差分平衡伟输;(2)多点通信;(3)驱动器输出电压(带载):≥|1.5V|;(4)接收器输入门限:±200mV;(5)-7V至+12V总线共模范围;(6)最大输入电流:1.0mA/-0.8mA(7)最大总线负载:32个单位负载(UL);(8)最大传输速率:10Mbps;(9)最大电缆长度:4000英尺(3000米)。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。RS-485的电气特性是用传输线之间的电压差表示逻辑信号,逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。 RS-232-C接口在总线上只允许连接1个收发器,即一对一通信方式。而RS-485接口在总线上是允许不只一个收发器存在,总线允许最多128个收发器存在,具备多站能力,基于RS-485接口可以方便的组建设备网络,实现组网传输或组网控制。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础2.RS-485接口规范由于RS-485接口具有良好的抗噪声干扰性,使之成为远传输距离、多机通信的首选串行接口。RS-485允许总线存在多主机负载,其仅仅是一个电气接口规范,只规定了平衡驱动器和接收器的物理层电特性,而对于保证数据可靠传输和通信的连接层、应用层等协议在RS-485中并没有定义,需要用户在实际使用中予以定义。Modbus、RTU等是基于RS-485物理链路的常见的通信协议。6.1.4同步通信与异步通信6.1串行通信基础2.RS6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(1)TTL/CMOS电平与RS-232电平转换 TTL/CMOS电平采用的是0-5V的正逻辑,即0V表示逻辑0,5V表示逻辑1,而RS-232采用的负逻辑,逻辑0用+5V-+15V表示,逻辑1用-5V--15V表示。在TTL/CMOS的单片机系统中,如果使用RS-232串行口进行通信,必须进行电平转换。MAX232是一种常见的RS-232电平电平转换芯片,单芯片解决全双工通信方案,单电源工作,外围仅需少数几个电容器即可,其逻辑图和应用原理见图6-7、6-8所示。6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(1)TTL/CMOS电平与RS-232电平转换
6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(2)TTL/CMOS电平与RS-485电平转换 RS-485电平是平衡差分传输,而TTL/CMOS是单极性电平,需要经过电平转换才能进行信号传输。常见的RS-485电平转换芯片有MAX485、MAX487等。MAX485为8个脚的芯片,支持半双工通信,RO为数据接收引脚,RI为数据发送引脚,RE#为接收使能端,DE为发送使能端。见图6-9所示。6.1.4同步通信与异步通信6.1串行通信基础3.串6.1.4同步通信与异步通信6.1串行通信基础3.串行通信接口电平转换
(2)TTL/CMOS电平与RS-485电平转换6.1.4同步通信与异步通信6.1串行通信基础3.串6.2.1串行通信接口特点6.2ATmega16异步串行通信接口(1)全双工通信操作,独立收发单元,2级FIFO;(2)支持异步或同步通信方式;(3)具有高精度的专用波特率发生器;(4)数据位长度支持5、6、7、8、9位数据,(5)硬件奇偶判决功能;(6)具有数据过速检测功能;(7)具有帧错误检测功能;(8)三个独立的中断源:发送结束中断,发送数据寄存器空中断,以及接收结束中断;(9)支持多处理器通讯模式。6.2.1串行通信接口特点6.2ATmega16异步串6.2.2串行通信接口组成6.2ATmega16异步串行通信接口 ATmega16串行接口主要由数据寄存器、控制寄存器、波特率发生器、发送移位寄存器、接收移位寄存器、奇偶校验电路等电路组成,见图6-10。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(1)数据寄存器UDRUDR数据寄存器分为接收数据寄存器和数据发送寄存器。(2)控制寄存器分别为UCSRA、UCSRB、UCSRC,通过对控制寄存器的编程,以实现对串行通信口的工作模式、波特率、数据格式等进行设置。(3)波特率发生器 ATmega16具有专用的波特率发生器器件,其工作时钟来源于系统时钟fosc,经过如图6-11所示的时钟电路产生数据收、发电路所需要的时钟信号。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口ATmega16的串行口通过编程可以实现4种时钟模式,分别为正常的异步模式、倍速异步模式、主机同步模式、从机同步模式。通过对控制寄存器的相关位进行编程,可以设定串行口工作在全双工异步模式或移位寄存器的同步模式。无论是串行口工作与同步模式或异步模式,其波特率均可是可以编程的。在异步模式中,波特率具有倍增功能,在不改变任何参数、数据前提下,通过设置相关位可以使波特率时钟提高1倍,以应用于更高通信速度的场合。在同步模式中,同步时钟源可以编程选择来自于主机或来自于从机。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(4)发送移位寄存器发送移位寄存器的功能是将发送的数据进行转换,将发送数据寄存器UDR中数据在时钟信号的作用进行移位,每一个时钟数据向前移一位,最后将UDR中的并行数据变成一串串行数据从数据发送引脚TXD发送出去。(5)接收移位寄存器接收移位寄存器的功能是将接收到的串行数据进行转换,在时钟信号作用下,数据接收引脚RXD每收到一个数据移位寄存器向前移动移位,实现将接收的串行数据转变成并行数据的功能,收到的数据被放入数据接收寄存器UDR中。6.2.2串行通信接口组成6.2ATmega16异步6.2.2串行通信接口组成6.2ATmega16异步串行通信接口(6)奇偶校验电路奇偶校验电路是完成对收发数据的奇偶校验。奇偶校验是检测数据通信出错的常用手段,简单易于实现。当发送数据寄存器UDR中二进制数1的个数为奇数个时,则将相应的奇偶标志位置1,连同数据位、启停位构成数据帧一并发送。接收端接收到以后,如果接收寄存器中UDR二进制数1的个数为奇数个,则奇偶标志位不变,依旧为‘1’。因此通过判别对比收发端奇偶标志可以快速检测数据在传输过程中是否出错,这种规则称为“寄校验”,反之如果1的个数为偶数个则将奇偶标志置1的称为“偶校验”,在控制寄存器中可以编程选择“奇校验”还是“偶校验”。6.2.2串行通信接口组成6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口1.UDR数据寄存器 接收器和发送器使用的寄存器都是UDR寄存器,但是仅名字相同,他们是两个完全独立的数据寄存器。当对UDR写操作时数据通过TXB发送出去,当执行UDR读操作时将RXB接收的数据读出来。当数据长度不足8bit时如5、6、7bit,未被使用的数据位被发送器忽略,而接收器则将它们直接置为0。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口1.UDR数据寄存器对UDR执行写操作前应该先检查UDR是否为空,即UDR里面的数据是否被发送结束,同访问控制寄存器的标志位实现。若写UDR时其不为空即数据发送还未结束,新写入的数据无效。接收缓冲器UDR包含一个两级FIFO,接收的数据被置于FIFO中。读UDR会影响FIFO的状态,但FIFO空时同样会在控制寄存器中产生相应标志位。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR波特率发生器工作寄存器UBRR中的内容决定其产生的波特率值大小。波特率与UBRR寄存器取值关系如表6-2所示6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口2.波特率寄存器UBRR表中fosc表示系统晶振频率大小,B为通信波特率,UBRR为波特率寄存器。常用的波特率有1200bps、2400bps等,在已知波特率和fosc前提下通过应用表6-x中的公式可以计算出UBRR寄存器取值。UBRR寄存器为16位寄存器,分成高位UBRRH和低位UBRRL两部分。在ICCAVR编译器使用C语言编程时,可以将一个16位的数直接写入UBRR寄存器即可。但需要注意的是,UBRR的取值必须在0-4095之间。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器控制和状态寄存器是用来对串行口进行编程以及保存串行口的工作各种工作状态,在使用时至关重要。ATmega16有三个控制与状态寄存器,分别为UCSRA、UCSRB、UCSRC。6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
RXC位(Bit7):接收结束标志位。接收器已成功接收一个数据并置于接收缓冲器中,此时RXC置位。RXC标志可用来产生接收结束中断,执行完程序后自动清零。对该位写1清零会导致一次重复接收错误。TXC位(Bit6):发送结束标志位。 发送缓冲器(UDR)中的数据发送完成UDR为空,此时TXC置位,TXC标志可用来产生发送结束中断。执行完程序后该标志位自动清零,对该位写1清零会导致一次重复发送错误。UDRE位(Bit5):数据寄存器空标志位。(1)控制与状态寄存器UCSRA6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
FE(bit4):帧错误位。DOR(Bit3):数据溢出标志位。UPE(Bit2):奇偶校验错误标志位。U2X(Bit1):波特率倍增控制位。MPCM(Bit0):多处理器通信模式标志位。 帧错误位(FE)、数据溢出标志位(DOR)、奇偶校验错误标志位(UPE)与UDR中的内容有关,当对UDR进行读写操作时会影响这些标志位,因此读UDR数据之前应先将这三个标志位的内容读取出来。这三个标志位不会触发CPU产生中断。(1)控制与状态寄存器UCSRA6.2.3串行通信接口寄存器6.2ATmega16异步6.2.3串行通信接口寄存器6.2ATmega16异步串行通信接口3.控制和状态寄存器
RXCIE位(Bit7):接收结束中断使能位。TXCIE位(Bit6):发送结束中断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 专题会议事制度
- 合山市经济贸易和科学技术局招聘备考题库(2025年12月30日)带答案详解
- 二手车贷款销售培训课件
- 小可爱驾驶员安全课件
- 2026年温岭市农业农村和水利局招聘编外工作人员备考题库及参考答案详解1套
- 2025-2030中国外周置入中心导管行业市场发展趋势与前景展望战略研究报告
- 中国人民银行所属企业网联清算有限公司2026年度校园招聘26人备考题库带答案详解
- 2025-2030汽车减震器行业并购重组机会及投融资战略研究咨询报告
- 东莞市公安局沙田分局2025年公开招聘警务辅助人员备考题库(第8期)完整参考答案详解
- 机关保密教育课件知识题
- 工程投资估算与审核编制操作规程
- 2025至2030中国代驾行业项目调研及市场前景预测评估报告
- 押题地理会考真题及答案
- DB44-T 2668-2025 高速公路服务区和停车区服务规范
- 2025-2026学年浙美版二年级美术上册全册教案
- 2024-2025学年湖北省襄阳市襄城区九年级(上)期末数学试卷
- 2026届安徽省合肥市42中学物理八上期末达标检测试题含解析
- 当代青年社交模式“搭子”现象及其适应性研究
- 发车间隔问题-小升初奥数思维之典型应用题讲义
- 军事训练法规课件
- 硬式内镜清洗消毒与灭菌技术规范
评论
0/150
提交评论