bit index out of range for supplied data type

Gast #1792234
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:
1
$regfile = "m8def.dat"
2
$crystal = 8000000
3

4
Declare Sub Writebit(byval State As Bit)
5
Declare Sub Writebyte(byval State As Byte)
6
Declare Sub Opmode(byval State As Bit)
7

8
Config Portd = Output
9

10
'Max initalization
11

12

13

14
'Functions
15
Sub Writebit(byval State As Bit):
16
Portd.0 = State
17
Portd.1 = 1
18
Portd.1 = 0
19
End Sub
20

21
Sub Writebyte(byval State As Byte):
22
Dim Iquad As Byte
23
Dim I As Byte
24
Dim Sol As Bit
25
For I = 0 To 7
26
Iquad = 2 ^ I
27
Sol = state And Iquad
28
Call Writebit(sol)      'Hier ist der Fehler.
29
Next
30
End Sub
31

32
Sub Opmode(byval State As Bit):
33
End Sub
#1792241
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!
Gast #1792246
Lesenswert?

danke, das ist der Fehler.

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

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

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren