Unterprogramme aufrufen mit case

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Hier hast Du ja schon mal die richtige Syntax für die Select Case-Anweisung verwendet, warum dann nicht in der anderen Software. Und die Fehlermeldungen für die If-Konstruktion gehen weg, wenn Du meine Hinweise beachtest, denn auch hier kommt es auf die richtige Struktur der Befehlsanordnung an.
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • Und die Zeilenumbrüche müssen vorhanden sein, entweder wie im Beispielcode von Ulrich oder wie hier (die Doppelpunkte sind gleichbedeutend wie Zeilenumbrüche):

      BASCOM-Quellcode

      1. If Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 0 then : gosub LED1
      2. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 0 then : gosub LED2
      3. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 0 then : gosub LED3
      4. elseIf Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 1 then : gosub LED4
      5. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 1 then : gosub LED5
      6. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 1 then : gosub LED6
      7. end if
    • Also so:

      jetzt kommen keine Fehlermeldungen mehr.

      Quellcode

      1. '****************************
      2. ' RGB MB
      3. '****************************
      4. $regfile = "m88def.dat"
      5. $hwstack = 40
      6. $swstack = 16
      7. $framesize = 32
      8. $crystal = 8000000
      9. Config PortD = Output
      10. Config PortB = Output
      11. Config PINC.0 = Input
      12. Config PINc.1 = Input
      13. Config Pinc.2 = Input
      14. RMOD1 Alias Portd.0
      15. BMOD1 Alias Portd.1
      16. GMOD1 Alias Portd.2
      17. RMOD2 Alias Portd.3
      18. BMOD2 Alias Portd.4
      19. GMOD2 Alias Portd.5
      20. RMOD3 Alias Portd.7
      21. BMOD3 Alias Portd.6
      22. GMOD3 Alias Portb.0
      23. Eingang1 Alias PORTC.0
      24. Eingang2 Alias PORTC.1
      25. Eingang3 Alias PORTC.2
      26. Do
      27. If Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 0 then:gosub LED1
      28. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 0 then:gosub LED2
      29. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 0 then:gosub LED3
      30. elseIf Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 1 then:gosub LED4
      31. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 1 then:gosub LED5
      32. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 1 then:gosub LED6
      33. end if
      34. loop
      35. end
      36. LED1:
      37. GMOD1 = 1
      38. Return
      39. LED2:
      40. GMOD2 = 1
      41. Return
      42. LED3:
      43. GMOD3 = 1
      44. Return
      45. LED4:
      46. RMOD1 = 1
      47. Return
      48. LED5:
      49. RMOD2 = 1
      50. Return
      51. LED6:
      52. RMOD3 = 1
      53. Return
      Alles anzeigen
    • Quellcode

      1. If Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 0 then 'alle Anweisungen die für LED1 gelten sollen
      2. Anweisung1
      3. Anweisung2
      4. Anweisung3
      5. Else If Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 0 then 'alle Anweisungen die für LED2 gelten sollen
      6. Anweisung5
      7. Else If Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 0 then 'alle Anweisungen die für LED gelten sollen
      8. Anweisung6
      9. Anweisung7
      10. Else If Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 1 then 'alle Anweisungen die für LED4 gelten sollen
      11. Anweisung8
      12. Else If Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 1 then 'alle Anweisungen die für LED5 gelten sollen
      13. Anweisung9
      14. Else if Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 1 then 'alle Anweisungen die für LED6 gelten sollen
      15. AnweisungXY
      16. Else 'alle Anweisungen die gelten wenn keine der vorstehenden Bedingung erfüllt ist
      17. AnweisungZ ' oder leer wenn kein Bedarf
      18. End if
      Alles anzeigen
      Da ist doch eigentlich nichts Schweres dran. Man muß sich nur an die Struktur halten. Und natürlich kann man auch einzelne Else If-Zweige oder den Else-Zweig weglassen wenn dafür kein Bedarf besteht. Aber wissen muß man schon was usammengehört und was es bedeutet. Der Code von Dieter ist sicherlich kürzer aber das Problem besteht doch darin zu begreifen wie die einzelnen Befehlskonstrukte aufgebaut und verwendet werden. Und die Hilfe von Bascom ist um vieles Besser als bei mancher anderen Programmiersprache.

      *Die Fehlermeldung sagt übrigens nichts anderes aus als das zu viele Argumente für den Befehl angegeben sind weil die Syntax falsch ist.
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • hasta schrieb:

      Nicht ganz Richtig.
      Die normale If-Then-Elseif-Else-End-Struktur versteht auch Else If als gültig.

      Ich bin da altmodisch: Wenn es in der Hilfe als ein Wort steht, dann gehe ich davon aus, dass das so sein soll.
      Wenn der Compiler es als zwei Wörter auch akzeptieren sollte, dann ist das nett von ihm, aber darauf verlassen, dass es nach dem nächsten Update immer noch so ist, kann man sich dann sicherlich nicht.
    • Danke für eure Hilfe,

      anbei der Code:

      Quellcode

      1. '****************************
      2. ' RGB MB
      3. '****************************
      4. $regfile = "m88def.dat"
      5. $hwstack = 40
      6. $swstack = 16
      7. $framesize = 32
      8. $crystal = 8000000
      9. Config PortD = Output
      10. Config PortB = Output
      11. Config PINC.0 = Input
      12. Config PINc.1 = Input
      13. Config Pinc.2 = Input
      14. RMOD1 Alias Portd.0
      15. BMOD1 Alias Portd.1
      16. GMOD1 Alias Portd.2
      17. RMOD2 Alias Portd.3
      18. BMOD2 Alias Portd.4
      19. GMOD2 Alias Portd.5
      20. RMOD3 Alias Portd.7
      21. BMOD3 Alias Portd.6
      22. GMOD3 Alias Portb.0
      23. Eingang1 Alias PINC.0
      24. Eingang2 Alias PINC.1
      25. Eingang3 Alias PINC.2
      26. Do
      27. RMOD1 = 0
      28. RMOD2 = 0
      29. RMOD3 = 0
      30. GMOD1 = 0
      31. GMOD2 = 0
      32. GMOD3 = 0
      33. BMOD1 = 0
      34. BMOD2 = 0
      35. BMOD3 = 0
      36. If Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 0 then:gosub LED1
      37. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 0 then:gosub LED2
      38. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 0 then:gosub LED3
      39. elseIf Eingang1 = 1 and Eingang2 = 0 and Eingang3 = 1 then:gosub LED4
      40. elseIf Eingang1 = 0 and Eingang2 = 1 and Eingang3 = 1 then:gosub LED5
      41. elseIf Eingang1 = 1 and Eingang2 = 1 and Eingang3 = 1 then:gosub LED6
      42. end if
      43. loop
      44. end
      45. LED1:
      46. RMOD3 = 1
      47. RMOD1 = 0
      48. RMOD2 = 0
      49. GMOD1 = 0
      50. GMOD2 = 0
      51. GMOD3 = 0
      52. BMOD1 = 0
      53. BMOD2 = 0
      54. BMOD3 = 0
      55. Return
      56. LED2:
      57. GMOD2 = 1
      58. RMOD1 = 0
      59. RMOD2 = 1
      60. RMOD3 = 0
      61. GMOD1 = 0
      62. GMOD3 = 0
      63. BMOD1 = 0
      64. BMOD2 = 0
      65. BMOD3 = 0
      66. waitms 1
      67. GMOD2 = 0
      68. RMOD1 = 0
      69. RMOD2 = 1
      70. RMOD3 = 0
      71. GMOD1 = 0
      72. GMOD3 = 0
      73. BMOD1 = 0
      74. BMOD2 = 0
      75. BMOD3 = 0
      76. waitms 2
      77. Return
      78. LED3:
      79. GMOD3 = 0
      80. RMOD1 = 0
      81. RMOD2 = 0
      82. RMOD3 = 0
      83. GMOD1 = 1
      84. GMOD2 = 0
      85. GMOD3 = 0
      86. BMOD1 = 0
      87. BMOD2 = 0
      88. BMOD3 = 0
      89. Return
      90. LED4:
      91. RMOD1 = 0
      92. RMOD2 = 0
      93. RMOD3 = 1
      94. GMOD1 = 0
      95. GMOD2 = 0
      96. GMOD3 = 0
      97. BMOD1 = 0
      98. BMOD2 = 0
      99. BMOD3 = 0
      100. waitms 500
      101. RMOD1 = 0
      102. RMOD2 = 0
      103. RMOD3 = 0
      104. GMOD1 = 0
      105. GMOD2 = 0
      106. GMOD3 = 0
      107. BMOD1 = 0
      108. BMOD2 = 0
      109. BMOD3 = 0
      110. waitms 300
      111. Return
      112. LED5:
      113. GMOD2 = 1
      114. RMOD1 = 0
      115. RMOD2 = 1
      116. RMOD3 = 0
      117. GMOD1 = 0
      118. GMOD3 = 0
      119. BMOD1 = 0
      120. BMOD2 = 0
      121. BMOD3 = 0
      122. waitms 500
      123. GMOD2 = 0
      124. RMOD1 = 0
      125. RMOD2 = 0
      126. RMOD3 = 0
      127. GMOD1 = 0
      128. GMOD3 = 0
      129. BMOD1 = 0
      130. BMOD2 = 0
      131. BMOD3 = 0
      132. waitms 300
      133. Return
      134. LED6:
      135. GMOD2 = 0
      136. RMOD1 = 0
      137. RMOD2 = 0
      138. RMOD3 = 0
      139. GMOD1 = 1
      140. GMOD3 = 0
      141. BMOD1 = 0
      142. BMOD2 = 0
      143. BMOD3 = 0
      144. waitms 500
      145. GMOD2 = 0
      146. RMOD1 = 0
      147. RMOD2 = 0
      148. RMOD3 = 0
      149. GMOD1 = 0
      150. GMOD3 = 0
      151. BMOD1 = 0
      152. BMOD2 = 0
      153. BMOD3 = 0
      154. waitms 300
      155. Return
      Alles anzeigen
    • Hallo Six1 ,

      meinst du das aus dem Datenblatt

      The device is shipped with internal RC oscillator at 8.0MHz and with the fuse CKDIV8 programmed, resulting in1.0MHz system clock. The startup time is set to maximum and time-out period enabled. (CKSEL = "0010", SUT= "10", CKDIV8 = "0"). The default setting ensures that all users can make their desired clock source settingusing any available programming interface
    • ...aus der hilfe:

      Die $CRYSTAL Direktive teilt dem Compiler lediglich die Frequenz mit. Sie setzt kein Fuse-Bit. Die Frequenz muss dem Compiler aus verschiedenen Gründen bekannt sein. Erstens kann der Compiler bei Verwendung serieller Kommunikation und Spezifizierung von $BAUD den passenden Wert für das UBR-Register berechnen. Zweitens gibt es einige interne Routinen wie zum Beispiel WAITMS die die Ausführungszeiten von Schleifen nutzen um Wartezeiten zu erzeugen. Wenn $CRYSTAL = 1000000 (1 MHz) im Programm steht aber in Wirklichkeit ein 4 MHz Takt angeschlossen ist dann kann man feststellen, dass alles 4 mal schneller läuft.
      Code first, think later - Natural programmer :D