ページ 11

LEDの点灯の問題です

Posted: 2008年8月31日(日) 15:44
by β
BポートのLED下位(4ビット)と上位(4ビット)を交互に点滅させるプログラムを書きなさい。
ただし、点滅時間は0.5秒(delay_ms(500);)とする。
という問題なのですが、以下のプログラムを変更させて記述したいのですが、
どう変更すれば、よいのでしょうか?

C言語を使ってLEDを点灯させるプログラムです。
以下のプログラムを変更して、Aポートの入力(下位4ビット)
と、Cポートの入力(下位4ビット)を加算した値をBポートに出力しなさい
という問題なのですが、加算した値を出力するにはどうプログラムを記述すればいいか
分かりません。教えてください。
delay_ms(500);)をプログラムのどこに入れたらいいか分かりません。



if(input(PIN_b4)){output_high(PIN_d4);}
else{output_low(PIN_d4);}
if(input(PIN_b5)){output_high(PIN_d5);}
else{output_low(PIN_d5);}
if(input(PIN_b6)){output_high(PIN_d6);}
else{output_low(PIN_d6);}
if(input(PIN_b7)){output_high(PIN_d7);}
else{output_low(PIN_d7);}

Re:LEDの点灯の問題です

Posted: 2008年8月31日(日) 16:54
by array
> if(input(PIN_b4)){output_high(PIN_d4);}
> else{output_low(PIN_d4);}
> if(input(PIN_b5)){output_high(PIN_d5);}
> else{output_low(PIN_d5);}
> if(input(PIN_b6)){output_high(PIN_d6);}
> else{output_low(PIN_d6);}
> if(input(PIN_b7)){output_high(PIN_d7);}
> else{output_low(PIN_d7);}

これは何をしているプログラムなのでしょうか。見た感じ関数input()でPIN_b○を受け取り、そのポートの情報を点灯、消灯を反転しているように見えますが・・・。

PIN_b○も何が読み込まれるのか良くわからないのでなにも言えないと思います。

不都合がなければプログラム全体をテキストファイルで添付してみてはどうでしょうか。

Re:LEDの点灯の問題です

Posted: 2008年8月31日(日) 17:13
by β
全体のプログラムは以下のようになります。
#include<18F452/h>
#device HIGH_INTS=TRUE
#priority ext,rb

#fuses NOOSCSEN,HS,BORV45,NOBROWNOUT,PUT
#fuses WDT128,NOWDT
#fuses NODEBUG,NOLVP,NOSTVREN
#fuses NOPROTECT,NOCPD,NOCPB
#fuses NOWRT,NOWRTD,NOWRTB,NOWRTC,NOEBTR,NOEBTRB

#use delay (CLOCK=20000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)

#byte port_a=0xf80
#byte port_b=0xf81
#byte port_c=0xf82
#byte port_d=0xf83
#byte port_e=0xf84

int i=0,j=0;

void main()
{
if(input(PIN_b4)){output_high(PIN_d4);}
else{output_low(PIN_d4);}
if(input(PIN_b5)){output_high(PIN_d5);}
else{output_low(PIN_d5);}
if(input(PIN_b6)){output_high(PIN_d6);}
else{output_low(PIN_d6);}
if(input(PIN_b7)){output_high(PIN_d7);}
else{output_low(PIN_d7);}
while(1)
{
output_c(0b10101010);
}
}

Re:LEDの点灯の問題です

Posted: 2008年8月31日(日) 23:26
by Hermit
PIC用のものは、特殊な C が多いので、
コンパイラやライブラリの仕様がわからないと何とも言えなさそうです。

まあ、それだけの情報でも、わかる人にはわかるかもしれませんが・・・
PIC 自体の設定などもあるだろうし・・・(私のレベルではよく分かりません(^^;)

あと、加算が、ビット加算か、整数としての加算かも不明ですし。

Re:LEDの点灯の問題です

Posted: 2008年8月31日(日) 23:44
by たかぎ
手元にコンパイラのマニュアルがないとどうしようもないですね。

Re:LEDの点灯の問題です

Posted: 2008年9月01日(月) 18:55
by array
プログラム全体を公開すればアドバイスが貰えると言ってすみません・・・。もう少し関数的な部分も出てくるのかともったのですが、output_c()、output_high()関数などは既存のものなんですかね・・・。

私の経験では・・・と言っても最近かつ初心者なのですが、実質5時間くらい・・・・7セグ点灯やスイッチによる加算、減算、リセットなんかやりました。・・・その時気づいたことなのですが、最初はプログラムだけ頑張ってました・・・でも、たかぎさん、Hermitさん、も言ってもますがマニュアルがないと進まないみたいですね(基本だったのかもしれませんが)

PIC(マイコン?)でプログラムを考えるときは、やはりPICの各ポートの仕様があり、各ポートによってポートの初期化の仕方が違うみたいです。
それはやはりマニュアルに書いてあるらしく、調べて用途に合わせて初期化しないといけない・・・

他にも回路図なんかも関係してくると思うので、このプログラムに関してはアドバイスを貰うのは難しいのかもしれません^^;


と言いつつ・・・・時間的に期限切れだったりするのかもしれませんが、上記のプログラムでは、どのような動作をしているのでしょうか

見た感じ最終的にwihleで無限ループに入ってるのでoutput_c()関数が延々に呼び出されている・・・前のif文では初期状態が下位ビットだけ反転されている・・・ような感じはします・・・

・・・・それが分っても、意味がないかもしれませんが、法則性が見えれば『LED下位(4ビット)と上位(4ビット)を交互に点滅させるプログラム』くらいならアドバイスできるかもしれません。

なんにせよ私もPICについては全然理解してないので・・・・すみません(+_+)

Re:LEDの点灯の問題です

Posted: 2008年9月01日(月) 19:09
by たかぎ
> マニュアルがないと進まないみたいですね

調べれば分かりますが、そこまで手間をかけるのはちょっと...。
そうなると本業の領域に入ってくるので、有償になります。