Hmm, also ich hab schon viel "interruptintensivere" Programme laufen gehabt.
Mit dem Befehl
$Hwstack 128 und
$swstack 128 gings auch net...
Gibt es da sonst noch irgendwelche Speicher, die man vergrössern kann?
Also ich find das irgendwie strub... Sowas hatte ich noch nie.. und mein Programm ist nicht sehr verrückt....
T nimmt beim Komparatorinerrupt zu (eben: hier nicht der volle Code)
Der Code sollte funktionieren...
Hier ist er, für alle, die auf Nummer sicher gehen wollen:
Code:
$regfile = "m8def.dat"
$crystal = 6000000
$hwstack 128
$swstack 128
Config Lcd = 20 * 2
Config Lcdpin = Pin , E = Portb.0 , Rs = Portd.4 , Db7 = Portd.3 , Db6 = Portd.2 , Db5 = Portd.1 , Db4 = Portd.0
Cursor On
Ddrd.7 = 0 ' Komparator-Signaleingang
Dim A As Word
Dim B As Word
Dim D As Word
Dim C As Word
Dim E As Word
Dim T As Byte
Dim G As Byte
Dim Z As Byte
Z = 0
Dim U As Byte
Dim I As Byte
U = 0
G = 0
Dim X(40) As Byte
Acsr = &B01001000
On Aci Flankenwechsel
Enable Interrupts
On Timer1 Zeit
Config Timer1 = Timer , Prescale = 64
Start Timer1
Enable Timer1
T = 0
Do
If T = 8 Then
B = A / 4
D = 65534 - B
C = A / 2
E = 65534 - C
Timer1 = D
Z = 1
G = 0
End If
If U = 8 Then
Stop Timer1
Acsr = &B01000000
Cls
Locate 1 , 1
Lcd "Ende"
End If
Locate 2 , 1
Lcd T
Locate 2 , 5
Lcd Z
Locate 2 , 10
Lcd G
Locate 2 , 18
Lcd U
Loop
Flankenwechsel:
A = Timer1
If Z = 0 Then
Timer1 = 0
Incr T
End If
If Z = 1 Then
If G = 1 Then
Incr U
X(u) = Acsr.5
End If
If G = 0 Then
Return
End If
End If
Return
Zeit:
Timer1 = E
If Z = 0 Then
Return
End If
If G = 0 Then
G = 1
Return
End If
If G = 1 Then
G = 0
End If
Return
End
Nach 8 Komparator-Interrupts wird der Timer voreingestellt.
Das Ganze soll ein Empfänger für Manchester-Codierte Bytes werden, befindet sich noch arg in Entwicklung.
??
Herzliche Grüsse
Mario
Lesezeichen