mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik bit index out of range for supplied data type


Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab folgendes Problem mein Code lässt sich nicht compilieren.

Der code hat bisher nur Hilfsroutinen und soll ein Byte in 8 bit 
splitten und diese ausgeben. Da der MAX7219 bis zu 10 Mhz Frequenz 
verkraftet, müsste ich mit einem 8Mhz Takt keine Wartezeiten 
einprogrammieren.

Ich glaube für solche Sachen wäre C besser geeignet, allerdings glaube 
ich, dass ich zu Testzwecken schneller mit bascom bedient bin. In C käme 
der Fehler glaub ich nicht.

Hier noch das wichtigste der Code:
$regfile = "m8def.dat"
$crystal = 8000000

Declare Sub Writebit(byval State As Bit)
Declare Sub Writebyte(byval State As Byte)
Declare Sub Opmode(byval State As Bit)

Config Portd = Output

'Max initalization



'Functions
Sub Writebit(byval State As Bit):
Portd.0 = State
Portd.1 = 1
Portd.1 = 0
End Sub

Sub Writebyte(byval State As Byte):
Dim Iquad As Byte
Dim I As Byte
Dim Sol As Bit
For I = 0 To 7
Iquad = 2 ^ I
Sol = state And Iquad
Call Writebit(sol)      'Hier ist der Fehler.
Next
End Sub

Sub Opmode(byval State As Bit):
End Sub

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Call Writebit(sol)      'Hier ist der Fehler.

Sicher?

Nicht eher hier?
> Sol = state And Iquad

Wenn du 2 Bytes verundest, kriegst du wieder 1 Byte heraus, bei dem (in 
deinem Fall) das I-te Bit enteder 0 oder 1 ist, je nachdem welchen 
Zustand das Bit in state hatte. Aber du kriegst nicht ein einzelnes Bit!

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, das ist der Fehler.

Aber wie kann ich wie in c das schreiben:
Byte b;
Bit b2;
//[...]
b2 = b == 1;

So geht es nicht
Dim b as Byte
Dim b2 as Bit
'[...]
b2 = (b = 1)

Muss man in Bascom dafür wirklich IF nutzen???

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgedwie funzt nicht mal das: Call Writebit(1)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.