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

このブログを検索

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

2008年3月28日金曜日

R8Cで液晶SC1602BSの表示を行う

以下はR8C/tinyで液晶SC1602BSの表示を行うプログラムです
ちゃんと動けば
Hello R8C/Tiny
コンニチハ!
と表示されるはずです.

タイマXを使い時間をコントロールしています
R8CとSC1602BSのピン接続
DB7<->p1_7
DB6<->p1_6
DB5<->p1_5
DB4<->p1_4
RS<->p1_3
E<->p1_2
R/W<->GND
Vo<->GND
Vss<->GND
Vdd<->5V

以下がソースプログラム

#include "sfr_r815.h" // R8C SFR定義ファイル

// マイクロsec単位の待ちルーチン,引数iは2550以下!
void delay(int i){
int t1,t2;
t1=tx;
t1=t1-i/10;
t2=t1+256;
while(tx!=t1 && tx!=t2){}
}

// En端子のon-off
void en(void){
p1_2=1;
delay(20);
p1_2=0;
delay(20);
}

//コマンドの書き込み
void cmnd(char i){
p1=i&(0B11110000);
en();
p1=(i<<4)&(0B11110000); //i<<4は4ビット左シフト&はビット間のAND
en();
delay(40);
}

//データの書き込み
void dat(char i){
p1=i&(0B11110000);
p1_3=1;
en();
p1=(i<<4)&(0B11110000);
p1_3=1;
en();
delay(40);

}

// メイン関数
void main(void)
{
int i;
//メインクロック切替
prc0 = 1; //プロテクト制御(書き換え許可)
cm13 = 1; //Xin-Xout端子切り替え
cm05 = 0; //Xin-Xoutメインクロック発振
cm06 = 0; //8分周以外(分周なし)
asm("nop"); //発振の安定待ち
asm("nop"); //  (同上)
asm("nop"); //  (同上)
asm("nop"); //  (同上)
ocd2 = 0; //メインクロック選択
prc0 = 0; //プロテクト制御(書き換え禁止)

// I/Oポートの初期設定
pd1 =0B11111100; //P1_2to7 出力モード設定
p1 =0B00000000; //P1_2to7 Lレベル

//タイマXの初期設定
txck0=0; //f1
txck1=0;
txmod0=0;
txmod1=0;
txmod2=0;
prex=200-1; //プリスケーラ1/200
//tx=255;
txs=1; //タイマX開始

for(i=0;i<20;i++)delay(1000); //Wait 20ms
p1 =0B00110000;
en();
for(i=0;i<5;i++)delay(1000); //Wait 5ms
en();
delay(100); //Wait 100Us
en();
delay(50); //Wait 50Us
p1=0B00100000; //Function set
en();
delay(50); //Wait 50Us
cmnd(0B00101100); //N=1:2lines F=1:10dots
cmnd(0B00001100); //Display On Off Control
cmnd(0B00000110); //Entry Mode Increment

while(1){
cmnd(0B00000001); //Clear LCD
delay(2000); //Wait 2ms
dat(0X48); //H
dat(0X65); //e
dat(0X6C); //l
dat(0X6C); //l
dat(0X6F); //o
dat(0X20); //
dat(0X52); //R
dat(0X38); //8
dat(0X43); //C
dat(0X2F); ///
dat(0X54); //T
dat(0X69); //i
dat(0X6E); //n
dat(0X79); //y
for(i=0;i<1000;i++)delay(1000); //Wait 1000ms
cmnd(0B00000001); //Clear LCD
delay(2000); //Wait 2ms
cmnd(0XC0); //DDRAM=40 Lower Line
dat(0XBA); //コ
dat(0XDD); //ン
dat(0XC6); //ニ
dat(0XC1); //チ
dat(0XCA); //ハ
dat(0X21); //!
for(i=0;i<1000;i++)delay(1000); //Wait 1000ms
}//while(1)
}


2008年3月27日木曜日

CT-208でR8CTinyの実行(アセンブラ)

まずはサンハヤトのCT-208でマイコンR8CTinyを動かしてみましょう
必要なもの
・USB端子の付いたパソコン
・CT-208(サンハヤト)
ルネサスよりCコンパイラ(HEW),デバッガ,FlashStarterをダウンロードする.

開発環境の準備
デバッガ,Cコンパイラ(HEW)の順にインストールする.
レジスタ定義ファイル(sfr_r815.inc)をc:\Renesas\nc30wa\v530r02\inc30に入れておく.

書き込みの準備
FlashStarterを展開して適当な場所C:\Renesas\FlashStarterなどに入れておく.
またUSBの仮想comドライバをダウンロードして,解凍する
CT-208をUSBを介してパソコンに接続したときに,ドライバの場所を指定すればドライバがインストールされる.デバイスマネージャでCOM○が認識されていることを確認する.

アセンブラプログラムの準備
HEWを起動し,新規プロジェクトワークスペースの作成
プロジェクトの種類:EmptyApplication
CPUSeries:R8C/Tiny
デバッガのTarget:M16CR8CFoUSB/UART
ファイルを新規作成しアセンブリプログラムを入力する
名前をつけて保存で,(プロジェクト名).a30で保存.
エディタ領域を右クリックし,プロジェクトにファイルを追加する
デバッグセッションをDeafaultSessionにし,ビルドコンフィギュレーションをReleaseにして,「すべてをビルド」を実行する.

プログラムの書き込み
CT-208のジャンパーをUSB側にセットし,スイッチはBOOT側にセットする.
CT-208をパソコンに接続し,CT-208のRESETボタンを押す.
FlashStarterフォルダのFlashStaを実行し,SelectProgramをInternalFlashMemoryにして,
COMポートを選択する.Referをクリックしfilepathにはプロジェクトのreleaseフォルダ内の○.motを選ぶ.
IDの空欄にすべてffを入れる.MCUTypeはR8Cを選択する.
E.P.Rをクリックすると消去,書き込みが自動的に行われる.
CT-208のSWをRUNにして,リセットボタンを押すとCT-208上で動作が確認できる.


以下はスイッチを押すとLEDが点灯するサンプルプログラムswtest.a30

;swtest.a30 簡単なR8/Cのサンプルプログラム 2008-3-25 minato
;SW1でLED1点灯,SW2でLED2点灯
;レジスタのシンボル(p1など)は小文字で!
.INCLUDE sfr_r815.inc
.SECTION PROGRAM, CODE
.ORG 0D000h
Start:
LDC #0500H,ISP ;スタックポインタの初期化(サブルーチンに必須)
BSET prc0 ; 外部クロック
BSET cm13
BSET cm15
BCLR cm05
BCLR cm16
BCLR cm17
BCLR cm06
NOP
NOP
NOP
NOP
BCLR ocd2
BCLR prc0 ; 外部クロックへの切り替え完了

MOV.B #00000110b, drr ; 駆動能力の設定
MOV.B #00000110b,p1 ; ポートに出力する初期値の設定
MOV.B #00000110b, pd1 ; ポートの方向を出力に設定

LOOP:
BTST 7,p1 ;SW1(P1_7)のビットテストC=src
JC LP1 ;C=1でジャンプ
BCLR 2,p1 ;LED1 ON
JMP LP2
LP1:
BSET 2,p1 ;LED1 OFF
LP2:
BTST 0,p1 ;SW2(P1_0)のビットテスト
JC LP3
BCLR 1,p1 ;LED2 ON
JMP LP4
LP3:
BSET 1,p1 ;LED2 OFF
LP4:
JMP LOOP ; LED点滅を繰り返す

.SECTION FIXVECTOR, ROMDATA ; リセットベクタ部分
.ORG 0FFFCh
Reset:
.LWORD Start | 0FF000000h ; 実行開始箇所
.END