R8C/Tiny I/Oポートの仕組み
メモリ・マップトI/O方式 =メモリ・マップトI/O方式 SFR : Special Function Register(特殊機能レジスタ) メモリ・マップに内蔵モジュール機能を割り当てて使用する方式 =メモリ・マップトI/O方式
パソコンでのメモリへの書き込み プログラムをコンパイル C言語プログラム : 変数xに1を記憶 x=1; 外部メモリ 1 1 CPU 1 : 変数xに1を記憶 x=1; 外部メモリ CPU 1 1 変数xに割り当てられたメモリ 1
パソコンでのI/Oポートへの出力 C言語プログラム ポートアドレス100のI/Oポートに1を出力 : p0=100; : p0=100; ポートアドレス100のI/Oポートに1を出力 I/Oポート(メモリとは別) outp( p0 , 1); CPU ポート番号100のI/Oポート 1 5Vを外部へ出力 1
マイコンのメモリへの書き込み C言語プログラム : x=1; マイコン 内部メモリ CPUコア 1 変数xに割り当てられたメモリ
メモリの一部に割り当てられたSFR(特殊機能レジスタ) マイコンのI/Oポートへの出力 C言語プログラム : メモリの一部に割り当てられたSFR(特殊機能レジスタ) p1_1=1; マイコン 内部メモリ 変数p1_1に割り当てられたメモリ・アドレス 1 外部5Vを出力 1 CPUコア
サンプルプログラム SFRの定義(p1_1などが使えるようにしている) 関数のプロトタイプ宣言 I/Oポートの初期化 p1_7==0 #include “sfr_r815.h” void set_IO(void); Void main(void) { set_IO(); while(1){ if( p1_7 == 0){ p1_1 = 0; }else{ p1_1 = 1; } if( p3_ 3== 0){ p1_2 = 0; p1_2 = 1; p1_3 = ~ p1_3; for( i=0 ; i<10000 ; i++); Void set_IO(void) drr1 = 1; drr2 = 1; pd1_1 = 1; pd1_2 = 1; p1_3 = 1; SFRの定義(p1_1などが使えるようにしている) 関数のプロトタイプ宣言 I/Oポートの初期化 p1_7==0 ポートp1_7の電圧を読み込み0Vか確認(0VということはスイッチON) p1_1=0 ポートp1_1のLEDを点灯(0V出力時にLEDは光る) p1_3=~p1_3 ポートp1_3を反転 ダミーのループ (時間稼ぎ) drr1=1 ポートp1_1を大電流に設定(駆動能力が15mAになりLEDを点灯できる) pd1_1=1 ポートp1_1を出力に設定 p1_1=1 ポートp1_1の初期値を5Vに設定(LED消灯)
I/Oポートの仕組みテストプログラム void main(void){ *((char*)100)=0xFFFF; }