Ja, das ist die einzige Stelle. Channel wird nur zum Einlesen benötigt.
Also muss ich doch auf >=1 und <6 abfragen, damits stimmt?!
Gruß
Chris
Ja, das ist die einzige Stelle. Channel wird nur zum Einlesen benötigt.
Also muss ich doch auf >=1 und <6 abfragen, damits stimmt?!
Gruß
Chris
Ich kenne nicht den gesamten Code und damit den kompletten Mechanismus, aber ich kann sagen dass wenn der Basic-Code >= 1 <6 abfragt und der funktioniert, die ASM Routine genau das Gleiche machen sollte.
Du hast mir auch die Frage noch nicht beantwortet, woher das Hochzählen von Channel kommt, da in Deinem zuerst geposteten Basic-Code nicht enthalten.
Zeig doch mal die Basic-Routine genau so, wie sie tatsächlich funktioniert.
Wie meinst du das mit dem Hochzählen? Hier
wird die Variable hochgezählt. Wenn du etwas anderes wissen möchtest, dann verstehe ich deine Frage leider nicht.Code:Isr_int0: 'falling edge detection If Channel > 0 And Channel < 6 Then 'fill empf(1-5) Empf(channel) = Timer0 End If Timer0 = 6 'preload for 4.096 ms Incr Channel 'Increase Channel Return
Gruß
Chris
Ok
Aber jetzt ist meine Frage noch offen?!
Ich frage Channel nach >= 1 und < 6 ab. Wenns in dem Bereich ist, dann lese ich die Timer0 Variable WIE ein?
Funktioniert dann trotzdem, oder? Hier wird ja, soweit ich das verstanden habe, nur Channel nach links geschiftet, da Empf ein Word ist. Dann wird der entsprechende Empf-Feld-Bereich addresiert und Timer0 wird dort hineingeschrieben!?Code:LSL r24 ' * 2 (wordlength) CLR r25 ' clear (r24 kann ja nicht grösser als 8 werden) Loadadr Dummy , X ' addr Empf(0) ADD XL, r24 ' addr Empf + 2*channel ADC XH, r25 !IN r24, TCNT0 ' timer0 ST X+ , r24 ' empf(channel) = timer0 ST X , r25
Muss ich außer den normal verwendeten Registern und SREG sonst noch was sichern? Warum muss ich überhaupt SREG sichern?
Gruß
Chris
So:
Code:!IN r24, TCNT0 ' timer0Warum brauchst Du ein Wordarray, wenn Du nur einen 8Bit-Timer hast ? Werden da noch Rechnungen im Array durchgeführt ?Funktioniert dann trotzdem, oder? Hier wird ja, soweit ich das verstanden habe, nur Channel nach links geschiftet, da Empf ein Word ist. Dann wird der entsprechende Empf-Feld-Bereich addresiert und Timer0 wird dort hineingeschrieben!?
Weil das SREG Statusflags enthält, die z.B. von INC oder CPI verändert werden.Warum muss ich überhaupt SREG sichern?
Nein, ich meinte, wie ich die Variable dann ins Array schreibe? So, wie ich gerade eben nochmal gespostet habe?
Ja, es werden noch Rechnungen durchgeführt und somit benötigt man ein Word. Ich habs e schon mal als Byte deklariert, aber das wollte dann nicht so recht. Deswegen ists ein Word.
Ok, das verstehe ich.
Gruß
Chris
Lesezeichen