aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t_mic51/RUN1.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t_mic51/RUN1.ASM')
-rw-r--r--tests/t_mic51/RUN1.ASM773
1 files changed, 773 insertions, 0 deletions
diff --git a/tests/t_mic51/RUN1.ASM b/tests/t_mic51/RUN1.ASM
new file mode 100644
index 0000000..690e68b
--- /dev/null
+++ b/tests/t_mic51/RUN1.ASM
@@ -0,0 +1,773 @@
+;
+; 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
+;---------------------------------------------------------------------
+
+
+