2005年07月

作業日記トップへ

07月20日(水)  07月21日(木)  07月23日(土)  07月29日(金)  07月30日(土) 

2005年07月30日(土)

掲示板1へ

M16C/62のシリアルI/O関連レジスタ(その1)

シリアルI/O関連端子

シリアルI/O関連端子
端子機能接続先
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

シリアルI/O関連レジスタ

アドレスレジスタ名称
0051UART0送信割り込みレジスタs0tic
0052UART0受信割り込みレジスタs0ric
0053UART1送信割り込みレジスタs1tic
0054UART1受信割り込みレジスタs1ric

アドレスレジスタ名称
03A0UART0送受信モードレジスタu0mr
03A1UART0転送速度レジスタu0brg
03A2
03A3
UART0送信バッファレジスタu0tb
03A4UART0送受信制御レジスタ0u0c0
03A5UART0送受信制御レジスタ1u0c1
03A6
03A7
UART0受信バッファレジスタu0rb
03A8UART1送受信モードレジスタu1mr
03A9UART1転送速度レジスタu1brg
03AA
03AB
UART1送信バッファレジスタu1tb
03ACUART1送受信制御レジスタ0u1c0
03ADUART1送受信制御レジスタ1u1c1
03AE
03AF
UART1受信バッファレジスタu1rb
03B0UART送受信制御レジスタ2ucon

2005年07月29日(金)

掲示板1へ

ヘッダファイル oaks_sfr.h

OAKSのボードに関して、 解説を書く気がないのでかなりいい加減に資料を垂れ流しています。 H8に移行したときに資料を作ろうと思っているもので・・・

A/D変換やシリアル通信をやる前に、 オークス電子さんの資料で勉強すると良いと思います。 サポートもしてくださるようです。

LCD BoardのCD ROM
LCD BoardのCD ROM

私が使っているヘッダファイルoaks_sfr.hは、 OAKS16-LCD BoardKIT-APの付属CD-ROM「LCD Board」のsample\M16Csmp\M16Csmp1などにあります。

このヘッダファイルは、MTOOLフォルダ内のINC30に入れておくと良いようです。 詳しくはオークス電子さんの「OAKS16プログラミングテキスト」などをご覧ください。

2005年07月23日(土)

掲示板1へ

M16C/62のクロック非同期形シリアルI/O

シリアル通信

シリアル通信の基礎知識

OAKS16-LCD BoardKIT-APのシリアルI/O回路

OAKS16-LCD BoardKIT-APで、書き込みなどに使っているシリアルI/Oは、 UART1。

UART0は基板に回路はあるので、Dサブ コネクタをつければ利用できる。 その場合、デバッガを使ってシリアル通信を確認することも可能になる (デバッガがシリアルポートを利用するため)。

J2の配線
OAKS16-LCD BoardKIT-AP、J2(UART1)の配線

シリアルI/O

クロック同期形シリアルI/Oクロックに同期して8ビットのデータ通信を行う
クロック非同期形シリアルI/Oキャラクタ単位で同期を取りながら通信を行う

さらに、UART0と1は同じ機能なので、主にUART1について考える。

送受信フォーマット

シンボル名称選択機能機能
STスタートビット-データの送信開始を表す、1ビットの「L」信号
DATAキャラクタビット7ビット/8ビット/9ビット転送データ
PARパリティビット奇数/偶数/なしキャラクタビットとこのビットの「1」の総数が常に奇数(もしくは偶数)になるようにする(データの信頼性チェックのため)
SPストップビット1ビット/2ビットデータ送信終了を表す「H」信号

転送クロック

ボーレートクロックn
4800f1(16MHz)207
9600f1(16MHz)103
14400f1(16MHz)68
19200f1(16MHz)51
28800f1(16MHz)34
31250f1(16MHz)33
57600f1(16MHz)16

参考文献

2005年07月21日(木)

掲示板1へ

M16C/62のA/D変換サンプルプログラム1(単発モード、タイマA割り込み)

プログラム内容

設定におけるの注意点

設定内容

設定項目設定内容
動作クロックφADfAD/4(=8MHz)
分解能8ビット
アナログ入力端子AN4
A/D変換開始条件ソフトウェアトリガ
拡張アナログ入力端子使用しない
サンプル&ホールド使用する

ad02.c
/*------------------------------------------------------*/
/*  ファイル名:  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);
}

sect30.inc
    .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)

メインクロックを分周せずに使う(C:\MTOOL\SRC30\STARTUP\ncrt0.a30の設定を変更)
	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
;----------------------------------------

2005年07月20日(水)

掲示板1へ

M16C/62のA/D変換サンプルプログラム1(繰り返しモード、空ループ)

プログラム内容

設定におけるの注意点

設定内容

設定項目設定内容
動作クロックφADfAD/4(=8MHz)
分解能8ビット
アナログ入力端子AN4
A/D変換開始条件ソフトウェアトリガ
拡張アナログ入力端子使用しない
サンプル&ホールド使用する

タイミング図

A/D変換繰り返しモードサンプルプログラムタイミング図

ad01.c
/*------------------------------------------------------*/
/*  ファイル名: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);
}

メインクロックを分周せずに使う(C:\MTOOL\SRC30\STARTUP\ncrt0.a30の設定を変更)
	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] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送