• 締切済み

picマイコンのプログラム

仮に3bit目を取り出す場合は a=(0b00000100)&3 でいいのでしょうか? 第3bit目を第0bit目に移す場合の命令の例としては a=(0b00001000)>>3; でいいでしょうか? 矩形波のプログラムで1と0の比率が1:10となるプログラムについて #include <pic.h> main() { unsigned char lp1,lp2; TRISA=255; TRISB=0; for(;;) { for(lp1=0;lp1<2;lp1++){ PORTB=1; } for(lp2=0;lp2<5;lp2++){ PORTB=0; } } } で1:10の比率になっているでしょうか?

みんなの回答

  • koi1234
  • ベストアンサー率53% (1866/3459)
回答No.2

No1さんが書いてるとおりですが >仮に3bit目を取り出す場合 どっちが取り出される対象になってるかで話が180度変わります 3が取り出し元なら正解  0b00000100が取り出し元なら不正解 >第3bit目を第0bit目に移す場合の命令の例 3ビット目だけを移すんであれば不正解 kヒット目以上をすべて移すなら正解 >1:10の比率になっているでしょうか? なってません ついでにNo1の補足にも突っ込んでおくと やっぱり1:10にはなっていません どうして1:10になると判断できるのかが不思議なぐらいです コードが元質問と補足で変化してるのでとりあえず元質問ベースで書けば 1と0の出力を出力を1;10にしたいなら for(lp1=0;lp1<1;lp1++){ PORTB=1; } for(lp2=0;lp2<10;lp2++){ PORTB=0; } が正解

noname#182209
質問者

補足

第3bit目がマスクし取り出した信号で、この信号を第0bit目に移す場合 x=(0b00001000)〉〉3 これで合っていますか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

> 仮に3bit目を取り出す場合は a=(0b00000100)&3 でいいのでしょうか? 0b00000100 と 3 の どっちが「取り出される側の値」で、どちらが「取り出すためにマスクとして使う値」ですか? unsignd char x ; から第3bit目を取り出すとしたら、どう書くつもりですか? この質問に正解しなければ、その式が正しいかどうかの判断ができません。どちら基準なのかによって「正解」にも「不正解」にもなるのです。 > 1:10の比率になっているでしょうか? 1回のfor(;;)ループによって、次のようになります。 for(lp1=0;lp1<2;lp1++){PORTB=1;} → lp1==0→lp1<2より本体実行→ PORTB=1 → lp1 ++ lp1==1→lp1<2より本体実行→ PORTB=1 → lp1 ++ lp1==2→lp1<2では無いので、本体は実行せず、for文終了 lp2==0→lp2<5より本体実行→ PORTB=0 → lp2 ++ ...(以下、御自身で計算してみてください) さて、PORTBの出力を並べてみてください 110... となります。1と0の数は1:10になってますか?

noname#182209
質問者

補足

for(lp1=0;lp1<10;lp1++){ PORTB=0; } for(lp2=0;lp2<1;lp2++){ PORTB=1; } これで1:10になっていると思いますがどうでしょうか?