> for (i=0; i<8; i++) { > PBDR.BIT.B7 = 0; // 立ち下がり > PBDR.BIT.B7 = 1; // 立ち上がり > } H8ですと広いROMエリア、ネコの額程のRAMエリアで、ROM領域 の広さを勘案すれば、LOOPを利用する場合、シーケンスが複雑 でなければ意味を持たないのでは? この例では、動いている平 文で問題解決とするのが正解ですね。 プログラムを書くのが楽 だから、LOOPにしたいってんだったら、一寸問題ですね。 LOOP自身の誤動作に関しては、アセンブラーを吐き出すのが、最 初の一歩。 でなければ、逆アセンブラー の結果を見ましょう。 日立H8C、SHCでは、この件に関して、問題発生を経験していませ ん。 以下の93C46 書き込みは安定していますが、SH2では OP=0でコンパイルしないと、動かない事が有ります。 H8では 動きますけど。 #define ulong unsigned long #define vuchar volatile unsigned char // ************ I/O Address *************************************** #define CR_N (*(vuchar *)0xc00300) // Control Register #define MEM (*(vuchar *)0xc00301) // Intr Status short int write_93c46(short int ad,short int dt) { short int si; unsigned char uc,uc0; int i; CR_N=(unsigned char)0xc0; // Page 0,Program 93C46 MEM =(unsigned char)0x84; // CK MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x8c; // CS,CK,0 MEM =(unsigned char)0x8a; // CS, ,1 MEM =(unsigned char)0x8e; // CS,CK,1 MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x8c; // CS,CK,0 MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x8c; // CS,CK,0 for(i=0;i<6;i++) { MEM=(unsigned char)0x8a; // CS, ,1 MEM=(unsigned char)0x8e; // CS,CK,1 } MEM =(unsigned char)0x88; // CK, , MEM =(unsigned char)0x80; // , , MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x8c; // CS,CK,0 MEM =(unsigned char)0x8a; // CS, ,1 MEM =(unsigned char)0x8e; // CS,CK,1 MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x8c; // CS,CK,0 MEM =(unsigned char)0x8a; // CS, ,1 MEM =(unsigned char)0x8e; // CS,CK,1 for(i=0;i<6;i++) { if(0 !=(32 & ad)) { MEM=(unsigned char)0x8a; // CS, ,1 MEM=(unsigned char)0x8e; // CS,CK,1 } else { MEM=(unsigned char)0x88; // CS, ,0 MEM=(unsigned char)0x8c; // CS,CK,0 } ad=ad << 1; } for(i=0;i<16;i++) { if(0 !=(0x8000 & dt)) { MEM=(unsigned char)0x8a; // CS, ,1 MEM=(unsigned char)0x8e; // CS,CK,1 } else { MEM=(unsigned char)0x88; // CS, ,0 MEM=(unsigned char)0x8c; // CS,CK,0 } dt=dt << 1; } MEM =(unsigned char)0x88; // CS, ,0 MEM =(unsigned char)0x80; // , ,0 MEM =(unsigned char)0x88; // CS, ,0 for(i=0;i<8000;i++) { uc0=MEM; // Read Ready Status if(0 !=(uc0 & 1)) { MEM=(unsigned char)0x80; // , ,0 CR_N=(unsigned char)0; return(0); } } MEM=(unsigned char)0x80; // , ,0 CR_N=(unsigned char)0; return(-1); } 杉本 横浜市 緑区 東本郷 6-17-1-602 オンボード Tel: 045-473-7678 URL:www02.so-net.ne.jp/~ob_henry