Hallo,
möchte nun versuchen, eine ISR von Bascom nach ASM zu übersetzen. Ich denke, der Großteil ist mir auch gelungen, jedoch habe ich auch nach mehrstündigem Suchen im Web keine Tipps gefunden, wie man ein Array KONKRETT in ASM anspricht. Vielleicht kann mir das jemand erklären? Hier mal mein Code:
Bascom:
Datentypes:Code:Isr_int0: If Channel > 0 And Channel < 6 Then Empf(channel) = Timer0 End If Timer0 = 6 Incr Channel Return
Hier mein Übersetzungsversuch:Code:Dim Empf(5) As Word Dim Channel As Byte Dim Empf_tmp As Word
Meint ihr, das würde so funktionieren? Laut Simulation siehts ganz gut aus. Habt ihr noch Tipps, wie ich das ganze noch etwas verschlanken kann? Bin mir nicht sicher, ob die If-Else-Abfrage nicht noch etwas eleganter / kürzer ginge?Code:Isr_int0: push r16 'sichere r16 lds r16 , {channel} 'lade channel in r16 cpi r16 , 6 'vergleiche r16 mit 6 brlo _lower 'springe, wenn kleiner rjmp _out_of_range 'sonst springe nach _out_of_range _lower: '_lower Label cpi r16 , 1 'vergleiche r16 mit 1 brge _higher 'springe, wenn größer gleich rjmp _out_of_range 'sonst springe nach _out_of_range _higher: '_higher Label '### in r16 , tcnt0 sts {empf_tmp} , r16 Empf(channel) = Empf_tmp '### _out_of_range: '_out_of_range Label ldi r16 , 6 'lade 6 in r16 !out tcnt0 , r16 'schreibe r16 in timer0 lds r16 , {channel} 'lade Channel in r16 inc r16 'erhöhe Channel um 1 sts {channel} , r16 'lade r16 in Channel pop r16 'stelle r16 wieder her Return
Außerdem wollte ich noch fragen, wie das ist, wenn man einem Word ein Byte in ASM zuweist? Soweit ich das verstanden habe, wird das Byte in das untere Byte des Words geschrieben, weil man ja das höherwertige Byte des Words mit {Word+1} anspricht, oder?
Vielen Dank schonmal
Gruß
Chris







Zitieren


Lesezeichen