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

このブログを検索

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

2008年8月8日金曜日

R8C/Tiny29(サンハヤトのMB-8C29)の評価

サンハヤトのMB-8C29を使ってみました.基本的にはSR8C15CPと同様に使うことができました.MB-8C29は,20MHz発振子が内蔵されています.リセット回路(RとC)は付いていません.せっかくだからリセット端子にRとCを付けてくれれば良いのにと思います.またLEDがP1_1ピンに付いています.R8C29ではピンの駆動電流を設定するdrrがなくなっています.

実行手順のメモ(C言語によるプログラミングの場合)

1.実行プログラムの作成
HEWをインストールする.
HEWをインストールしたフォルダの下にあるinc30というフォルダに,sfr_r829.h(Tiny15の定義ファイル)を入れておく.
HEWを起動する.
新規プロジェクトワークスペースを作成する.
プロジェクトの種類:Application
CPUSeries:R8C/Tiny

CPUGroup:29
Releaseコンフィグレーションを選択する(HEWのウィンドウの上部ボックスでReleaseかDebugを選択できるようになっている)
Cのソースファイルを編集する

サンプルプログラムの例
//test.c for MB-R8C29
//

#include "sfr_r829.h" // R8C29 SFR定義ファイル


void main(void) // メイン関数
{
int i,j,k;

// drr1 = 1;入れるとコンパイルできない

pd1_1 = 1; //ポートP1_1 出力
p1_1 = 1; //ポートP1_1 H

//メインクロック切替
prc0 = 1;
cm13 = 1;
cm05 = 0;
cm06 = 0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
ocd2 = 0;
prc0 = 0;
//
while(1){
for(i=0;i<10;i++)for(j=0;j<25
0;j++)for(k=0;k<250;k++){}
p1_1 = 0;
for(i=0;i<10;i++)for(j=0;j<250;j++)for(k=0;k<250;k++){}
p1_1 = 1;
}//while(1)
}

2.実行プログラムの書き込み
(R8C15から変更はありません)
M16C Flash Starterをダウンロードし適当な場所に置いておく.
書き込み回路とcomポートを接続し,回路の電源を入れる.このとき書き込み回路は,ブートモードにする.(モードセレクタPIN8をGND側に接続しておく.)

M16C Flash Starter(FlashSta.exe)を
実行し,
SelectProgram:InternalFlashMemory,
COMポートを選択する.
Referをクリックしfile pathにはプロジェクトのreleaseフォルダ内の○.motを選ぶ.
IDの空欄にすべてffを入れる.MCU TypeはR8Cを選択する.
E.P.Rをクリックすると消去,書き込みが自動的に行われる.









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;
}