変数型 | サイズ | 値の範囲 | |
---|---|---|---|
char | 1バイト | 8ビット | -128 ~ +127 |
unsigned char | 1バイト | 8ビット | 0 ~ 255 |
int | 2バイト | 16ビット | -32768 ~ +32767 |
unsigned int | 2バイト | 16ビット | 0 ~ 65535 |
/* * avr002.c * LED点滅させる。 * (1)forループを使う * Created: * Author: */ #include <avr/io.h> int main(void) { unsigned int i, j; // ポートの初期化を行います。 // ポートB初期設定 DDRB = 0xff; // PB7~PB0を出力に設定します。 PORTB = 0; // PB7~PB0に'L'を出力します。 // ポートC初期設定 DDRC = 0x3f; // PC7,PC6は初期(入力)、PC5~PC0を出力に設定します。 PORTC = 0; // PC7~PC0に'L'を出力します。 // ポートD初期設定 DDRD = 0xf0; // PD7~PD4は出力、PD3~PD0は入力に設定します。 PORTD = 0; // PD7~PD0に'L'を出力します。 while(1) { PORTD |= 0xf0; // PD7~PD4に'H'を出力してLEDを点灯させます。 for ( i = 0; i < 13; i++) { for ( j = 0; j < 10000; j++); } PORTD &= 0x0f; // PD7~PD4に'L'を出力してLEDを消灯させます。 for ( i = 0; i < 13; i++) { for ( j = 0; j < 10000; j++); } } }
/* * avr003.c * _delay_msを使う * Created: * Author: */ #define F_CPU 1000000UL // 1MHz #include <util/delay.h> #include <avr/io.h> void InitHard( void); // ポートの初期化 int main(void) { InitHard(); while(1) { PORTD |= 0xf0; // PD7~PD4に'H'を出力してLEDを点灯させます。 _delay_ms( 500); PORTD &= 0x0f; // PD7~PD4に'L'を出力してLEDを消灯させます。 _delay_ms(500); } } void InitHard( void) // ポートの初期化 { // ポートB初期設定 DDRB = 0xff; // PB7~PB0を出力に設定します。 PORTB = 0; // PB7~PB0に'L'を出力します。 // ポートC初期設定 DDRC = 0x3f; // PC7,PC6は初期(入力)、PC5~PC0を出力に設定します。 PORTC = 0; // PC7~PC0に'L'を出力します。 // ポートD初期設定 DDRD = 0xf0; // PD7~PD4は出力、PD3~PD0は入力に設定します。 PORTD = 0; // PD7~PD0に'L'を出力します。 }
whileループ内のみ書いています。 unsigned char d; while(1) { d = PORTD; // PORTDの値を変数dに記憶しておきます。 PORTD = ~(d & 0xf0) | (d & 0x0f); // PD7~PD4を反転した値をPORTDに出力します。 _delay_ms( 500); }
分周比 | 8ビットタイマ[ms] | 16ビットタイマ[ms] |
---|---|---|
1 | 0.255 | 65.535 |
8 | 2.040 | 524.280 |
64 | 16.320 | 4194.240 |
256 | 65.280 | 16776.960 |
1024 | 261.120 | 67107.840 |
WGM13 | WGM12 | WGM11 | WGM10 |
0 | 1 | 0 | 0 |
分周比 | CS12 | CS11 | CS10 |
---|---|---|---|
停止 | 0 | 0 | 0 |
1(分周比無し) fclk / 1 | 0 | 0 | 1 |
8分周 fclk / 8 | 0 | 1 | 0 |
64分周 fclk / 64 | 0 | 1 | 1 |
256分周 fclk / 256 | 1 | 0 | 0 |
1024分周 fclk / 1024 | 1 | 0 | 1 |
ビット名 | ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 |
---|---|---|---|---|---|---|---|---|
設定値 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 |
ビット | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
設定値 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
ビット名 | - | - | ICIE1 | - | - | OCIE1B | OCI1A | TOIE1 |
---|---|---|---|---|---|---|---|---|
設定値 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
ビット名 | 内容 | 1 | 0 |
---|---|---|---|
ICIE1 | インプットキャプチャ割込 | 許可 | 禁止 |
OCIE1B | コンペアマッチB割込 | 許可 | 禁止 |
OCIE1A | コンペアマッチA割込 | 許可 | 禁止 |
TOIE1 | オーバーフロー割込 | 許可 | 禁止 |
/* * avr005.c * タイマ割込を使う * Created: * Author: */ #include <avr/io.h> #include <avr/interrupt.h> void InitHard( void); // ポート及びタイマ設定の初期化 int main(void) { InitHard(); // ポート及びタイマ設定の初期化 sei(); // 全体の割込を許可 while(1) { //TODO:: Please write your application code } } void InitHard( void) // ポート及びタイマ設定の初期化 { // ポートB初期設定 DDRB = 0xff; // PB7~PB0を出力に設定します。 PORTB = 0; // PB7~PB0に'L'を出力します。 // ポートC初期設定 DDRC = 0x3f; // PC7,PC6は初期(入力)、PC5~PC0を出力に設定します。 PORTC = 0; // PC7~PC0に'L'を出力します。 // ポートD初期設定 DDRD = 0xf0; // PD7~PD4は出力、PD3~PD0は入力に設定します。 PORTD = 0; // PD7~PD0に'L'を出力します。 TCCR1B |= (1 << WGM12); // タイマ1をCTCモードに設定 OCR1A = 62499; // コンペアマッチAレジスタに62499(0xf423)を設定 TIMSK1 |= (1 << OCIE1A); // コンペアマッチA一致で割込を許可します。 TCCR1B |= (1 << CS11); // 8分周でタイマをスタートさせます。 } SIGNAL( TIMER1_COMPA_vect) // コンペアマッチA割込が発生したときの処理を行います。 { unsigned char d; d = PORTD; // PORTDの値を変数dに記憶しておきます。 PORTD = ~(d & 0xf0) | (d & 0x0f); // PD7~PD4を反転した値をPORTDに出力します。 }