774 lines
23 KiB
NASM
774 lines
23 KiB
NASM
;
|
|
; Aufgabe Nr.: Speichermodul fuer uP- Praktikum II
|
|
; Autor: Joerg Vollandt
|
|
; erstellt am : 01.07.1994
|
|
; letzte Aenderung am : 02.08.1994
|
|
; Bemerkung :
|
|
;
|
|
; Dateiname : run1.asm
|
|
;
|
|
|
|
;---------------------------------------------------------------------
|
|
Definitionen
|
|
|
|
ENDE_MARKE EQU 0FFH
|
|
SYNC_MARKE EQU 0FEH
|
|
READY_MARKE EQU 0FDH
|
|
DRILL_MARKE EQU 0FCH
|
|
|
|
PenUp EQU 000H
|
|
PenDown EQU 0FFH
|
|
d_z EQU 200 ; Schritte fuer Auf-/Ab
|
|
Queue_Const EQU 10 ; je Befehle ein GibReady an Frs
|
|
|
|
;---------------------------------------------------------------------
|
|
SEGMENT CODE
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Initialisierung
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
INIT_RUN:
|
|
CLR RUNNINGBIT
|
|
CLR Sync_Waiting
|
|
CLR Ready_Waiting
|
|
CLR Drilling
|
|
CLR Drill_down
|
|
CLR FrsWarning
|
|
CLR PAUSE
|
|
CLR SingleStep
|
|
CLR Break
|
|
MOV R_Sync_Counter,#0
|
|
MOV Queue_Counter,#Queue_Const
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Runmodul liesst ein Fkt.-Byte oder eine komplette Msg.
|
|
; aus dem Speicher und schickt diese ins Netz.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
RUN_MODUL:
|
|
PUSH_ALL
|
|
JNB Break,RUN1
|
|
LJMP RUN_ENDE
|
|
RUN1: LCALL GET_ELEMENT_MEM ; Anzahl Bytes
|
|
JNC RUN4 ; Speicher leer
|
|
LJMP RUN_LEER
|
|
RUN4: CJNE A,#ENDE_MARKE,RUN5 ; Ende -MARKE im Speicher
|
|
GET_16 RD_POINTER
|
|
DEC_DPTR
|
|
SET_16 RD_POINTER
|
|
LJMP RUN_ENDE ; erkannt
|
|
RUN5: CJNE A,#SYNC_MARKE,RUN6 ; Sync -MARKE im Speicher
|
|
LJMP RUN_SYNC ; erkannt
|
|
RUN6: CJNE A,#READY_MARKE,RUN7 ; Ready -MARKE im Speicher
|
|
LJMP RUN_READY ; erkannt
|
|
RUN7: CJNE A,#DRILL_MARKE,RUN8 ; Drill -MARKE im Speicher
|
|
LJMP RUN_DRILL ; erkannt
|
|
RUN8:
|
|
LCD 40h,"Ablauf der Teachin- Datei. "
|
|
PUSH ACC
|
|
MOV B,A
|
|
USING 1 ; Msg.
|
|
MOV R0,#AR0 ; aus Speicher nach Bank 1
|
|
USING 0
|
|
RUN_Next_Byte:
|
|
LCALL GET_ELEMENT_MEM ; Bytes aus Speicher
|
|
MOV @R0,A ; holen
|
|
INC R0
|
|
DJNZ B,RUN_Next_Byte
|
|
|
|
POP B
|
|
PUSH PSW
|
|
CLR RS1 ; Bank 1
|
|
SETB RS0
|
|
MOV DPTR,#ModulNetAdr_Tab
|
|
MOV A,R0
|
|
MOVC A,@A+DPTR
|
|
SEND_NET ; Msg senden
|
|
POP PSW ; alte Bank
|
|
POP_ALL
|
|
JNB SingleStep,RUN_Next_Ende
|
|
PUSH_ALL
|
|
LJMP RUN_READY
|
|
RUN_Next_Ende:
|
|
RET ; fertig !
|
|
|
|
|
|
RUN_READY:
|
|
LCD 40h,"Warten bis Geraet fertig. "
|
|
JNB P3.5,RUN_READY_FRS
|
|
post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0 ; Ready-Anforderung
|
|
LJMP RUN_READY_WEITER ; schicken
|
|
RUN_READY_FRS:
|
|
post_message2 #Rob,#RobGibReady,#MemRob,#GetRobReady
|
|
RUN_READY_WEITER:
|
|
SETB Ready_Waiting
|
|
POP_ALL
|
|
RET
|
|
|
|
|
|
RUN_SYNC:
|
|
LCD 40h,"Warten auf Synchronisationspunkt Nr.: "
|
|
LCALL GET_ELEMENT_MEM ; Sync_Counter aus Speicher
|
|
LCALL A_LCD
|
|
JB P3.5,RUN_SYNC_FRS
|
|
post_message2 #MemFrs,#GetFrsSync,A ; Sync.-Meldung an Partner
|
|
LJMP RUN_SYNC0 ; schicken
|
|
RUN_SYNC_FRS:
|
|
post_message2 #MemRob,#GetRobSync,A
|
|
RUN_SYNC0:
|
|
MOV B,A
|
|
MOV A,R_Sync_Counter
|
|
CJNE A,B,RUN_SYNC1
|
|
RUN_SYNC1: JNC RUN_SYNC_ENDE
|
|
SETB Sync_Waiting
|
|
RUN_SYNC_ENDE:
|
|
POP_ALL
|
|
RET
|
|
|
|
|
|
RUN_DRILL:
|
|
JNB P3.5,RUN_DRILL_ROB
|
|
LJMP RUN_DRILL_FRS
|
|
RUN_DRILL_ROB:
|
|
LCD 40h,"Roboter kann nicht fraesen! Abbruch. "
|
|
CLR RUNNINGBIT
|
|
POP_ALL
|
|
LCALL INIT_TEACH
|
|
LCALL RESET_TEACH
|
|
RET
|
|
|
|
RUN_DRILL_FRS:
|
|
LCD 40h,"Fraesdatei wird abgearbeitet. "
|
|
SETB Drilling
|
|
LCALL GET_ELEMENT_MEM ; Fraestiefe aus Speicher
|
|
MOV Frs_Ref_Tiefe,A
|
|
LCALL GET_ELEMENT_MEM
|
|
MOV Frs_Ref_Tiefe+1,A
|
|
post_message2 #Frs,#FrsVelocityDraw,#fast ; schnelle Bewegung
|
|
post_message2 #Frs,#GoPieceRefPos ; Werkstueckreferenz
|
|
post_message2 #Frs,#MoveRZ,#(d_z/256),#(d_z#256) ; Pen up
|
|
post_message2 #Frs,#DRILL,#on ; Motor an
|
|
clr DRILL_DOWN
|
|
SETB DRILL_DOWN
|
|
|
|
MOV A,MY_SLAVE_ADR
|
|
SWAP A ; *16
|
|
ADD A,#MSG_PC_RESET+Msg_Frs_Datei
|
|
MOV R0,A
|
|
MOV A,#PC_Slave_Adr ; Datei oeffnen
|
|
MOV B,#8
|
|
SEND_NET
|
|
MOV A,MY_SLAVE_ADR
|
|
SWAP A ; *16
|
|
ADD A,#MSG_PC_GET+Msg_Frs_Datei
|
|
MOV R0,A
|
|
MOV A,#PC_Slave_Adr ;
|
|
MOV B,#8
|
|
MOV DPTR,#0
|
|
SET_16 BLOCKNR ; Blocknr.=0 setzen
|
|
MOV R1,DPL ; Blocknr.
|
|
MOV R2,DPH
|
|
SEND_NET ; 0. Block laden
|
|
POP_ALL
|
|
RET
|
|
|
|
|
|
RUN_LEER:
|
|
LCD 40h,"Speicherinhalt defeckt. "
|
|
CLR RUNNINGBIT
|
|
POP_ALL
|
|
LCALL INIT_TEACH
|
|
LCALL RESET_TEACH
|
|
RET
|
|
|
|
|
|
RUN_ENDE:
|
|
LCD 40h,"Ablauf beendet. "
|
|
GET_16 NEXT_FREE
|
|
DEC_DPTR
|
|
SET_16 NEXT_FREE ; Ende- MARKE entfernen
|
|
CLR RUNNINGBIT ; Ablaufbeenden
|
|
MOV A,R_Sync_Counter
|
|
MOV T_Sync_Counter,A
|
|
GET_16 RD_POINTER
|
|
SET_16 NEXT_FREE
|
|
POP_ALL
|
|
CLR Break
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Start des Runmoduls. Schreibt die Endemarke in den Speicher,
|
|
; setzt den Speicher zurueck und setzt das Bit RUNNINBIT.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
START_RUNNING:
|
|
JB READY,START_R
|
|
LJMP START_NICHT_BEREIT
|
|
START_R: PUSH ACC
|
|
MOV A,#ENDE_MARKE
|
|
LCALL PUT_ELEMENT_MEM
|
|
POP ACC
|
|
LCALL RESET_MEM
|
|
SETB RUNNINGBIT
|
|
CLR Sync_Waiting
|
|
CLR Ready_Waiting
|
|
MOV R_Sync_Counter,#0
|
|
RET
|
|
|
|
START_NICHT_BEREIT:
|
|
LCD 40H,"Modul nicht bereit fuer Ablauf. "
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Piece-Ref-Position der Fraese speichern. 1. Teil: Position
|
|
; anforndern.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
STORE_PIECE_REF:
|
|
PUSH PSW
|
|
PUSH ACC
|
|
PUSH AR0
|
|
JNB READY,STORE_P_REF_ENDE ; Fertig und Fraese?
|
|
JNB P3.5,STORE_P_REF_ENDE
|
|
|
|
; MOV B,#4 ; Msg. an Frs um Pos.
|
|
; MOV R2,#MemFrs ; Empfaenger angeben
|
|
; MOV R3,#FrsPieceRef ; Msg.-Nr. Empfaenger angeben
|
|
; post_message1 Frs,GibFrsPos1 ; zu erfragen
|
|
post_message2 #Frs,#GibFrsPos1,#MemFrs,#FrsPieceRef
|
|
|
|
STORE_P_REF_ENDE:
|
|
CLR READY ; Teach- In nicht bereit
|
|
POP AR0
|
|
POP ACC
|
|
POP PSW
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Piece-Ref-Position der Fraese speichern. 2. Teil: Position
|
|
; in x,y,z speichern, Ref_Flag setzen.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register : -
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
PIECE_REF_FROM_FRS:
|
|
PUSH PSW
|
|
PUSH ACC
|
|
PUSH AR0
|
|
JNB READY,P_REF_FRS_DO ; NICHT Fertig und Roboter ?
|
|
JB P3.5,P_REF_FRS_DO
|
|
LJMP P_REF_FRS_ENDE
|
|
P_REF_FRS_DO:
|
|
MOV Frs_Ref_x,R2 ; Position speichern
|
|
MOV Frs_Ref_x+1,R3 ; Position speichern
|
|
MOV Frs_Ref_y,R4 ; Position speichern
|
|
MOV Frs_Ref_y+1,R5 ; Position speichern
|
|
MOV Frs_Ref_z,R6 ; Position speichern
|
|
MOV Frs_Ref_z+1,R7 ; Position speichern
|
|
|
|
P_REF_FRS_ENDE:
|
|
POP AR0
|
|
POP ACC
|
|
POP PSW
|
|
SETB READY ; Teach- In wieder bereit
|
|
SETB Ref_Flag
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Fraestiefe der Fraese speichern. 1. Teil: Position
|
|
; anforndern.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
STORE_TIEFE:
|
|
PUSH PSW
|
|
PUSH ACC
|
|
PUSH AR0
|
|
JNB READY,STORE_TIEFE_ENDE ; Fertig und Fraese?
|
|
JNB P3.5,STORE_TIEFE_ENDE
|
|
|
|
; MOV B,#4 ; Msg. an Frs um Pos.
|
|
; MOV R2,#MemFrs ; Empfaenger angeben
|
|
; MOV R3,#FrsTiefe ; Msg.-Nr. Empfaenger angeben
|
|
; post_message1 Frs,GibFrsPos1 ; zu erfragen
|
|
post_message2 #Frs,#GibFrsPos1,#MemFrs,#FrsTiefe
|
|
|
|
STORE_TIEFE_ENDE:
|
|
CLR READY ; Teach- In nicht bereit
|
|
POP AR0
|
|
POP ACC
|
|
POP PSW
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Fraestiefe der Fraese speichern. 2. Teil: Tiefe berechnen
|
|
; und in Frs_Ref_Tiefe speichern, Tiefe_Flag setzen.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register : -
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
TIEFE_FROM_FRS:
|
|
PUSH PSW
|
|
PUSH ACC
|
|
PUSH AR0
|
|
JNB READY,TIEFE_FRS_DO ; NICHT Fertig und Roboter ?
|
|
JB P3.5,TIEFE_FRS_DO
|
|
LJMP TIEFE_FRS_ENDE
|
|
TIEFE_FRS_DO:
|
|
; MOV A,AR7 ; Fraestiefe berechnen
|
|
; CLR C ; und speichern
|
|
; SUBB A,Frs_Ref_Tiefe+1
|
|
MOV Frs_Ref_Tiefe+1,AR7
|
|
; 7
|
|
; MOV A,AR6
|
|
; SUBB A,Frs_Ref_Tiefe
|
|
MOV Frs_Ref_Tiefe,AR6
|
|
TIEFE_FRS_ENDE:
|
|
POP AR0
|
|
POP ACC
|
|
POP PSW
|
|
SETB READY ; Teach- In wieder bereit
|
|
SETB Tiefe_Flag
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Flags abfragen, nur wenn Ref_Flag und Tiefe_Flag low weiter.
|
|
; SetPieceRef Msg. in Speicher ablegen, Drill Marke ablegen,
|
|
; Tiefe ablegen.
|
|
; Aufrrameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
STORE_DRILL:
|
|
PUSH PSW
|
|
PUSH ACC
|
|
JNB Ref_Flag,STORE_DRILL_ERROR ; PieceRefPos und Tiefe
|
|
JNB Tiefe_Flag,STORE_DRILL_ERROR ; definiert
|
|
LJMP STORE_DRILL_OK
|
|
|
|
STORE_DRILL_ERROR:
|
|
LCD 40h,"Fehler: RefPos/ Tiefe nicht definiert. "
|
|
POP ACC
|
|
POP PSW
|
|
RET
|
|
|
|
STORE_DRILL_OK:
|
|
MOV A,#8 ; Msg- Header speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Msg.-Laenge)
|
|
ERROR 0
|
|
MOV A,#Frs ; Msg- Header speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Modulnr.)
|
|
ERROR 0
|
|
MOV A,#SetPieceRef ; Msg- Header speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Msg.- Nr.)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_x ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 1 High)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_x+1 ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 1 Low)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_y ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 2 High)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_y+1 ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 2 Low)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_z ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 3 High)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_z+1 ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 3 Low)
|
|
ERROR 0
|
|
|
|
MOV A,#DRILL_MARKE
|
|
LCALL PUT_ELEMENT_MEM
|
|
|
|
MOV A,Frs_Ref_Tiefe ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 3 High)
|
|
ERROR 0
|
|
MOV A,Frs_Ref_Tiefe+1 ; Position speichern
|
|
LCALL PUT_ELEMENT_MEM ; (Parameter 3 Low)
|
|
ERROR 0
|
|
|
|
POP ACC
|
|
POP PSW
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Speichert die Ready-MARKE im Speicher
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
STORE_READY:
|
|
PUSH ACC
|
|
MOV A,#READY_MARKE
|
|
LCALL PUT_ELEMENT_MEM
|
|
POP ACC
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Speichert das Sync.-MARKE und den Sync.-Counter im Speicher
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
STORE_SYNC:
|
|
PUSH ACC
|
|
MOV A,#SYNC_MARKE
|
|
LCALL PUT_ELEMENT_MEM
|
|
INC T_Sync_Counter ; Sync_Counter +1
|
|
MOV A,T_Sync_Counter
|
|
LCALL PUT_ELEMENT_MEM
|
|
LCD 29,"Sync.-Nr."
|
|
LCALL A_LCD
|
|
POP ACC
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Ready-Msg. erhalten und bearbeiten.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
GET_READY_MSG:
|
|
LCD 40H," "
|
|
CLR Ready_Waiting
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Sync.-Msg. erhalten und bearbeiten. Bricht Running ab
|
|
; wenn von Partner Sync.-Nr. 0 kommt. Wenn eigenes Modul
|
|
; noch nicht getstartet wird Sync.-Msg. mit #0 an Partner
|
|
; geschickt.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
GET_SYNC_MSG:
|
|
JNB RunningBit,G_S_1
|
|
LJMP G_S_2
|
|
G_S_1: PUSH B
|
|
MOV B,#3 ; Msg.
|
|
MOV R2,#0 ; mit #0
|
|
JB P3.5,G_S_FRS
|
|
post_message1 MemFrs,GetFrsSync ; Sync.-Meldung an Partner
|
|
POP B
|
|
RET ; schicken
|
|
G_S_FRS: post_message1 MemRob,GetRobSync
|
|
POP B
|
|
RET
|
|
|
|
G_S_2: PUSH PSW
|
|
PUSH ACC
|
|
INC R_Sync_Counter
|
|
MOV A,R2 ; Sync_Counter aus Msg. holen
|
|
CJNE A,#0,G_S_KEIN_ABBRUCH ; Abbruch bei #0
|
|
LJMP G_S_ABBRUCH
|
|
G_S_KEIN_ABBRUCH:
|
|
CJNE A,R_Sync_Counter,G_S_ERROR ; Fehler wenn ungleich
|
|
CLR Sync_Waiting
|
|
POP ACC
|
|
POP PSW
|
|
RET
|
|
|
|
G_S_ABBRUCH:
|
|
LCD 40h,"Partner nicht bereit. Abbruch. "
|
|
CLR RUNNINGBIT
|
|
POP ACC
|
|
POP PSW
|
|
LCALL INIT_TEACH
|
|
LCALL RESET_TEACH
|
|
RET
|
|
|
|
G_S_ERROR:
|
|
LCD 40h,"Synchronisationsfehler. "
|
|
CLR RUNNINGBIT
|
|
POP ACC
|
|
POP PSW
|
|
LCALL INIT_TEACH
|
|
LCALL RESET_TEACH
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Testen ob Queue- Warnung von Frs gekommen ist. Wenn ja,
|
|
; GibReady an die Fraese schicken und warten bis kommt.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
queue_test macro
|
|
|
|
Q_T_Main_Loop:
|
|
LCALL MAIN_EVENT_LOOP
|
|
JB PAUSE,Q_T_Main_Loop ; Pause aktiv
|
|
JB READY_WAITING,Q_T_Main_Loop ; warten auf Ready von Frs
|
|
LCALL READ_STATUS
|
|
JB ACC.1,Q_T_Main_Loop
|
|
|
|
endm
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Daten aus der Fraesdatei vom PC empfangen, konvertieren
|
|
; und an die Fraese schicken.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
|
|
GET_WORKFR_FROM_PC:
|
|
PUSH_ALL
|
|
JB RUNNINGBIT,GET_WORKFR_FROM_PC_START
|
|
LJMP GET_WORKFR_FROM_PC_ABBRUCH
|
|
GET_WORKFR_FROM_PC_START:
|
|
MOV A,R1 ; testen ob Dateiende
|
|
CJNE A,#0ffh,GET_WORKFR_FROM_PC_NEXT
|
|
MOV A,R2
|
|
CJNE A,#0ffh,GET_WORKFR_FROM_PC_NEXT
|
|
LJMP GET_WORKFR_FROM_PC_ENDE
|
|
|
|
GET_WORKFR_FROM_PC_NEXT: ; naechste Msg. von PC
|
|
PUSH_ALL ; konvertieren und an Frs
|
|
queue_test
|
|
MOV A,AR7 ; schicken
|
|
CJNE A,#PenDown,G_W_PenUp ; Auf- oder Abbewegung?
|
|
ljmp G_W_PenDown
|
|
G_W_PenUp:
|
|
jb drill_down,G_W_Make_Up
|
|
ljmp G_W_Pen_Ready ; ist schon oben
|
|
G_W_Make_Up:
|
|
post_message2 #Frs,#MoveZ,Frs_Ref_z,Frs_Ref_z+1 ; Pen aus Werkstueck ziehen
|
|
queue_test
|
|
post_message2 #Frs,#FrsVelocityDraw,#fast ; schnelle Bewegung
|
|
queue_test
|
|
post_message2 #Frs,#MoveRZ,#(d_z/256),#(d_z#256) ; Pen up
|
|
clr DRILL_DOWN
|
|
queue_test
|
|
LJMP G_W_Pen_Ready ; fertig
|
|
|
|
G_W_PenDown:
|
|
jnb drill_down,G_W_Make_Down
|
|
ljmp G_W_Pen_Ready ; ist schon unten
|
|
G_W_Make_Down:
|
|
post_message2 #Frs,#MoveRZ,#(((-d_z) & 0ffffh) / 256),#(((-d_z) & 0ffffh) # 256) ; Ab
|
|
queue_test
|
|
post_message2 #Frs,#FrsVelocityDraw,#slow ; langsame Bewegung
|
|
queue_test
|
|
post_message2 #Frs,#MoveZ,Frs_Ref_Tiefe,Frs_Ref_Tiefe+1 ; Pen aus Werkstueck ziehen
|
|
queue_test
|
|
SETB DRILL_DOWN
|
|
G_W_Pen_Ready: ; Pen fertig !
|
|
|
|
POP_ALL
|
|
post_message2 #Frs,#MovePR,AR4,AR3,AR6,AR5,#0,#0 ; rel. Bewegung
|
|
queue_test
|
|
|
|
; DJNZ Queue_Counter,G_W_Send_no_Ready
|
|
; MOV Queue_Counter,#Queue_Const
|
|
; PUSH_ALL
|
|
; post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0
|
|
; POP_ALL
|
|
|
|
G_W_Send_no_Ready:
|
|
|
|
GET_16 BLOCKNR
|
|
INC DPTR
|
|
SET_16 BLOCKNR ; Blocknr.=+1 setzen
|
|
MOV R1,DPL ; Blocknr.
|
|
MOV R2,DPH
|
|
MOV A,MY_SLAVE_ADR
|
|
SWAP A ; *16
|
|
ADD A,#MSG_PC_GET+Msg_Frs_Datei
|
|
MOV R0,A
|
|
MOV A,#PC_Slave_Adr
|
|
MOV B,#8
|
|
SEND_NET ; naechsten Block anfordern
|
|
POP_ALL
|
|
RET
|
|
|
|
GET_WORKFR_FROM_PC_ENDE:
|
|
post_message2 #Frs,#DRILL,#off ;
|
|
CLR Drilling
|
|
|
|
POP_ALL
|
|
LCD 40h,"Fraesdatei fertig. "
|
|
RET
|
|
|
|
GET_WORKFR_FROM_PC_ABBRUCH:
|
|
CLR Drilling
|
|
POP_ALL
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Warnung von Frs erhalten und verarbeiten.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
Get_Warning_From_Frs:
|
|
LCD 40h,"Warnung Fraese: "
|
|
PUSH ACC
|
|
PUSH PSW
|
|
PUSH B
|
|
PUSH_DPTR
|
|
|
|
MOV A,AR2
|
|
IFMAKE QUEUE_WARNING,SETB FrsWarning ; Queue Fraese laeuf ueber
|
|
|
|
MOV DPTR,#ParamStr_Tab ; Tabellenbasis laden
|
|
GWFF_NEXT:
|
|
MOV A,#0
|
|
MOVC A,@A+DPTR ; Wert laden
|
|
PUSH ACC ; retten
|
|
MOV A,#1
|
|
MOVC A,@A+DPTR ; Stringlaenge laden
|
|
MOV B,A
|
|
POP ACC ; Wert mit empfangenem
|
|
CJNE A,AR2,GWFF_LOOP ; vergleichen
|
|
LJMP GWFF_AUSGABE
|
|
GWFF_LOOP:
|
|
MOV A,B ; Stringlaende auf Tabellen-
|
|
ADD A,DPL ; zeiger addieren
|
|
MOV DPL,A
|
|
MOV A,#0
|
|
ADDC A,DPH
|
|
MOV DPH,A
|
|
LJMP GWFF_NEXT
|
|
|
|
GWFF_AUSGABE:
|
|
MOV A,#50h ; LCD- Position
|
|
LCALL LCD_SET_DD_RAM_ADDRESS
|
|
INC DPTR
|
|
INC DPTR
|
|
LCALL LCD_WRITE_STRING ; Meldung ausgeben
|
|
MOV A,#0h ; LCD- Position
|
|
LCALL LCD_SET_DD_RAM_ADDRESS
|
|
|
|
POP_DPTR
|
|
POP B
|
|
POP PSW
|
|
POP ACC
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion : Fehler von Frs erhalten und verarbeiten.
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
Get_Error_From_Frs:
|
|
LCD 40h,"Fehler Fraese: "
|
|
PUSH ACC
|
|
PUSH PSW
|
|
PUSH B
|
|
PUSH_DPTR
|
|
MOV DPTR,#ParamStr_Tab ; Tabellenbasis laden
|
|
GEFF_NEXT:
|
|
MOV A,#0
|
|
MOVC A,@A+DPTR ; Wert laden
|
|
PUSH ACC
|
|
MOV A,#1
|
|
MOVC A,@A+DPTR ; Stringlaenge laden
|
|
MOV B,A
|
|
POP ACC ; Wert mit empfangenem
|
|
CJNE A,AR2,GEFF_LOOP ; vergleichen
|
|
LJMP GEFF_AUSGABE
|
|
GEFF_LOOP:
|
|
MOV A,B ; Stringlaende auf Tabellen-
|
|
ADD A,DPL ; zeiger addieren
|
|
MOV DPL,A
|
|
MOV A,#0
|
|
ADDC A,DPH
|
|
MOV DPH,A
|
|
LJMP GEFF_NEXT
|
|
|
|
GEFF_AUSGABE:
|
|
MOV A,#4Fh ; LCD- Position
|
|
LCALL LCD_SET_DD_RAM_ADDRESS
|
|
INC DPTR
|
|
INC DPTR
|
|
LCALL LCD_WRITE_STRING ; Meldung ausgeben
|
|
MOV A,#0h ; LCD- Position
|
|
LCALL LCD_SET_DD_RAM_ADDRESS
|
|
|
|
POP_DPTR
|
|
POP B
|
|
POP PSW
|
|
POP ACC
|
|
RET
|
|
|
|
;---------------------------------------------------------------------
|
|
; Funktion :
|
|
; Aufrufparameter : -
|
|
; Ruechgabeparameter : -
|
|
; Veraenderte Register :
|
|
; Stackbedarf :
|
|
; Zeitbedarf :
|
|
;
|
|
|
|
;=====================================================================
|
|
; END
|
|
;---------------------------------------------------------------------
|
|
|
|
|
|
|