07月20日(水) 07月21日(木) 07月23日(土) 07月29日(金) 07月30日(土)
端子 | 機能 | 接続先 |
---|---|---|
P60/CTS0/RTS0 | 受信可能/送信要求 | 接続なし |
P61/CLK0 | クロック | 接続なし |
P62/RxD0 | 受信データ | MAX232ASE->CN4-6->J3 |
P63/TxD0 | 送信データ | MAX232ASE->CN4-5->J3 |
P64/CTS1/ RTS1/CLK1 | 受信可能/送信要求/クロック | 接続なし |
P65/CLK1 | クロック | GND |
P66/RxD1 | 受信データ | MAX232ASE->CN4-2->J2 |
P67/TxD1 | 送信データ | MAX232ASE->CN4-1->J2 |
アドレス | レジスタ | 名称 |
---|---|---|
0051 | UART0送信割り込みレジスタ | s0tic |
0052 | UART0受信割り込みレジスタ | s0ric |
0053 | UART1送信割り込みレジスタ | s1tic |
0054 | UART1受信割り込みレジスタ | s1ric |
アドレス | レジスタ | 名称 |
---|---|---|
03A0 | UART0送受信モードレジスタ | u0mr |
03A1 | UART0転送速度レジスタ | u0brg |
03A2 03A3 | UART0送信バッファレジスタ | u0tb |
03A4 | UART0送受信制御レジスタ0 | u0c0 |
03A5 | UART0送受信制御レジスタ1 | u0c1 |
03A6 03A7 | UART0受信バッファレジスタ | u0rb |
03A8 | UART1送受信モードレジスタ | u1mr |
03A9 | UART1転送速度レジスタ | u1brg |
03AA 03AB | UART1送信バッファレジスタ | u1tb |
03AC | UART1送受信制御レジスタ0 | u1c0 |
03AD | UART1送受信制御レジスタ1 | u1c1 |
03AE 03AF | UART1受信バッファレジスタ | u1rb |
03B0 | UART送受信制御レジスタ2 | ucon |
OAKSのボードに関して、 解説を書く気がないのでかなりいい加減に資料を垂れ流しています。 H8に移行したときに資料を作ろうと思っているもので・・・
A/D変換やシリアル通信をやる前に、 オークス電子さんの資料で勉強すると良いと思います。 サポートもしてくださるようです。
LCD BoardのCD ROM
私が使っているヘッダファイルoaks_sfr.hは、 OAKS16-LCD BoardKIT-APの付属CD-ROM「LCD Board」のsample\M16Csmp\M16Csmp1などにあります。
このヘッダファイルは、MTOOLフォルダ内のINC30に入れておくと良いようです。 詳しくはオークス電子さんの「OAKS16プログラミングテキスト」などをご覧ください。
OAKS16-LCD BoardKIT-APで、書き込みなどに使っているシリアルI/Oは、 UART1。
UART0は基板に回路はあるので、Dサブ コネクタをつければ利用できる。 その場合、デバッガを使ってシリアル通信を確認することも可能になる (デバッガがシリアルポートを利用するため)。
OAKS16-LCD BoardKIT-AP、J2(UART1)の配線
クロック同期形シリアルI/O | クロックに同期して8ビットのデータ通信を行う |
クロック非同期形シリアルI/O | キャラクタ単位で同期を取りながら通信を行う |
さらに、UART0と1は同じ機能なので、主にUART1について考える。
シンボル | 名称 | 選択機能 | 機能 |
---|---|---|---|
ST | スタートビット | - | データの送信開始を表す、1ビットの「L」信号 |
DATA | キャラクタビット | 7ビット/8ビット/9ビット | 転送データ |
PAR | パリティビット | 奇数/偶数/なし | キャラクタビットとこのビットの「1」の総数が常に奇数(もしくは偶数)になるようにする(データの信頼性チェックのため) |
SP | ストップビット | 1ビット/2ビット | データ送信終了を表す「H」信号 |
ボーレート | クロック | n |
---|---|---|
4800 | f1(16MHz) | 207 |
9600 | f1(16MHz) | 103 |
14400 | f1(16MHz) | 68 |
19200 | f1(16MHz) | 51 |
28800 | f1(16MHz) | 34 |
31250 | f1(16MHz) | 33 |
57600 | f1(16MHz) | 16 |
設定項目 | 設定内容 |
---|---|
動作クロックφAD | fAD/4(=8MHz) |
分解能 | 8ビット |
アナログ入力端子 | AN4 |
A/D変換開始条件 | ソフトウェアトリガ |
拡張アナログ入力端子 | 使用しない |
サンプル&ホールド | 使用する |
/*------------------------------------------------------*/ /* ファイル名: ad02.c */ /* 内容: 8ビットAD変換 */ /* 日付: 2005.07.20(Wed) */ /* 作成者: ono */ /*------------------------------------------------------*/ #include<oaks_sfr.h> #pragma INTERRUPT adint #pragma INTERRUPT ta0int void adint(){ p7=~(ad4l); /* 下位8ビット */ ir_adic=0; } void ta0int(){ adst=1; /* A/D変換開始 */ } int main(void) { pd10=0x00; /* P10/ANを入力に設定 */ adcon0=0x84; /* AN4,単発モード,ソフトウェアトリガ,A/D変換停止,fAD/2 */ adcon1=0x20; /* 8ビット,Vref接続,ANEX0,ANEX1は使用しない */ adcon2=0x01; /* サンプル&ホールドあり */ adic=0x06; /* 割り込みレベル設定 */ /* 以下、LED出力のための設定 */ p7=0xff; pd7=0xff; /* タイマA「OAKS16プログラミングテキスト」(P77)参照 */ ta0mr=0x80; /* タイマモード,パルス出力なし,ゲート機能なし,f32(2us) */ ta0=27500; /* 55ms */ ta0ic=0x05; /* 割り込みレベル設定 */ ta0s=1; /* タイマA開始 */ _asm("\tFSET I"); /* 割り込み許可 */ while(1){ ; } return(0); } |
.lword dummy_int ; Key input interrupt(for user)(vect 14); .glb _adint .lword _adint ; A-D(for user)(vector 14) .lword dummy_int ; uart2 transmit(for user)(vector 15) .lword dummy_int ; uart2 receive(for user)(vector 16) .lword dummy_int ; uart0 transmit(for user)(vector 17) .lword dummy_int ; uart0 receive(for user)(vector 18) .lword 0fcb6bh ; uart1 transmit(for user)(vector 19) .lword 0fcb6bh ; uart1 receive(for user)(vector 20) .glb _ta0int .lword _ta0int ; timer A0(for user)(vector 21) .lword dummy_int ; timer A1(for user)(vector 22) |
mov.b #02h,0ah ; bset 1,0ah mov.b #00h,04h ;set processer mode ; bclr 1,0ah mov.b #00h,0ah ;記述がない場合には、分周なしを追加 ----- mov.b #01h,0ah mov.b #08h,06h mov.b #00h,0ah ;---------------------------------------- |
設定項目 | 設定内容 |
---|---|
動作クロックφAD | fAD/4(=8MHz) |
分解能 | 8ビット |
アナログ入力端子 | AN4 |
A/D変換開始条件 | ソフトウェアトリガ |
拡張アナログ入力端子 | 使用しない |
サンプル&ホールド | 使用する |
/*------------------------------------------------------*/ /* ファイル名:ad01.c */ /* 内容: 8ビットAD変換 */ /* 日付: 2005.07.19(Tue) */ /* 作成者: ono */ /*------------------------------------------------------*/ #include<oaks_sfr.h> /* 約10us待ち */ void wait_10u(void){ #pragma ASM MOV.W #14H,A0 LOOP3: NOP NOP NOP DEC.W A0 JNZ LOOP3 #pragma ENDASM } /* 約1ms待ち */ void wait_1m(void){ #pragma ASM MOV.W #7d0H,A0 LOOP2: NOP NOP NOP DEC.W A0 JNZ LOOP2 #pragma ENDASM } /* 約 i ms待ち */ void wait_m(int i){ int j; for(j=0; j<i; j++){ wait_1m(); } } int main(void) { pd10=0x00; adcon0=0x8c; adcon1=0x20; adcon2=0x01; p7=0xff; pd7=0xff; while(1){ adst=0; wait_m(55); /* PSDのデータ待ち */ adst=1; wait_10u(); /* A/D変換待ち */ p7=~(ad4l); /* 下位8ビット */ } return(0); } |
mov.b #02h,0ah ; bset 1,0ah mov.b #00h,04h ;set processer mode ; bclr 1,0ah mov.b #00h,0ah ;記述がない場合には、分周なしを追加 ----- mov.b #01h,0ah mov.b #08h,06h mov.b #00h,0ah ;---------------------------------------- |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||