2022.6.14
前へ
次へ
ホームページトップへ戻る


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

前へ
次へ
ホームページトップへ戻る