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:
Nach 8 Komparator-Interrupts wird der Timer voreingestellt.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
Das Ganze soll ein Empfänger für Manchester-Codierte Bytes werden, befindet sich noch arg in Entwicklung.
??
Herzliche Grüsse
Mario







Zitieren

Lesezeichen