課題プログラム例

mp1ex02.txt

#include <3048fone.h>
#include "h8_3048fone.h"
int count0nes(short int value)
{
short int mask=1;
int i,count=0;
for(i=0;i<16;i++){
if(value&mask) count++;
mask=mask<<1;
}
return count;
}

main()
{
short int x;
int count=0;
initSCI1(); /*シリアル通信ユニット SCI-ch1の初期化*/
SCI1_printf("Hello. How are you?\n"); /*printfと同様*/
while (1) {
x=SCI1_getInt("the first number = ");
SCI1_printf("%d\n",count0nes(x));

}
}

mp2ex01.txt

void waitmsec(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
/* P5の下位2ビットを出力に設定 */
/* P5の入出力設定部の下位2ビットに1を与えるとこの設定になる*/
*(unsigned char *)0xfffc8 = 0x3; /*0x3 は 00000011(二進法表記)*/

while(1) {/*これは無限ループ*/
/*P5の下位2ビットに01(二進法表記)を出力する*/
*(unsigned char *)0xfffca = 0x01; /*0x01 は 00000001(二進法表記)*/

waitmsec(1000);/*1000msecの間なにもしない*/

/*P5の下位2ビットに10(二進法表記)を出力する*/
*(unsigned char *)0xfffca = 0x02; /*0x02 は 00000010(二進法表記)*/

waitmsec(1000);
}
}

mp2ex01.txt

void waitmsec(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
/* P5の下位2ビットを出力に設定 */
/* P5の入出力設定部の下位2ビットに1を与えるとこの設定になる*/
*(unsigned char *)0xfffc8 = 0x3; /*0x3 は 00000011(二進法表記)*/

while(1) {/*これは無限ループ*/
/*P5の下位2ビットに01(二進法表記)を出力する*/
*(unsigned char *)0xfffca = 0x01; /*0x01 は 00000001(二進法表記)*/

waitmsec(1000);/*1000msecの間なにもしない*/

/*P5の下位2ビットに10(二進法表記)を出力する*/
*(unsigned char *)0xfffca = 0x02; /*0x02 は 00000010(二進法表記)*/

waitmsec(1000);
}
}

mp3ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++);
}
}

main()
{
initLed();
while(1) {
turnOnLed(0); /*LED0のON*/
turnOnLed(1); /*LED1のON*/
waitmsec(500);
turnOffLed(0); /*LED0のOFF*/
turnOffLed(1); /*LED1のOFF*/
waitmsec(500);
}
}

mp3ex02.txt

#include <3048fone.h>

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

int main()
{
P5.DDR = 0x0f;
while(1) {
P5.DR.BYTE = 0x01;
waitmsec(250);
P5.DR.BYTE = 0x02;
waitmsec(250);
}
return 0;
}

mp3ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
initLed();
while(1) {

turnOffLed(0); /*LED0のOFF*/
turnOnLed(1); /*LED1のON*/
waitmsec(500);
turnOffLed(1); /*LED1のOFF*/
waitmsec(500);
turnOnLed(1); /*LED1のON*/
waitmsec(500);
turnOffLed(1); /*LED1のOFF*/
waitmsec(500);

turnOnLed(0); /*LED0のON*/
waitmsec(500);
turnOffLed(0); /*LED0のOFF*/
waitmsec(500);
turnOnLed(0); /*LED0のON*/
waitmsec(500);
turnOffLed(0); /*LED0のOFF*/
waitmsec(500);

turnOnLed(1); /*LED1のOFF*/
waitmsec(500);
turnOffLed(1); /*LED1のOFF*/
waitmsec(500);

turnOnLed(0); /*LED0のON*/
waitmsec(500);
turnOffLed(0); /*LED0のOFF*/
waitmsec(500);

}
}

mp3ex04.txt


#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
initLed();
while(1) {
turnOnLed(0); /*LED0のON*/
turnOnLed(1); /*LED1のOFF*/
waitmsec(5000);
turnOffLed(0); /*LED0のOFF*/
turnOffLed(1); /*LED1のON*/
waitmsec(5000);
}
}

mp3ex05.txt

#include <3048fone.h>

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

/* ------------------------------------------------- */
/* LED INITIALIZATION */
/* ------------------------------------------------- */
/**********************************************************
LED 0:P5-0
LED 1:P5-1
LED 2:P5-2
LED 3:P5-3
下位4ビットを出力にする
**********************************************************/
void initLed()
{
P5.DDR = 0xf;
}

/* ------------------------------------------------- */
/* LET LED ON */
/* ------------------------------------------------- */
/*numberは0または1*/
void turnOnLed(short int number)
{
static const unsigned char mask[]={1,2,4,8};
P5.DR.BYTE |= mask[number];
}

/* ------------------------------------------------- */
/* LET LED OFF */
/* ------------------------------------------------- */
/*numberは0または1*/
void turnOffLed(short int number)
{
static const unsigned char mask[]={0xfe,0xfd,0xfb,0xf7};
P5.DR.BYTE &= mask[number];
}


main()
{
initLed();
while(1) {
turnOnLed(0); /*LED0のON*/
turnOffLed(1); /*LED1のOFF*/
waitmsec(1000);
turnOffLed(0); /*LED0のOFF*/
turnOnLed(1); /*LED1のON*/
waitmsec(1000);
}
}

mp3ex06.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

void initLed_P1()
{
P1.DDR = 0xf;
}

void turnOnLed_P1(short int number)
{
static const unsigned char mask[]={1,2,4,8};
P1.DR.BYTE |= mask[number];
}

void turnOffLed_P1(short int number)
{
static const unsigned char mask[]={0xfe,0xfd,0xfb,0xf7};
P1.DR.BYTE &= mask[number];
}
main()
{
initLed_P1();
while(1) {
turnOnLed_P1(0); /*LED0のON*/
turnOffLed_P1(3); /*LED3のOFF*/
waitmsec(2000);
turnOnLed_P1(1); /*LED1のON*/
turnOffLed_P1(0); /*LED0のOFF*/
waitmsec(2000);
turnOnLed_P1(2); /*LED2のON*/
turnOffLed_P1(1); /*LED1のOFF*/
waitmsec(2000);
turnOnLed_P1(3); /*LED3のON*/
turnOffLed_P1(2); /*LED2のOFF*/
waitmsec(2000);
}
}

mp3ex07.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void wait_m4sec(int m4sec)
{
int i,j;
for (i=0;i<m4sec;i++){
for (j=0;j<419;j++);
}
}

int main()
{
int i,t=2;
initLed();
turnOnLed(0);
while(1){
for (i=0;i<400;i++){
turnOnLed(1);
wait_m4sec(t);
turnOffLed(1);
wait_m4sec(100-t);
}
(t == 64) ? (t = 2) : (t *= 2);
}
return 0;
}

mp3ex08.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void wait_m4sec(int m4_sec)
/*10^-4secで指示する間なにもしない時間稼ぎ関数*/
/*wait_m4sec(15) : 1.5msec後にこの関数から戻る*/
{
int i,j;
for (i=0;i<m4_sec;i++) {
for (j=0;j<419;j++); /*419の根拠を考えてみよう*/
}
}

main()
{
int i,pmw=280;
initLed(); /*LED初期化*/
turnOnLed(0); /*LED0のON*/
while(1) {
turnOnLed(1); /*LED1のON*/
wait_m4sec(pmw/2);
turnOffLed(1); /*LED1のOFF*/
wait_m4sec(pmw/2);
}
}

mp4ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
initLed();
P2.DDR=0;
P2.PCR.BYTE=0xff;
while(1) {
if (P2.DR.BIT.B1==0) { /*8bitSWの1がONの時*/
turnOnLed(0);
turnOnLed(1);
waitmsec(250);
turnOffLed(0);
turnOffLed(1);
waitmsec(250);
} else {
turnOnLed(0);
turnOnLed(1);
waitmsec(500);
turnOffLed(0);
turnOffLed(1);
waitmsec(500);

}
}
}

mp4ex02.txt


#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i, j;
for (i = 0; i < msec; i++) {
for (j = 0; j < 4190; j++);
}
}

main()
{
int t;
initLed();
init8BitSW();

while (1) {
if (check8BitSW(0)) {
t = 250;
} else if (check8BitSW(1)) {
t = 500;
} else if (check8BitSW(2)) {
t = 1000;
} else {
continue;
}

turnOnLed(0);
turnOnLed(1);
waitmsec(t);
turnOffLed(0);
turnOffLed(1);
waitmsec(t);
}
}

mp4ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
int wait;
int state = 0;
void(*turnLed[])(short int) = {turnOffLed,turnOnLed};

initLed();
P2.DDR=0;
P2.PCR.BYTE=0xff;
while(1) {
if (P2.DR.BIT.B0==0) { /*8bitSWの0がONの時*/
wait = 250;
} else if(P2.DR.BIT.B1==0){ /*8bitSWの1がONの時*/
wait = 500;
} else if(P2.DR.BIT.B2==0){ /*8bitSWの2がONの時*/
wait = 1000;
}
else
{
turnOffLed(0);
turnOffLed(1);
continue ;
}
turnLed[state^=1](0);
turnLed[state](1);

waitmsec(wait);
}
}

mp4ex04.txt

#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
unsigned char sw1,sw2;
initLed();
initSCI1();
init8BitSW();/*8bitSWの初期化*/
while(1) {
sw1=P2.DR.BYTE;
sw2=get8BitSW();
SCI1_printf("P2.DR.BYTE=%08b get8BitSW()=%08b\n",sw1,sw2);
}
}

mp4ex05.txt

ポート5の例
bit PIN番号 0 CN3-31 1 CN3-32 2 CN3-33 3 CN3-34
mp5ex01.txt


#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
unsigned char sw1,sw2;
initLed();
initSCI1();
initPushSW();
while(1) {
sw1=P4.DR.BYTE;
sw2=getPushSW();
SCI1_printf("P4.DR.BYTE=%08b getPushSW()=%08b\n",sw1,sw2);
}
}

mp5ex02.txt

include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

main()
{
initLed();
initPushSW();
while(1) {
if (getPushSW() == 1) { /*PushSWの0がONの時*/
turnOnLed(0);
turnOnLed(1);
waitmsec(500);
turnOffLed(0);
turnOffLed(1);
waitmsec(500);
} else if (getPushSW() == 2) { /*PushSWの1がONの時*/
turnOnLed(0);
turnOnLed(1);
waitmsec(1000);
turnOffLed(0);
turnOffLed(1);
waitmsec(1000);
} else if (getPushSW() == 4) { /*PushSWの2がONの時*/
turnOnLed(0);
turnOnLed(1);
waitmsec(2000);
turnOffLed(0);
turnOffLed(1);
waitmsec(2000);
} else {
turnOffLed(0);
turnOffLed(1);
}
}
}

mp5ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void waitmsec(int msec)
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<4190;j++); /*4190は実測によって求めた値 25MHz駆動*/
}
}

void ToggleLed(short int ch)
{
static const unsigned char mask[]={1,2,4,8};
P5.DR.BYTE ^= mask[ch&3];
}

void pushreleaseSW(void)
/*プッシュスイッチが押されるまで待って,*/
/*その後離されるまで待つ関数      */
{
while (checkPushSW(0)==0);
while (checkPushSW(0)==1);
}


main()
{
initLed();
initPushSW();

while(1) {
pushreleaseSW();
ToggleLed(0);
}
}

mp6ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
initLed();
initTimer1Int(10000); /*時間割り込み10000μsec=10msec ITUch1使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタートch1*/
while(1); /*なにもしないループ*/
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;//これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick=0;
static int count=0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
count++;
if (count==50) {
count=0;
if (tick==1) {
turnOnLed(0);
turnOffLed(1);
} else {
turnOffLed(0);
turnOnLed(1);
}
tick=1-tick;
}
}

mp6ex02.txt

#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
initLed();
initTimer1Int(1000); /*時間割り込み10000μsec=10msec ITUch1使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタートch1*/
while(1); /*なにもしないループ*/
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick=0;
static int count=0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
count++;
if (count==500) {
count=0;
if (tick==1) {
turnOnLed(0);
turnOffLed(1);
} else {
turnOffLed(0);
turnOnLed(1);
}
tick=1-tick;
}
}


mp6ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

volatile int led0,led1;
const int period=10; /*周期10msec*/
const int low=1;
const int mid2=2;
const int mid5=5;

main()
{
initLed();
initPushSW();
led0=led1=0;
initTimer1Int(1000); /*タイマ割り込み1msec */
/*単位はμsec ITUch1のみ使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタート*/
while(1){
if(checkPushSW(0)==0&&checkPushSW(1)==0&&checkPushSW(2)==0&&checkPushSW(3)==0){
led0=low;
led1=low;
}else if(checkPushSW(0)==0&&checkPushSW(1)==0){
led0=0;
if(checkPushSW(2)==1&&checkPushSW(3)==1){
led1=period;
}else if(checkPushSW(2)==1){
led1=mid2;
}else{
led1=mid5;
}
}else if(checkPushSW(2)==0&&checkPushSW(3)==0){
led1=0;
if(checkPushSW(0)==1&&checkPushSW(1)==1){
led0=period;
}else if(checkPushSW(0)==1){
led0=mid2;
}else{
led0=mid5;
}
}else{
led0=0;
led1=0;
}
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick=0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
if (tick<led0) {
turnOnLed(0);
} else {
turnOffLed(0);
}
if (tick<led1) {
turnOnLed(1);
} else {
turnOffLed(1);
}
tick++;
if (tick==period) tick=0;
}

mp7ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

void func1(void)
{
unsigned char sw,previous;
SCI1_printf("Printing 8-bitSW status...\n");
SCI1_printf("Change 8-bitSW and new status will appear.\n");
SCI1_printf("If any key on the keyboard, this test will quit.\n");
previous=sw=get8BitSW();
SCI1_printf("8-bitSW status= %2x[%08b]\n",sw,sw);
do {
sw=get8BitSW();
if (sw!=previous) {
SCI1_printf("8-bitSW status= %2x[%08b]\n",sw,sw);
previous=sw;
}
} while (SCI1_chkgetChar()<0);
}

void func2(void)
{
unsigned char sw,previous;
SCI1_printf("Printing PushSW status...\n");
SCI1_printf("Change PushSW and new status will appear.\n");
SCI1_printf("If any key on the keyboard, this test will quit.\n");
previous=sw=getPushSW();
SCI1_printf("PushSW status= %2x[%08b]\n",sw,sw);
do {
sw=getPushSW();
if (sw!=previous) {
SCI1_printf("PushSW status= %2x[%08b]\n",sw,sw);
previous=sw;
}
} while (SCI1_chkgetChar()<0);
}

void func3(void)
{
short int x;
long int y;
x=SCI1_getInt("Key in a decimal number >>>");
SCI1_printf("The number you keyed in is %d %x\n",x,x);
x=SCI1_getInt("Key in a hexdecimal number (ex. 0x23ff) >>>");
SCI1_printf("The number you keyed in is %d %x\n",x,x);
y=SCI1_getInt4("Key in a decimal big number (ex. 12345678)>>>");
SCI1_printf("The number you keyed in is %ld %lx\n",y,y);
y=SCI1_getInt4("Key in a hexdecimal big number (ex. 0x23ff0000) >>>");
SCI1_printf("The number you keyed in is %ld %lx\n",y,y);
}

main()
{
int menu;
initSCI1(); /*SCI-ch1の初期化*/
initPushSW(); /*押しボタンスイッチの初期化*/
init8BitSW(); /*8ビットスイッチの初期化*/
SCI1_printf("Hello. How are you?\n");
while (1) {
SCI1_printf("***************menu**********\n");
SCI1_printf("1: get 8-bit SW and print \n");
SCI1_printf("2: get Push SW and print \n");
SCI1_printf("3: get integer from SCI1 and print \n");
do {
menu=SCI1_getChar(); /*menuには'1','2','3'が入るはず*/
} while (menu<'1'||'3'<menu);
SCI1_printf("\n");
switch (menu) {
case '1':
func1();
break;
case '2':
func2();
break;
case '3':
func3();
break;
default:
break;
}
}
}

mp7ex02.txt

#include <3048fone.h>
#include "h8_3048fone.h"

int sw0=0,sw1=0,sw2=0,sw3=0,r=0;


main()
{
int menu;
initSCI1();
initPushSW();
initTimer1Int(1000);
E_INT();
startTimer1();
while (1) {
if(request==1){
SCI1_printf("sw0:%d,sw1:%d,sw2:%d,sw3:%d \n",sw0,sw1,sw2,sw3);
request=0;
}
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
int sw;
static int status=0;
const int Nantichatter=10;
static int statuscnt=0;
clearTimer1Flag();
sw=getPushSW();
if (status==0) {
if ((sw&1)==1) {
status=1;
sw0++;
request=1;
}
if ((sw&2)==2) {
status=1;
sw1++;
request=1;
}
if ((sw&4)==4) {
status=1;
sw2++;
request=1;
}
if ((sw&8)==8) {
status=1;
sw3++;
request=1;
}
} else { /*status==1*/
if ((sw&1)==1 || (sw&2)==2 || (sw&4)==4 || (sw&8)==8) {
statuscnt=0;
} else {
statuscnt++;
if (Nantichatter<statuscnt) {
status=0;
}
}
}
}


mp7ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
int i,j;
long int ptr=0;
initSCI1(); /*SCI-ch1の初期化*/

SCI1_printf("memory dump 0x00000-0x001ff\n");
SCI1_printf(" +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F\n");
for(i=0;i<32;i++) {
SCI1_printf("%05lx",ptr);
for(j=0;j<16;j++) {
SCI1_printf(" %02x",*(unsigned char *)ptr);
ptr++;
}
SCI1_printf("\n");
}
}

/*実行結果*/
memory dump 0x00000-0x001ff
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000 00 00 01 00 ff ff ff ff ff ff ff ff ff ff ff ff
00010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00020 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00030 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00040 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
000f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
00100 7a 07 00 0f ff 10 01 00 6b 20 00 00 0e 1a 01 00
00110 6b 21 00 00 0e 1e 01 00 6b 22 00 00 0e 22 01 f0
00120 64 22 5a 00 01 2e 6c 03 68 93 0b 71 1b 72 46 f6
00130 01 00 6b 21 00 00 0e 26 01 00 6b 22 00 00 0e 2a
00140 f3 00 01 f0 64 22 5a 00 01 50 68 93 0b 71 1b 72
00150 46 f8 5e 00 0c f4 40 fe 06 7f 54 70 04 80 54 70
00160 18 88 38 ba 38 b8 f8 13 38 b9 19 00 0b 50 79 20
00170 03 e8 4d f8 f8 30 38 ba 54 70 29 bc 17 51 0d 10
00180 79 60 00 38 47 16 7f bc 72 60 7f bc 72 50 7f bc
00190 72 40 7f bc 72 30 79 00 ff fe 54 70 73 69 47 da
001a0 7f bc 72 60 29 bd 17 51 0d 10 54 70 29 bc 17 51
001b0 0d 10 79 60 00 38 47 16 7f bc 72 60 7f bc 72 50
001c0 7f bc 72 40 7f bc 72 30 79 00 ff fe 54 70 73 69
001d0 47 0c 29 bd 17 51 7f bc 72 60 0d 10 54 70 79 00
001e0 ff ff 54 70 5e 00 0d dc 0f 86 0d 1d 19 55 1b 5d
001f0 0d d4 40 26 55 84 0d 0d 68 e8 a8 0d 47 20 0d dd


mp7ex04.txt

#include <3048fone.h>
#include "h8_3048fone.h"

main()
{
int i,j;
unsigned long int ptr;
initSCI1(); /*シリアル通信ユニット SCI-ch1の初期化*/
while(1)
{

ptr = (unsigned long int)SCI1_getInt4("\nstart address (0xnnnnnn)= ");
SCI1_printf("memory dump 0x%05lx-0x%05lx\n",ptr,ptr+0xff);
SCI1_printf(" +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F");
for(i=0;i<16;i++)
{
SCI1_printf("\n%05lx ",ptr);
for(j=0;j<16;j++)
{
SCI1_printf(" %02x",*(unsigned char *)ptr);
ptr++;
}

}
}
}

/*実行結果*/
start address (0xnnnnnn)= 0x400
memory dump 0x00400-0x004ff
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00400 00 10 0f 86 5e 00 02 46 79 01 00 10 0f f0 5e 00
00410 01 e4 0f f0 5e 00 03 28 7a 17 00 00 00 10 01 00
00420 6d 76 54 70 01 00 6d f6 7a 37 00 00 00 10 0f 86
00430 55 38 79 01 00 10 0f f0 5e 00 02 e2 0f f0 5e 00
00440 03 28 7a 17 00 00 00 10 01 00 6d 76 54 70 6d f6
00450 0c 86 a6 0a 46 04 f8 0d 55 f4 28 b4 73 78 47 fa
00460 36 b3 7f b4 72 70 6d 76 54 70 01 00 6d f6 0f 86
00470 40 06 68 68 55 d8 0b 76 68 68 46 f6 01 00 6d 76
00480 54 70 19 11 40 0a 79 08 10 68 1b 58 46 fc 0b 51
00490 1d 01 45 f2 54 70 19 11 40 0a 79 08 00 04 1b 58
004a0 46 fc 0b 51 1d 01 45 f2 54 70 0c 80 28 c6 e8 f0
004b0 14 08 38 c6 7f c6 70 50 79 00 00 05 55 d8 7f c6
004c0 72 50 79 00 00 28 40 ce 6d f6 0c 8e 11 88 11 88
004d0 11 88 11 88 e8 0f 55 d2 ee 0f 0c e8 55 cc 6d 76
004e0 54 70 6d f6 0c 8e 7f c6 70 40 11 88 11 88 11 88
004f0 11 88 e8 0f 55 b4 ee 0f 0c e8 55 ae 7f c6 72 40
start address (0xnnnnnn)= 0xffe00
memory dump 0xffe00-0xffeff
+0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
ffe00 ff ff ff ff f7 f7 ef ff ff fe ff ff ff 7f fb f7
ffe10 ef ff ff e9 fa bb df ff ef fb ff ff f7 ff bf ff
ffe20 fb ff ff af fb bf ff 77 ff f7 ff bf ff fb f7 ff
ffe30 ce ff 3f f6 7f bf 7b fb c9 ff bf ff ff ff 6b f3
ffe40 ee 7f ff f3 ef fb ef ff ff ff f7 f7 ff ff ff ff
ffe50 fd 77 fe 7f ff be bd fe ff fd fb ff 3f fb 97 d5
ffe60 fe 77 bf ff fe ef fd ff ff 7f fd ff ef ff df ff
ffe70 ff b7 bf fb ff ff ff df f7 ff ff 5f fb 77 7f 2b
ffe80 ff f3 ff fb ff dd ff ff 77 df fe bc 0a 0c fe c0
ffe90 00 c2 00 00 02 52 00 0f ff 0c 00 00 0a b4 00 0f
ffea0 fe c1 fe fe fd ff ff ff ff 4f ff f7 ff ff fb dd
ffeb0 ff bf af 7f 9f ff f7 fc 66 66 65 66 66 66 65 62
ffec0 30 33 33 00 00 0f ff 0a 00 0f fe c3 00 00 0e e0
ffed0 00 00 00 00 02 46 00 2b 00 10 00 00 02 2a 00 00
ffee0 00 ee 00 00 00 00 00 00 0e d3 00 00 0e db 00 02
ffef0 00 10 00 00 00 04 00 00 0b 6a 00 0f ff 0a 00 0f


mp8ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

volatile unsigned int counter;/*0.1s単位でカウント*/
volatile char counter_enable = 1;
main()
{
unsigned int counter1;
unsigned int t1,t2;
char input;
initSCI1(); /*SCI-ch1の初期化*/
initTimer1Int(1000); /*ITUch1のインターバルタイマ初期化設定*/
/*単位μsなので,時間割り込み10msec*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*ITUch1タイマスタート*/
counter=0;
while(1) {
switch(input) {
case 'A':
counter_enable = 1;
break;
case 'B':
counter_enable = 0;
break;
case 'C':
counter = 0;
break;
}
counter1=counter;
t1=counter1/10;
t2=counter1%10;
SCI1_printf("%10u.%1u\r",t1,t2);
input = SCI1_chkgetChar();
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*インターバルタイマ割り込みルーチン*/
{
static int cnt=0;
if (++cnt==10) {
/*この割り込みルーチンは0.01秒ごとに起動するので /
/ 10回に1回の割合でcounter++をすれは,counterは /
/ 0.1秒にごとに1ずつ増えることにな る */
counter += counter_enable;
cnt=0;
}
clearTimer1Flag(); /*ITUch1タイマフラグのクリア 忘れないこと*/
}


mp8ex02.txt

#include <3048fone.h>
#include "h8_3048fone.h"

/*SCI-ch1の初期化 38400bit/sec*/
void myinitSCI1_38400()
{
short int i;
SCI1.SCR.BYTE = 0; /* clear all flags */
/* 2400-38400baud are available at n=0(cks1=0,cks2=0) */
SCI1.SMR.BYTE = 0; /* Async, 8bit , NoParity, stop1, 1/1 */
SCI1.BRR = 19; /* 38400baud (CPU=25MHz) */
for(i=0;i<1000;i++); /* wait more than 1bit time */
SCI1.SCR.BYTE = 0x30; /* scr = 0011 0000 (TE=1,RE=1) */
return;
}

/*SCI-ch1の初期化 19200bit/sec*/
void myinitSCI1_19200()
{
short int i;
SCI1.SCR.BYTE = 0; /* clear all flags */
/* 2400-38400baud are available at n=0(cks1=0,cks2=0) */
SCI1.SMR.BYTE = 0; /* Async, 8bit , NoParity, stop1, 1/1 */
SCI1.BRR = 40; /* 19200baud (CPU=25MHz) */
for(i=0;i<1000;i++); /* wait more than 1bit time */
SCI1.SCR.BYTE = 0x30; /* scr = 0011 0000 (TE=1,RE=1) */
return;
}

/*SCI-ch1の初期化 1200bit/sec*/
void myinitSCI1_1200()
{
short int i;
SCI1.SCR.BYTE = 0; /* clear all flags */
/* 2400-38400baud are available at n=0(cks1=0,cks2=0) */
SCI1.SMR.BYTE = 0; /* Async, 8bit , NoParity, stop1, 1/1 */
SCI1.SMR.BYTE |= 1;
SCI1.BRR = 162; /* 1200baud (CPU=25MHz) */
for(i=0;i<1000;i++); /* wait more than 1bit time */

SCI1.SCR.BYTE = 0x30; /* scr = 0011 0000 (TE=1,RE=1) */
return;
}

main()
{
int count=0;
/*myinitSCI1_38400(); 必要に応じてどちらか片方*/
/*myinitSCI1_19200();*/
myinitSCI1_1200();
while (1) {
SCI1_printf("Hello %6d\n",count++);
}
}

mp9ex01.txt

#include <3048fone.h>
#include "h8_3048fone.h"

volatile int count1=-1;/*LED0用カウンタ -1の時は休止中*/
volatile int count2=-1;/*LED1用カウンタ -1の時は休止中*/
volatile int count3=-1;

main()
{
initLed();
initPushSW();/*PushSWの初期化*/
initTimer1Int(10000); /*時間割り込み10000μsec=10msec ch1使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタートch1*/
while(1) {
if ((count1==-1 || 50<count1) && checkPushSW(0)==1) {
count1=0;
turnOnLed(0);
} else if (100<count1 && count1<200) { /*200カウントで2秒経過*/
turnOffLed(0);
} else if (200<count1 && count1<300){
turnOnLed(0);
} else if (300<count1){
count1=-1;
turnOffLed(0);
}
if ((count2==-1 || 50<count2) && checkPushSW(1)==1) {
count2=0;
turnOnLed(1);
} else if (100<count2 && count2<200) { /*200カウントで2秒経過*/
turnOffLed(1);
} else if (200<count2 && count2<300){
turnOnLed(1);
} else if (300<count2){
count2=-1;
turnOffLed(1);
}
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick=0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
if (count1!=-1) count1++;
if (count2!=-1) count2++;
}

mp9ex02.txt

#include <3048fone.h>
#include "h8_3048fone.h"

volatile int count1 = -1;/*LED0用カウンタ -1の時は休止中*/
volatile int count2 = -1;/*LED1用カウンタ -1の時は休止中*/
volatile int count3 = -1;/*LED1用カウンタ -1の時は休止中*/
volatile int cmdstertptr = -1;/*文字列表示開始位置指令*/
const char hello[] = " Hello, everyone! ";


main()
{
int j;
initSCI1();
initLed();
initPushSW();/*PushSWの初期化*/
initTimer1Int(10000); /*時間割り込み10000μsec=10msec ch1使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタートch1*/
while (1) {
if ((count1 == -1 || 50<count1) && checkPushSW(0) == 1) {
count1 = 0;
turnOnLed(0);
}
else if (100 < count1 && count1 <= 200) { /*100カウントで1秒経過*/
turnOffLed(0);
}
else if (200 < count1 && count1 <= 300) { /*200カウントで2秒経過*/
turnOnLed(0);
}
else if (300 < count1) { /*300カウントで3秒経過*/
count1 = -1;
turnOffLed(0);
}

if ((count2 == -1 || 50<count2) && checkPushSW(1) == 1) {
count2 = 0;
turnOnLed(1);
}
else if (100 < count2 && count2 <= 200) { /*100カウントで1秒経過*/
turnOffLed(1);
}
else if (200 < count2 && count2 <= 300) { /*200カウントで2秒経過*/
turnOnLed(1);
}
else if (300 < count2) { /*300カウントで3秒経過*/
count2 = -1;
turnOffLed(1);
}

if ((count3<0 || 10<count3) && checkPushSW(2) == 1) {
count3 = 0;
cmdstertptr = 0;
}
if (0 <= cmdstertptr) {
SCI1_printf("<");
for (j = 0; j < 16; j++) {
SCI1_printf("%c", hello[cmdstertptr + j]);
}
SCI1_printf(">\r");
if (cmdstertptr == 34) {
count3 = -1;
}
cmdstertptr = -1;
}
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE = H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P, CODE, ALIGN = 2; これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick = 0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
if (count1 != -1) count1++;
if (count2 != -1) count2++;
if (count3 != -1) count3++;
if (count3 % 10 == 0) {
cmdstertptr = count3 / 10;
}
}

mp9ex03.txt

#include <3048fone.h>
#include "h8_3048fone.h"

volatile int count1=-1;/*LED0用カウンタ -1の時は休止中*/
volatile int count2=-1;/*LED1用カウンタ -1の時は休止中*/
volatile int count3=-1;

volatile int cmdstertptr=-1;

const char hello[]=" Hello, everyone! ";

main()
{
int j;

initLCD();
initSCI1();
initLed();
initPushSW();/*PushSWの初期化*/
initTimer1Int(10000);/*時間割り込み10000μsec=10msec ch1使用*/
E_INT(); /*CPU割り込み許可*/
startTimer1(); /*時間割り込みタイマスタートch1*/

LCD_gotoxy(0,0);
LCD_printf("pushSW status");

while(1) {
if ((count1==-1 || 50<count1) && checkPushSW(0)==1) {
count1=0;
turnOnLed(0);
} else if (100<count1 && count1<200) { /*200カウントで2秒経過*/
turnOffLed(0);
} else if (200<count1 && count1<300){
turnOnLed(0);
} else if (300<count1){
count1=-1;
turnOffLed(0);
}
if ((count2==-1 || 50<count2) && checkPushSW(1)==1) {
count2=0;
turnOnLed(1);
} else if (100<count2 && count2<200) { /*200カウントで2秒経過*/
turnOffLed(1);
} else if (200<count2 && count2<300){
turnOnLed(1);
} else if (300<count2){
count2=-1;
turnOffLed(1);
}

if ( (count3<0 || 10<count3) &&checkPushSW(2)==1) {
count3 = 0;
cmdstertptr = 0;
}
if(0<=cmdstertptr) {
LCD_gotoxy(0,1);
LCD_printf("<");
for(j = 0; j < 14; j++) {
LCD_printf("%c", hello[cmdstertptr+j]);
}
LCD_printf(">\r");
if (cmdstertptr==34) {
count3=-1;
}
cmdstertptr=-1;
}
}
}

#pragma asm
.SECTION MYVEC, DATA, LOCATE=H'000070
.ORG H'000070 ;IMIA1
.DATA.L _TimerIntFunc
.SECTION P,CODE,ALIGN=2 ;これを忘れてはいけない
#pragma endasm

#pragma interrupt (TimerIntFunc)
void TimerIntFunc() /*タイマ割り込みルーチン*/
{
static int tick=0;
clearTimer1Flag(); /*タイマステータスフラグのクリア 忘れないこと*/
if (count1!=-1) count1++;
if (count2!=-1) count2++;
if (count3!=-1) count3++;
if (count3%10==0) {
cmdstertptr=count3/10;
}
}