dポイントプレゼントキャンペーン実施中!

はじめまして
高校でC言語を使いPIC制御しているのですが動きません泣
ピンの番号や命令中に変数を使いたいんですどうしたら良いでしょう?

簡単なプログラムで言うと、
for(x = 0; x <= 5; x++){
y = 1;
output_bit(PIN_Ax,y);
if(y==1){y = 0;}
}
見たいな事をしたいのですが動きません
ポート制御すればいいみたいな話じゃなくてです
お願いします

A 回答 (3件)

void portb(long addt)


{
PIN_A0 = 0x01 & addt;
PIN_A1 = (0x02 & addt) >> 1;
PIN_A2 = (0x04 & addt) >> 2;
PIN_A3 = (0x08 & addt) >> 3;
...
PIN_A7 = (0x80 & addt) >> 7;
}
こーゆー事ってPICじゃ出来ないんですか?(マイコンとかDSP位しか使ったことが無いもので。)
俺ならこんな関数作っちゃいますけど。
使う時は
void portb(long addt);
void main(void)
{
long A;
A=read_adc;
portb(A);
}
って感じですかね。


output_bit(PIN_A0,y)っていうのが使ったこと無いのでよくわからないんですが、置き換えるなら多分
PIN_A1 = (0x02 & addt) >> 1;  →  output_bit(PIN_A1,(0x02 & addt) >> 1);
見たいな感じで動くと思います。
    • good
    • 0
この回答へのお礼

あぁなるほどシフトでの切り出しを使えば1発っすね
PICでも出来ると思います

ありがとうございます
助かりました

お礼日時:2005/12/25 00:34

PIC, H8, SH などのマイコンで遊んでいる者です。


PICのCコンパイラには何をお使いですか?

> ポート制御すればいいみたいな話じゃなくてです

ぱっと見て、ポインタにポート名代入するか、switch case で振り分けるかと思ったのですが、ポートの話ではないのですね???
具体的に何をしたいのですか?

「動きません」ではなく、
1.どのような出力を期待して作ったか
2.結果はどのような出力になっているか
を書いてください。

この回答への補足

はじめまして
回答ありがとうございます
コンパイラはMPLABを使ってます

質問分かりづらくてホントすんません

具体的に言うと少し長くなるのですが
短く言うとPIC16f873のアナログ入力をA/D変換してUSBを通してVBで読むというのをしたいんです
PICの中でやりたい事はread_adcをした値を2進数にしてそれをポートBを使って出力したいんです

それでひとまず作ったプログラムで動かすことは出来たのですが、長くて...


Aはアナログ入力をぶち込んだやつです

for(x = 0; x <= 8; x++){
Y[x] = A % 2;
A = (A - Y[x]) / 2;
}

このforループの中でポートBの'x'pinに'Y[x]'←(1or0)を出力したいです
バカなプログラムですんません
他にいい方法があればそれでもいいのですが

あとswitchで分けるというのは
switch(x){
case '0': output_bit(PIN_A0,y);
...
}
って事っすか?

まだ質問が下手なことがあったらまた言ってください

補足日時:2005/12/23 21:58
    • good
    • 0

質問の意図が、「定数値PIN_A0、PIN_A2、…、PIN_A5があって、変数xの値を1として、PIN_Axという記述がPIN_A1を意味するコーディング法が知りたい」という事なら、一般的なCでは無理かと(根性入れて、evalを実装するという手もありますが)。



素直に、配列PIN_Aを用意して、
PIN_A[0] = PIN_A0; (以下略)
――と初期化しといて、
output_bit( PIN_A[x], y );
――でアクセスすれば良いのでは。

外してるかな?
    • good
    • 0
この回答へのお礼

回答ありがとうございます
分かりづらい質問ですみませんでした
無理なんですか...
わかりました
その方法でやってみます
本当にありがとうございました

お礼日時:2005/12/23 21:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!