350 likes | 510 Views
第五章 AVR 异步串行通信. 5.1. 5.3. 5.2. 5.4. 同步与异步通信. 寄存器描述. ATMEGA16 串口结构特点. 应用程序编写. 五、异步串行通行通信 UART. 0 、并行通信与串行通信. 数据按字节(字,多字)方式传输,每次多个数据 bit 一起传输,速度快,电路复杂。. 五、异步串行通行通信 UART. 0 、并行通信与串行通信. 数据字节(字,多字)从一条数据线按先后秩序到达对方,每一时刻只能传输一个数据 bit ,速度慢,电路简单。. 五、异步串行通行通信 UART. 1 、同步通信与异步通信.
E N D
第五章 AVR异步串行通信 5.1 5.3 5.2 5.4 同步与异步通信 寄存器描述 ATMEGA16串口结构特点 应用程序编写
五、异步串行通行通信UART 0、并行通信与串行通信 数据按字节(字,多字)方式传输,每次多个数据bit一起传输,速度快,电路复杂。
五、异步串行通行通信UART 0、并行通信与串行通信 数据字节(字,多字)从一条数据线按先后秩序到达对方,每一时刻只能传输一个数据bit,速度慢,电路简单。
五、异步串行通行通信UART 1、同步通信与异步通信 (1)同步通信 所谓同步通信,是指数据传送是以数据块(一组字符)为单位,字符与字符之间、字符内部的位与位之间都同步。同步串行通信的特点可以概括为: ①以数据块为单位传送信息。 ②在一个数据块(信息帧)内,字符与字符间无间隔。 ③接收时钟与发送进钟严格同步。 简言之:有同步时钟。
五、异步串行通行通信UART 1、同步通信与异步通信 (1)同步通信 如:74LS164,有专门同步时钟引脚。
五、异步串行通行通信UART 1、同步通信与异步通信 (2)异步通信 所谓异步通信,是指数据传送以字符为单位,字符与字符间的传送是完全异步的,位与位之间的传送基本上是同步的。异步串行通信的特点可以概括为:①以字符为单位传送信息。②相邻两字符间的间隔是任意长。③接收时钟和发送时钟只要相近就可以。异步方式特点简单的说就是:字符间异步,字符内部各位同步。
五、异步串行通行通信UART 1、同步通信与异步通信 (2)异步通信 异步串行通信的数据格式如图所示,每个字符(每帧信息)由4个部分组成: ①1位起始位,规定为低电0;②5~8位数据位,即要传送的有效信息;③1位奇偶校验位;④1~2位停止位,规定为高电平1。
五、异步串行通行通信UART 1、同步通信与异步通信 (3)单工通信 数据只能从一个方向传输给另一个方向,即发端只能发数据,收端只能收数据。
五、异步串行通行通信UART 1、同步通信与异步通信 (4)半双工通信 数据从一个方向发送到另一个方向,也可以从另一个方向接收数据,但二者不能同时进行。
五、异步串行通行通信UART 1、同步通信与异步通信 (5)全双工通信 两个主机之间的通信是同时进行,CPU1在接收CPU2的数据同时也可以发送数据给CPU2,CPU也是如此。
五、异步串行通行通信UART 1、同步通信与异步通信 (6)波特率 指单位时间传输二进制数据的位数,其单位为位/秒(Bps)或波特。 它是一个用以衡量数据传送速率的量。一般串行异步通行的传送速度为50~19200Bps,串行同步通信的传送速度可达500KBps
五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (1)特点 ●全双工操作( 独立的串行接收和发送寄存器.2级FIFO) ●异步或同步操作 ● 主机或从机提供时钟的同步操作 ● 高精度的波特率发生器 ●支持5, 6, 7, 8, 或9 个数据位和1 个或2 个停止位 ● 硬件支持的奇偶校验操作 ● 数据过速检测 ●帧错误检测 ● 噪声滤波,包括错误的起始位检测,以及数字低通滤波器 ●三个独立的中断:发送结束中断, 发送数据寄存器空中断,以及接收结束中断 ● 多处理器通讯模式 ● 倍速异步通讯模式
五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (2)结构
五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (3)时钟产生
五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (3)时钟产生 USART支持4 种模式的时钟: ★正常的异步模式 ★倍速的异步模式 ★主机同步模式 ★从机同步模式。 USART控制位UMSEL和寄存器UCSRC用于异步模式或同步模式的选择。倍速模式( 只适用于异步模式) 受控于UCSRA 寄存器的U2X。 使用同步模式(UMSEL=1)时,XCK的数据方向寄存器(DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)——仅在同步模式下XCK 有效。
五、异步串行通行通信UART 2、ATmega16串行通信口结构特点 (4)波特率 BAUD——波特率 ( bps); fOSC——系统时钟频率; UBRR——UBRRH 与UBRRL的数值(0-4095);
五、异步串行通行通信UART 3、寄存器描述 (1)数据寄存器——UDR 发送接收数据缓冲寄存器共享相同的地址将数据写入UDR 时实际操作的是发送数据缓冲器存器(TXB),读UDR 时实际返回的是接收数据缓冲寄存器(RXB) 的内容。 在5、6、7 比特字长模式下,未使用的高位被发送器忽略,而接收器则将它们设置为0。 只有当UCSRA寄存器的UDRE标志置位后才可以对发送缓冲器进行写操作。如果UDRE没有置位,写UDR 被忽略。 接收缓冲器包括一个两级FIFO,一旦接收缓冲器被寻址FIFO 就会改变它的状态。
五、异步串行通行通信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: 帧错误
五、异步串行通行通信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设置的影响。
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C
五、异步串行通行通信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 标志无效。
五、异步串行通行通信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 之前首先要对它进行写操作。
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问, “访问UBRRH/ UCSRC 寄存器” 。 • Bit 7 – URSEL: 寄存器选择 通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UCSRC 时,该位为1 ;当写UCSRC时, URSEL 为1。 • Bit 6 – UMSEL: USART 模式选择 通过这一位来选择同步或异步工作模式。
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 5:4 – UPM1:0: 奇偶校验模式 设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,在发送数据,时发送器会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中的PE置位。
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 3 – USBS: 停止位选择 通过这一位可以设置停止位的位数。接收器忽略这一位的设置。
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 2:1 – UCSZ1:0: 字符长度 UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字符长度)。 注: UCSZ2位于UCSRB中。 常用
五、异步串行通行通信UART (3)控制和状态寄存器—UCSRB、C • Bit 0 – UCPOL: 时钟极性 这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出数据的改变和输入数据采样,以及同步时钟XCK 之间的关系。
五、异步串行通行通信UART (4)波特率寄存器—UBRRL,UBRRH UCSRC寄存器与UBRRH寄存器共用相同的I/O地址.
五、异步串行通行通信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); }
五、异步串行通行通信UART 4、编程(查询) (2)发送数据8位 void USART_Transmit( unsigned char data ) { /* 等待发送缓冲器为空 */ while ( !( UCSRA & (1<<UDRE)) ) ; /* 将数据放入缓冲器,发送数据 */ UDR = data; }
五、异步串行通行通信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; }
五、异步串行通行通信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; }
五、异步串行通行通信UART 4、编程(查询) (3)接收数据 -8位 unsigned char USART_Receive( void ) { /* 等待接收数据*/ while ( !(UCSRA & (1<<RXC)) ) ; /* 从缓冲器中获取并返回数据*/ return UDR; }
五、异步串行通行通信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); }
五、异步串行通行通信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); }