• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AKI-H83048で割り込みを使用してLEDを点滅させたいのですが、、、、)

AKI-H83048で割り込みを使用してLEDを点滅させる方法

このQ&Aのポイント
  • AKI-H83048を使用して割り込みを利用してLEDを点滅させる方法について教えてください。
  • 質問者は組み込みソフトウェアの初心者で、AKI-H8 3048で割り込みを使用してLEDを点滅させたいと思っています。
  • 質問者はAKI-H8マイコンキットに付属の専用CコンパイラCC38Hを使用していますが、割り込み関数の部分でエラーが発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • kent85
  • ベストアンサー率52% (38/73)
回答No.3

#pragma xxxxxx 指令はプリプロセッサで、そのコンパイラ固有の指定を行うモノです。 解釈はコンパイラ次第です。(プラットフォームごとの定義と解釈などに使います) そのコンパイラが知らない(理解できない)#pragmaの扱いをどうしているかは マニュアルを見ればわかりますが、おそらくエラーか警告が出ます。 ==== 以下は参考にしたH8サンプルソースが、仮にルネサスのHewだったとしてです。 > #pragma interrupt itu0_int(vect=24) これはITU0の割り込みベクタ登録定義(エントリー)と「割り込み関数だよ」の定義です。 #interrupt が通用しなければ、たぶんただの関数扱いになってしまいます。 (知らない#pragma xxxx記述を無視するコンパイラであった場合は) (1) 割り込みハンドラと、普通に作成した関数の違いはASM出力結果を比べるとわかります。 ・割り込みハンドラ特有(必須)のレジスタの扱い ・ただの一般関数なのに、強引に割り込みハンドラとして使うと、  入り口出口のレジスタの扱いが異なるために、不可解な挙動になる。  (他の環境でいえば、interrupt修飾子の有無のようなモノ) (2) vect=24 は「その割り込み番号の定義(関数ハンドラ)ですよ」の登録の定義です。 #interruptが無効になると、vect=24も無効になります。 ですから他の記述をつかわないと(他の手法で割り込みベクタ管理をしないと) 割り込みの24と、この関数(ハンドラ)の定義がリンクしないので (ひも付かないので) ITU0の割り込みが発生しても、この関数に飛んできません。: itu0_int()が呼び出されない → #pragmaがエラーであれば、サンプルソースが意図したところではなくなります。

参考URL:
http://bluefish.orz.hm/sdoc/h8_prog.html
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • pc_net_sp
  • ベストアンサー率46% (468/1003)
回答No.2

コンパイラが色々ありましたのでお知らせ。 ご自分にあったものをお使い下さい。 http://www.vector.co.jp/vpack/filearea/other/h8/

全文を見る
すると、全ての回答が全文表示されます。
  • pc_net_sp
  • ベストアンサー率46% (468/1003)
回答No.1

AKI-H8/3048で不具合がでた事が無いので、分かりませんが、タダの勉強不足!?? また、サンプルファイルでエラーが出るかどうか試してください。 サンプルで問題なく、自作プログラムで問題があるなら、プログラム開発に問題があるのでは!? Cコンパイラを変えてみては?? ググったら情報たくさん出てきます。 ---参考情報--- http://wave.iobb.net/doc/summary/h8wiki/wifky.cgi?p=AKI-H8%2F3048F%A5%DC%A1%BC%A5%C9%CD%D1%A5%E2%A5%CB%A5%BF%A5%D7%A5%ED%A5%B0%A5%E9%A5%E0%A4%CE%A5%D3%A5%EB%A5%C9 http://homepage1.nifty.com/rikiya/software/3hello_c.htm http://www.sendai-ct.ac.jp/~ckuma/micom/3048/c_start.html http://www.sendai-ct.ac.jp/~ckuma/micom/3048/c_startB.html http://www.ukaibutton.com/h8/ http://tokyo-ct.net/usr/kosaka/for_students/H8/h8_env/BuildEnv2.html http://homepage1.nifty.com/aida/AkiH8.htm http://plaza.rakuten.co.jp/CPU4Edu/17001 ---PDFファイル--- http://www.sophia-systems.co.jp/ice/hitachi/EJD-H8_3048F-one.pdf http://documentation.renesas.com/jpn/products/tool/tu/tncsx053a.pdf http://www.hitachi-ics.co.jp/product/seihin-k/h8ccon/pdf/h8ccon24.pdf

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Aki-h8/3052マイコンについて

    今Aki-h8/3052マイコンを勉強しているのですが、初心者のためうまくいかず質問をしました。知識がないと思われるような質問をしてしまいますが、よろしくお願いします。 次のようなプログラムを書き込んで、LEDを点滅させたいのですが点滅しません。原因がわからないので、教えていただける方がいたらよろしくお願いします。 #define P5DDR (*(volatile unsigned char*)0xffffc8) #define P5DR (*(volatile unsigned char*)0xffffca) void wait (long loop){ while(loop--); } int main(void){ P5DDR = 0xff; while(1){ P5DR = 0xff; wait(200000); P5DR = 0; wait(200000); } } ポートBを使用した場合うまくいくのですが、ポート5を使用するとうまくいきません。 コンパイラにはGDLを、書き込みにはH8Write Turboを使用しています。

  • AKI-H8/3048Fでのタイマ割り込み

    秋月電子で http://akizukidenshi.com/catalog/items2.php?p=1&q="K-00004" を買いマイコンの勉強をしています。 コンパイル等はGCC Developer Lite、モニタプログラムを使いRAM上で 動作確認をしています。 タイマによる割り込みをしたいと思い、参考書のプログラムを参考に マザーボード上の2つのLEDが交互に光るようにしたいのですが、 肝心のint_imaia0()が全く実行されていません。 #include <3048.h> int c; void int_imia0( void ) { ITU0.TSR.BIT.IMFA = 0; c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } } int main( void ) { c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; EI; while( 1 ){ } } また、割り込みを使わない方法ということで #include <3048.h> int main( void ) { int c = 10; P5.DDR = 0x03; ITU0.TCR.BIT.CCLR = 1; ITU0.TCR.BIT.TPSC = 3; ITU0.GRA = 39999; ITU.TSTR.BIT.STR0 = 1; P5.DR.BYTE = 0x01; while( 1 ){ while( !ITU0.TSR.BIT.IMFA ); c -= 1; if( c == 0 ){ P5.DR.BYTE = ~ P5.DR.BYTE; c = 10; } ITU0.TSR.BIT.IMFA = 0; } } を試したのですが、こちらはLEDが交互に点滅して成功しています。 なのでタイマ自体は動作していると思うのでですが、上のプログラムだと int_imaia0()動作しません。 何がいけないのでしょうか?よろしくお願いします。

  • AKI-H8/3069 syscallについて

    AKI-H8/3069FフラッシュマイコンLANボードを使っているのですが質問があります。 開発環境として梱包されてたCDよりcygwinを用いて開発しています。 そこで質問なのですが、H8/osを使ってprintfを使用しているのですが、 その通信速度を変更したい場合どこの値をいじればよいのでしょうか? ヘッダーとしてcyscall.hを読み込んで実行しているのですが、 中を見ても速度を指定するような記述はありませんでした。 わかりにくいかもしれませんがよろしくお願いいたします。

  • H8/3052FマイコンにRTOS

    こんばんは!! 学校の授業で組込みに興味を持ち、勉強してみようと思い、 組込みを勉強しようと思っています!! 秋月電子のAKI-H8-LANが学校にあったので、 借りて来ています。しかしマニュアルも何もありません。 マイコンはH8/3052Fを使っています。 開発環境はRENESASのHEWを使い、LEDを点灯させたり、 点滅させたりというプログラムをやっと出来るようになりました>< 書き込みはH8write turboで行っています。 RTOSを勉強したいのですが、TOPPERS/JSPカーネルを ダウンロードし、HEWでコンパイルしたかったのですが、 出来ません>< そこで、3052Fで使えて、HEWでコンパイル(というかビルド?) 出来るRTOSを教えてください!! 私の調査・勉強不足なのですが、 HEWでTOPPERS/JSPカーネルが使える方法もありましたら よろしくお願いします!! 未熟者ですがどうかよろしくお願いしたしますm(__)m

  • H8 3052について

    マイコン、電気回路初心者です。 h8 3052で回転計を作製をしたいのですが・・・知識を貸していただきたいです マイコン初心者です。。。 h8 3052で回転計を作製をしたいのですが・・・知識を貸していただけたら幸いです。 回転数を算出の式として次を用いたいと思います(精度はあまり気にしないでください。。。) 回転数[rpm]=60[sec]/1回転に要する時間[sec] リードスイッチとマグネット4つを使い回転数を算出したいと思っています。 リードスイッチが4つカウントしたときの時間(1回転に要する時間)を上の式の分母(t)に入れ演算させたいです。 ITUのタイマー割り込みを使い分母の時間をカウントをしカウントが4のときt=0と考えてました。 しかし、カウントを迎えてもtは永遠に1ずつ足され続け0に戻りません。 プログラムの考え方が違うのでしょうか? 使用環境からロータリーエンコーダ、フォトトランジスタなどが使えません。 チャタリングについては、本からRC積分回路(0.1μFとVccに10KΩ)使い、そこからさらに74HC04通してつかっているのですが・・・見よう見まね状態です。 開発環境はHEWを使っています。 勉強不足だと思いますが、10日くらい悩んでいます。力を貸してください。よろしくお願いします。 僕が立てたプログラムは次の通りです。 vector 12 IRQ0 (リードスイッチ 立下りエッジで割り込み要求) __interrupt(vect=12) void INT_IRQ0(void) { count++; INTC.ISR.BIT.IRQ0F=0; } vector 28 IMIA1 __interrupt(vect=28) void INT_IMIA1(void) { ITU1.TSR.BIT.IMFA = 0; taco_interrput-=1; if(taco_interrput==0) { t++; } taco_interrput=1; } void main() {   set_imask_ccr(1); //割り込み禁止   INTC.ISCR.BIT.IRQ0SC=1; //タコメータ 入力立下りエッジで割り込み発生   INTC.IER.BIT.IRQ0E=1; //IRQ0割り込み許可(タコメータ)        ITU1.TCR.BIT.CCLR=1; //ITU1カウンタクリア要因  ITU1.TCR.BIT.TPSC=3; //ITU1 3.125MHz  ITU1.GRA=3125-1; //ITU1 3.125MHz/3125=1000Hz、周期1ms(0からカウントされるため必ず-1)  ITU1.TIER.BIT.IMIEA = 1; //ITU1 IMFAフラグによる割り込み許可  ITU.TSTR.BIT.STR1=1; //ITU1タイマスタート  taco_interpput=1; //ITU(imia)割り込み回数1 割り込み先で1に戻るので無限  while(1)  {   if(count==4)    {     time=t;     t=0;     count=0;     n=60[sec]/time;    }   if(count>4) //カウントが4より大きくなってしまったとき    {     t=0;    count=0;    }  } } (LCDのプログラムは長いので省きました) LCDの液晶を使い以下のことは確認をしています。 ・カウントが4を迎えたときカウントは0に戻っています。(IRQのカウントのことです) ・カウントを何回与えてもtが0に戻りません。なので演算されてないです。(tは永遠に1ずつ足され続けてます) 回転数の使う範囲は50~200rpmです。 tのカウントを0に戻す記述をどうしたいいのかよろしくお願いします。

  • PICでLEDの点滅について

    http://okwave.jp/qa/q2987225.html を参考にして、C言語で作成しようとしているときに、コピーアンドペーストしたにもかかわらず、ビルドは成功しますが、LEDが点滅しません。何が悪いのか見当がつきません。ただ、いろいろなソースを試してみましたが、ビルドは成功しますが実行時に期待通りに動きません。どうもコンパイラの設定辺りが怪しいのですが、どなたかわかる方が居られたらアドバイスをいただけますようよろしくお願いします。

  • PICマイコンでLEDの点滅をC言語で記述法を教えてください

    PICマイコン(PIC16F84A)にLEDを1個接続し点滅だけのプログラムをC言語で記述を書きたいのですが、教えていただけないでしょうか? CCS社のコンパイラを用いた時の記述の書き方を教えていただけないでしょうか? 条件は、 ・電池を繋げるとLEDが点滅、スイッチ素子は用いません。 ・LEDは1秒間隔で点滅し、永遠に点滅 ・LEDは、PICマイコン(PIC16F84A)の9番ピン(RB3に該当)に接続 ・水晶発振子は、10MHzを使用。 ・コンパイラは、CCS社を使用 私が分かる範囲は下記なのですが、これから先の記述方法が分かりません。 #include <16f84a.h> #fuses HS, NOWDT, NOPROTECT #use delay(clock=10000000) #byte port_b=6 main() { この中身の記述方法が分かりません。 教えていただけないでしょうか? } よろしくお願いします。

  • PIC LEDの点滅プログラム

    現在C言語でLEDの点滅プログラムを作成しているのですが なかなかうまくいきません。 LEDの点滅プログラムのソースなど公開しているサイトがありましたら教えてください。 参考にしてプログラムを考えていきたいと思っています。 基本的、シンプルな点滅プログラムを希望します。 PIC16F84Aを使用することを前提に考えています。 よろしくお願いいたします。

  • h8300-linux-elf-gccで指定可能な配列の大きさ

    AKI-H8/3069Fを使ってプログラムのC言語による組込ソフトの勉強をしています。そこで、教えていただきたいのですが、配列の大きさの上限値はいくつなのでしょうか? 例えば、unsigned int char a[1025];としてもコンパイル時にエラーが出なければ大丈夫なのでしょうか? 参考にしているのは、書籍『はじめる組込みLinux』です。そして、そのサポートサイトからダウンロードしたGCCコンパイラ(h8300-linux-elf-gcc)を使用しています。

  • H8マイコンによる組み込みプログラミング入門

    この分野の初心者です.マシン語,アセンブラ,CPUの仕組みは理解できていますが,CPUと周辺との入出力,デバッグ環境等はまったく自信なしです. H8マイコンを使って,組み込みプログラミングを学習したいと思います.秋月から出ている,AKI-H8~ が手頃なようですが,どれを購入したら良いのかよくわかりません.ゆくゆくは,自分で回路なんぞ組み立ててH8から制御してみたいのですが,現時点では,LCDへの表示やLEDの点灯等の簡単なものを行いたいのです.C言語はできるので,開発環境一式そろったものが良いのです. AKI-H8/3052F USB開発キット(フルセット) AKI-H8/3052F開発セット(H8マザーボードセット) AKI-H8/3048開発キット(即使えるキット) など,8000円台前後でいろいろあるようですが (1)組み立ては難しいですか? (2)パソコンと接続するのに,他に何か必要なのですか? (3) ROMに焼けるのですか?(何回も) (4)最初に述べた目的を達成するには,何を購入すれば良いですか.