switch(mode)//异同模式选择
{
case 0:UCSRB&=~(1<<UMSEL);break;//异步模式
case 1:UCSRB|=1<<UMSEL;break;//同步模式
default :UCSRB&=~(1<<UMSEL);break;
}
UCSRC|=1<<URSEL;//写UCSRC。
/* 如果发送9位数据的数据帧(UCSZ = 7),
应先将数据的第9位写入寄存器UCSRB的TXB8,
然后再将低8位数据写入发送数据寄存器UDR, */
switch(digit)//// 设置帧格式 : digit数据位5-9,
{
case 5:UCSRB&=~(1<<UCSZ2);UCSRC&=~(3<<UCSZ0);break;
case 6:UCSRB&=~(1<<UCSZ2);UCSRC&=~(1<<UCSZ1);UCSRC|=1<<UCSZ0;break;
case 7:UCSRB&=~(1<<UCSZ2);UCSRC|=1<<UCSZ1;UCSRC&=~(1<<UCSZ0);break;
case 8:UCSRB&=~(1<<UCSZ2);UCSRC|=3<<UCSZ0;break;
case 9:UCSRB|=1<<UCSZ2;UCSRC|=3<<UCSZ0;break;
default:UCSRB&=~(1<<UCSZ2);UCSRC|=(3<<UCSZ0);break;
}
switch(checkout)//checkout校验模式
{
case 0:UCSRC&=~(1<<UPM1);UCSRC&=~(1<<UPM0);break;//禁止校验。
case 2:UCSRC|=1<<UPM1;UCSRC&=~(1<<UPM0);break;//偶校验
case 3:UCSRC|=(3<<UPM0);break;//奇校验
default:UCSRC&=~(1<<UPM1);UCSRC&=~(1<<UPM0);break;
}
UCSRC|=1<<USBS;//2个停止位
//UCSRC&=~(1<<USBS);//1个停止位
UCSRC&=~(1<<UCPOL); //时钟极性设置
//***************
//UCSRA|=1<<U2X;//打开此行倍速模式
//UCSRA|=1<<MPCM;//打开此行,是多处理器通信模式
SREG|=0x80;//使能全局中断
}
/************UBRR的baud设置参数表*****************************/
//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%
void USART_Init_commonage(unsigned int baud)//通用初始化
{/* 设置波特率 */
SREG&=0x7F;
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* 接收器与发送器使能 数据寄存器空使能禁止*/
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE);
/* 设置帧格式 : 8个数据位 , 2个停止位 ,禁止校验,XCK上升沿发送数据下降沿接收数据,异步模式*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
//UCSRA=0;单机处理模式。中断标志清零,波特率的普通模式(非加倍,倍速模式)
SREG|=0x80;//使能全局中断
}
本文关键字:单片机 AVR单片机,单片机-工控设备 - AVR单片机