はじめまして。真と申します。 AKI-H8/3048Fのリセット同期PWM(バッファ併用)を利用して 2個のラジコンサーボを制御するプログラムを作ってみたので すが、思いどうりの動作をしません。LEDやシリアル通信を 用いてデバックをしてみたところ、int_imia3割り込み処理後 にmain関数に戻れていない様に思うのですが、何が原因か皆目 検討がつきません。私が確認できた事は、割り込み処理は最後 まで実行され、割り込み回数をカウントする変数cntがインク リメントされている事、main関数の中で初期化したcnt値が割 り込み処理中のcnt値に反映されている事です。開発環境は、GCC Developer lite 1.5.0.18 (最適化なし、デファルトの設定ファイル)です。main関数に 戻れない原因や他の不具合点についてご回答いただければ幸い です。お手数をおかけしますが、どうか宜しくお願いします。 見にくいプログラムで申し訳ありませんが、以下に示します。 /*ラジコンサーボ制御プログラム(リセット同期PWMモード とバッファ機能を併用)*/ #include "3048.h" volatile unsigned int cnt; /*グローバル変数cntで割り込 み回数をカウント*/ /*****ITU3コンペアマッチA割込み処理ここから*****/ void int_imia3(void) { cnt++; ITU3.TSR.BYTE=0xF8; /*ITU3コンペアマッチAフラグを もどす*/ } /*****ITU3コンペアマッチA割込み処理ここまで*****/ /*****メイン処理ここから*****/ main(void) { EI; cnt=0; /*cntの初期化*/ P4.DDR=0x00; P4.PCR.BYTE=0xff; P5.DDR=0xff; P5.PCR.BYTE=0x00; while(P4.DR.BIT.B4==1); while(P4.DR.BIT.B4==0); P5.DR.BIT.B0=1; ITU.TSTR.BYTE=0xE8; /*ITU3カウント停止状態*/ ITU3.TCR.BYTE=0xa3; /*GRA3カウンタクリア要因に 設定*/ /*内部クロック:φ/8に設定*/ ITU.TFCR.BYTE=0xFF; /*ITU3をリセット同期PWMモ ードに設定*//*バッファ動作を設定*/ ITU3.TCNT=0x0000; /*ITU3カウンタクリア*/ ITU3.GRA=0x9c40; /*パルス周期の初期値*/ ITU4.GRA=0x0BB8; /*パルス幅の初期値*/ ITU3.GRB=0x0BB8; /*パルス幅の初期値*/ ITU4.GRB=0x0000; /*パルス幅の初期値*/ ITU3.BRA=0x9c40; /*パルス周期バッファの初期 値*/ ITU4.BRA=0x0BB8; /*パルス幅バッファの初期値*/ ITU3.BRB=0x0BB8; /*パルス幅バッファの初期値*/ ITU4.BRB=0x0000; /*パルス幅バッファの初期値*/ ITU3.TIER.BYTE=0xF9; /*ITU3コンペアマッチA割込 みを許可*/ ITU.TSTR.BIT.STR3=1; /*ITU3カウントアップ開始*/ /***無限ループここから***/ while(1) { if(cnt>=50) { cnt=0; ITU4.BRA=ITU4.BRA+0x0064; /*パルス幅バ ッファの更新値*/ ITU3.BRB=ITU3.BRB+0x0064; /*パルス幅バ ッファの更新値*/ } else { P5.DR.BIT.B1=1; } } /***無限ループここまで***/ } /*****メイン処理ここまで*****/ __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/