H8マイコンについて質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
artile
記事: 10
登録日時: 12年前

H8マイコンについて質問です。

#1

投稿記事 by artile » 12年前

現在HEWを使いプログラムを書いているのですがどうしても1つだけ分からないところがあります。

今、H8マイコンで(ボードはwrc-003)赤外線センサを使いそれをAD変換して変換された数値により、H8マイコンボードに付いている2個のLEDを点灯と消灯させようとしているのですが、これらをキーボードから入力された信号をH8に読ませるキーボード割り込みをする為にどのように関数(?)、プログラムを書けばいいか分かりません。今このように書いていますがこれをキーボード入力により値を変化させたいです。

アドバイスよろしくお願いします。

コード:

#ifdef __cplusplus
extern "C" {
void abort(void);
#endif
void main(void);
#ifdef __cplusplus
}
#endif

/*インクルード***********************************************************/
#include<36064s.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "vs-wrc003.h"

/*マクロ***********************************************************/

/*グローバル変数***********************************************************/

/*メイン関数***********************************************************/
void main(void)
{
	//制御周期の設定[単位:Hz 範囲:30.0~]
	const BYTE MainCycle = 60;
	
	Init((BYTE)MainCycle);		//CPUの初期設定
		
	//ループ
	while(1){
		int data = AdRead(0);	//wrc-003のAN1(0番目の端子)のアナログ値を取得し代入
		if(data = 50 ){			//デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
			LED(0);	
		}						//両方消灯
		else{
			LED(1);				//2つのLEDが同時点灯(緑と橙)
		}
	}
}

#ifdef __cplusplus
void abort(void)
{
}
#endif

box
記事: 2002
登録日時: 14年前

Re: H8マイコンについて質問です。

#2

投稿記事 by box » 12年前

私はその分野のことはよくわかりませんが、
artile さんが書きました:

コード:

		if(data = 50 ){			//デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
このif文はどうも正しくないような気がします。
dataに50を代入したいのか、dataと50を比べたいのか、どちらなんでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#3

投稿記事 by artile » 12年前

box さんが書きました:私はその分野のことはよくわかりませんが、
artile さんが書きました:

コード:

		if(data = 50 ){			//デジタル変換後の値の範囲は0~1024 この値を自由にキーボードで変えたいです。
このif文はどうも正しくないような気がします。
dataに50を代入したいのか、dataと50を比べたいのか、どちらなんでしょうか。
すみません正しくは 

コード:

if(data < 50){
 です

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#4

投稿記事 by softya(ソフト屋) » 12年前

キーボードとH8の関係を教えて下さい。
パソコンとシリアル接続ですか? それとも別の方法ですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#5

投稿記事 by artile » 12年前

softya(ソフト屋) さんが書きました:キーボードとH8の関係を教えて下さい。
パソコンとシリアル接続ですか? それとも別の方法ですか?
はい、パソコンとはシリアル接続でつなげます。

マニュアルです
WRC-003テクニカルマニュアル

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#6

投稿記事 by softya(ソフト屋) » 12年前

ここが参考になると思います。
「Beauto ステップアップ講座4 対話形式パラメータ調整画面の作成: 山口自動機械 作業日誌」
http://kazeusagi2005.cocolog-nifty.com/ ... 921-1.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#7

投稿記事 by artile » 12年前

ありがとうございます。
これでもう少しやってみたいと思います。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#8

投稿記事 by artile » 12年前

ためしましたがダメでした。H8/36064に文字を入力する為にシリアル通信をしたいのですが出来ません。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#9

投稿記事 by softya(ソフト屋) » 12年前

ボーレートなどは一致していますか?
あと基本機能として「WRC-003テクニカルマニュアル」に書いている機能で通信できるみたいですが、それは出来ていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#10

投稿記事 by artile » 12年前

softya(ソフト屋) さんが書きました:ボーレートなどは一致していますか?
あと基本機能として「WRC-003テクニカルマニュアル」に書いている機能で通信できるみたいですが、それは出来ていますか?
ビットレートの事ですか?

実は大学の課題で明日までに提出なのです。課題の内容は温度計をマトリックスLEDでグラフ化し、その温度の上限の数値をキーボードの入力で設定し上限を超えたらブザーを鳴らすと言うものです。コピーされるのを恐れたので別のプログラムにして書きました。

コード:

#ifdef __cplusplus
extern "C" {
void abort(void);
#endif
void main(void);
#ifdef __cplusplus
}
#endif

/*インクルード***********************************************************/
// #include <sys/time.h>
#include<36064s.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include "vs-wrc003.h"


/*マクロ***********************************************************/

/*グローバル変数***********************************************************/




/*メイン関数***********************************************************/
void main(void)
{
//制御周期の設定[単位:Hz 範囲:30.0~]
const BYTE MainCycle = 60;
//	BYTE pitch = 16;
	int L0[8],L1[8],L2[8],L3[8],L4[8],L5[8],L6[8],L7[8];  //温度data
	int Max[8];
	int Timer1 = 1;  //スクロール間隔
	int Timer2 = 1000; //data更新時間 後で10000にする
	int ini=0;
	int count;
	Init((BYTE)MainCycle);		//CPUの初期設定

	while(1){					//メインループ
		int data = AdRead(0);	//センサの値を取得し,dataに代入  AN1=0,AN2=1,AN3=2
		if(ini< 1){
		L0[0] = 1;
		L0[1] = 1;
		L0[2] = 1;
		L0[3] = 1;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		
		L1[0] = 1;
		L1[1] = 1;
		L1[2] = 1;
		L1[3] = 1;
		L1[4] = 1;
		L1[5] = 1;
		L1[6] = 1;
		L1[7] = 1;
		
		L2[0] = 1;
		L2[1] = 1;
		L2[2] = 1;
		L2[3] = 1;
		L2[4] = 1;
		L2[5] = 1;
		L2[6] = 1;
		L2[7] = 1;
		
		L3[0] = 1;
		L3[1] = 1;
		L3[2] = 1;
		L3[3] = 1;
		L3[4] = 1;
		L3[5] = 1;
		L3[6] = 1;
		L3[7] = 1;
		
		L4[0] = 1;
		L4[1] = 1;
		L4[2] = 1;
		L4[3] = 1;
		L4[4] = 1;
		L4[5] = 1;
		L4[6] = 1;
		L4[7] = 1;
		
		L5[0] = 1;
		L5[1] = 1;
		L5[2] = 1;
		L5[3] = 1;
		L5[4] = 1;
		L5[5] = 1;
		L5[6] = 1;
		L5[7] = 1;
		
		L6[0] = 1;
		L6[1] = 1;
		L6[2] = 1;
		L6[3] = 1;
		L6[4] = 1;
		L6[5] = 1;
		L6[6] = 1;
		L6[7] = 1;
		
		L7[0] = 1;
		L7[1] = 1;
		L7[2] = 1;
		L7[3] = 1;
		L7[4] = 1;
		L7[5] = 1;
		L7[6] = 1;
		L7[7] = 1;
		
		ini++;
		}	
			
		L7[0] = L6[0];
		L7[1] = L6[1];
		L7[2] = L6[2];
		L7[3] = L6[3];
		L7[4] = L6[4];
		L7[5] = L6[5];
		L7[6] = L6[6];
		L7[7] = L6[7];
		
		L6[0] = L5[0];
		L6[1] = L5[1];
		L6[2] = L5[2];
		L6[3] = L5[3];
		L6[4] = L5[4];
		L6[5] = L5[5];
		L6[6] = L5[6];
		L6[7] = L5[7];
		
		L5[0] = L4[0];
		L5[1] = L4[1];
		L5[2] = L4[2];
		L5[3] = L4[3];
		L5[4] = L4[4];
		L5[5] = L4[5];
		L5[6] = L4[6];
		L5[7] = L4[7];
		
		L4[0] = L3[0];
		L4[1] = L3[1];
		L4[2] = L3[2];
		L4[3] = L3[3];
		L4[4] = L3[4];
		L4[5] = L3[5];
		L4[6] = L3[6];
		L4[7] = L3[7];
		
		L3[0] = L2[0];
		L3[1] = L2[1];
		L3[2] = L2[2];
		L3[3] = L2[3];
		L3[4] = L2[4];
		L3[5] = L2[5];
		L3[6] = L2[6];
		L3[7] = L2[7];
		
		L2[0] = L1[0];
		L2[1] = L1[1];
		L2[2] = L1[2];
		L2[3] = L1[3];
		L2[4] = L1[4];
		L2[5] = L1[5];
		L2[6] = L1[6];
		L2[7] = L1[7];
		
		L1[0] = L0[0];
		L1[1] = L0[1];
		L1[2] = L0[2];
		L1[3] = L0[3];
		L1[4] = L0[4];
		L1[5] = L0[5];
		L1[6] = L0[6];
		L1[7] = L0[7];
		
//		clock_t t = clock();				
//		while (clock() - t < Timer2){
		
		count=0;							//10秒毎のdata更新
		while(count<Timer2/Timer1/8){
		count++;	

//		0点灯 1消灯	
//		volatile unsigned int i;		
//		Sync();					//同期関数60Hz
		if(data < 180){			//0度以下 
		L0[0] = 1;
		L0[1] = 1;
		L0[2] = 1;
		L0[3] = 1;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}		
		
		else if(data <190){	//5度以上
		L0[0] = 0;
		L0[1] = 1;
		L0[2] = 1;
		L0[3] = 1;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 220){		//10度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 1;
		L0[3] = 1;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 230){	//15度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 1;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 240){		//20度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 0;
		L0[4] = 1;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 262){	//25度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 0;
		L0[4] = 0;
		L0[5] = 1;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 267){		//30度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 0;
		L0[4] = 0;
		L0[5] = 0;
		L0[6] = 1;
		L0[7] = 1;
		}
		
		else if(data < 272){	//35度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 0;
		L0[4] = 0;
		L0[5] = 0;
		L0[6] = 0;
		L0[7] = 1;
		}

		else{								//40度以上
		L0[0] = 0;
		L0[1] = 0;
		L0[2] = 0;
		L0[3] = 0;
		L0[4] = 0;
		L0[5] = 0;
		L0[6] = 0;
		L0[7] = 0;
		}

		//0入力,1出力
		IO.PDR7.BIT.B2 = 0;
		IO.PDR7.BIT.B1 = 0;
		IO.PDR7.BIT.B0 = 0;
		IO.PDR5.BIT.B0 = L0[0];
		IO.PDR5.BIT.B1 = L0[1];
		IO.PDR5.BIT.B2 = L0[2];
		IO.PDR5.BIT.B3 = L0[3];
		IO.PDR5.BIT.B4 = L0[4];
		IO.PDR5.BIT.B5 = L0[5];
		IO.PDR5.BIT.B6 = L0[6];
		IO.PDR5.BIT.B7 = L0[7];
		Wait(Timer1);

		IO.PDR7.BIT.B2 = 1;
		IO.PDR7.BIT.B1 = 0;
		IO.PDR7.BIT.B0 = 0;
		IO.PDR5.BIT.B0 = L1[0];
		IO.PDR5.BIT.B1 = L1[1];
		IO.PDR5.BIT.B2 = L1[2];
		IO.PDR5.BIT.B3 = L1[3];
		IO.PDR5.BIT.B4 = L1[4];
		IO.PDR5.BIT.B5 = L1[5];
		IO.PDR5.BIT.B6 = L1[6];
		IO.PDR5.BIT.B7 = L1[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 0;
		IO.PDR7.BIT.B1 = 1;
		IO.PDR7.BIT.B0 = 0;
		IO.PDR5.BIT.B0 = L2[0];
		IO.PDR5.BIT.B1 = L2[1];
		IO.PDR5.BIT.B2 = L2[2];
		IO.PDR5.BIT.B3 = L2[3];
		IO.PDR5.BIT.B4 = L2[4];
		IO.PDR5.BIT.B5 = L2[5];
		IO.PDR5.BIT.B6 = L2[6];
		IO.PDR5.BIT.B7 = L2[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 1;
		IO.PDR7.BIT.B1 = 1;
		IO.PDR7.BIT.B0 = 0;
		IO.PDR5.BIT.B0 = L3[0];
		IO.PDR5.BIT.B1 = L3[1];
		IO.PDR5.BIT.B2 = L3[2];
		IO.PDR5.BIT.B3 = L3[3];
		IO.PDR5.BIT.B4 = L3[4];
		IO.PDR5.BIT.B5 = L3[5];
		IO.PDR5.BIT.B6 = L3[6];
		IO.PDR5.BIT.B7 = L3[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 0;
		IO.PDR7.BIT.B1 = 0;
		IO.PDR7.BIT.B0 = 1;
		IO.PDR5.BIT.B0 = L4[0];
		IO.PDR5.BIT.B1 = L4[1];
		IO.PDR5.BIT.B2 = L4[2];
		IO.PDR5.BIT.B3 = L4[3];
		IO.PDR5.BIT.B4 = L4[4];
		IO.PDR5.BIT.B5 = L4[5];
		IO.PDR5.BIT.B6 = L4[6];
		IO.PDR5.BIT.B7 = L4[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 1;
		IO.PDR7.BIT.B1 = 0;
		IO.PDR7.BIT.B0 = 1;
		IO.PDR5.BIT.B0 = L5[0];
		IO.PDR5.BIT.B1 = L5[1];
		IO.PDR5.BIT.B2 = L5[2];
		IO.PDR5.BIT.B3 = L5[3];
		IO.PDR5.BIT.B4 = L5[4];
		IO.PDR5.BIT.B5 = L5[5];
		IO.PDR5.BIT.B6 = L5[6];
		IO.PDR5.BIT.B7 = L5[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 0;
		IO.PDR7.BIT.B1 = 1;
		IO.PDR7.BIT.B0 = 1;
		IO.PDR5.BIT.B0 = L6[0];
		IO.PDR5.BIT.B1 = L6[1];
		IO.PDR5.BIT.B2 = L6[2];
		IO.PDR5.BIT.B3 = L6[3];
		IO.PDR5.BIT.B4 = L6[4];
		IO.PDR5.BIT.B5 = L6[5];
		IO.PDR5.BIT.B6 = L6[6];
		IO.PDR5.BIT.B7 = L6[7];
		Wait(Timer1);
		
		IO.PDR7.BIT.B2 = 1;
		IO.PDR7.BIT.B1 = 1;
		IO.PDR7.BIT.B0 = 1;
		IO.PDR5.BIT.B0 = L7[0];
		IO.PDR5.BIT.B1 = L7[1];
		IO.PDR5.BIT.B2 = L7[2];
		IO.PDR5.BIT.B3 = L7[3];
		IO.PDR5.BIT.B4 = L7[4];
		IO.PDR5.BIT.B5 = L7[5];
		IO.PDR5.BIT.B6 = L7[6];
		IO.PDR5.BIT.B7 = L7[7];
		Wait(Timer1);
		
		}       // 10秒毎のdata更新ループ
		
	}
}

#ifdef __cplusplus
void abort(void)
{
	
}
#endif

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#11

投稿記事 by softya(ソフト屋) » 12年前

>ビットレートの事ですか?

それとは意味がちょっと違うんですけどね。
「ボーレートとは 「baudレート」 (baud rate, baudrate): - IT用語辞典バイナリ」
http://www.sophia-it.com/content/%E3%83 ... C%E3%83%88
データの転送レートがビットレートで スタートビット、ストップビット、パリティビット、データをあわせてのレートがボーレイトです。

ごめんなさい。今日はもう遅いので詳しい回答は無理そうです。
WRC-003は持っていませんので確認もできませんので、ご自分でできるだけ頑張ってみてください。
あと、通信処理が組み込まれていないようですが?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#12

投稿記事 by artile » 12年前

その通信処理の方法が分からないのです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#13

投稿記事 by softya(ソフト屋) » 12年前

参考サイトにあるinputDecInt()とかの関数は使えなかったのですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

artile
記事: 10
登録日時: 12年前

Re: H8マイコンについて質問です。

#14

投稿記事 by artile » 12年前

ありがとうございます、ですがもう出来そうにありません。
すみません、もう単位諦めました。ありがたいアドバイスありがとうございました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: H8マイコンについて質問です。

#15

投稿記事 by softya(ソフト屋) » 12年前

紹介したサイトの「4_config.c」のコードから必要な部分だけ抜き出すだけだったのですが、それが出来ないぐらいC言語が分からないと言うことでしょうか?
今後の課題で困らないと良いのですが。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る