Ruppi
24.08.2007, 17:18
Hallo zusammen!
Ich programmiere erst seit kurzem in Assembler und habe Schwierigkeiten, eine Select Case Struktur zu programmieren. Ich muss dazu sagen, dass ich Assembler im Bascom-Editor programmiere, hoffe jedoch, dass dies keinen Unterschied macht. Hier mal meine Main:
Main:
'Daten vom USB-Device abholen, wenn welche bereitstehen
sbis Pinb, Rxf 'if RXF=1 then Jump to Main
rjmp Main 'Sprung zu Main, falls keine neuen Daten vorhanden
'das empfangene Kommando abrufen. Vorher alle Pins von Portd auf
'Eingang setzen
clr t0
!Out Ddrd , t0 'Alle Pins auf Eingang
rcall Usb_get_byte 'Byte in t0 speichern
'je nach Kommando die jeweilige Unterroutine aufrufen
cpi t0, cmd_position
brne Label_1
rcall Usb_send_position
jmp Main
Label_1:
cpi t0, cmd_setcoordinates
brne Label_2
rcall Usb_get_position
ser t0
!Out Ddrd , t0 'Alle Pins auf Ausgang
ldi t0, ok
rcall usb_send_byte
jmp Main
Label_2:
jmp Main
Der Code funktioniert nur ein einziges Mal nach dem Flashen. Die einzelnen Routinen "Get_Position", "Get_Byte" und "SetCoordinates" funktionieren fehlerfrei.
Was mache ich falsch?
Vielen Dank im Voraus!
Ruppi
Ich programmiere erst seit kurzem in Assembler und habe Schwierigkeiten, eine Select Case Struktur zu programmieren. Ich muss dazu sagen, dass ich Assembler im Bascom-Editor programmiere, hoffe jedoch, dass dies keinen Unterschied macht. Hier mal meine Main:
Main:
'Daten vom USB-Device abholen, wenn welche bereitstehen
sbis Pinb, Rxf 'if RXF=1 then Jump to Main
rjmp Main 'Sprung zu Main, falls keine neuen Daten vorhanden
'das empfangene Kommando abrufen. Vorher alle Pins von Portd auf
'Eingang setzen
clr t0
!Out Ddrd , t0 'Alle Pins auf Eingang
rcall Usb_get_byte 'Byte in t0 speichern
'je nach Kommando die jeweilige Unterroutine aufrufen
cpi t0, cmd_position
brne Label_1
rcall Usb_send_position
jmp Main
Label_1:
cpi t0, cmd_setcoordinates
brne Label_2
rcall Usb_get_position
ser t0
!Out Ddrd , t0 'Alle Pins auf Ausgang
ldi t0, ok
rcall usb_send_byte
jmp Main
Label_2:
jmp Main
Der Code funktioniert nur ein einziges Mal nach dem Flashen. Die einzelnen Routinen "Get_Position", "Get_Byte" und "SetCoordinates" funktionieren fehlerfrei.
Was mache ich falsch?
Vielen Dank im Voraus!
Ruppi