入出力プログラム
メロディのプログラム | センサープログラム | RCサーボの制御 | 入出力プログラム | モーターのPWM制御 | LEDの制御 | グループ学習 | 計測と制御
MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラ | MYU BASIC | MYUROBO転送ソフト | 構造化ドリトル | エクセルで制御 | エクセルで計測 | MYUアセンブラ
MYUUSB-1基板 | MYUROBO-1A基板 | ミュウロボ命令一覧 | 構造化ドリトル制御命令一覧

●入出力プログラム
MYUROBO-1基板はPIC16F630(688タイプは16F688)を使って入出力をコントロールしています。MYUロボにはロボットを制御する命令がいろいろありますが、ポートを理解するとさらに細かい制御プログラムを作ることができます。
※PIC16F630(688)のポートAはRA5以外入力用、ポートCは出力に設定されています。

<PIC16F630>
動作電圧 2.0V-5.5V
内部クロック 4MHz
タイマー1 125KHz
RA ポートA
RC ポートC

<入力ポート>
RA4 In1(リミットスイッチ)
RA3 シリアル信号入力用
RA2 In4
RA1 In3
RA0 In2
※RA0-RA2,RA4はプルアップされている

<出力ポート>
RA5 LEDと圧電ブザー用
RC5 S3,M2R
RC4 S2,M3L
RC3 S1,M3R
RC2 S6,M1L
RC1 S5,M1R
RC0 S4,M2L

◆入力ポート
In1からIn4は、センサーなどを接続するデジタル入力ポートです。In1にはリミットスイッチが標準で接続されています。これらの入力ポートはプルアップされていて入力が無い状態ではHighとなっています。Highは 1、Lowは 0 で表します。リミットスイッチが押されるとIn1(RA4)は 1 から 0 になります。
下はポートAのビット4(RA4)をチェックしてリミットスイッチ(In1)が押されたときブザーを鳴らすプログラム例です。
このプログラムではポートAのビット4(RA4)だけを調べていますがビット4は16進表記で&h10、10進表記で16です。これとポートAとAND演算を行うことで可能です。このようにAND演算して特定のビットだけを選別することをマスクするといいます。
同様にIn2はビット0(RA0)で1、In3はビット1(RA1)で2、In4はビット2(RA2)で4とポートAとAND演算することで各ポートの状態を判断できます。
※デジタル入力ポートやアナログ入力ポートにセンサーを接続した解説はこちら!

リミットスイッチが押されていない状態
PA(ポートA) ---1----
AND 16   00010000
-------------------
演算結果   00010000

リミットスイッチが押された状態
PA(ポートA) ---0----
AND 16   00010000
-------------------
演算結果   00000000

//MYU BASIC
Do
  If Not(PA AND &h10) Then
    Buzzer 1
  EndIf
Loop
//構造化ドリトル
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  「!PAA 16 AND ZERO」なら「!1 ブザー」実行
 」繰り返す
おわりロボット」。
ロボ太!転送命令。
//MYUROBO転送ソフト
アンカー,10 //アンカー番号10を宣言
  PAA   //ポートAの値をAレジスタにセット
  AND,16 //Aレジスタと16をAND演算
  JNZ,10 //0以外ならアンカー番号10にジャンプ
  ブザー,1
ジャンプ,10 //アンカー番号10にジャンプ

◆出力ポート
MYUROBO-1基板のポートC(RC0-RC5)はモータードライバに接続され3個もモーターを制御しています。RA5は基板のLEDやブザーを制御しています。これらの出力ポートは10mAぐらいの電流を出力できますのでLEDに数百オームの抵抗を接続して直接点灯させることも可能です。
これらのポートは'前進'や'ブザー'命令などを使ってコントロールできますが、ポート出力命令を使うと細かい制御ができます。PC命令を使ってポートCに直接出力することもできます。

●ポート出力命令
ポート出力命令を使うと3個のモーターを同時に動かしたり基板上のLEDを点滅するなどの制御が可能となります。

PortOut m,n    //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する (MYU BASIC
m n ポート出力   //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する (構造化ドリトル
ポート出力,m,n   //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する (MYUROBO転送ソフト

ポート出力命令の第2引数データn(0-255)は、ポートCの下位6ビットとポートAの5ビット目を組み合わせた値を指定します。
下は、組み合わせを表にしたものです。これを参考に動作を組み合わせていきます。

例えば、前進(5)とモーター左(16)を同時実行するには、それそれの値を加えた値(21)をポートに出力します。
 PortOut 10,21    //MYU BASIC:前進モーター左1秒
   10 21 ポート出力 //構造化ドリトル
   ポート出力,10,21   //MYUROBO転送ソフト

 PortOut 10,98    //MYU BASIC:後退LED消灯1秒
   10 98 ポート出力 //構造化ドリトル
   ポート出力,10,98  //MYUROBO転送ソフト

下は、基板のLEDを0.1秒ごとに点滅させるプログラムです。
※LEDとブザーは同じポートを使っています。LEDを点滅させるとブザーからも音が出ます。
//MYU BASIC
Do
  PortOut 1,64
  PortOut 1,0
Loop
//構造化ドリトル
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
   1 64 ポート出力
   1 0 ポート出力
 」繰り返す
おわりロボット」。
ロボ太!転送命令。
//MYUROBO転送ソフト
アンカー,10 //アンカー番号10を宣言
  ポート出力,1,64
  ポート出力,1,0
ジャンプ,10 //アンカー番号10にジャンプ

ポートC(PC)やポートA(PA)に直接、値を出力することもできます。時間(Wait)命令と組み合わせるとポート出力命令と同じ結果になります。

PC=<式>  PA=<式>        //MYU BASIC
Wait <式>

<定数> PC  <定数> PA        //構造化ドリトル
<定数> 時間

PC,<定数>  PA,<定数>        //MYUROBO転送ソフト
時間,<定数>

下は、PA命令を使って基板のLEDを0.1秒ごとに点滅させるプログラムです。回路図からポートAのビット5(RA5)を反転するとLEDが点滅します。
ビットを反転するにはXOR命令を使います。
//MYU BASIC
Do
  PA=PA XOR &h20 //PAのBIT5を反転
  Wait 1      //0.1秒のウエイト
Loop
//構造化ドリトル
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
 「!
  PAA   //PAの値をAレジスタにセット
  32 XOR //AレジスタのBIT5を反転
  APA   //Aレジスタの値をにPAに
  1 時間 //0.1秒のウエイト
 」繰り返す
おわりロボット」。
ロボ太!転送命令。
//MYUROBO転送ソフト
アンカー,10  //アンカー番号10を宣言
  PAA   //PAの値をAレジスタにセット
  XOR,32 //Aレジスタのビット5を反転
  APA   //Aレジスタの値をにPAに
  時間,1 //0.1秒のウエイト
ジャンプ,10 //アンカー番号10にジャンプ

※モーター制御命令などの出力命令は、出力命令以外の命令の間も出力状態を維持します。前進の後、ブザー命令を実行するとブザーを鳴らしながら前進します。