Z80
12.03.2006, 14:42
Hallo,
Ich habe ihr ein Assemblercode zur Ansteuerung von Servosfür eine C-Control main unit.
Der Code ist weder von mir geschrieben noch Compeliert.
Ich möchte das Programm jedoch mit einer höheren Frequenz betreiben und den Zeitbereich anpassen. Ich verwende den compiler von Workbench in dem Code einige fehler erkennt. Die Anpassungen kann ich machen, jedoch kann ich die Fehler nicht korrigieren.
Bitte seht euch den Code mal an. Ich freue mich auf jede Hilfe.
Der Fehler liegt vor allem in der Warteschleife.
Ich habe die Fehlermeldungen in den Code Geschrieben.
;---------------------------------------
; Servo-Steuerung an port 1
;
; Title: Setzen eines Servos
;
; Parameter:
; mask, Adresse $0A1, Bitmaske des Servos
; pos , Adresse $0A2, Zielposition des Servos 127=Mitte
;
; Beschreibung:
; Es wird ein Setzimpuls an den Servo an Port B gesendet.
; Die Bitmaske bezeichnet den Servo, der gesteuert werden
; soll. Es können auch mehrere Servos synchron gesteuert
; werden.
;
; Diese Routine sollte pro Positionierung 20 mal
; aufgerufen werden.
;
; Copyright Mario Boller-Olfert 2000
portb .equ 1 ;Daten Port B
dirb .equ 5 ;Datenrichtung Port B
.org $101
;--- setzen der Bits entsprechend der mask
lda $0A1 ; dirb = dirb OR mask
ora dirb
sta dirb
sei ;abschalten interrupts wg. zeitkritischer verarbeitung
lda $0A1 ; portb = portb OR mask
ora portb
sta portb
;--- warten entsprechend der Pulslaenge
lda #$FF ;1 ms warten
jsr wart
lda $0A2 ;warten entsprechend der Position
jsr wart
;--- ruecksetzen der Bits entsprechend Servo
lda $0A1 ; portb = portb AND NOT mask
coma ;[Fehler](44): Unbekannter Befehl.(1)
and portb
sta portb
cli
rts
;--- warteschleife
wart beq ret ;[Fehler](51): ungültige Anzahl der Parameter.(2) ;Abfangen der Pulslaenge 0
looph nop ;[Fehler](52): Unbekannter Befehl.(1) ;eigentliche Warteschleife
deca
bne looph
ret rts
.end
Ich habe ihr ein Assemblercode zur Ansteuerung von Servosfür eine C-Control main unit.
Der Code ist weder von mir geschrieben noch Compeliert.
Ich möchte das Programm jedoch mit einer höheren Frequenz betreiben und den Zeitbereich anpassen. Ich verwende den compiler von Workbench in dem Code einige fehler erkennt. Die Anpassungen kann ich machen, jedoch kann ich die Fehler nicht korrigieren.
Bitte seht euch den Code mal an. Ich freue mich auf jede Hilfe.
Der Fehler liegt vor allem in der Warteschleife.
Ich habe die Fehlermeldungen in den Code Geschrieben.
;---------------------------------------
; Servo-Steuerung an port 1
;
; Title: Setzen eines Servos
;
; Parameter:
; mask, Adresse $0A1, Bitmaske des Servos
; pos , Adresse $0A2, Zielposition des Servos 127=Mitte
;
; Beschreibung:
; Es wird ein Setzimpuls an den Servo an Port B gesendet.
; Die Bitmaske bezeichnet den Servo, der gesteuert werden
; soll. Es können auch mehrere Servos synchron gesteuert
; werden.
;
; Diese Routine sollte pro Positionierung 20 mal
; aufgerufen werden.
;
; Copyright Mario Boller-Olfert 2000
portb .equ 1 ;Daten Port B
dirb .equ 5 ;Datenrichtung Port B
.org $101
;--- setzen der Bits entsprechend der mask
lda $0A1 ; dirb = dirb OR mask
ora dirb
sta dirb
sei ;abschalten interrupts wg. zeitkritischer verarbeitung
lda $0A1 ; portb = portb OR mask
ora portb
sta portb
;--- warten entsprechend der Pulslaenge
lda #$FF ;1 ms warten
jsr wart
lda $0A2 ;warten entsprechend der Position
jsr wart
;--- ruecksetzen der Bits entsprechend Servo
lda $0A1 ; portb = portb AND NOT mask
coma ;[Fehler](44): Unbekannter Befehl.(1)
and portb
sta portb
cli
rts
;--- warteschleife
wart beq ret ;[Fehler](51): ungültige Anzahl der Parameter.(2) ;Abfangen der Pulslaenge 0
looph nop ;[Fehler](52): Unbekannter Befehl.(1) ;eigentliche Warteschleife
deca
bne looph
ret rts
.end