avr单片机USART串口通讯初始化配置及说明
偶校验模式
这两位设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,那么在发送数
据,发送器都会自动产生并发送奇偶校验位。对每一个接收到的数据,接收器都会
产生一奇偶值,并与UPM0 所设置的值进行比较。如果不匹配,那么就将UCSRA 中
的PE 置位。
UPM 设置
UPM1 UPM0 奇偶模式
0 0 禁止
0 1 保留
1 0 偶校验
1 1 奇校验
USBS: 停止位选择
通过这一位可以设置停止位的位数。接收器忽略这一位的设置。
USBS 设置
USBS 停止位位数
0 1
1 2
UCSZ1:0: 字符长度
UCSZ1:0与UCSRB寄存器的 UCSZ2结合在一起可以设置数据帧包含的数据位数(字
符长度)。
UCSZ 设置
UCSZ2 UCSZ1 UCSZ0 字符长度
0 0 0 5
0 0 1 6
0 1 0 7
0 1 1 8
1 0 0 保留
1 0 1 保留
1 1 0 保留
1 1 1 9
UCPOL: 时钟极性
这一位仅用于同步工作模式。使用异步模式时,将这一位清零。UCPOL 设置了输出
数据的改变和输入数据采样,以及同步时钟XCK 之间的关系。
UCPOL 设置
UCPOL 发送数据的改变(TxD引脚的输出) 接收数据的采样(RxD 引脚的输入)
0 XCK上升沿XCK 下降沿
1 XCK 下降沿XCK 上升沿
*///*********************************USART波特率寄存器(UBRRL和UBRRH)*************************
/* USART波特率寄存器(UBRRL和UBRRH)
bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8
URSEL – – – UBRR[11:8]
UBRR[7:0]
UCSRC寄存器与UBRRH寄存器共用相同的I/O地址。对该寄存器的访问。
URSEL: 寄存器选择
通过该位选择访问UCSRC 寄存器或UBRRH 寄存器。当读UBRRH时,该位为0;当写
UBRRH时, URSEL为0。
Bit 14:12 – 保留位
这些位是为以后的使用而保留的。为了与以后的器件兼容,写UBRRH时将这些位清零。
UBRR11:0: USART 波特率寄存器
这个12位的寄存器包含了USART的波特率信息。其中UBRRH包含了USART波特率高4
位,UBRRL包含了低8位。波特率的改变将造成正在进行的数据传输受到破坏。写UBRRL
将立即更新波特率分频器。
*/
/*
波特率定义为每秒的位传输速度 (bps)
BAUD 波特率 ( bps)
fOSC 系统时钟频率
UBRR UBRRH 与 UBRRL 的数值 (0-4095)
异步正常模式 (U2X = 0)
FOSC FOSC
BAUD = -------------- UBRR = ------------ -1
16( UBRR+ 1) 16BAUD
异步倍速模式 (U2X = 1)
fOSC fOSC
BAUD = -------------- UBRR = ------------ -1
8(UBRR+ 1) 8BAUD
同步主机模式
fOSC fOSC
BAUD = --------------- UBRR = ------------ -1
2(UBRR+ 1) 2BAUD
*/
#include
#include
#pragma interrupt_handler UDR_empty:iv_USART_UDRE
#pragma interrupt_handler RXC_END:iv_USART_DRE
#pragma interrupt_handler TXC_END:iv_USART_TX
unsigned char UASART_DATA=0; switch(mode)//异同模式选择 /************UBRR的baud设置参数表*****************************/ void USART_Init_commonage(unsigned int baud)//通用初始化 {/* 设置波特率 */ SREG&=0x7F;
void USART_Init( unsigned int baud,unsigned char digit,unsigned char mode,unsigned char checkout)//详细初始化模式
{ SREG&=0x7F;
UCSRC&=~(1
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能 */
UCSRB = (1
UCSRB = (1
{
case 0:UCSRB&=~(1
UCSRC|=1
应先将数据的第9位写入寄存器UCSRB的TXB8,
然后再将低8位数据写入发送数据寄存器UDR, */
switch(digit)//// 设置帧格式 : digit数据位5-9,
{
case 5:UCSRB&=~(1
switch(checkout)//checkout校验模式
{
case 0:UCSRC&=~(1
UCSRC|=1
//UCSRA|=1
}
//U2X=0;8mhz晶振9600:UBRR=51;误差:0.2%。4800:UBRR=103;误差:0.2%.2400:UBRR=207;误差:0.2%
//U2X=1;8mhz晶振9600:UBRR=103;误差:0.2%。4800:UBRR=207;误差:0.2%.2400:UBRR=416;误差:-0.1%
//U2X=0;11.0592mhz晶振9600:UBRR=71;误差:0.0%。4800:UBRR=143;误差:0.0%.2400:UBRR=287;误差:0.0%
//U2X=1;11.0592mhz晶振9600:UBRR=143;误差:0.0%。4800:UBRR=287;误差:0.0%.2400:UBRR=575;误差:0.0%
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能 数据寄存器空使能禁止*/
UCSRB = (1
UCSRC = (1
SREG|=0x80;//使能全局中断
avr单片机USART串口通讯初始化配 相关文章:
- avr单片机USART串口通讯初始化配置说明(11-19)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)