ATmega16串行通信UART口

Download Report

Transcript ATmega16串行通信UART口

第五章 AVR异步串行通信
5.1
5.2
5.3
5.4
同步与异步通信
ATMEGA16串口结构特点
寄存器描述
应用程序编写
五、异步串行通行通信UART
0、并行通信与串行通信
U1
9
12
13
40
39
38
37
36
35
34
33
1
2
3
4
5
6
7
8
RESET
XTAL1
XTAL2
PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PC0/SCL
PC1/SDA
PC2/TCK
PC3/TMS
PC4/TDO
PC5/TDI
PC6/TOSC1
PC7/TOSC2
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
22
23
24
25
26
27
28
29
14
15
16
17
18
19
20
21
D5
AREF
AVCC
D7
D8
U2
3
4
7
8
13
14
17
18
1
11
32
30
D6
LED-RED
LED-RED
LED-RED
LED-RED
D0
D1
D2
D3
D4
D5
D6
D7
OE
LE
Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
2
5
6
9
12
15
16
19
D1
D2
D3
D4
LED-RED
LED-RED LED-RED
LED-RED
74LS373
ATMEGA16
数据按字节(字,多字)方式传输,每次多个数据bit一起传输
,速度快,电路复杂。
五、异步串行通行通信UART
0、并行通信与串行通信
U1
9
12
13
40
39
38
37
36
35
34
33
1
2
3
4
5
6
7
8
RESET
XTAL1
XTAL2
PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PC0/SCL
PC1/SDA
PC2/TCK
PC3/TMS
PC4/TDO
PC5/TDI
PC6/TOSC1
PC7/TOSC2
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
22
23
24
25
26
27
28
29
14
15
16
17
18
19
20
21
U3
9
8
1
2
D5
SRG8
R
D6
D7
D8
LED-RED
LED-RED
LED-RED
LED-RED
C1/->
3
&
1D
4
5
6
10
AREF
AVCC
32
30
11
ATMEGA16
12
13
74LS164
D1
D2
D3
D4
LED-RED
LED-RED LED-RED
LED-RED
数据字节(字,多字)从一条数据线按先后秩序到达对方,每
一时刻只能传输一个数据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);
}