您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机avr单片机USART串口通讯初始化配置说明 正文
avr单片机USART串口通讯初始化配置说明

avr单片机USART串口通讯初始化配置说明

点击数:7982 次   录入时间:03-04 11:59:12   整理:http://www.55dianzi.com   AVR单片机
      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<iom16v.h>
      #include<macros.h>
      #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;
      void USART_Init( unsigned int baud,unsigned char digit,unsigned char
      mode,unsigned char checkout)//详细初始化模式
      { SREG&=0x7F;
      UCSRC&=~(1<<URSEL);//写UBRRH
      /* 设置波特率 */
      UBRRH = (unsigned char)(baud>>8);
      UBRRL = (unsigned char)baud;
      /* 接收器与发送器使能 */
      UCSRB = (1<<RXEN)|(1<<TXEN);
      /*UDR数据寄存器为空时中断使能 */
      UCSRB = (1<<UDRIE);//最好不用。根据需要打开此中断使能

      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;//使能全局中断
      }

上一页  [1] [2] [3] [4] [5]  下一页


本文关键字:单片机  AVR单片机单片机-工控设备 - AVR单片机