2005年08月

作業日記トップへ

08月12日(金)  08月26日(金) 

2005年08月26日(金)

掲示板1へ

M16C/62のシリアルサンプルプログラム3(シリアル受信(割り込みあり))

プログラム内容

設定内容

設定項目設定内容
ボーレート57600bps
キャラクタビット8ビット
ストップビット1ビット
パリティビットなし
転送クロックソース内部クロックf1(=16MHz)
CTS機能禁止

sect30.inc
############### sect30.inc の一部を抜粋 #######################################

	.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	dummy_int		; uart1 transmit(for user)(vector 19)
        .glb    _receive
	.lword	_receive		; uart1 receive(for user)(vector 20)
	.lword	dummy_int		; timer A0(for user)(vector 21)
	.lword	dummy_int		; timer A1(for user)(vector 22)
	.lword	dummy_int		; timer A2(for user)(vector 23)
	.lword	dummy_int		; timer A3(for user)(vector 24)
	.lword	dummy_int		; timer A4(for user)(vector 25)
ser03.c
/*------------------------------------------------------*/
/* ファイル名:        ser03.c                         */
/*      内容:          シリアルで文字列送受信          */
/*      日付:          2005.08.25(Thu)                 */
/*      作成者:        denno_ono                       */
/*------------------------------------------------------*/

#include<oaks_sfr.h>

#pragma INTERRUPT receive

unsigned char ledn=0, ledold=0;

typedef enum {        // ボーレート設定リスト
  br4800  = 207,
  br9600  = 103,
  br14400 = 68,
  br19200 = 51,
  br28800 = 34,
  br31250 = 33,
  br57600 = 16
} BaudRate;

// UART1初期化

void InitSCI3 (BaudRate b)
{

  u1brg = b;    // ボーレート設定
  u1mr=0x05;    //8ビット、内部クロック、1ストップビット、パリティなし
  u1c0=0x10;    //クロックf1
  u1c1=0x05;    //送受信許可
  ucon=0x00;    //割り込み要因
  s1ric=0x05;   //シリアル受信割り込み(レベル5)
}

// 1文字送信
void rs_putc (char cd)
{
  while(ti_u1c1==0);  //バッファで見ないとデータが上書きされる場合あり
  u1tb = cd;
}

// 文字列送信
void rs_puts (char _far *st)
{
  while(*st){
    rs_putc(*st++);
  }
}

// 受信割り込み
void receive (void)
{
  ledn++;
}

int main(void)
{
  char rdata;  /* 受信バッファ */
  int ct;
  p7=0xff;
  pd7=0xff;
  InitSCI3(br57600);
  _asm("\tFSET  I");

  while(1){
    if(ledn!=ledold){
      rdata = u1rbl;  /* データ受信 */
      rs_puts("message:");
      rs_putc(rdata);
      rs_putc(0x0D);
      rs_putc(0x0A);
      p7=~ledn;
      ledold=ledn;
    }
  }
  return(0);
}

実行結果

コメント

    rs_putc(0x0D);
    rs_putc(0x0A);

0x0DはLF(改行)、 0x0AはCR(復帰)。

2005年08月12日(金)

掲示板1へ

パーツ、ここまでつくりました

悪戦苦闘の果てに・・・

やっとこれだけ削りました。 残念ながら、またもやしばらく時間が取れないので この時点で中断です。

削りだしたパーツ

作業日記トップページへ

トップページへ

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送