CAN Empfang und in Variable kopieren

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • CAN Empfang und in Variable kopieren

      Hallo Leute,

      kann ich das so machen?
      Muss ich bei den Array 0 to 7 schreiben oder 1 to 8?
      Kann ich mit dem Index auch auf Canreceive zugreifen?

      BASCOM Source Code

      1. Select Case _canid
      2. Case &H351 :
      3. For Index = 0 To 7
      4. Recived_351(index) = Canreceive(index)
      5. Next
      6. Case &H354:
      7. For Index = 0 To 7
      8. Recived_354(index) = Canreceive(index)
      9. Next
      10. Case &H354 :
      11. For Index = 0 To 7
      12. Recived_354(index) = Canreceive(index)
      13. Next
      14. Case &H355 :
      15. For Index = 0 To 7
      16. Recived_355(index) = Canreceive(index)
      17. Next
      18. Case &H356 :
      19. For Index = 0 To 7
      20. Recived_356(index) = Canreceive(index)
      21. Next
      22. Case &H359 :
      23. For Index = 0 To 7
      24. Recived_359(index) = Canreceive(index)
      25. Next
      26. End Select
      Display All
    • AlexW wrote:

      Muss ich bei den Array 0 to 7 schreiben oder 1 to 8?
      Das kommt darauf an welche Basis du verwenden möchtest.
      Die must du BasCom mit dem Befehl
      Config Base = 0 ' fuer Basis 0, dann beginnt ein Array mit 0
      oder
      Config Base = 1 ' fuer Basis 1, dann beginnt ein Array mit 1
      mitteilen.
      Diese Zuweisung gilt dann für das ganze Programm und kann nicht nach "belieben" verändert werden.
      Beim dimensionieren mußt du aber immer die Anzahl der Arrayelemente angeben.
    • Moin,

      was ich da geschrieben habe ist totaler Müll.

      1. For Index = 0 To 7
      2. Recived_351(index) = Canreceive(index)
      3. Next


      die Funktion Canreceive geht ja ganz anders.

      Anzahl_Empfangener Bytes = Canreceive (Variable zum Speichern des Ergebnisses , Anzahl Bytes)

      für mich:
      Anzahl = Canreceive(recived_351 , 8 )

      eine Frage hab ich noch, ich habe nun in einem Word 5030, in dezimal, stehen, das is OK.
      Wie kann ich nun die Word-Variable um den factor 0,01 ändern? gut wäre 50,30 [V]
      ohne Single verwenden zu müssen?
    • Mitch64 wrote:

      Michael wrote:

      Vorkomma = Variable / 100
      Kann man auch so machenVorkomma = Variable \ 100
      Da sehe ich nur den Unterschied, dass es einmal leicht zu schreiben geht, das andre mal mit Fingerverrenkung.
      @AlexW was willst du dann mit den 50,30 machen? Weiterrrechnen? Dann brauchst du eine single. Wenn du das nur zum anzeigen brauchst, dann geht auch Format avrhelp.mcselec.com/format.htm dann hast du die Zahl allerdings als string.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • tschoeatsch wrote:

      Da sehe ich nur den Unterschied, dass es einmal leicht zu schreiben geht, das andre mal mit Fingerverrenkung.
      Siehe Bascomhilfe: unter Arithmetic
      Da steht folgendes:

      Source Code

      1. Arithmetic
      2. Arithmetic operators are +, - , * , \, / and ^.
      3. • Integer
      4. Integer division is denoted by the backslash (\).
      5. Example: Z = X \ Y
      6. • Modulo Arithmetic
      7. Modulo arithmetic is denoted by the modulus operator MOD.
      8. Modulo arithmetic provides the remainder, rather than the quotient, of an integer division.
      9. Example: X = 10 \ 4 : remainder = 10 MOD 4
      Display All
      Ich denke die Integer-Division geht schneller.
    • Von anderen Basic-Varianten (Q-Basic, Visual-Basic, GW-Basic, Omikron-Basic) her kenne ich das als Ganzzahl-Division. Auch in Bascom wird von Ganzzahl-Division gesprochen.

      Wenns keinen Unterschied macht, hätte man das \ auch weglassen können.

      Nachtrag: Habs im Simulator geprüft, kein Unterschied.
      (Man lernt nie aus)

      The post was edited 2 times, last by Mitch64 ().

    • geht ;)

      ohne single

      BASCOM Source Code

      1. dim gelesen as Word
      2. gelesen = 52560
      3. dim teiler as Byte
      4. teiler = 100
      5. dim a as word
      6. Dim rest As Word
      7. Dim rest1 As Byte At rest Overlay
      8. Dim rest2 As Byte At rest + 1 Overlay
      9. do
      10. a = gelesen \ teiler
      11. STS {rest1}, R16
      12. STS {rest2}, R17
      13. loop
      Display All
    • Hallo,

      ich habe das hier gefunden:

      makerconnect.de/index.php?thre…e-division-mit-rest.4064/


      Man erkennt also: bei n-Stellen sind es n Modulo-Divisionen und n-1 Divisionen (die n-1 Subtraktionen sind hier unnötig).
      Jetzt erinnern wir uns an die Schriftliche Division aus der Grundschule:

      Code:
      2537 : 17 =
      Code:
      2537 : 17 = 1
      Code:
      2537 : 17 = 117--08
      Code:
      2537 : 17 = 117--083
      Code:
      2537 : 17 = 1417--083 68 -- 15
      Code:
      2537 : 17 = 14917--083 68 -- 157 153 --- 4
      BASCOM macht quasi dasselbe, nur eben binär. Das ganzzahlige Ergebnis hier wäre also die "149".
      Der Rest "4" ist auch vorhanden - wo läßt BASCOM den?


      Das kommt darauf an:
      • werden Bytes dividiert, läßt BASCOM den Rest in Register 24 liegen (den Quotienten in Register 16)
      • bei Words und Integern verbleibt der Rest in den Registern 17..16 (MSB..LSB) (der Quotient in R21..R20)
      • bei Long verbleibt der Rest in den Registern 19..16 (MSB..LSB) (der Quotient in R23..R20)
      Und wie kommt man da ran?
      Indem man das/die Register sofort nach der Division in die entsprechende Variable schreiben läßt.
      Bei Bytes also:



      CodeBox BascomAVR

      BascomAVR
      1
      2
      Quotient=Divident\Divisor
      STS {Rest}, R24

      Bei Words/Integern:



      CodeBox BascomAVR

      BascomAVR
      1

      2
      3
      Quotient = Divident \ Divisor
      STS {rest}, r16
      STS {rest+1}, r17

      Bei Long zusätzlich noch R18 und R19 "Storen"


      Somit sollte sich der Code von oben, den @Thorsten_Sch uns freundlicherweise bereitgestellt hatte, wie folgt vereinfachen lassen:


      CodeBox BascomAVR

      BascomAVR
      1

      2
      3
      4
      5
      6
      7
      8
      9
      Tausender=Zahl_temp\10
      STS {Einer}, R16
      STS {Einer+1}, R17
      Tausender=Tausender\10
      STS {Zehner}, R16
      STS {Zehner+1}, R17
      Tausender=Tausender\10
      STS {Hunderter}, R16
      STS {Hunderter+1}, R17

      Nur noch drei Divisionen.