Warning, /sdk/ktechlab/po/nl/docs/ktechlab/microbe.docbook is written in an unsupported language. File is not indexed.

0001 <!-- kate: tab-width 2; indent-mode xml; -->
0002 <chapter id="microbe">
0003 <title
0004 >&microbe;</title>
0005 <sect1>
0006         <title
0007 >Inleiding en algemene syntaxis</title>
0008         <para
0009 ><application
0010 >Microbe</application
0011 > compileert programma's geschreven in de speciale taal voor PICs, en is een programma dat bij &ktechlab; hoort. De syntax is ontworpen voor een &flowcode; programma. De syntax voor het opstarten van <command
0012 >microbe</command
0013 > vanaf de commandoregel is: <programlisting
0014 >microbe [options] [input.microbe] [output.asm]</programlisting
0015 > waarbij de opties zijn: </para>
0016                 <itemizedlist>
0017                         <listitem
0018 ><para
0019 ><function
0020 >--show-source</function
0021 > - Voegt elke regel van de &microbe; broncode als commentaar toe aan de assembly uitvoer voor de assembly instructies zelf in die regel.</para
0022 ></listitem>
0023                         <listitem
0024 ><para
0025 ><function
0026 >--no-optimize</function
0027 > - Voorkomt optimalisatie van de uit de broncode gegenereerde instructies. Optimalisatie is normaal gesproken veilig, en daarom wordt deze optie hoofdzakelijk gebruikt bij debugging.</para
0028 ></listitem>
0029                 </itemizedlist>
0030                 
0031         <para
0032 >Het .microbe invoer-bestand moet de PIC identificeren door de PIC-naam aan het begin van het .microbe bestand te plaatsen; &eg; de naam van een PIC16F84 is "P16F84". <example
0033 ><title
0034 >Eenvoudig compleet &microbe; programma</title>
0035                         <programlisting role="correct"
0036 >P16F84
0037 
0038 a = 0
0039 repeat
0040 {
0041         PORTA = a
0042         a = a + 1
0043 }
0044 until a == 5
0045 
0046 end</programlisting>
0047                         </example>
0048                 </para>
0049 
0050         <sect2 id="namingconventions">
0051                 <title
0052 >Naamconventies</title>
0053                 <para
0054 >De volgende regels zijn van toepassing op namen van variabelen en labels: <itemizedlist>
0055                                 <listitem
0056 ><para
0057 >Ze kunnen alleen alfanumerieke tekens [a..z][A..Z][0..9] bevatten en de underscore "_".</para
0058 ></listitem>
0059                                 <listitem
0060 ><para
0061 >Ze zijn hoofdlettergevoelig.</para
0062 ></listitem>
0063                                 <listitem
0064 ><para
0065 >Ze mogen niet met een cijfer beginnen.</para
0066 ></listitem>
0067                                 <listitem
0068 ><para
0069 >Ze zouden niet mogen beginnen met <quote
0070 >__</quote
0071 > (dubbele underscore), omdat dit gereserveerd wordt voor gebruik door de compiler.</para
0072 ></listitem>
0073                         </itemizedlist>
0074                 </para>
0075         </sect2>
0076 
0077         <sect2 id="bracingconventions">
0078                 <title
0079 >Conventies voor haakjes</title>
0080                 <para
0081 >Accolades, {}, geven de start en het eind van een code block aan. U kunt ze overal voor de start en achter het eind van een code block plaatsen. Voorbeelden van acceptabele code blocks: <programlisting role="correct"
0082 >statement1 {
0083         enige code
0084 }</programlisting>
0085                 <programlisting role="correct"
0086 >statement2 {
0087         andere code }</programlisting>
0088                 
0089                 <programlisting role="correct"
0090 >statement3
0091 {
0092         andere code
0093 }</programlisting>
0094                 
0095                 <programlisting role="correct"
0096 >statement5 {
0097         codeblok
0098 } statement6</programlisting>
0099                         </para>
0100                 </sect2>
0101                 <sect2 id="commenting">
0102                         <title
0103 >Commentaar</title>
0104                         <para
0105 >Commentaar plaatsten gaat zoals bij C. // maakt van de rest van de regel commentaar. /* en */ geeft een meerregelige commentaar aan. <programlisting role="correct"
0106 >// dit is een commentaar
0107 x = 2 
0108 /* En dit is
0109 meerregelig commentaar */</programlisting>
0110                 </para>
0111         </sect2>
0112 
0113         <sect2 id="structure">
0114                 <title
0115 >Programma structuur</title>
0116                 <para
0117 >U moet de PIC id aan het begin van het programma toevoegen. Het eind van het hoofdprogramma geeft u aan met <quote
0118 >end</quote
0119 >. Subroutines moet u achter <quote
0120 >end</quote
0121 > plaatsen. </para>
0122         </sect2>
0123 
0124         <sect2 id="subroutines">
0125                 <title
0126 >Subroutines</title>
0127                 <para
0128 >U kunt van elke plaats in de code een subroutine aanroepen. Syntax: </para>
0129                 <programlisting role="correct"
0130 >sub SubName
0131 {
0132         // Code...
0133 }</programlisting>
0134 <para
0135 >De subroutine roept u aan met <quote
0136 >call <replaceable
0137 >SubName</replaceable
0138 ></quote
0139 >.</para>
0140         </sect2>
0141 </sect1>
0142 
0143 <sect1 id="languagereference">
0144         <title
0145 >Referentie &microbe; taal</title>
0146         <sect2 id="if">
0147                 <title
0148 >if</title>
0149                 <para
0150 >Conditionele tweesprong. Syntax: <programlisting role="correct"
0151 >if [expression] then [statement]</programlisting
0152 > of <programlisting role="correct">
0153 if [expression] then
0154 {
0155         [statement block]
0156 }</programlisting
0157 > Vergelijkbaar met else: <programlisting role="correct"
0158 >else [statement]</programlisting
0159 > of <programlisting role="correct"
0160 >else
0161 {
0162         [statement block]
0163 }</programlisting>
0164                         </para>
0165                         
0166                         <example
0167 ><title
0168 >if</title>
0169                         <programlisting role="correct"
0170 >if porta.0 is high then
0171 {
0172         delay 200
0173 }
0174 else
0175 {
0176         delay 300
0177 }</programlisting>
0178                 </example>
0179         </sect2>
0180         
0181         <sect2 id="alias">
0182                 <title
0183 >alias</title>
0184                 <para
0185 >Vervangt een tekenreeks door een ander als alias. Syntax: <programlisting role="correct"
0186 >alias [from] [to]</programlisting>
0187                 </para>
0188         </sect2>
0189         
0190         <sect2 id="repeat">
0191                 <title
0192 >repeat</title>
0193                 <para
0194 >Herhaalt het uitvoeren van het statement block uit totdat de expressie waar is. De controle of de expressie waar is, wordt na het statement block uitgevoerd, daarom zal de statement block altijd tenminste een keer worden uitgevoerd. Syntax: <programlisting role="correct"
0195 >repeat
0196 {
0197         [statement block]
0198 }
0199 until [expression]</programlisting>
0200         </para>
0201 </sect2>
0202 
0203 <sect2 id="while">
0204 <title
0205 >while</title>
0206         <para
0207 >Vergelijkbaar met repeat, dit herhaalt het uitvoeren van het statement block uit. Maar de controle of de expressie waar is wordt voor de de uitvoer gedaan, niet daarna. daarom zal als uitkomst van de controle op de expressie negatief is, de statement nooit worden uitgevoerd. Syntax: <programlisting role="correct"
0208 >while [expression]
0209 {
0210         [statement block]
0211 }</programlisting>
0212         </para>
0213 </sect2>
0214 
0215 
0216 <sect2 id="goto">
0217         <title
0218 >goto</title>
0219         <para
0220 >Dit zorgt dat het programma verdergaat met de volgende statement na het opgeven label. Goto syntax: <programlisting role="correct"
0221 ><function
0222 >goto</function
0223 > [labelname]</programlisting
0224 > Label syntax: <programlisting role="correct"
0225 ><function
0226 >labelname:</function
0227 ></programlisting
0228 > Het vermijden van het gebruik van goto wordt vaak als goed programmeren gezien. Het gebruik van control statements en subroutines zal resulteren in een beter leesbaar programma. </para>
0229         
0230         <example
0231 ><title
0232 >goto</title>
0233         <programlisting role="correct"
0234 >goto MyLabel
0235 
0236 ...
0237 
0238 [MyLabel]:
0239 // Code gaat verder op dit punt</programlisting>
0240                 </example>
0241         </sect2>
0242         
0243         <sect2 id="call">
0244                 <title
0245 >call</title>
0246                 <para
0247 >Roept een subroutine aan. Syntax: <programlisting role="correct"
0248 ><function
0249 >call</function
0250 > [SubName]</programlisting
0251 > waarbij <replaceable
0252 >SubName</replaceable
0253 > de naam van de subroutine is die u aanroept. </para>
0254         </sect2>
0255         
0256         <sect2 id="delay">
0257         <title
0258 >delay</title>
0259                 <para
0260 >Dit veroorzaakt dat het uitvoeren van de code voor de opgeven periode stopt. De interval is in millisecondes. Syntax: <programlisting role="correct"
0261 ><function
0262 >delay</function
0263 > [interval]</programlisting>
0264                 
0265                 <note
0266 ><para
0267 >Op dit moment, wordt door &microbe; aangenomen dat de PIC werkt met een kloksnelheid van 4MHz - &ie; elke instructie heeft 1 microseconde nodig om verwerkt te worden. Als dat niet het geval is, dan moet u de interval proportioneel aanpassen.</para
0268 ></note>
0269                 </para>
0270         </sect2>
0271         
0272         <sect2 id="sevenseg">
0273                 <title
0274 >sevenseg</title>
0275                 <para
0276 >Dit wordt gebruikt voor het definiëren van de pinbezetting van een (common cathode) zeven segment display verbonden met de PIC. Syntax: <programlisting role="correct"
0277 ><function
0278 >sevenseg</function
0279 > [name] [a] [b] [c] [d] [e] [f] [g]</programlisting
0280 > waar [a]...[g] de pinnen van de PIC zijn waarmee de respectievelijke segmenten van de zeven segment display zijn verbonden. De pinnen kunnen zowel als PORTX.N of RXN worden geschreven. </para>
0281                 
0282                 <para
0283 >Bij het tonen van een cijfer op de zeven segment, wordt de pin bezetting behandelt als een alleen lezen variabele. <example>
0284                                 <title
0285 >Een uitvoer naar een zeven segment definiëren</title>
0286                                 <programlisting role="correct"
0287 >sevenseg seg1 RB0 RB1 RB2 RB3 RB4 RB5 RB6
0288 seg1 = x + 2</programlisting>
0289                                 </example>
0290                 </para>
0291         </sect2>
0292         
0293         <sect2 id="keypad">
0294                 <title
0295 >toetsenbordje</title>
0296                 <para
0297 >Dit gebruikt u om de pinnen van een PIC te definiëren waaraan een toetsenbordje is verbonden. Syntax: <programlisting role="correct"
0298 ><function
0299 >keypad</function
0300 > [name] [rij 1] ... [rij 4] [colum 1] ... [colum n]</programlisting
0301 > waar [rij 1] ... [rij 4] en [colum 1] ... [colum n] de pinnen van de PIC zijn waaraan de respectievelijke rijen en kolommen van het toetsenbordje zijn verbonden (op dit moment kunt u het aantal rijen niet wijzigen). zie <xref linkend="sevenseg"/> (hierboven) voor meer informatie over pin bezetting. </para>
0302                 
0303                 <para
0304 >U moet de kolommen van het toetsenbord met 100k weerstanden omlaag trekken naar aarde. U moet de pinnen van de rijen als uitgang configureren en de pinnen van de kolommen als ingangen. Nadat het toetsenbordje is gedefinieerd, wordt het behandelt als een read only variabel. <example>
0305                                 <title
0306 >Een toetsenbord definiëren en uitlezen</title>
0307                                         <programlisting role="correct"
0308 >keypad keypad1 RB0 RB1 RB2 RB3 RB4 RB5 RB6
0309 x = keypad1</programlisting>
0310                         </example>
0311                 </para>
0312                         
0313                 <para
0314 >De waarden die u van een toetsenbord inleest zijn standaard: <itemizedlist
0315 > <listitem
0316 ><para
0317 >De waarde van het getal als het numerieke toets is (1 tot 3 voor de bovenste rij; hexadecimal A tot D langs de vierde kolom omlaag en verder voor elke extra kolom).</para
0318 ></listitem
0319 > <listitem
0320 ><para
0321 >253 voor de toets in rij 4, kolom 1.</para
0322 ></listitem
0323 > <listitem
0324 ><para
0325 >254 voor de toets in rij 4, kolom 3.</para
0326 ></listitem
0327 > </itemizedlist
0328 > U kunt deze waarden herdefiniëren door gebruik van het alias commando, waarbij de naam van de toets in rij x, kolom y (rijen en kolommen starten bij 1), is Keypad_x_y. Bijvoorbeeld, om de ster toets op een 4x3 toetsenbord de waarde nul te geven, moet u de volgende alias gebruiken: <example>
0329                                 <title
0330 >De toets van een toetsenbord vervangen door een waarde</title>
0331                                 <programlisting role="correct"
0332 >alias Keypad_4_1 0</programlisting>
0333                         </example>
0334                 </para>
0335         </sect2>
0336 </sect1>
0337 
0338 <sect1 id="picio">
0339 <title
0340 >PIC I/O</title>
0341         
0342         <sect2 id="tristate">
0343         <title
0344 >Poort richting</title>
0345                 <para
0346 >De poort richting stelt u in door een waarde toe te kennen aan TRIS*, waar * de poortletter is. Als voorbeeld: </para>
0347                 <example
0348 ><title
0349 >Poort richtingen instellen</title>
0350                 <programlisting role="correct"
0351 >TRISB = b'01111001'</programlisting>
0352                 </example>
0353                 <para
0354 >Dit hierboven stelt de pinnen RB1, RB2 en RB7 op PORTB in als uitgangen, en de andere pinnen op PORTB als ingangen. In dit voorbeeld is b'01111001' een binaire representatie van het output type. De 1 aan de rechterkant stelt een uitgang op RB0 voor, en de 0 aan de linkerkant stelt een ingang op RB7 voor. </para>
0355         </sect2>
0356         
0357         <sect2 id="ports">
0358         <title
0359 >Port I/O</title>
0360                 <para
0361 >U kunt een poort behandelen alsof het een variabele is. Bijvoorbeeld: </para>
0362                 
0363                 <example
0364 ><title
0365 >Naar een poort schrijven</title>
0366                 <programlisting role="correct"
0367 >x = PORTA</programlisting>
0368                 </example>
0369                 
0370                 <para
0371 >Dit hierboven koppelt de waarde van PORTA aan de variabele x. </para>
0372         </sect2>
0373         
0374         <sect2 id="pins">
0375         <title
0376 >Pin I/O</title>
0377                 <para
0378 >De pin van een poort kunt u krijgen door het pinnummer vooraf te laten gaan door de naam van de poort; &eg; Pin 2 (startend van Pin 0) van PORTA is bekend als <emphasis
0379 >PORTA.0</emphasis
0380 >. De syntax voor het instellen van de status van een pin is: <programlisting role="correct"
0381 >PORTX.N = <emphasis
0382 >STATE</emphasis
0383 ></programlisting
0384 > waar <emphasis
0385 >STATE</emphasis
0386 > kan zijn <emphasis
0387 >hoog</emphasis
0388 > of <emphasis
0389 >laag</emphasis
0390 >. De syntax voor het testen van de status van een pin is: <programlisting role="correct"
0391 ><function
0392 >if</function
0393 > PORTX.N is <emphasis
0394 >STATE</emphasis
0395 > <function
0396 >then</function
0397 ></programlisting
0398 > Door deze voorbeelden te combineren krijgen we: </para>
0399                 <example
0400 ><title
0401 >Testen en instellen van de pin-status</title>
0402                 <programlisting role="correct"
0403 >TRISA = 0
0404 TRISB = 255
0405 <function
0406 >if</function
0407 > PORTA.3 is <function
0408 >high</function
0409 > <function
0410 >then</function>
0411 {
0412         PORTB.5 = <function
0413 >low</function>
0414 }
0415 <function
0416 >else</function>
0417 {
0418         PORTB = PORTA + 15
0419 }</programlisting>
0420                 </example>
0421         </sect2>
0422 </sect1>
0423         
0424 <sect1 id="variables">
0425 <title
0426 >Variabelen</title>
0427         <para
0428 >Alle variabelen zijn 8-bit unsigned integers, in de range van 0 tot 255. <application
0429 >&microbe;</application
0430 > ondersteund de standaard bewerkingen met maar een variabele en binaire bewerkingen (werkend met twee variabelen) die door de PIC kunnen worden uitgevoerd. Daarnaast ondersteund &microbe; ook delen en vermenigvuldigen. </para>
0431         <sect2 id="unary">
0432         <title
0433 >Bewerkingen met één variabele</title>
0434                 <para>
0435                 <itemizedlist>
0436                 <listitem
0437 ><para
0438 ><emphasis
0439 >rotateleft x</emphasis
0440 > - Verschuift de bits van variabele X naar links, waarbij de bit die links eraf valt weer rechts wordt toegevoegd.</para
0441 ></listitem>
0442                 <listitem
0443 ><para
0444 ><emphasis
0445 >rotateright x</emphasis
0446 > - Verschuift de bits van variabele X naar rechts, waarbij de bit die rechts eraf valt weer links wordt toegevoegd.</para
0447 ></listitem>
0448                 <listitem
0449 ><para
0450 ><emphasis
0451 >increment x</emphasis
0452 > - Verhoogt de variabele x met 1. Als x de waarde van 255 heeft, dan klapt x om naar 0.</para
0453 ></listitem>
0454                 <listitem
0455 ><para
0456 ><emphasis
0457 >decrement x</emphasis
0458 > - Vermindert de variabele x met 1. Als x de waarde van 0 heeft, dan klapt x om naar 255.</para
0459 ></listitem>
0460                 </itemizedlist>
0461                 </para>
0462         </sect2>
0463         
0464         <sect2 id="arithmetic">
0465         <title
0466 >Rekenen</title>
0467                 <para
0468 >Ondersteunde bewerkingen: <itemizedlist>
0469                 <listitem
0470 ><para
0471 ><emphasis
0472 >Optellen:</emphasis
0473 > x + y</para
0474 ></listitem>
0475                 <listitem
0476 ><para
0477 ><emphasis
0478 >Aftrekken:</emphasis
0479 > x - y</para
0480 ></listitem>
0481                 <listitem
0482 ><para
0483 ><emphasis
0484 >Vermenivuldigen:</emphasis
0485 > x * y</para
0486 ></listitem>
0487                 <listitem
0488 ><para
0489 ><emphasis
0490 >Delen:</emphasis
0491 > x / y</para
0492 ></listitem>
0493                 <listitem
0494 ><para
0495 ><emphasis
0496 >Binaire XOR:</emphasis
0497 > x XOR y</para
0498 ></listitem>
0499                 <listitem
0500 ><para
0501 ><emphasis
0502 >Binaire AND:</emphasis
0503 > x AND y</para
0504 ></listitem>
0505                 <listitem
0506 ><para
0507 ><emphasis
0508 >Binaire OR:</emphasis
0509 > x OR y</para
0510 ></listitem>
0511                 </itemizedlist>
0512                 </para>
0513         </sect2>
0514         
0515         <sect2 id="comparison">
0516         <title
0517 >Vergelijken</title>
0518         <para
0519 >Ondersteunde bewerkingen: </para>
0520         <itemizedlist>
0521         <listitem
0522 ><para
0523 ><emphasis
0524 >Is gelijk aan:</emphasis
0525 > x == y</para
0526 ></listitem>
0527         <listitem
0528 ><para
0529 ><emphasis
0530 >Is niet gelijk aan:</emphasis
0531 > x != y</para
0532 ></listitem>
0533         <listitem
0534 ><para
0535 ><emphasis
0536 >Is groter dan:</emphasis
0537 > x 
0538 > y</para
0539 ></listitem>
0540         <listitem
0541 ><para
0542 ><emphasis
0543 >Is kleiner dan:</emphasis
0544 > x &lt; y</para
0545 ></listitem>
0546         <listitem
0547 ><para
0548 ><emphasis
0549 >Is groter of gelijk aan:</emphasis
0550 > x &gt;= y</para
0551 ></listitem>
0552         <listitem
0553 ><para
0554 ><emphasis
0555 >Is kleiner of gelijk aan:</emphasis
0556 > x &lt;= y</para
0557 ></listitem>
0558         </itemizedlist>
0559         
0560         <para
0561 >Bijvoorbeeld: </para>
0562         <example
0563 ><title
0564 >Vergelijken</title>
0565         <programlisting role="correct"
0566 ><function
0567 >if</function
0568 > PORTA 
0569 >= 5 <function
0570 >then</function>
0571 {
0572         ...
0573 }</programlisting>
0574         </example>
0575         </sect2>
0576 </sect1>
0577 
0578 <!--
0579 <sect1 id="interrupts">
0580 <title
0581 >Interrupts</title>
0582         <para>
0583         There are several types of events, and some of these take an optional parameter making
0584         the condition under which the routine is called more specific.
0585         <itemizedlist>
0586         <listitem
0587 ><para
0588 ><emphasis
0589 >change &lt;pin name&gt;</emphasis>
0590                  - Occurs when the state of the specified pin changes. Pin name is in the usual syntax of PORTX.n, &eg; <programlisting
0591 >interrupt change PORTB.4</programlisting
0592 ></para
0593 ></listitem>
0594         <listitem
0595 ><para
0596 ><emphasis
0597 >timer</emphasis
0598 > - ///TODO</para
0599 ></listitem>
0600         <listitem
0601 ><para
0602 ><emphasis
0603 >external</emphasis
0604 > - ///TODO</para
0605 ></listitem>
0606         </itemizedlist>
0607         </para>
0608 </sect1>
0609 -->
0610 </chapter>