Front page   New List of pages Search Recent changes   Help   RSS of recent changes

Backup of AVR (No. 1)


AVR

Sample Codes

Serial Communication

  • usart.h
    #define	FOSC	8000000		// クロック周波数 (8MHz)
    #define	BAUD	38400		// ボーレート
    #define	MYUBRR	FOSC/16/BAUD-1
    
    void USART0_Init(unsigned int baud);		// シリアル通信を初期化
    void USART0_Set_RXCIE();			// 受信完了割り込みを許可
    void USART0_Transmit(unsigned char data);	// 1バイトデータ送信
    unsigned char USART0_Receive(void);		// 1バイトデータ受信
    void USART0_Transmit_Str(char *str);		// 文字列送信
    void USART0_Transmit_Num(int num);			
  • usart.c
    //-----------------------------------------------------------------------------
    // シリアル通信関係
    //-----------------------------------------------------------------------------
    #include <avr/io.h>
    #include "usart.h"
    
    //----- シリアル通信を初期化 --------------------------------------------------
    void USART0_Init(unsigned int baud)
    {
    	UBRR0H = (unsigned char)(baud>>8);	// ボーレート設定(上位バイト)
    	UBRR0L = (unsigned char)baud;		// ボーレート設定(下位バイト)
    	UCSR0C = (3<<UCSZ00);			// フレーム形式設定(8ビット)
    	UCSR0B |= _BV(RXEN0) | _BV(TXEN0);	// 送受信許可
    }
    
    //----- 受信完了割り込みを許可 ------------------------------------------------
    void USART0_Set_RXCIE()
    {
    	UCSR0B |= _BV(RXCIE0);    // 受信完了割り込み許可
    }
    
    //----- 1バイトデータ送信 ----------------------------------------------------
    void USART0_Transmit(unsigned char data)
    {
    	while (!(UCSR0A & (1<<UDRE0)));		// 送信バッファ空き待機
    	UDR0 = data;				// データ送信(送信開始)
    }
    
    //----- 1バイトデータ受信 ----------------------------------------------------
    unsigned char USART0_Receive(void)
    {
    	while (!(UCSR0A & (1<<RXC0)));		// 受信完了待機
    	return UDR0;				// 受信データ取得
    }
    
    //----- 文字列送信 ------------------------------------------------------------
    void USART0_Transmit_Str(char *str)
    {
    	while (*str != 0) {
    		USART0_Transmit(*str);
    		*str++;
    	}
    }
    
    //----- 整数値(4桁)送信 ----------------------------------------------------
    void USART0_Transmit_Num(int num)
    {
    	unsigned char temp;
    	int ketaval = 1000;
    
    	while (ketaval != 0) {
    		temp = num / ketaval;
    		USART0_Transmit('0'+temp);
    		num -= (ketaval*temp);
    		ketaval /= 10;
    	}
    }

AD Converter