ATMELのAT-Tiny26,ATmega,R8Cなどのワンチップマイコン,C言語,JAVAなどのプログラミング言語の入門のためのページです.サンプルプログラムを中心に紹介します.他にもLinixや数学ソフトなどの紹介も行います.

このブログを検索

あなたは 番目のお客様です.

2008年8月3日日曜日

R8C/Tinyを使ったRS-232通信テストプログラム

R8C/Tinyを使ったRS-232(comポート)の通信テストプログラムです.プログラムの書き込みと通信に別々のCOM端子を使うなら,トラ技2005年4月号付録のR8C/15搭載マイコンボード(MB-R8CS:サンハヤト)が便利です.
テストプログラムでは,aを入力するとLED on,bを入力するとLED offします.
c-zを入力すると大文字を返します.
送信の関数名をtx()とするとコンパイルエラーが生じます.
通信ソフトにはハイパーターミナルかteratermを使います.

#include "sfr_r815.h"
void Utx(char data); // 1文字送信
char Urx(void); // 1文字受信

void main(void) // メイン関数
{
char dat;
// I/Oポートの初期設定
drr1= 1;//P1_1 駆動能力High設定
pd1_1= 1;//P1_1 出力モード設定
p1_1= 1;//P1_1 Hレベル設定(LED:消灯)

//メインクロックの切替
prc0 = 1;
cm13 = 1;
cm05 = 0;
cm06 = 0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
ocd2 = 0;
prc0 = 0;

//UART0初期化
smd0_u0mr= 1; // シリアルI/Oモード選択ビット
smd2_u0mr= 1; //8ビットモード
te_u0c1= 1; //送信許可
re_u0c1= 1; //受信許可
u0brg= 0x40; //ビットレート(19200bps)
Utx('T');
Utx('E');
Utx('S');
Utx('T');
Utx(0x0a); //LF
Utx(0x0d); //CR

while(1){
dat = Urx();
if(dat=='a')p1_1=0; //P1_1 Lレベル(LED:on)
if(dat=='b')p1_1=1; //P1_1 Hレベル(LED:off)
if(dat>'b'){ //c以降は大文字を返す
dat=dat-'a'+'A';
Utx(dat);
}
}//while
}//main

void Utx(char data)
{
while(ti_u0c1 != 1); // データ転送待ち
u0tb = data; // 送信バッファにデータセット
}

char Urx(void)
{
char data; // 受信データ格納変数
char err; // エラーデータ格納変数
while (ri_u0c1 != 1) ; // 受信待ち
data = u0rbl; // 受信データの取り出し
err = u0rbh & 0xf0; // エラーデータの取り出し
return data;
}