PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Select Case Struktur



Ruppi
24.08.2007, 16: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

DavidN
25.08.2007, 17:10
Kann jetzt nicht wirklich Fehler erkannen, dafür müsstest du noch den Rest des Codes posten, aber auf jeden Fall dauf for das "out" kein Ausrufungszeichen.

Achja, abfragen ob daten da sind im Register UCSRA Pin RXC

Ruppi
26.08.2007, 12:40
hallo!
glaube, jetzt hast du dich etwas vertan. das ausrufezeichen vor dem "out" muss in den code, weil ich mit bascom programmiere und "out" dort ein schlüsselwort ist. das geht also in ordnung.
die andere sache mit dem ucsra register muss ich nicht abfragen, weil ich nicht mit der seriellen schnittstelle arbeite. ich betreibe die kommunikation mit einem ftdi245 usb chip, da ist alles ein wenig anders.
die ganze sache scheitert auch nicht an der kommunikation selber, denn die läuft wirklich fehlerfrei. ich glaube mittlerweile eher, dass es am compiler selber liegt, denn der code scheint in ordnung zu sein.

trotzdem aber vielen dank für deine mühe!
ruppi