1 / 35

第五章 AVR 异步串行通信

第五章 AVR 异步串行通信. 5.1. 5.3. 5.2. 5.4. 同步与异步通信. 寄存器描述. ATMEGA16 串口结构特点. 应用程序编写. 五、异步串行通行通信 UART. 0 、并行通信与串行通信. 数据按字节(字,多字)方式传输,每次多个数据 bit 一起传输,速度快,电路复杂。. 五、异步串行通行通信 UART. 0 、并行通信与串行通信. 数据字节(字,多字)从一条数据线按先后秩序到达对方,每一时刻只能传输一个数据 bit ,速度慢,电路简单。. 五、异步串行通行通信 UART. 1 、同步通信与异步通信.

brilliant
Download Presentation

第五章 AVR 异步串行通信

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第五章 AVR异步串行通信 5.1 5.3 5.2 5.4 同步与异步通信 寄存器描述 ATMEGA16串口结构特点 应用程序编写

  2. 五、异步串行通行通信UART 0、并行通信与串行通信 数据按字节(字,多字)方式传输,每次多个数据bit一起传输,速度快,电路复杂。

  3. 五、异步串行通行通信UART 0、并行通信与串行通信 数据字节(字,多字)从一条数据线按先后秩序到达对方,每一时刻只能传输一个数据bit,速度慢,电路简单。

  4. 五、异步串行通行通信UART 1、同步通信与异步通信 (1)同步通信 所谓同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。同步串行通信的特点可以概括为: ①以数据块为单位传送信息。 ②在一个数据块(信息帧)内,字符与字符间无间隔。 ③接收时钟与发送进钟严格同步。 简言之:有同步时钟。

  5. 五、异步串行通行通信UART 1、同步通信与异步通信 (1)同步通信 如:74LS164,有专门同步时钟引脚。

  6. 五、异步串行通行通信UART 1、同步通信与异步通信 (2)异步通信 所谓异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。异步串行通信的特点可以概括为:①以字符为单位传送信息。②相邻两字符间的间隔是任意长。③接收时钟和发送时钟只要相近就可以。异步方式特点简单的说就是:字符间异步,字符内部各位同步。

  7. 五、异步串行通行通信UART 1、同步通信与异步通信 (2)异步通信 异步串行通信的数据格式如图所示,每个字符(每帧信息)由4个部分组成: ①1位起始位,规定为低电0;②5~8位数据位,即要传送的有效信息;③1位奇偶校验位;④1~2位停止位,规定为高电平1。

  8. 五、异步串行通行通信UART 1、同步通信与异步通信 (3)单工通信 数据只能从一个方向传输给另一个方向,即发端只能发数据,收端只能收数据。

  9. 五、异步串行通行通信UART 1、同步通信与异步通信 (4)半双工通信 数据从一个方向发送到另一个方向,也可以从另一个方向接收数据,但二者不能同时进行。

  10. 五、异步串行通行通信UART 1、同步通信与异步通信 (5)全双工通信 两个主机之间的通信是同时进行,CPU1在接收CPU2的数据同时也可以发送数据给CPU2,CPU也是如此。

  11. 五、异步串行通行通信UART 1、同步通信与异步通信 (6)波特率 指单位时间传输二进制数据的位数,其单位为位/秒(Bps)或波特。 它是一个用以衡量数据传送速率的量。一般串行异步通行的传送速度为50~19200Bps,串行同步通信的传送速度可达500KBps

  12. 五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (1)特点 ●全双工操作( 独立的串行接收和发送寄存器.2级FIFO) ●异步或同步操作 ● 主机或从机提供时钟的同步操作 ● 高精度的波特率发生器 ●支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 ● 硬件支持的奇偶校验操作 ● 数据过速检测 ●帧错误检测 ● 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 ●三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断 ● 多处理器通讯模式 ● 倍速异步通讯模式

  13. 五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (2)结构

  14. 五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (3)时钟产生

  15. 五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (3)时钟产生 USART支持4 种模式的时钟: ★正常的异步模式 ★倍速的异步模式 ★主机同步模式 ★从机同步模式。 USART控制位UMSEL和寄存器UCSRC用于异步模式或同步模式的选择。倍速模式( 只适用于异步模式) 受控于UCSRA 寄存器的U2X。 使用同步模式(UMSEL=1)时,XCK的数据方向寄存器(DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)——仅在同步模式下XCK 有效。

  16. 五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (4)波特率 BAUD——波特率 ( bps); fOSC——系统时钟频率; UBRR——UBRRH 与UBRRL的数值(0-4095);

  17. 五、异步串行通行通信UART 3、寄存器描述 (1)数据寄存器——UDR 发送接收数据缓冲寄存器共享相同的地址将数据写入UDR 时实际操作的是发送数据缓冲器存器(TXB),读UDR 时实际返回的是接收数据缓冲寄存器(RXB) 的内容。 在5、6、7 比特字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为0。 只有当UCSRA寄存器的UDRE标志置位后才可以对发送缓冲器进行写操作。如果UDRE没有置位,写UDR 被忽略。 接收缓冲器包括一个两级FIFO,一旦接收缓冲器被寻址FIFO 就会改变它的状态。

  18. 五、异步串行通行通信UART (2)控制和状态寄存器—UCSRA • Bit 7 – RXC: USART 接收结束 接收缓冲器中有未读出的数据时RXC 置位,否则清零。RXC 标志可用来产生接收结束中断( 见对RXCIE 位的描述)。 •Bit 6 – TXC: USART 发送结束 发送缓冲器 (UDR) 为空时TXC 置位。执行发送结束中断时TXC 标志自动清零,也可以通过写1 进行清除操作。TXC 标志可用来产生发送 结束中断( 见对TXCIE 位的描述)。 •Bit 5 – UDRE: USART 数据寄存器空 UDRE为1说明缓冲器为空,已准备好进行数据接收。UDRE标志可用来产生数据寄存器空中断(见对UDRIE位的描述)。 • Bit 4 – FE: 帧错误

  19. 五、异步串行通行通信UART (2)控制和状态寄存器—UCSRA • Bit 3 – DOR: 数据溢出 数据溢出时DOR 置位。当接收缓冲器满( 包含了两个数据),又有数据进来时置位,且一直保持直到UDR 被读取。对UCSRA 进行写入时,这一位要写0。 • Bit 2 – PE: 奇偶校验错误 当奇偶校验使能(UPM1 = 1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE 置位。这一位一直有效直到接收缓冲器 (UDR) 被读取。对UCSRA 进行写入时,这一位要写0。 • Bit 1 – U2X: 倍速发送 这一位仅对异步操作有影响。使用同步操作时将此位清零。 此位置1 可将波特率分频因子从16 降到8,传输速率加倍。 • Bit 0 – MPCM: 多处理器通信模式 设置此位将启动多处理器通信模式。MPCM 置位后,USART 接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。

  20. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C

  21. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 7 – RXCIE: 接收结束中断使能 置位后使能RXC 中断。当RXCIE 为1,全局中断标志位SREG 置位, UCSRA 寄存器的RXC 亦为1 时可以产生USART 接收结束中断。 • Bit 6 – TXCIE: 发送结束中断使能 置位后使能TXC 中断。当TXCIE 为1,全局中断标志位SREG 置位,UCSRA 寄存器的TXC 亦为1 时可以产生USART 发送结束中断。 • Bit 5 – UDRIE: USART 数据寄存器空中断使能 置位后使能UDRE 中断。当UDRIE 为1,全局中断标志位SREG 置位,UCSRA 寄存器的UDRE 亦为1 时可以产生USART 数据寄存器空中断。 • Bit 4 – RXEN: 接收使能 置位后将启动USART 接收器。RxD 引脚的通用端口功能被USART 功能所取代。禁止接收器将刷新接收缓冲器,并使 FE、DOR 及PE 标志无效。

  22. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 3 – TXEN: 发送使能 置位后将启动将启动USART 发送器。TxD 引脚作为数据发送脚,不再用作通用口。发送器禁止后,TxD引脚恢复其通用I/O功能。 • Bit 2 – UCSZ2: 与UCSZ0、 UCSZ1一同使用。 • Bit 1 – RXB8: 接收数据位 8 对9 位串行帧进行操作时,RXB8 是第9 个数据位。读取UDR 包含的低位数据之前首先要读取RXB8。 • Bit 0 – TXB8: 发送数据位8 对9 位串行帧进行操作时,TXB8 是第9 个数据位。写UDR 之前首先要对它进行写操作。

  23. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问, “访问UBRRH/ UCSRC 寄存器” 。 • Bit 7 – URSEL: 寄存器选择 通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UCSRC 时,该位为1 ;当写UCSRC时, URSEL 为1。 • Bit 6 – UMSEL: USART 模式选择 通过这一位来选择同步或异步工作模式。

  24. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 5:4 – UPM1:0: 奇偶校验模式 设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,在发送数据,时发送器会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中的PE置位。

  25. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 3 – USBS: 停止位选择 通过这一位可以设置停止位的位数。接收器忽略这一位的设置。

  26. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 2:1 – UCSZ1:0: 字符长度 UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 注: UCSZ2位于UCSRB中。 常用

  27. 五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 0 – UCPOL: 时钟极性 这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数据采样,以及同步时钟XCK 之间的关系。

  28. 五、异步串行通行通信UART (4)波特率寄存器—UBRRL,UBRRH UCSRC寄存器与UBRRH寄存器共用相同的I/O地址.

  29. 五、异步串行通行通信UART 4、编程(查询) (1)初始化 void USART_Init( unsigned int baud ) { /* 设置波特率*/ UBRRH = (unsigned char)(baud>>8); UBRRL = (unsigned char)baud; /* 接收器与发送器使能*/ UCSRB = (1<<RXEN)|(1<<TXEN); /* 设置帧格式: 8 个数据位, 2 个停止位*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); }

  30. 五、异步串行通行通信UART 4、编程(查询) (2)发送数据8位 void USART_Transmit( unsigned char data ) { /* 等待发送缓冲器为空 */ while ( !( UCSRA & (1<<UDRE)) ) ; /* 将数据放入缓冲器,发送数据 */ UDR = data; }

  31. 五、异步串行通行通信UART 4、编程(查询) (2)发送数据9位 void USART_Transmit( unsigned int data ) { /* 等待发送缓冲器为空 */ while ( !( UCSRA & (1<<UDRE))) ) ; /* 将第9 位复制到TXB8 */ UCSRB &= ~(1<<TXB8); if ( data & 0x0100 ) UCSRB |= (1<<TXB8); /* 将数据放入缓冲器,发送数据 */ UDR = data; }

  32. 五、异步串行通行通信UART 4、编程(查询) (2)发送数据-字符串 void USART_Transmit_String( unsigned char *data ) { while(*data!=‘\0’) /*check the arry end status*/ {while ( !( UCSR0A & (1<<UDRE0)) ) /* Wait for empty transmit buffer */ ; UDR0 =*data; data++; } return; }

  33. 五、异步串行通行通信UART 4、编程(查询) (3)接收数据 -8位 unsigned char USART_Receive( void ) { /* 等待接收数据*/ while ( !(UCSRA & (1<<RXC)) ) ; /* 从缓冲器中获取并返回数据*/ return UDR; }

  34. 五、异步串行通行通信UART 4、编程(查询) (3)接收数据-9位 unsigned int USART_Receive( void ) {unsigned char status, 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); }

  35. 五、异步串行通行通信UART 4、编程(查询) (3)接收数据-9位 unsigned int USART_Receive( void ) {unsigned char status, 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); }

More Related