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


von Sam (Gast)


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

von Karl H. (kbuchegg)


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!

von Sam (Gast)


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???

von Sam (Gast)


Lesenswert?

irgedwie funzt nicht mal das: Call Writebit(1)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.