Atmega32简单的串口通信

Posted on 2010-12-13 21:44  jmexe  阅读(2213)  评论(0)    收藏  举报

最近因为做东西,又重新写了一下AVR,在这整理一下

 

串口通信是这个是比较常用的部分,Atmega32只有一个串口,USART

基本串口编程只需要写两部分,串口的初始化与串口数据接收

 

串口初始化:

  设置波特率,波特率可以通过设置波特率发生寄存器UBRR来确定, UBRR为两字节16位的寄存器,可分为UBRRH和UBRRH,计算公式:

      UBRRH= (F_CPU/BAUD/16 -1)/256   UBRRL =(F_CPU/BAUD/16 -1)%256

  串口的使能,通过写USART控制和状态寄存器B-USARTB,接收使能、发送使能、接收中断使能(可根据需要进行使能)。

      使能语句:UCSRB |=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);

  初始化函数:

    void USART_init(int BAUD)

    {

           UBRRH= (F_CPU/BAUD/16 -1)/256;

           UBRRL= (F_CPU/BAUD/16 -1)%256;

           UCSRB|= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);

    }

 

发送单字节数据:

  voidsend_char(char data)

  {

    while(!(UCSRA & (1<<UDRE)) );

    UDR = data;

  }

发送字符串:

  void send_string(char *string)

  {

     for(;*string!='\0';string++)

    send_char(*string);

  }

 

发送二进制数字

  void send_bin(uint8_t num)

  {

    inti;

    for(i=7;i>=0;i--)

    send_char(((num>>i)&0x01)+48);

  }

 

接收字符数据

  unsigned char getchar(void)

  {

    while(!(UCSRA&(1<<RXC0)));

    return UDR;

  }

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3