AVRマイコンの自分への覚書的な何か part.2 ?
どうも,いつまでやるんですかね?ryou.です.
今回は入力です.
スイッチまたはケーブルをご用意ください.
配線としてはPB0にスイッチが繋がって押されるとGNDに落ちる感じです.
LEDはPORTDのいずれかに繋いでおいてください.
では続きでソースです.
今回は入力です.
スイッチまたはケーブルをご用意ください.
配線としてはPB0にスイッチが繋がって押されるとGNDに落ちる感じです.
LEDはPORTDのいずれかに繋いでおいてください.
では続きでソースです.
ではソースです.
# define F_CPU 80000000UL
#include <avr/io.h>
int main(void){
DDRD = 255 ;
PORTD = 0 ;
DDRB = 0b11111110 ;
PORTB = 0b00000001 ;
char PB_SW ;
while(1){
PB_SW = (~PINB & 1) ;
switch (PB_SW){
case 1 :
PORTD = 255 ;
break ;
default:
PORTD = 0 ;
break ;
}
}
return 0 ;
}
では新しく出てきたものを解説です.
>PORTB = 0b00000001 ;
前回と同じですが入力の場合の1は内蔵プルアップ抵抗を有効にするということです.
>PB_SW = (~PINB & 1) ;
PB_SWという変数にPINB(PORTBの入力)と1をANDするマスク処理をしたものを代入する文です.
また,今回入力の処理にswitch+case文を用いていますがbitisclear+if文でもOKだと思います.
つまりこのプログラムではPB0にlowが入力されるとPORTDにhighを出力します.
では書き込んでためして見てください.
ではこの辺で.
See you next time .
・・・インデントが全部消えちゃうんですね.
ちなみにソースを書きながら記事も書いています.
# define F_CPU 80000000UL
#include <avr/io.h>
int main(void){
DDRD = 255 ;
PORTD = 0 ;
DDRB = 0b11111110 ;
PORTB = 0b00000001 ;
char PB_SW ;
while(1){
PB_SW = (~PINB & 1) ;
switch (PB_SW){
case 1 :
PORTD = 255 ;
break ;
default:
PORTD = 0 ;
break ;
}
}
return 0 ;
}
では新しく出てきたものを解説です.
>PORTB = 0b00000001 ;
前回と同じですが入力の場合の1は内蔵プルアップ抵抗を有効にするということです.
>PB_SW = (~PINB & 1) ;
PB_SWという変数にPINB(PORTBの入力)と1をANDするマスク処理をしたものを代入する文です.
また,今回入力の処理にswitch+case文を用いていますがbitisclear+if文でもOKだと思います.
つまりこのプログラムではPB0にlowが入力されるとPORTDにhighを出力します.
では書き込んでためして見てください.
ではこの辺で.
See you next time .
・・・インデントが全部消えちゃうんですね.
ちなみにソースを書きながら記事も書いています.
スポンサーサイト