Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. ;
  2. ; Aufgabe Nr.: Speichermodul fuer uP- Praktikum II
  3. ; Autor: Joerg Vollandt
  4. ; erstellt am : 01.07.1994
  5. ; letzte Aenderung am : 02.08.1994
  6. ; Bemerkung :
  7. ;
  8. ; Dateiname : run1.asm
  9. ;
  10.  
  11. ;---------------------------------------------------------------------
  12. Definitionen
  13.  
  14. ENDE_MARKE      EQU     0FFH
  15. SYNC_MARKE      EQU     0FEH
  16. READY_MARKE     EQU     0FDH
  17. DRILL_MARKE     EQU     0FCH
  18.  
  19. PenUp           EQU     000H
  20. PenDown         EQU     0FFH
  21. d_z             EQU     200             ; Schritte fuer Auf-/Ab
  22. Queue_Const     EQU     10              ; je Befehle ein GibReady an Frs
  23.  
  24. ;---------------------------------------------------------------------
  25.         SEGMENT CODE
  26. ;---------------------------------------------------------------------
  27. ; Funktion : Initialisierung
  28. ; Aufrufparameter : -
  29. ; Ruechgabeparameter : -
  30. ; Veraenderte Register :
  31. ; Stackbedarf :
  32. ; Zeitbedarf :
  33. ;
  34.  
  35. INIT_RUN:
  36.         CLR RUNNINGBIT
  37.         CLR Sync_Waiting
  38.         CLR Ready_Waiting
  39.         CLR Drilling
  40.         CLR Drill_down
  41.         CLR FrsWarning
  42.         CLR PAUSE
  43.         CLR SingleStep
  44.         CLR Break
  45.         MOV R_Sync_Counter,#0
  46.         MOV Queue_Counter,#Queue_Const
  47.         RET
  48.  
  49. ;---------------------------------------------------------------------
  50. ; Funktion : Runmodul liesst ein Fkt.-Byte oder eine komplette Msg.
  51. ;            aus dem Speicher und schickt diese ins Netz.
  52. ; Aufrufparameter : -
  53. ; Ruechgabeparameter : -
  54. ; Veraenderte Register :
  55. ; Stackbedarf :
  56. ; Zeitbedarf :
  57. ;
  58.  
  59. RUN_MODUL:
  60.         PUSH_ALL
  61.         JNB Break,RUN1
  62.         LJMP RUN_ENDE
  63. RUN1:   LCALL GET_ELEMENT_MEM                   ; Anzahl Bytes
  64.         JNC RUN4                                ; Speicher leer
  65.         LJMP RUN_LEER
  66. RUN4:   CJNE A,#ENDE_MARKE,RUN5                 ; Ende -MARKE im Speicher
  67.         GET_16 RD_POINTER
  68.         DEC_DPTR
  69.         SET_16 RD_POINTER
  70.         LJMP RUN_ENDE                           ; erkannt
  71. RUN5:   CJNE A,#SYNC_MARKE,RUN6                 ; Sync -MARKE im Speicher
  72.         LJMP RUN_SYNC                           ; erkannt
  73. RUN6:   CJNE A,#READY_MARKE,RUN7                ; Ready -MARKE im Speicher
  74.         LJMP RUN_READY                          ; erkannt
  75. RUN7:   CJNE A,#DRILL_MARKE,RUN8                ; Drill -MARKE im Speicher
  76.         LJMP RUN_DRILL                          ; erkannt
  77. RUN8:
  78.         LCD 40h,"Ablauf der Teachin- Datei.              "
  79.         PUSH ACC
  80.         MOV B,A
  81.         USING 1                                 ; Msg.
  82.         MOV R0,#AR0                             ; aus Speicher nach Bank 1
  83.         USING 0
  84. RUN_Next_Byte:
  85.         LCALL GET_ELEMENT_MEM                   ; Bytes aus Speicher
  86.         MOV @R0,A                               ; holen
  87.         INC R0
  88.         DJNZ B,RUN_Next_Byte
  89.  
  90.         POP B
  91.         PUSH PSW
  92.         CLR RS1                                 ; Bank 1
  93.         SETB RS0
  94.         MOV DPTR,#ModulNetAdr_Tab
  95.         MOV A,R0
  96.         MOVC A,@A+DPTR
  97.         SEND_NET                                ; Msg senden
  98.         POP PSW                                 ; alte Bank
  99.         POP_ALL
  100.         JNB SingleStep,RUN_Next_Ende
  101.         PUSH_ALL
  102.         LJMP RUN_READY
  103. RUN_Next_Ende:
  104.         RET                                     ; fertig !
  105.  
  106.  
  107. RUN_READY:
  108.         LCD 40h,"Warten bis Geraet fertig.               "
  109.         JNB P3.5,RUN_READY_FRS
  110.         post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0 ; Ready-Anforderung
  111.         LJMP RUN_READY_WEITER                   ; schicken
  112. RUN_READY_FRS:
  113.         post_message2 #Rob,#RobGibReady,#MemRob,#GetRobReady
  114. RUN_READY_WEITER:
  115.         SETB Ready_Waiting
  116.         POP_ALL
  117.         RET
  118.  
  119.  
  120. RUN_SYNC:
  121.         LCD 40h,"Warten auf Synchronisationspunkt Nr.: "
  122.         LCALL GET_ELEMENT_MEM                   ; Sync_Counter aus Speicher
  123.         LCALL A_LCD
  124.         JB P3.5,RUN_SYNC_FRS
  125.         post_message2 #MemFrs,#GetFrsSync,A     ; Sync.-Meldung an Partner
  126.         LJMP RUN_SYNC0                          ; schicken
  127. RUN_SYNC_FRS:
  128.         post_message2 #MemRob,#GetRobSync,A
  129. RUN_SYNC0:
  130.         MOV B,A
  131.         MOV A,R_Sync_Counter
  132.         CJNE A,B,RUN_SYNC1
  133. RUN_SYNC1: JNC RUN_SYNC_ENDE
  134.         SETB Sync_Waiting
  135. RUN_SYNC_ENDE:
  136.         POP_ALL
  137.         RET
  138.  
  139.  
  140. RUN_DRILL:
  141.         JNB P3.5,RUN_DRILL_ROB
  142.         LJMP RUN_DRILL_FRS
  143. RUN_DRILL_ROB:
  144.         LCD 40h,"Roboter kann nicht fraesen! Abbruch.    "
  145.         CLR RUNNINGBIT
  146.         POP_ALL
  147.         LCALL INIT_TEACH
  148.         LCALL RESET_TEACH
  149.         RET
  150.  
  151. RUN_DRILL_FRS:
  152.         LCD 40h,"Fraesdatei wird abgearbeitet.           "
  153.         SETB Drilling
  154.         LCALL GET_ELEMENT_MEM                          ; Fraestiefe aus Speicher
  155.         MOV Frs_Ref_Tiefe,A
  156.         LCALL GET_ELEMENT_MEM
  157.         MOV Frs_Ref_Tiefe+1,A
  158.         post_message2 #Frs,#FrsVelocityDraw,#fast       ; schnelle Bewegung
  159.         post_message2 #Frs,#GoPieceRefPos               ; Werkstueckreferenz
  160.         post_message2 #Frs,#MoveRZ,#(d_z/256),#(d_z#256) ; Pen up
  161.         post_message2 #Frs,#DRILL,#on                   ; Motor an
  162.         clr DRILL_DOWN
  163.         SETB DRILL_DOWN
  164.  
  165.         MOV A,MY_SLAVE_ADR
  166.         SWAP A                                         ; *16
  167.         ADD A,#MSG_PC_RESET+Msg_Frs_Datei
  168.         MOV R0,A
  169.         MOV A,#PC_Slave_Adr                            ; Datei oeffnen
  170.         MOV B,#8
  171.         SEND_NET
  172.         MOV A,MY_SLAVE_ADR
  173.         SWAP A                                         ; *16
  174.         ADD A,#MSG_PC_GET+Msg_Frs_Datei
  175.         MOV R0,A
  176.         MOV A,#PC_Slave_Adr                            ;
  177.         MOV B,#8
  178.         MOV DPTR,#0
  179.         SET_16 BLOCKNR                                 ; Blocknr.=0 setzen
  180.         MOV R1,DPL                                     ; Blocknr.
  181.         MOV R2,DPH
  182.         SEND_NET                                       ; 0. Block laden
  183.         POP_ALL
  184.         RET
  185.  
  186.  
  187. RUN_LEER:
  188.         LCD 40h,"Speicherinhalt defeckt.                 "
  189.         CLR RUNNINGBIT
  190.         POP_ALL
  191.         LCALL INIT_TEACH
  192.         LCALL RESET_TEACH
  193.         RET
  194.  
  195.  
  196. RUN_ENDE:
  197.         LCD 40h,"Ablauf beendet.                         "
  198.         GET_16 NEXT_FREE
  199.         DEC_DPTR
  200.         SET_16 NEXT_FREE                        ; Ende- MARKE entfernen
  201.         CLR RUNNINGBIT                          ; Ablaufbeenden
  202.         MOV A,R_Sync_Counter
  203.         MOV T_Sync_Counter,A
  204.         GET_16 RD_POINTER
  205.         SET_16 NEXT_FREE
  206.         POP_ALL
  207.         CLR Break
  208.         RET
  209.  
  210. ;---------------------------------------------------------------------
  211. ; Funktion : Start des Runmoduls. Schreibt die Endemarke in den Speicher,
  212. ;            setzt den Speicher zurueck und setzt das Bit RUNNINBIT.
  213. ; Aufrufparameter : -
  214. ; Ruechgabeparameter : -
  215. ; Veraenderte Register :
  216. ; Stackbedarf :
  217. ; Zeitbedarf :
  218. ;
  219.  
  220. START_RUNNING:
  221.         JB READY,START_R
  222.         LJMP START_NICHT_BEREIT
  223. START_R: PUSH ACC
  224.         MOV A,#ENDE_MARKE
  225.         LCALL PUT_ELEMENT_MEM
  226.         POP ACC
  227.         LCALL RESET_MEM
  228.         SETB RUNNINGBIT
  229.         CLR Sync_Waiting
  230.         CLR Ready_Waiting
  231.         MOV R_Sync_Counter,#0
  232.         RET
  233.  
  234. START_NICHT_BEREIT:
  235.         LCD 40H,"Modul nicht bereit fuer Ablauf.         "
  236.         RET
  237.  
  238.  ;---------------------------------------------------------------------
  239. ; Funktion : Piece-Ref-Position der Fraese speichern. 1. Teil: Position
  240. ;            anforndern.
  241. ; Aufrufparameter : -
  242. ; Ruechgabeparameter : -
  243. ; Veraenderte Register :
  244. ; Stackbedarf :
  245. ; Zeitbedarf :
  246. ;
  247.  
  248. STORE_PIECE_REF:
  249.         PUSH PSW
  250.         PUSH ACC
  251.         PUSH AR0
  252.         JNB READY,STORE_P_REF_ENDE              ; Fertig und Fraese?
  253.         JNB P3.5,STORE_P_REF_ENDE
  254.  
  255. ;        MOV B,#4                                ; Msg. an Frs um Pos.
  256. ;        MOV R2,#MemFrs                          ; Empfaenger angeben
  257. ;        MOV R3,#FrsPieceRef                     ; Msg.-Nr. Empfaenger angeben
  258. ;        post_message1 Frs,GibFrsPos1            ; zu erfragen
  259.         post_message2 #Frs,#GibFrsPos1,#MemFrs,#FrsPieceRef
  260.  
  261. STORE_P_REF_ENDE:
  262.         CLR READY                               ; Teach- In nicht bereit
  263.         POP AR0
  264.         POP ACC
  265.         POP PSW
  266.         RET
  267.  
  268.  ;---------------------------------------------------------------------
  269. ; Funktion : Piece-Ref-Position der Fraese speichern. 2. Teil: Position
  270. ;            in x,y,z speichern, Ref_Flag setzen.
  271. ; Aufrufparameter : -
  272. ; Ruechgabeparameter : -
  273. ; Veraenderte Register : -
  274. ; Stackbedarf :
  275. ; Zeitbedarf :
  276. ;
  277.  
  278. PIECE_REF_FROM_FRS:
  279.         PUSH PSW
  280.         PUSH ACC
  281.         PUSH AR0
  282.         JNB READY,P_REF_FRS_DO                    ; NICHT Fertig und Roboter ?
  283.         JB P3.5,P_REF_FRS_DO
  284.         LJMP P_REF_FRS_ENDE
  285. P_REF_FRS_DO:
  286.         MOV Frs_Ref_x,R2                        ; Position speichern
  287.         MOV Frs_Ref_x+1,R3                      ; Position speichern
  288.         MOV Frs_Ref_y,R4                        ; Position speichern
  289.         MOV Frs_Ref_y+1,R5                      ; Position speichern
  290.         MOV Frs_Ref_z,R6                        ; Position speichern
  291.         MOV Frs_Ref_z+1,R7                      ; Position speichern
  292.  
  293. P_REF_FRS_ENDE:
  294.         POP AR0
  295.         POP ACC
  296.         POP PSW
  297.         SETB READY                               ; Teach- In wieder bereit
  298.         SETB Ref_Flag
  299.         RET
  300.  
  301.  ;---------------------------------------------------------------------
  302. ; Funktion : Fraestiefe der Fraese speichern. 1. Teil: Position
  303. ;            anforndern.
  304. ; Aufrufparameter : -
  305. ; Ruechgabeparameter : -
  306. ; Veraenderte Register :
  307. ; Stackbedarf :
  308. ; Zeitbedarf :
  309. ;
  310.  
  311. STORE_TIEFE:
  312.         PUSH PSW
  313.         PUSH ACC
  314.         PUSH AR0
  315.         JNB READY,STORE_TIEFE_ENDE              ; Fertig und Fraese?
  316.         JNB P3.5,STORE_TIEFE_ENDE
  317.  
  318. ;        MOV B,#4                                ; Msg. an Frs um Pos.
  319. ;        MOV R2,#MemFrs                          ; Empfaenger angeben
  320. ;        MOV R3,#FrsTiefe                        ; Msg.-Nr. Empfaenger angeben
  321. ;        post_message1 Frs,GibFrsPos1            ; zu erfragen
  322.         post_message2 #Frs,#GibFrsPos1,#MemFrs,#FrsTiefe
  323.  
  324. STORE_TIEFE_ENDE:
  325.         CLR READY                               ; Teach- In nicht bereit
  326.         POP AR0
  327.         POP ACC
  328.         POP PSW
  329.         RET
  330.  
  331.  ;---------------------------------------------------------------------
  332. ; Funktion : Fraestiefe der Fraese speichern. 2. Teil: Tiefe berechnen
  333. ;            und in Frs_Ref_Tiefe speichern, Tiefe_Flag setzen.
  334. ; Aufrufparameter : -
  335. ; Ruechgabeparameter : -
  336. ; Veraenderte Register : -
  337. ; Stackbedarf :
  338. ; Zeitbedarf :
  339. ;
  340.  
  341. TIEFE_FROM_FRS:
  342.         PUSH PSW
  343.         PUSH ACC
  344.         PUSH AR0
  345.         JNB READY,TIEFE_FRS_DO                  ; NICHT Fertig und Roboter ?
  346.         JB P3.5,TIEFE_FRS_DO
  347.         LJMP TIEFE_FRS_ENDE
  348. TIEFE_FRS_DO:
  349. ;        MOV A,AR7                               ; Fraestiefe berechnen
  350. ;        CLR C                                   ; und speichern
  351. ;        SUBB A,Frs_Ref_Tiefe+1
  352.         MOV Frs_Ref_Tiefe+1,AR7
  353. ;  7
  354. ;        MOV A,AR6
  355. ;        SUBB A,Frs_Ref_Tiefe
  356.         MOV Frs_Ref_Tiefe,AR6
  357. TIEFE_FRS_ENDE:
  358.         POP AR0
  359.         POP ACC
  360.         POP PSW
  361.         SETB READY                               ; Teach- In wieder bereit
  362.         SETB Tiefe_Flag
  363.         RET
  364.  
  365. ;---------------------------------------------------------------------
  366. ; Funktion : Flags abfragen, nur wenn Ref_Flag und Tiefe_Flag low weiter.
  367. ;            SetPieceRef Msg. in Speicher ablegen, Drill Marke ablegen,
  368. ;            Tiefe ablegen.
  369. ; Aufrrameter : -
  370. ; Ruechgabeparameter : -
  371. ; Veraenderte Register :
  372. ; Stackbedarf :
  373. ; Zeitbedarf :
  374. ;
  375.  
  376. STORE_DRILL:
  377.         PUSH PSW
  378.         PUSH ACC
  379.         JNB Ref_Flag,STORE_DRILL_ERROR          ; PieceRefPos und Tiefe
  380.         JNB Tiefe_Flag,STORE_DRILL_ERROR        ; definiert
  381.         LJMP STORE_DRILL_OK
  382.  
  383. STORE_DRILL_ERROR:
  384.         LCD 40h,"Fehler: RefPos/ Tiefe nicht definiert.  "
  385.         POP ACC
  386.         POP PSW
  387.         RET
  388.  
  389. STORE_DRILL_OK:
  390.         MOV A,#8                                ; Msg- Header speichern
  391.         LCALL PUT_ELEMENT_MEM                   ; (Msg.-Laenge)
  392.         ERROR 0
  393.         MOV A,#Frs                              ; Msg- Header speichern
  394.         LCALL PUT_ELEMENT_MEM                   ; (Modulnr.)
  395.         ERROR 0
  396.         MOV A,#SetPieceRef                      ; Msg- Header speichern
  397.         LCALL PUT_ELEMENT_MEM                   ; (Msg.- Nr.)
  398.         ERROR 0
  399.         MOV A,Frs_Ref_x                         ; Position speichern
  400.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 1 High)
  401.         ERROR 0
  402.         MOV A,Frs_Ref_x+1                       ; Position speichern
  403.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 1 Low)
  404.         ERROR 0
  405.         MOV A,Frs_Ref_y                         ; Position speichern
  406.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 2 High)
  407.         ERROR 0
  408.         MOV A,Frs_Ref_y+1                       ; Position speichern
  409.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 2 Low)
  410.         ERROR 0
  411.         MOV A,Frs_Ref_z                         ; Position speichern
  412.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 3 High)
  413.         ERROR 0
  414.         MOV A,Frs_Ref_z+1                       ; Position speichern
  415.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 3 Low)
  416.         ERROR 0
  417.  
  418.         MOV A,#DRILL_MARKE
  419.         LCALL PUT_ELEMENT_MEM
  420.  
  421.         MOV A,Frs_Ref_Tiefe                     ; Position speichern
  422.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 3 High)
  423.         ERROR 0
  424.         MOV A,Frs_Ref_Tiefe+1                   ; Position speichern
  425.         LCALL PUT_ELEMENT_MEM                   ; (Parameter 3 Low)
  426.         ERROR 0
  427.  
  428.         POP ACC
  429.         POP PSW
  430.         RET
  431.  
  432. ;---------------------------------------------------------------------
  433. ; Funktion : Speichert die Ready-MARKE im Speicher
  434. ; Aufrufparameter : -
  435. ; Ruechgabeparameter : -
  436. ; Veraenderte Register :
  437. ; Stackbedarf :
  438. ; Zeitbedarf :
  439. ;
  440.  
  441. STORE_READY:
  442.         PUSH ACC
  443.         MOV A,#READY_MARKE
  444.         LCALL PUT_ELEMENT_MEM
  445.         POP ACC
  446.         RET
  447.  
  448. ;---------------------------------------------------------------------
  449. ; Funktion : Speichert das Sync.-MARKE und den Sync.-Counter im Speicher
  450. ; Aufrufparameter : -
  451. ; Ruechgabeparameter : -
  452. ; Veraenderte Register :
  453. ; Stackbedarf :
  454. ; Zeitbedarf :
  455. ;
  456.  
  457. STORE_SYNC:
  458.         PUSH ACC
  459.         MOV A,#SYNC_MARKE
  460.         LCALL PUT_ELEMENT_MEM
  461.         INC T_Sync_Counter                ; Sync_Counter +1
  462.         MOV A,T_Sync_Counter
  463.         LCALL PUT_ELEMENT_MEM
  464.         LCD 29,"Sync.-Nr."
  465.         LCALL A_LCD
  466.         POP ACC
  467.         RET
  468.  
  469. ;---------------------------------------------------------------------
  470. ; Funktion : Ready-Msg. erhalten und bearbeiten.
  471. ; Aufrufparameter : -
  472. ; Ruechgabeparameter : -
  473. ; Veraenderte Register :
  474. ; Stackbedarf :
  475. ; Zeitbedarf :
  476. ;
  477.  
  478. GET_READY_MSG:
  479.         LCD 40H,"                                        "
  480.         CLR Ready_Waiting
  481.         RET
  482.  
  483. ;---------------------------------------------------------------------
  484. ; Funktion : Sync.-Msg. erhalten und bearbeiten. Bricht Running ab
  485. ;            wenn von Partner Sync.-Nr. 0 kommt. Wenn eigenes Modul
  486. ;            noch nicht getstartet wird Sync.-Msg. mit #0 an Partner
  487. ;            geschickt.
  488. ; Aufrufparameter : -
  489. ; Ruechgabeparameter : -
  490. ; Veraenderte Register :
  491. ; Stackbedarf :
  492. ; Zeitbedarf :
  493. ;
  494.  
  495. GET_SYNC_MSG:
  496.         JNB RunningBit,G_S_1
  497.         LJMP G_S_2
  498. G_S_1:  PUSH B
  499.         MOV B,#3                                ; Msg.
  500.         MOV R2,#0                               ; mit #0
  501.         JB P3.5,G_S_FRS
  502.         post_message1 MemFrs,GetFrsSync         ; Sync.-Meldung an Partner
  503.         POP B
  504.         RET                                     ; schicken
  505. G_S_FRS: post_message1 MemRob,GetRobSync
  506.         POP B
  507.         RET
  508.  
  509. G_S_2:  PUSH PSW
  510.         PUSH ACC
  511.         INC R_Sync_Counter
  512.         MOV A,R2                        ; Sync_Counter aus Msg. holen
  513.         CJNE A,#0,G_S_KEIN_ABBRUCH        ; Abbruch bei #0
  514.         LJMP G_S_ABBRUCH
  515. G_S_KEIN_ABBRUCH:
  516.         CJNE A,R_Sync_Counter,G_S_ERROR   ; Fehler wenn ungleich
  517.         CLR Sync_Waiting
  518.         POP ACC
  519.         POP PSW
  520.         RET
  521.  
  522. G_S_ABBRUCH:
  523.         LCD 40h,"Partner nicht bereit. Abbruch.          "
  524.         CLR RUNNINGBIT
  525.         POP ACC
  526.         POP PSW
  527.         LCALL INIT_TEACH
  528.         LCALL RESET_TEACH
  529.         RET
  530.  
  531. G_S_ERROR:
  532.         LCD 40h,"Synchronisationsfehler.                 "
  533.         CLR RUNNINGBIT
  534.         POP ACC
  535.         POP PSW
  536.         LCALL INIT_TEACH
  537.         LCALL RESET_TEACH
  538.         RET
  539.  
  540. ;---------------------------------------------------------------------
  541. ; Funktion : Testen ob Queue- Warnung von Frs gekommen ist. Wenn ja,
  542. ;            GibReady an die Fraese schicken und warten bis kommt.
  543. ; Aufrufparameter : -
  544. ; Ruechgabeparameter : -
  545. ; Veraenderte Register :
  546. ; Stackbedarf :
  547. ; Zeitbedarf :
  548. ;
  549.  
  550. queue_test      macro
  551.  
  552. Q_T_Main_Loop:
  553.         LCALL MAIN_EVENT_LOOP
  554.         JB PAUSE,Q_T_Main_Loop                  ; Pause aktiv
  555.         JB READY_WAITING,Q_T_Main_Loop          ; warten auf Ready von Frs
  556.         LCALL READ_STATUS
  557.         JB ACC.1,Q_T_Main_Loop
  558.  
  559.         endm
  560.  
  561. ;---------------------------------------------------------------------
  562. ; Funktion : Daten aus der Fraesdatei vom PC empfangen, konvertieren
  563. ;            und an die Fraese schicken.
  564. ; Aufrufparameter : -
  565. ; Ruechgabeparameter : -
  566. ; Veraenderte Register :
  567. ; Stackbedarf :
  568. ; Zeitbedarf :
  569. ;
  570.  
  571.  
  572. GET_WORKFR_FROM_PC:
  573.         PUSH_ALL
  574.         JB RUNNINGBIT,GET_WORKFR_FROM_PC_START
  575.         LJMP GET_WORKFR_FROM_PC_ABBRUCH
  576. GET_WORKFR_FROM_PC_START:
  577.         MOV A,R1                                ; testen ob Dateiende
  578.         CJNE A,#0ffh,GET_WORKFR_FROM_PC_NEXT
  579.         MOV A,R2
  580.         CJNE A,#0ffh,GET_WORKFR_FROM_PC_NEXT
  581.         LJMP GET_WORKFR_FROM_PC_ENDE
  582.  
  583. GET_WORKFR_FROM_PC_NEXT:                        ; naechste Msg. von PC
  584.         PUSH_ALL                                ; konvertieren und an Frs
  585.         queue_test
  586.         MOV A,AR7                               ; schicken
  587.         CJNE A,#PenDown,G_W_PenUp               ; Auf- oder Abbewegung?
  588.         ljmp G_W_PenDown
  589. G_W_PenUp:
  590.         jb drill_down,G_W_Make_Up
  591.         ljmp G_W_Pen_Ready                      ; ist schon oben
  592. G_W_Make_Up:
  593.         post_message2 #Frs,#MoveZ,Frs_Ref_z,Frs_Ref_z+1 ; Pen aus Werkstueck ziehen
  594.         queue_test
  595.         post_message2 #Frs,#FrsVelocityDraw,#fast ; schnelle Bewegung
  596.         queue_test
  597.         post_message2 #Frs,#MoveRZ,#(d_z/256),#(d_z#256) ; Pen up
  598.         clr DRILL_DOWN
  599.         queue_test
  600.         LJMP G_W_Pen_Ready                      ; fertig
  601.  
  602. G_W_PenDown:
  603.         jnb drill_down,G_W_Make_Down
  604.         ljmp G_W_Pen_Ready                       ; ist schon unten
  605. G_W_Make_Down:
  606.         post_message2 #Frs,#MoveRZ,#(((-d_z) & 0ffffh) / 256),#(((-d_z) & 0ffffh) # 256) ; Ab
  607.         queue_test
  608.         post_message2 #Frs,#FrsVelocityDraw,#slow ; langsame Bewegung
  609.         queue_test
  610.         post_message2 #Frs,#MoveZ,Frs_Ref_Tiefe,Frs_Ref_Tiefe+1 ; Pen aus Werkstueck ziehen
  611.         queue_test
  612.         SETB DRILL_DOWN
  613. G_W_Pen_Ready:                                  ; Pen fertig !
  614.  
  615.         POP_ALL
  616.         post_message2 #Frs,#MovePR,AR4,AR3,AR6,AR5,#0,#0 ; rel. Bewegung
  617.         queue_test
  618.  
  619. ;        DJNZ Queue_Counter,G_W_Send_no_Ready
  620. ;        MOV Queue_Counter,#Queue_Const
  621. ;        PUSH_ALL
  622. ;        post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0
  623. ;        POP_ALL
  624.  
  625. G_W_Send_no_Ready:
  626.  
  627.         GET_16 BLOCKNR
  628.         INC DPTR
  629.         SET_16 BLOCKNR                          ; Blocknr.=+1 setzen
  630.         MOV R1,DPL                              ; Blocknr.
  631.         MOV R2,DPH
  632.         MOV A,MY_SLAVE_ADR
  633.         SWAP A                                  ; *16
  634.         ADD A,#MSG_PC_GET+Msg_Frs_Datei
  635.         MOV R0,A
  636.         MOV A,#PC_Slave_Adr
  637.         MOV B,#8
  638.         SEND_NET                                ; naechsten Block anfordern
  639.         POP_ALL
  640.         RET
  641.  
  642. GET_WORKFR_FROM_PC_ENDE:
  643.         post_message2 #Frs,#DRILL,#off          ;
  644.         CLR Drilling
  645.  
  646.         POP_ALL
  647.         LCD 40h,"Fraesdatei fertig.                      "
  648.         RET
  649.  
  650. GET_WORKFR_FROM_PC_ABBRUCH:
  651.         CLR Drilling
  652.         POP_ALL
  653.         RET
  654.  
  655. ;---------------------------------------------------------------------
  656. ; Funktion : Warnung von Frs erhalten und verarbeiten.
  657. ; Aufrufparameter : -
  658. ; Ruechgabeparameter : -
  659. ; Veraenderte Register :
  660. ; Stackbedarf :
  661. ; Zeitbedarf :
  662. ;
  663.  
  664. Get_Warning_From_Frs:
  665.         LCD 40h,"Warnung Fraese:                         "
  666.         PUSH ACC
  667.         PUSH PSW
  668.         PUSH B
  669.         PUSH_DPTR
  670.  
  671.         MOV A,AR2
  672.         IFMAKE QUEUE_WARNING,SETB FrsWarning    ; Queue Fraese laeuf ueber
  673.  
  674.         MOV DPTR,#ParamStr_Tab                  ; Tabellenbasis laden
  675. GWFF_NEXT:
  676.         MOV A,#0
  677.         MOVC A,@A+DPTR                          ; Wert laden
  678.         PUSH ACC                                ; retten
  679.         MOV A,#1
  680.         MOVC A,@A+DPTR                          ; Stringlaenge laden
  681.         MOV B,A
  682.         POP ACC                                 ; Wert mit empfangenem
  683.         CJNE A,AR2,GWFF_LOOP                    ; vergleichen
  684.         LJMP GWFF_AUSGABE
  685. GWFF_LOOP:
  686.         MOV A,B                                 ; Stringlaende auf Tabellen-
  687.         ADD A,DPL                               ; zeiger addieren
  688.         MOV DPL,A
  689.         MOV A,#0
  690.         ADDC A,DPH
  691.         MOV DPH,A
  692.         LJMP GWFF_NEXT
  693.  
  694. GWFF_AUSGABE:
  695.         MOV A,#50h                              ; LCD- Position
  696.         LCALL LCD_SET_DD_RAM_ADDRESS
  697.         INC DPTR
  698.         INC DPTR
  699.         LCALL LCD_WRITE_STRING                  ; Meldung ausgeben
  700.         MOV A,#0h                               ; LCD- Position
  701.         LCALL LCD_SET_DD_RAM_ADDRESS
  702.  
  703.         POP_DPTR
  704.         POP B
  705.         POP PSW
  706.         POP ACC
  707.         RET
  708.  
  709. ;---------------------------------------------------------------------
  710. ; Funktion : Fehler von Frs erhalten und verarbeiten.
  711. ; Aufrufparameter : -
  712. ; Ruechgabeparameter : -
  713. ; Veraenderte Register :
  714. ; Stackbedarf :
  715. ; Zeitbedarf :
  716. ;
  717.  
  718. Get_Error_From_Frs:
  719.         LCD 40h,"Fehler Fraese:                          "
  720.         PUSH ACC
  721.         PUSH PSW
  722.         PUSH B
  723.         PUSH_DPTR
  724.         MOV DPTR,#ParamStr_Tab                  ; Tabellenbasis laden
  725. GEFF_NEXT:
  726.         MOV A,#0
  727.         MOVC A,@A+DPTR                          ; Wert laden
  728.         PUSH ACC
  729.         MOV A,#1
  730.         MOVC A,@A+DPTR                          ; Stringlaenge laden
  731.         MOV B,A
  732.         POP ACC                                 ; Wert mit empfangenem
  733.         CJNE A,AR2,GEFF_LOOP                    ; vergleichen
  734.         LJMP GEFF_AUSGABE
  735. GEFF_LOOP:
  736.         MOV A,B                                 ; Stringlaende auf Tabellen-
  737.         ADD A,DPL                               ; zeiger addieren
  738.         MOV DPL,A
  739.         MOV A,#0
  740.         ADDC A,DPH
  741.         MOV DPH,A
  742.         LJMP GEFF_NEXT
  743.  
  744. GEFF_AUSGABE:
  745.         MOV A,#4Fh                              ; LCD- Position
  746.         LCALL LCD_SET_DD_RAM_ADDRESS
  747.         INC DPTR
  748.         INC DPTR
  749.         LCALL LCD_WRITE_STRING                  ; Meldung ausgeben
  750.         MOV A,#0h                               ; LCD- Position
  751.         LCALL LCD_SET_DD_RAM_ADDRESS
  752.  
  753.         POP_DPTR
  754.         POP B
  755.         POP PSW
  756.         POP ACC
  757.         RET
  758.  
  759. ;---------------------------------------------------------------------
  760. ; Funktion :
  761. ; Aufrufparameter : -
  762. ; Ruechgabeparameter : -
  763. ; Veraenderte Register :
  764. ; Stackbedarf :
  765. ; Zeitbedarf :
  766. ;
  767.  
  768. ;=====================================================================
  769. ;        END
  770. ;---------------------------------------------------------------------
  771.  
  772.  
  773.  
  774.