RL78,ポート操作,関数の引数にポート番号を指定する方法

Former Member
Former Member

RL78/G13,CS+ for CA,CXを使用しています。

1秒のパルス出力を行いたくポート(P0.0等)を引数に関数を作りたいのですが、引数の型はどのようにすれば可能でしょうか。

ポートの数が多いのでポートを引数にとる関数化したいです。

ポートはuserdifine.h等で

#define OUTPUT1 (P0.0)

のようにdefineして。

static void pulseOutput(int port)
{
 port = 1;

 //1秒待機
 port = 0;
}

上記関数を

pulseOutput(OUTPUT1);

というように関数をコールしたいです。

調べたつもりですが、既に回答が出ていれば申し訳ありません。あればそちらのpostのURLをいただけると幸いです。

  • Former Member
    Former Member in reply to わわい
    わわい様
    回答ありがとうございます。
    *PORTADR[portno>>3]の所ですが、
    例えばP1.6のときportno=16とすると
    portno>>3 = 2となって&P2となってしまう気がするのですが、
    引数の入れ方はこのような理解で良いでしょうか。
  • Former Member
    Former Member in reply to fujita nozomu
    fujita nozomu様
    解説ありがとうございます。
    ポートレジスタへのアクセスがイメージできました。マニュアルのPxxの項も見てわかりました。
  • チョコです。
    わわいさんは,ポートの指定は3ビット(8進数)で表され,連続しているものとして処理されています。

    P1.6を16と10進数で表すのであれば,3ビットシフトではなく,10で割るべきでしょう。
  • わわいです
    元質問のポート番号というものがどういうもんであるかがわかりませんが、、
    portno と出力ビットの関係は以下のようになります
    0 P0のbit0
    1 P0のbit1
    2 P0のbit2
    3 P0のbit3
    4 P0のbit4
    ... ... ...
    7 P0のbit7
    8 P1のbit0
    9 P1のbit1
    10 P1のbit2
    ... ... ...
    15 P1のbit7
    16 P2のbit0
    ... ... ...
    24 P3のbit0
    ... ... ...
    32 P4のbit0

    とゆーとこらへんでどーでしょう
  • Former Member
    Former Member in reply to わわい
    チョコ様
    わわい様
    回答ありがとうございます。

    質問に不足が有り申し訳ありませんでした。
    指摘の通りで
    >P1.6を16と10進数で表す
    という書き方で考えていました。

    皆様回答ありがとうございました。
    やりたい動作が可能になりました。