2005年11月15日

PIC例題

trisA=0x00;
trisB=0x00;
PORTA=0;
PORTB=0;

While(1){
PB.B0=1;
Wait(500);
PB.B0=0;
Wait(500);
}

ポートBの0番ピンを0.5秒ごとに点滅させる。
課題1:Wait(500)の値をもっと小さくするとどうなるか確認。(高速だと暗くなっているように見える。)
課題2:Wait(i)としてLEDの点灯と消灯のタイミングを連続的に可変するプログラムを作成する。
ヒント、int ��; (intだと255までしか使えないので注意。Longならもっとでかい。)
i++; (i=i+1;と同じ意味。iの値を1つ増やす。)

--------------------------------------------------------------------

trisA=0xFF;
trisB=0x00;
PORTB=0;

while(1){
if(PA.B0==1){
PB.B0=1;
}
}

trisAに代入する値が変わったことに注意。
PA.B0を1度でも1にしたらPB.B0が0にならないことを確認する。
課題3:ボタンを押している間だけ点灯するように変更。
課題4:ボタンを1つ追加し、PORTBすべてのピンにLEDを接続(8個)。ボタン1を押した時間をPORTBへ2進数にて表示するように変更(つまりボタンを押し続けるとPORTBの値が増えていく)。ボタン2を押すとリセット。
00000000 開始時
00000001 ボタン1を押した後
00000010 ボタン1を押し続けると値が1つずつ増える。
00000000 リセットボタンを押した後
ヒント:PORTB=0xFF;とするとPORTBのすべてが1となる。PORTB=0x03;とするとPORTBのbit0とbit1が1になりほかはすべて消灯する。PORTB=10;とするとPORTBから00001010が出てくる。


-------------------------------------------------------------------------
感で書いたのでこのとおり写しても動くかはわからない・・・。
これができたら可変抵抗使って入力したデータからモータにPWM出力するプログラムつくって部内ロボコン用にしたらどう?
プログラムってなんか目的がないと作りにくい.切羽詰った目的があると自分でどんどん調べてやると思うので本とかみて作りたいと思うようなのを探してみるといいかも.

Posted by kena at 17:42 | コメント (0)