電子書籍の厳選無料作品が豊富!

H8/3052Fとポテンショメータ(通信ケーブルはRS232-C)を利用して得られるA/DデータをPCに表示させようとしています。

SCIとPCに最初から入っているハイパーターミナルを利用してA/Dデータを得たいのですが上手く行きません。

参考にしている資料のサンプルプログラム(文字をPCに返す)が上手く行ったのでそれと、A/Dデータ変換プログラムを組み合わせて行いました。

ですが、結果として文字列が表示されるものの数値データが帰ってきませんでした。
組みなおしましたが、出てくるのは文字(プログラム変更で無限に出る場合あり)と無限スペース(改行?)で進展しません。

考えとしては、文字データを返すプログラム文とは別に数値データを返すプログラム文にしないといけないのかな?と、思って調べたのですがこの考えを裏づけるものはありませんでした。(着目点が違うのかもしれませんが・・・)

A 回答 (1件)

それほど長くないのであれば、ソースコード(全部)見せていただけますか?

この回答への補足

int add,add1;
char tmp[20] ;

void ioinit( void ) ;

void int_imia0( void ) ;

void ituinit() ;

void setGRA( double deg ) ;

void adinit(void)
{
AD.ADCSR.BIT.ADF = 0;
AD.ADCSR.BIT.ADIE = 0;
AD.ADCSR.BIT.ADST = 0;
AD.ADCSR.BIT.SCAN = 1;
AD.ADCSR.BIT.CKS = 1;
AD.ADCSR.BIT.CH = 1;
}

typedef enum {
BR2400 = 80,
BR4800 = 162,
BR9600 = 80,
BR19200 = 40,
BR38400 = 19,
BR57600 = 13,
BR115200 = 5,
} BaudRate;

void initSCI1 (BaudRate b)
{
int i;
SCI1.SCR.BYTE = SCI1.SMR.BYTE = 0;
SCI1.BRR = b;
for (i = 0; i < 3000; i++) ;
SCI1.SCR.BYTE = 0x30;
SCI1.SSR.BYTE;
SCI1.SSR.BYTE = 0x80;
}

void SCI1_OUT_d (char c)
{
while (SCI1.SSR.BIT.TDRE == 0) ;
SCI1.TDR = c;
SCI1.SSR.BIT.TDRE = 0;
}

void SCI1_OUT_s (char *st)
{
while (*st) SCI1_OUT_d(*st++);
}

char SCI1_IN_d (void)
{
char c;
while (!(SCI1.SSR.BYTE & 0x78)) ;
if (SCI1.SSR.BIT.RDRF == 1) {
c = SCI1.RDR;
SCI1.SSR.BIT.RDRF = 0;
}
else {
SCI1.SSR.BYTE &= 0x80;
c = 0;
}
return c;
}

int cnt ;

double T = 2.0 ;

double A = 30.0 ;

int main(void)
{
unsigned char rd = 0;

int i;
adinit();

ioinit();

ituinit();

initSCI1(BR19200);


while( P4.DR.BIT.B4 ) ;
//while(1)
SCI1_OUT_s("WELCOME!!") ;
cnt = 0 ;

ITU.TSTR.BIT.STR0 = 1;

EI;

while(1){


AD.ADCSR.BIT.ADST = 1;
while(AD.ADCSR.BIT.ADF == 0);

add = AD.ADDRA >> 6;
add1 = AD.ADDRB >> 6;
AD.ADCSR.BIT.ADF = 0;

add = (int)((add *(5.0/1024.0)*1000.0)+0.5);
add1 = (int)((add1*(5.0/1024.0)*1000.0)+0.5);
//sprintf(tmp,"%d",add) ;
//SCI1_OUT_s(tmp) ;
P5.DR.BIT.B0 = 1 ;

}
}

void int_imia0 (void)
{
ITU0.TSR.BIT.IMFA = 0;

++cnt ;
double w ;

w = -A * (2.0*PI/T) * cos( (2.0*PI/T) * (double)(cnt)/500.0 ) ;

setGRA( w ) ;

P5.DR.BIT.B1 = 0 ;
if( abs(w) < 8.58 )
P5.DR.BIT.B1 = 1 ;
sprintf( tmp, "%d", add ) ;
SCI1_OUT_s( "A/D1 : " ) ;
SCI1_OUT_s( tmp ) ;
}

void ioinit(void)
{
PB.DDR = 0xff;

P4.DDR = 0x00 ;
P4.PCR.BYTE = 0xff ;

P5.DDR = 0xff ;
P5.DR.BIT.B0 = 0 ;
P5.DR.BIT.B1 = 0 ;
}

void ituinit()
{
ITU0.TCR.BYTE = 0x22;
ITU0.GRA = 12499;
ITU0.TIER.BIT.IMIEA = 1;

ITU0.TSR.BIT.IMFA = 0;

ITU3.TCR.BYTE = 0x22;
ITU4.TCR.BYTE = 0x22;

ITU.TMDR.BIT.PWM3 = 1;
ITU.TMDR.BIT.PWM4 = 1;

ITU3.GRB = 62;
ITU4.GRB = 62;

}

void setGRA(double deg)
{

if( abs( deg ) < 8.58){

deg = 0 ;

}else if( abs( deg ) > 4537 ){

if( deg < 0 ){
deg=-4537 ;
}else{
deg=4537 ;
}

}

if( deg == 0 ){

ITU.TSTR.BIT.STR3 = 0 ;
ITU.TSTR.BIT.STR4 = 0 ;

}else if(deg>0){

ITU.TSTR.BIT.STR3 = 1 ;
ITU.TSTR.BIT.STR4 = 0 ;
ITU3.GRA = (180000.0*25.0/(8.0*deg))-1.0;

}
else{

deg *= -1 ;
ITU.TSTR.BIT.STR3 = 0 ;
ITU.TSTR.BIT.STR4 = 1 ;
ITU4.GRA = (180000.0*25.0/(8.0*deg))-1.0;

}
}
以上です。コメントされているところを有効にしたりすると、無限改行?になったりします。
よろしくお願いします。

補足日時:2008/11/02 11:36
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報