LoginSignup
0
1

More than 5 years have passed since last update.

[ARDUINO]ATMEL STUDIOでC Style UART 通信。

Last updated at Posted at 2017-08-03

C styleでUARTを利用しようとします。
stdio.hを使っても良いですが、
メモリーを減りたいので
作ってみました。

uart.c
/*
 * UART.c
 *
 * Created: 2017-08-03 10:57:22
 * Author: Dreamwalker
 */ 

 #include "UART.h"

 void UART_INIT(void){

    UCSR0A |= (1 << U2X0);

    UBRR0H = 0x00; 
    UBRR0L = 207;  // 9600bps

    /*
    asynchronous
    8bit data
    parity none
     stop bit : 1bit
    */

    UCSR0C |= 0x06; 

    UCSR0B |= (1 << RXEN0);
    UCSR0B |= (1 << TXEN0);

 }

 unsigned char UART_receive(void){

    while(!(UCSR0A & (1 << RXC0)));
    return UDR0;
 }

 void UART_transmit(unsigned char data){

    while( !(UCSR0A & (1 << UDRE0)) );
    UDR0 = data;

 }

 void UART_printString(char *str){
    for (int i = 0; str[i]; i++)
    {
        UART_transmit(str[i]);
    }
 }

 void UART_print8bitNumber(uint8_t num){
    char numString[4] = "0";
    int i, index = 0;

    if (num > 0)
    {
        for (i = 0; num != 0; i++)
        {
            numString[i] = num % 10 + '0';
            num = num / 10;
        }
        numString[i] = '\0';
        index = i - 1;
    }

    for (i = index; i >= 0; i--)
    {
        UART_transmit(numString[i]);
    }
 }

 /***
 *  number -> string function
 *  @param : num
 */
 void UART_print16bitNumber(uint16_t num){
    char numString[6] = "0";
    int i, index =0;
    if (num > 0){
        for (i = 0; num != 0; i++){
            numString[i] = num % 10 + '0';
            num = num / 10;
        }
        numString[i] = '\0';
        index = i - 1;
    }

    for (i = index; i >= 0; i--){
        UART_transmit(numString[i]);
    }
 }

  void UART_print32bitNumber(uint32_t num){
      char numString[11] = "0";
      int i, index =0;
      if (num > 0){
          for (i = 0; num != 0; i++){
              numString[i] = num % 10 + '0';
              num = num / 10;
          }
          numString[i] = '\0';
          index = i - 1;
      }

      for (i = index; i >= 0; i--){
          UART_transmit(numString[i]);
      }
  }

uart.h

#ifndef _UART_H_
#define _UART_H_


#include <avr/io.h>

void UART_INIT(void);
unsigned char UART_receive(void);
void UART_transmit(unsigned char data);
void UART_printString(char *str);
void UART_print8bitNumber(uint8_t num);
void UART_print16bitNumber(uint16_t num);
void UART_print32bitNumber(uint32_t num);

#endif /* UART_H_ */
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1