PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第12回]
●配列
このところPIC−USBIO用のBASICについて書いています。
肝心のPIC−USBIOそのものについても書かなければならないのですが、ソフトウェアを準備しないことには動作テストをすることもできません。
もっとも今のところPIC−USBIOの機能は単純なI/Oなのでそれを制御する程度のソフトウェアはすでにできています。
BASICについて書き始めた当初はまだPIC−USBIOのプリント基板を発注したばかりのときだったので、それが出来てくるまでの間とりあえずソフトウェアの説明から始めようということで書き始めたのでした。
現在はそのプリント基板も出来てきて試作テストのために部品の実装も済んでおります。
簡単なテストプログラムならばいつでもテストしてそれを記事としてUPすることもできるのですが、せっかくBASICについて書き始めてしまったのですから区切りがつくまでしばらくこのままBASICについて書きたいと思っています。
それで。
今回は配列です。
もともと当BASICはPIC−USBIO専用のソフトウェアとして作り始めたものですので、当初は最低限必要な機能にとどめて簡単なものにするつもりでした。
しかし作業を進めていくとやっぱりあれもあるといい、これもあるといい、という具合にどんどん機能がふくらんでいってしまいます。
PIC−USBIOを制御するために配列まで要るのかということになるとそれはちょっと疑問なのですけれど、やっぱりBASICとしては一応配列もあったほうが格好がよいではないか、とまあそんな気持ちで作ってしまいました。
それも当初は1次元配列でいいだろうと思ったのですが、作ってしまうとやっぱりせめて3次元まであったほうがカッコイイじゃないか、ということで3次元配列になってしまいました。
今のところ整数型のみで文字型の配列はありません。
ということで、下は3次元配列のテストプログラムです。
プログラムが少し長くなりますから画面コピーではなくてログで示します。
*** pic i/o *** pic i/oが接続されていないか電源が入っていません >/load test61.txt loading test61.txt ...22lines read ok >list 10 print "start" 20 dim xyz(10,5,3) 30 n=0 40 for i=0 to 10 50 for j=0 to 5 60 for k=0 to 3 70 xyz(i,j,k)=n 80 n=n+1 90 next k 100 next j 110 next i 120 print "***" 130 n=0 140 for i=0 to 10 150 for j=0 to 5 160 for k=0 to 3 170 print n,i,j,k,xyz(i,j,k) 180 n=n+1 190 next k 200 next j 210 next i 220 print "end" |
DIM 配列名(x,y,z)
DIMは配列の定義を行なう命令です。
プログラムの先頭部分(実際に配列を使うよりも前の部分)でDIM文で配列を定義します。
上記は3次元の配列の定義ですが2次元ならば
DIM 配列名(x,y)
になりますし1次元なら
DIM 配列名(x)
と記述します。
1個のDIM文で下のように複数の配列を定義することもできます。
DIM 配列名1(x,y),配列名2(z),…
複数の配列を定義するときは配列と配列の間を , (カンマ)で区切ります。
配列名は一般の変数名と同じように英数文字列で表しますが配列名と一般の変数名とで同じ文字列の並びを使うことはできません。
abc(10)とabcは不可です。
abc(10)とabは構いません。
上記例のx,y,zの値とそのように定義したときの配列要素の数との関係はC言語の場合と異なっていることに注意してください。
C言語でたとえばchar abc[10];と定義した場合、配列要素はabc[0]…abc[9]の10個です(abc[10]はありません)。
BASICのDIM文でDIM abc(10)と定義した場合には配列要素はabc(0)…abc(10)の11個となります。
下は上のプログラムを実行した結果のログです。
ちょっと長いですがDIM文で定義した配列がルール通りに使われていることの確認のテストですのでご理解ください。
また3次元配列の要素と添字(カッコの中に記す要素番号)との関係を理解するのにも役立つと思いますのでプログラムと照らし合わせながら数値を追ってみてください。
>run start *** 0 0 0 0 0 1 0 0 1 1 2 0 0 2 2 3 0 0 3 3 4 0 1 0 4 5 0 1 1 5 6 0 1 2 6 7 0 1 3 7 8 0 2 0 8 9 0 2 1 9 10 0 2 2 10 11 0 2 3 11 12 0 3 0 12 13 0 3 1 13 14 0 3 2 14 15 0 3 3 15 16 0 4 0 16 17 0 4 1 17 18 0 4 2 18 19 0 4 3 19 20 0 5 0 20 21 0 5 1 21 22 0 5 2 22 23 0 5 3 23 24 1 0 0 24 25 1 0 1 25 26 1 0 2 26 27 1 0 3 27 28 1 1 0 28 29 1 1 1 29 30 1 1 2 30 31 1 1 3 31 32 1 2 0 32 33 1 2 1 33 34 1 2 2 34 35 1 2 3 35 36 1 3 0 36 37 1 3 1 37 38 1 3 2 38 39 1 3 3 39 40 1 4 0 40 41 1 4 1 41 42 1 4 2 42 43 1 4 3 43 44 1 5 0 44 45 1 5 1 45 46 1 5 2 46 47 1 5 3 47 48 2 0 0 48 49 2 0 1 49 50 2 0 2 50 51 2 0 3 51 52 2 1 0 52 53 2 1 1 53 54 2 1 2 54 55 2 1 3 55 56 2 2 0 56 57 2 2 1 57 58 2 2 2 58 59 2 2 3 59 60 2 3 0 60 61 2 3 1 61 62 2 3 2 62 63 2 3 3 63 64 2 4 0 64 65 2 4 1 65 66 2 4 2 66 67 2 4 3 67 68 2 5 0 68 69 2 5 1 69 70 2 5 2 70 71 2 5 3 71 72 3 0 0 72 73 3 0 1 73 74 3 0 2 74 75 3 0 3 75 76 3 1 0 76 77 3 1 1 77 78 3 1 2 78 79 3 1 3 79 80 3 2 0 80 81 3 2 1 81 82 3 2 2 82 83 3 2 3 83 84 3 3 0 84 85 3 3 1 85 86 3 3 2 86 87 3 3 3 87 88 3 4 0 88 89 3 4 1 89 90 3 4 2 90 91 3 4 3 91 92 3 5 0 92 93 3 5 1 93 94 3 5 2 94 95 3 5 3 95 96 4 0 0 96 97 4 0 1 97 98 4 0 2 98 99 4 0 3 99 100 4 1 0 100 101 4 1 1 101 102 4 1 2 102 103 4 1 3 103 104 4 2 0 104 105 4 2 1 105 106 4 2 2 106 107 4 2 3 107 108 4 3 0 108 109 4 3 1 109 110 4 3 2 110 111 4 3 3 111 112 4 4 0 112 113 4 4 1 113 114 4 4 2 114 115 4 4 3 115 116 4 5 0 116 117 4 5 1 117 118 4 5 2 118 119 4 5 3 119 120 5 0 0 120 121 5 0 1 121 122 5 0 2 122 123 5 0 3 123 124 5 1 0 124 125 5 1 1 125 126 5 1 2 126 127 5 1 3 127 128 5 2 0 128 129 5 2 1 129 130 5 2 2 130 131 5 2 3 131 132 5 3 0 132 133 5 3 1 133 134 5 3 2 134 135 5 3 3 135 136 5 4 0 136 137 5 4 1 137 138 5 4 2 138 139 5 4 3 139 140 5 5 0 140 141 5 5 1 141 142 5 5 2 142 143 5 5 3 143 144 6 0 0 144 145 6 0 1 145 146 6 0 2 146 147 6 0 3 147 148 6 1 0 148 149 6 1 1 149 150 6 1 2 150 151 6 1 3 151 152 6 2 0 152 153 6 2 1 153 154 6 2 2 154 155 6 2 3 155 156 6 3 0 156 157 6 3 1 157 158 6 3 2 158 159 6 3 3 159 160 6 4 0 160 161 6 4 1 161 162 6 4 2 162 163 6 4 3 163 164 6 5 0 164 165 6 5 1 165 166 6 5 2 166 167 6 5 3 167 168 7 0 0 168 169 7 0 1 169 170 7 0 2 170 171 7 0 3 171 172 7 1 0 172 173 7 1 1 173 174 7 1 2 174 175 7 1 3 175 176 7 2 0 176 177 7 2 1 177 178 7 2 2 178 179 7 2 3 179 180 7 3 0 180 181 7 3 1 181 182 7 3 2 182 183 7 3 3 183 184 7 4 0 184 185 7 4 1 185 186 7 4 2 186 187 7 4 3 187 188 7 5 0 188 189 7 5 1 189 190 7 5 2 190 191 7 5 3 191 192 8 0 0 192 193 8 0 1 193 194 8 0 2 194 195 8 0 3 195 196 8 1 0 196 197 8 1 1 197 198 8 1 2 198 199 8 1 3 199 200 8 2 0 200 201 8 2 1 201 202 8 2 2 202 203 8 2 3 203 204 8 3 0 204 205 8 3 1 205 206 8 3 2 206 207 8 3 3 207 208 8 4 0 208 209 8 4 1 209 210 8 4 2 210 211 8 4 3 211 212 8 5 0 212 213 8 5 1 213 214 8 5 2 214 215 8 5 3 215 216 9 0 0 216 217 9 0 1 217 218 9 0 2 218 219 9 0 3 219 220 9 1 0 220 221 9 1 1 221 222 9 1 2 222 223 9 1 3 223 224 9 2 0 224 225 9 2 1 225 226 9 2 2 226 227 9 2 3 227 228 9 3 0 228 229 9 3 1 229 230 9 3 2 230 231 9 3 3 231 232 9 4 0 232 233 9 4 1 233 234 9 4 2 234 235 9 4 3 235 236 9 5 0 236 237 9 5 1 237 238 9 5 2 238 239 9 5 3 239 240 10 0 0 240 241 10 0 1 241 242 10 0 2 242 243 10 0 3 243 244 10 1 0 244 245 10 1 1 245 246 10 1 2 246 247 10 1 3 247 248 10 2 0 248 249 10 2 1 249 250 10 2 2 250 251 10 2 3 251 252 10 3 0 252 253 10 3 1 253 254 10 3 2 254 255 10 3 3 255 256 10 4 0 256 257 10 4 1 257 258 10 4 2 258 259 10 4 3 259 260 10 5 0 260 261 10 5 1 261 262 10 5 2 262 263 10 5 3 263 end |
1回の表示あたり5個の数値があります。
最初の数は表示回数nの値です。
その次の3個は添字i、j、kの値です。
最後の数は添字の値がi、j、kのときの配列要素つまりxyz(i,j,k)の値です。
このプログラムでは先に全配列要素に対してi、j、kを順に変えながらそのときのnの値をその配列要素に代入しています。
全ての代入が終ったあとで全配列要素の値を読み出して表示しています。
書き込んだときのnの値が正しく読み出せれば各行の1番目のnの値とそのときのxyz(i,j,k)の値が一致するはずです。
上記の実行結果はそのようになっています。
なおDIM文で定義したxyz(10,5,3)の全配列要素の数は11*6*4=264です。
nは0から始まっていますからnの最終値は263になります。
上記の実行結果はその計算と一致しています。
PIC−USBIO using BASIC[第12回]
2022.6.14upload
前へ
次へ
ホームページトップへ戻る