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