LoginSignup
0
0

今さらのH8マイコンプログラミング

Last updated at Posted at 2023-02-21

 初投稿です。何か問題や参考になる事があれば教えてください。お願いします。

永くArm、Arduinoで遊んでいたが、突然H8マイコンを動かしてみようと思い立った。早速、秋月からH8/3664Fボードや開発キットを購入し動かしてみた。ところが取説通りにしてみても書き込みに一苦労、やっと出来たと思ったら Sample が説明書通りに動かない:cold_sweat::interrobang:これゴミになるかも💦(-_-;)?
 古い本、ネットの情報も少なかったけれどやっと何とか一つまとまった物ができたので、私のような物好きな初心者のお役に立てればと上げてみた。


 シリアル通信で0~255までの数を送り、それの2進数(bit)に対応したLEDを点灯させるもの。
H8_3664_1.JPG
KIMG0379_1.JPG

 RenesasのHEW7.0.0でプログラム。SCI3とPORT8(大電流可)を使用している。SCIの扱いに苦労した。Sample通りではターミナルソフトから入力した文字が2回戻されて来るので修正。数字の入力も1桁ではなく255までにしたくて工夫してみた。

#include "iodefine.h"

void sci_init(void);
void putch(unsigned char ch);
void crlf(void);

void sci_init(void){			/* SCI3 Initialization */
	short i;
	IO.PMR1.BIT.TXD = 1;		/* Change P22 to TXD */
	SCI3.SCR3.BYTE 	= 0;		/* clear all flags	*/
	SCI3.SMR.BYTE	= 0;		/* シリアルポートの初期値 */
	SCI3.BRR 		= 25;		/* 19200baud (CPU=16MHz) */
	SCI3.SCR3.BYTE 	= 0x30;		/* Enable SCR3=0011 0000 (TE=1,RE=1) */
	
	for (i = 0; i < 256; i++);	/* Wait Time */
	
	SCI3.SSR.BYTE;				/* Dummy Read */
	SCI3.SSR.BYTE 	= 0x80;		/* Clear Error Flag (TDRE=1) */		
}

void crlf(void){	/* 改行 */
	putch('\r');
	putch('\n');
}

void putch(unsigned char c){	/* char送信 */
	int i;
	while(SCI3.SSR.BIT.TDRE != 1);	/* SCI3.SSR.BIT.TDRE=0 で未送信データあり
													 	 1 になるまで待つ     */
	SCI3.TDR = c;				/* これだけで送信 */
	for (i = 0; i < 256; i++); 	/* Wait Time */ 
}

void main(void){
	int i;
	unsigned char ch;
	
	/* Port8 Initialization */
    IO.PCR8      = 0xff;        /* Port-Cntrol ; Set P8x for Output Pin */
    IO.PDR8.BYTE = 0x00;        /* Port-Data   ; Output 0 to P8x */
	
	sci_init();

	crlf();
    putch('*');		/* 通信が正常なら表示される */
	crlf();
	crlf();

	while(1){
		i=0;	/* Port8 に代入する10進数 */
		do{
			SCI3.SSR.BIT.FER = 0;			/* Clear Error Flag */
			while(SCI3.SSR.BIT.RDRF != 1);	/* 受信完了待ち */
			ch = SCI3.RDR;
			if( (ch>47) && (ch<58) ){ 
				putch(ch);				/* 受信1数字送信 */
				i = i*10 + (ch-48) ;	/* 2桁以上作成 */
			}
		}while( (ch>47) && (ch<58) );	/* 0~9 なら繰り返す */
        crlf();				/* 0~9 以外なので確定で改行 */
        IO.PDR8.BYTE = i;	/* 10進数に対応する2進数をLED表示 */
	}	/* 繰り返す */
}

 その他にもいろいろ苦労したこと.
1.マイコン書き込み時にはCPUボード上の赤いジャンパーピンをセットしブートモード。それは良いのだが、HTERMでの書き込みがTimeout Error でなかなかできない。やっとそれらしい解決法を見つけた。
 「TERA2のPowerSWをONにするとほぼ同時(0.1秒後?)にPCのリターンキーを押す」

2.いざ赤いジャンパーピンを外し動かそうとするのだが、直ぐには上手く通信を始めてくれない。タクトスイッチを押したりパワースイッチを入れ直したり。

 ArmやArduinoに慣れきって、したことのないビット操作もやってみた、マイコンのマニュアルも日本語で読めるし。それにArduinoだとloop内で、シリアル通信中の1文字待ちしかできなかったかな?
 このやんちゃ坊主のようなマイコンも孫のようでまた楽しい、69歳のじっちゃんでした。
 
 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0