先ほどの質問について丁寧なご回答をありがとうございます。 少しではありますが、CCRについて理解できました。メイン関 数内では割り込み処理は出来ないというご指摘をいろいろな方 々から受け、改めてプログラムを作り直しました。 #include <3048f.h> #pragma interrupt(intimia1) extern unsigned int cnt0; /* 信号 のHighの時間を記憶 */ void main(void) { cnt0 = 0; /* cnt0 初期化 */ PA.DDR = 0x00; /* Port-A は入力設定 */ PB.DDR = 0xff; /* Port-B は出力設定 */ ITU.TSTR.BYTE = 0x00; /* ひとまず全タイマー停止 */ ITU.TSNC.BYTE = 0x00; /* 全タイマーは独立動作 */ ITU.TMDR.BYTE = 0x00; /* ITUはすべて通常動作 */ ITU.TFCR.BYTE = 0x00; /* ITU3,4およびGRA3,4,GRB3,4 は通常動作 */ ITU.TOER.BYTE = 0x00; /* ITU3,4による端子出力は 禁止 */ ITU.TOCR.BYTE = 0xff; /* 外部トリガ禁止 */ ITU1.TCR.BYTE = 0x83; /* クロックの1/8で動作。TCNT のクリア禁止 */ ITU1.TIOR.BYTE = 0xdf; /* 両エッジでGRAへインフ ゜ットキャプチャ */ ITU1.TIER.BYTE = 0x03; /* IMFA,IMFBによる割り込 み許可 OVIE禁止 */ ITU1.TSR.BYTE = 0x00; /* 全割り込みフラグクリア */ ITU1.TCNT = 0x00; /* カウントクリア */ ITU1.GRA = 0; /* GRA初期値設定 */ ITU.TSTR.BIT.STR1 = 1; /* ITU1スタート */ while(1){ PB.DR.BYTE =PA.DR.BYTE; } } void intimia1(void){ if(PA.DR.BIT.B2){ /* 立ち上がりエッジの場合 */ ITU1.TCNT = 0x00; } /* カウントをクリア */ else{ /* 立ち下がりエッジの場合 */ cnt0 = ITU1.GRA; /* 値をcnt0 に記憶 */ } ITU1.TSR.BIT.IMFA = 0; /* 割り込みフラグ解除 */ } ところでCCRの設定についてなのですが、次のスタートアップ ルーチンの、init:の2行目のldc #0,ccr ;CLEAR INTERRUPT MASK,NOT USE UI BIT は、「CCRに割り込み許可を与えている」という意味でいい のでしょうか?そう僕は解釈しているのですが...。そのた め上のメインプログラムには記述しませんでしたが、やはり記 述すべきでしょうか? ;STARTUP ROUTINE H8/300H ; .cpu 300ha:20 ;H8/300H advanced 1Mbyte MODE .import _main ;外部関数mainを定義 .import _intimia1 ;外部関数intimia1を定義 .export _cnt0 ;グローバル変数cnt0を定義 ; .section vect,data,locate=h'00000 ;割込みベクトルの頭 ; ;割り込みベクトルテーブル .data.l init ;1 reset vectのジャンプ先 ; .org h'0070 ;ITU1 GRAによる割込みテーブル位置 .data.l _intimia1 ;ITU1 GRAによる割込み処理先 ; .org h'00100 ;主プログラムの開始 init: mov.l #h'fff10,er7 ;SPの設定 ldc #0,ccr ;CLEAR INTERRUPT MASK,NOT USE UI BIT jmp @_main ;関数mainへのジャンプ .section D,DATA,locate=h'ffd00 ;変数用アドレス _cnt0: .res.w 1 ;cnt0変数のアドレスを確保 ; .end またまた長い文になりましたが、どうぞご説明をお願いします 。 __________________________________________________ Do You Yahoo!? Yahoo! BB is Broadband by Yahoo! http://bb.yahoo.co.jp/