> 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