小坂さんありがとうございました。 unsigned int timer は、C内で宣言されていますね. ITUを使った方法でLEDを点滅させようとしたのですが、 割り込みからも参照する変数をCで宣言すると動作しません。 アセンブラ上でメモリ確保し、 exportしておくと動作するのですが、 WDTをインターバルタイマとして、使うときとさほど変わらないと思うのですが グローバルなメモリ確保はC上からはできないのでようか? resetv2.mar ;STARTUP ROUTINE H8/300H ; .cpu 300ha:20 ;H8/300H advanced 1Mbyte MODE .import _main ;外部関数mainを定義 .import _intimia1 ;外部関数intimia1を定義 ; .export _cnt ;グローバル変数cntを定義 ; .export _mode ;グローバル変数modeを定義 ; .export _motor_time .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 ;変数用アドレス _cnt: .res.w 1 ;cnt変数のアドレスを確保 _mode: .res.w 1 ;mode変数のアドレスを確保 _motor_time: .res.w 1 .end Cソース include <3048f.h> #pragma interrupt(intimia1) /* exportだと動くが、C内でグローバル変数として宣言するとLEDは点滅しな い。 */ unsigned int cnt; /*グローバル変数 startup.marでもexport宣言*/ unsigned int mode; /*グローバル変数 startup.marでもexport宣言*/ unsigned int motor_time; /* メイン関数************************************************/ void main(void){ P1.DDR = 0xff; /* port1出力に設定 表示LED */ P2.DDR = 0x00; /* port2入力に設定 DIPSW */ P2.PCR.BYTE = 0xff; /* port2プルアップon */ P5.DDR = 0xff; /* port5出力に設定 表示LED */ P5.PCR.BYTE = 0x00; /* port5プルアップoff */ ITU1.TCR.BYTE = 0x23; /* GRAコンペアマッチ clock 1/8 */ ITU1.GRA = 0xffff; /* GRAを4e20に設定 約10ms*/ motor_time = 100; ITU1.TIER.BYTE = 0xF9; /* ITU1のGRAによるコンペアマッチ割込みを許可*/ ITU.TSTR.BIT.STR1 = 0; /* カウント停止状態 */ ITU.TSTR.BIT.STR1 = 1; /* ITU1 TCNTカウント開始 */ cnt = 0; /* 割込み発生の回数を0にセット */ mode =1; /* 2bitLEDの表示のさせ方を1にセット */ while(1){ P1.DR.BYTE = P2.DR.BYTE; /* DIPSWを8bitLEDに表示 */ } } /*割り込み処理*********************************************/ void intimia1(void){ cnt++; /* cntの数を1つ増やす */ cnt = 0; /*カウンタを0に戻す*/ switch(mode){ case 1:mode = 0x02; /*表示が01なら10にする*/ break; case 2:mode = 0x01; /*表示が10なら01にする*/ break; default:mode = 0x01;/*それ以外なら01にする*/ } P5.DR.BYTE = mode; /*2bitLEDを変化させる*/ ITU1.TSR.BIT.IMFA = 0; /* 割込み検知フラグを戻して再開 */ ITU1.GRA -= 0x500; }