/**************************************************************** h8-01.h Copyright (c) Kosaka Lab CS TNCT このインクルードファイルは小坂研究室の代々の研究生が開発した 有用な関数群を改良して小坂がまとめたものである。 4 Dec 2003 h8-01.h 小坂 printf更新,initLed更新,initDDR削除 08 Oct 2003 h8-01.h 小坂 stopTimer追加,getIntSCI1でBS使用可 17 Apr 2002 h8-01.h 小坂 %uの使い方をansiにあわせた。 14 Dec 2001 h8-01.h 小坂,越智 15 Jly 2000 h8-00.h 小坂,藤原 22 Dec 1999 h8-99.h 小坂,高沢 29 Oct 1999 h8-99.h 小坂 05 Feb 1999 lib.h 笠井 【1】SCI ch1 関係 void initSCI1() SCI-ch1の初期化 38400baud, Ascnc, 8bit , NoParity, stop1 short int getCharSCI1() SCI-ch1から1byte入力コード。エラーがあると-2が戻る。 short int chkgetCharSCI1() SCI-ch1を検査し,受信データがあれば1byte入力コード。なければ-1が,失敗すると-2が戻る。 short int getIntSCI1(char prompt[]) SCI-ch1からプロンプト付で,short intの値を受け取る。 正負の10進数または16進数を受け付ける。16進数は0xで始まる void putCharSCI1(char c) SCI-ch1に1バイト出力する。 void putStringSCI1(char *str) SCI-ch1に文字列を出力する。 void SCI1_printf(char *format,...) 関数printfのSCI版 軽量化のためエラー処理はないので桁数指定の場合は注意 対応書式 %d : [int] integer with sign. '%d','%4d','%-4d', and '%04d' are available %ld : explicit [long int] '%ld','%9ld','%-9ld', and '%09ld' are available %u : [unsigbed int] unsigned integer. '%u','%4u','%-4u', and '%04u' are available %lu : explicit [unsigned long int] '%lu','%9lu','%-9lu', and '%09lu' are available %x : [unsigned int] in Hex '%x','%4x','%-4x', and '%04x' are available %lx : explicit [unsigned long int] in Hex '%lx','%8lx','%-8lx', and '%08lx' are available %o : [unsigned int] in Oct '%o','%4o','%-4o', and '%04o' are available %lo : explicit [unsigned long int] in Oct '%lo','%8lo','%-8lo', and '%08lo' are available %b : [unsigned int] in Bin '%b','%8b','%-8b', and '%08b' are available %lb : explicit [unsigned long int] in Bin '%lb','%8lb','%-8lb', and '%08lb' are available %c : char %s : string %20s %-20s are available 【2】AKI-H8マザーボード関係 void initLed() LEDの初期化 void turnOnLed(short int number) LEDの点灯 numberはLED番号で0または1を指定する void turnOffLed(short int number) LEDの消灯 numberはLED番号で0または1を指定する void initPushSW(void) 押しボタンスイッチの初期化 short int getPushSW(void) 押しボタンスイッチの取得 ただしポートを読み込み,ビット反転のみ。 押しボタンスイッチの状況は第4-第7ビットに現れる。 これはマクロ定義で実現されている short int checkPushSW(short int number) push sw 0,1,2,3の状態を調べる number:0,1,2,or 3 押されていたら1、そうでなかったら0を返す void init8BitSW(void) 8ビットスイッチの初期化 short int get8BitSW(void) 8ビットスイッチの取得 ただしポートを読み込み,ビット反転のみ。 8ビットスイッチの状況は第0-第7ビットに現れる。 これはマクロ定義で実現されている short int check8BitSW(short int number) 8bitsw 0,1,2,3,4,5,6,7の状態を調べる number:0,1,2,3,4,5,6,or 7 ONなら1、そうでなかったら0を返す 【3】タイミング割り込み void initTimer1Int(unsigned short int period) ITU1による割り込みタイマーの設定 割り込み間隔は引数peiodで単位はμsecである 値は32767以下でなければならない。32.767msecまで設定可能 void startTimer1(void) Timer CH1 スタート これはマクロ定義で実現されている void stopTimer1(void) Timer CH1 ストップ これはマクロ定義で実現されている void initTimer01Int(unsigned short int period) ITU0とITU1による割り込みタイマーの設定 割り込み間隔は引数peiodで単位はmsecである 値は65535以下でなければならない。65.535secまで設定可能 ただしポートPAの第3ビットが使用できなくなるので注意 void startTimer01(void) Timer CH0 CH1 同時スタート これはマクロ定義で実現されている void stopTimer01(void) Timer CH0 CH1 同時ストップ これはマクロ定義で実現されている ****************************************************************/ #include #include "3048f.h" unsigned char P1DDR=0,P2DDR=0,P3DDR=0,P4DDR=0,P5DDR=0; unsigned char P6DDR=0,P7DDR=0,P8DDR=0,P9DDR=0,PADDR=0,PBDDR=0; extern void E_INT(); extern void D_INT(); /*void initDDR(void) { P1DDR=P2DDR=P3DDR=P4DDR=P5DDR=P6DDR=P7DDR=P8DDR=P9DDR=PADDR=PBDDR=0; } */ /*以前のバージョンとの互換性のため*/ #define initDDR() /*SCI関係の基本部分は笠井君(1998年度)藤原君(2000)の開発です*/ /* ------------------------------------------------- */ /* SCI1 INITIALIZATION fixed baud at 38400 */ /* ------------------------------------------------- */ void initSCI1() { short int i; /*unsigned char dummy;*/ SCI1.SCR.BYTE = 0; /* clear all flags */ /* 2400-38400baud are available at n=0(cks1=0,cks2=0) */ SCI1.SMR.BYTE = 0; /* Ascnc, 8bit , NoParity, stop1, 1/1 */ SCI1.BRR = 12; /* 38400baud (CPU=16MHz) */ for(i=0;i<1000;i++); /* wait more than 1bit time */ SCI1.SCR.BYTE = 0x30; /* scr = 0011 0000 (TE=1,RE=1) */ /*dummy = SCI1.SSR.BYTE;*/ /* read dummy ????*/ /*SCI1.SSR.BYTE = 0x80;*/ /* clear error flag (TDRE = 1) ????*/ return; } /* ------------------------------------------------- */ /* GET BYTE FROM SCI1 */ /* ------------------------------------------------- */ short int getCharSCI1() /* return value 0x00-0xFF:received data */ /* -2(0xFFFE):error */ { short int flags,recdata; do { flags = SCI1.SSR.BYTE; if (flags&0x38) {/* error */ SCI1.SSR.BIT.RDRF = 0; SCI1.SSR.BIT.ORER = 0; SCI1.SSR.BIT.FER = 0; SCI1.SSR.BIT.PER = 0; return -2; } if (flags&0x40) {/* normally received one data */ SCI1.SSR.BIT.RDRF = 0; recdata=SCI1.RDR; return recdata; } } while (1); } /* ------------------------------------------------- */ /* CHECK SCI BUFFER AND GET DATA */ /* ------------------------------------------------- */ short int chkgetCharSCI1() /* return value -1(0xFFFF):no received data */ /* 0x00-0xFF:received data */ /* -2(0xFFFE):error */ { short int flags,recdata; flags = SCI1.SSR.BYTE; SCI1.SSR.BIT.RDRF = 0; if (flags&0x38) {/* error */ SCI1.SSR.BIT.ORER = 0; SCI1.SSR.BIT.FER = 0; SCI1.SSR.BIT.PER = 0; return -2; } if (flags&0x40) {/* normally received one data */ recdata=SCI1.RDR; return recdata; } else { return -1; } } void putStringSCI1(char *str); /*SCI1より文字列入力[return]が終端だが,'\n'は取得されない*/ /*^Hでバックスペイス*/ int getStringSCI1(char *buff,int max) { int i,ch; for (i=0;i