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

Backup of AVR (No. 5)


参考文献

備忘録

ISP (In System Programming)

こんな感じで書き込んでいます。

ISP1.jpg

ISP2.jpg ISP3.jpg

Sample Codes

Timer/Counter

AD Converter

Communication

USART

  • 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;
    	}
    }

Links