Subversion Repositories pentevo

Rev

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

  1.  
  2. ; Aufgabe Nr.: Teach- In Einheit fuer uP- Praktikum II
  3. ;              --- Link- Modul ---
  4. ; Autor: Joerg Vollandt
  5. ; erstellt am : 13.06.1994
  6. ; letzte Aenderung am : 02.08.1994
  7. ; Bemerkung :
  8. ;
  9. ; Dateiname : t_mod1.asm
  10. ;
  11. ;=====================================================================
  12.         SEGMENT CODE
  13.         USING 0
  14.  
  15.         include makro1.asm
  16.         include tast1.asm
  17.         include mem1.asm
  18.         include teach1.asm
  19.         include run1.asm
  20.         include debug.asm
  21. ;=====================================================================
  22. ; Definitionen der Funktionen der Teach- In Einheit
  23.  
  24. Adr_InitRobTeach   EQU    INIT_TEACH       ; Initialisieren der Teach- In Einheit
  25. Adr_InitFrsTeach   EQU    INIT_TEACH       ; Initialisieren der Teach- In Einheit
  26. Adr_DeinitRobTeach EQU     DEINIT_TEACH    ; Deinitialisieren der Teach- In Einheit
  27. Adr_DeinitFrsTeach EQU     DEINIT_TEACH    ; Deinitialisieren der Teach- In Einheit
  28. Adr_ClearRobTeach  EQU     CLEAR_TEACH     ; Speicher loeschen
  29. Adr_ClearFrsTeach  EQU     CLEAR_TEACH     ; Speicher loeschen
  30. Adr_ResetRobTeach  EQU     RESET_TEACH     ; Speicher zum lesen zuruecksetzen
  31. Adr_ResetFrsTeach  EQU     RESET_TEACH     ; Speicher zum lesen zuruecksetzen
  32. Adr_StoreRobPos    EQU     STORE_ROB       ; Position Roboter speichern
  33. Adr_StoreFrsPos    EQU     STORE_FRAES     ; Position Fraese speichern
  34. Adr_StoreRobSync   EQU     STORE_SYNC      ; Synchronisation speichern
  35. Adr_StoreFrsSync   EQU     STORE_SYNC      ; Synchronisation speichern
  36. Adr_StoreRobReady  EQU     STORE_READY     ; Warten auf Geraet speichern
  37. Adr_StoreFrsReady  EQU     STORE_READY     ; Warten auf Geraet speichern
  38. Adr_StoreFrsPieceRef EQU   STORE_PIECE_REF ; Werkstueck Nullpkt. festlegen
  39. Adr_StoreFrsTiefe  EQU     STORE_TIEFE     ; Fraestiefe festlegen
  40. Adr_StoreFrsDrill  EQU     STORE_DRILL     ; Fraesdatei bearbeiten
  41. Adr_GetRobSync     EQU     GET_SYNC_MSG    ; Synchronisation empfangen
  42. Adr_GetFrsSync     EQU     GET_SYNC_MSG    ; Synchronisation empfangen
  43. Adr_GetRobReady    EQU     GET_READY_MSG   ; Ready empfangen
  44. Adr_GetFrsReady    EQU     GET_READY_MSG   ; Ready empfangen
  45. Adr_LoadRob        EQU     LOAD_ROB        ; Roboter Teach- In Datei von PC laden
  46. Adr_LoadFrs        EQU     LOAD_FRAES      ; Fraese- Teach- In Datei von PC laden
  47. Adr_SaveRob        EQU     SAVE_ROB        ; Roboter Teach- In Datei auf PC speichern
  48. Adr_SaveFrs        EQU     SAVE_FRAES      ; Fraese- Teach- In Datei auf PC speichern
  49.  
  50. Adr_RobPos1        EQU     FIRST_FROM_ROB  ; Position von Roboter 1. Teil
  51. Adr_RobPos2        EQU     SECOND_FROM_ROB ; Position von Roboter 2. Teil
  52. Adr_FrsPos1        EQU     FIRST_FROM_FRS  ; Position von Fraese 1. Teil
  53. Adr_FrsPos2        EQU     SECOND_FROM_FRS ; Position von Fraese 2. Teil
  54. Adr_FrsPieceRef    EQU     PIECE_REF_FROM_FRS ; Position von Fraese
  55. Adr_FrsTiefe       EQU     TIEFE_FROM_FRS  ; Position von Fraese
  56.  
  57. Adr_DebugRob       EQU     DEBUG_MEM       ; Position von Roboter 2. Teil
  58. Adr_DebugFrs       EQU     DEBUG_MEM       ; Position von Roboter 2. Teil
  59. Adr_StartRobRun    EQU     START_RUNNING   ; Runmanager starten
  60. Adr_StartFrsRun    EQU     START_RUNNING   ; Runmanager starten
  61.  
  62. Adr_GetFrsError    EQU     Get_Error_from_frs   ;
  63. Adr_GetFrsWarning  EQU     Get_Warning_from_frs ;
  64.  
  65.  
  66. MemRob_MsgCall_Tab:
  67.         include defMsg.inc
  68. MemRob_MsgCall_Tend:
  69.  
  70. MemFrs_MsgCall_Tab:
  71.         include defMsg.inc
  72. MemFrs_MsgCall_Tend:
  73.  
  74. ;------------------------------------------------------------------------------
  75. ; Speicherdefinitionen
  76.  
  77.  
  78.         SEGMENT BITDATA
  79.  
  80. MSG             DB      ?
  81. Sp_MSG          DB      ?
  82. READY           DB      ?
  83. CRC             DB      ?
  84.  
  85. TESTBIT         DB      ?
  86. RUNNINGBIT      DB      ?
  87. Sync_Waiting    DB      ?
  88. Ready_Waiting   DB      ?
  89. Drilling        DB      ?
  90. Drill_down      DB      ?
  91. PAUSE           DB      ?
  92. FrsWarning      DB      ?
  93. SingleStep      DB      ?
  94. Break           DB      ?
  95.  
  96. Ref_Flag        DB      ?
  97. Tiefe_Flag      DB      ?
  98.  
  99.         SEGMENT DATA
  100.  
  101. Sp_MSG_Buffer     DB      ?
  102. T_Sync_Counter    DB      ?
  103. R_Sync_Counter    DB      ?
  104. Queue_Counter     DB      ?
  105.  
  106. Frs_Ref_x         DW      ?
  107. Frs_Ref_y         DW      ?
  108. Frs_Ref_z         DW      ?
  109. Frs_Ref_Tiefe     DW      ?
  110.  
  111. ;---------------------------------------------------------------------
  112.         SEGMENT CODE
  113. ;---------------------------------------------------------------------
  114. ; Funktion : CALL_BACK- Fkt. wird nach Empfang einer Message
  115. ;            aufgerufen.
  116. ; Aufrufparameter : -
  117. ; Ruechgabeparameter : -
  118. ; Veraenderte Register :
  119. ; Stackbedarf :
  120. ; Zeitbedarf :
  121. ;
  122.  
  123. MESSAGE_BIT             BIT     ACC.0   ; Message Bits
  124. SPECIAL_MESSAGE_BIT     BIT     ACC.2
  125. START_BIT               BIT     ACC.0   ; Special- Message Bits
  126. STOP_BIT                BIT     ACC.1
  127. RESET_BIT               BIT     ACC.3
  128. PAUSE_BIT               BIT     ACC.2
  129. AUX1_BIT                BIT     ACC.4
  130. AUX2_BIT                BIT     ACC.5
  131.  
  132. MESSAGE_INTERRUPT:
  133.         PUSH ACC
  134.         LCALL READ_STATUS
  135.         JNB SPECIAL_MESSAGE_BIT,MESSAGE_INTERRUPT1
  136.         LCALL READ_SPECIAL_MESSAGE              ; Special_Message lesen
  137.         MOV Sp_MSG_Buffer,A                     ; und retten
  138.         SETB Sp_MSG
  139.         POP ACC
  140.         RET
  141.  
  142. MESSAGE_INTERRUPT1:
  143.         JNB MESSAGE_BIT,MESSAGE_INTERRUPT2
  144.         SETB MSG                                ; Normale Msg.empfangen
  145. MESSAGE_INTERRUPT2:
  146.         POP ACC
  147.         RET
  148.  
  149.  
  150. ;---------------------------------------------------------------------
  151. ; Funktion : Message- Scheduler fuer Speichermodul.
  152. ; Aufrufparameter : -
  153. ; Ruechgabeparameter : -
  154. ; Veraenderte Register : -
  155. ; Stackbedarf :
  156. ; Zeitbedarf :
  157. ;
  158. ; ****************************************************************************
  159. ; R0    EmpfДnger (logische Adresse)
  160. ; R1    Message
  161. ; R2 - R7 Parameter
  162. ; ****************************************************************************
  163.  
  164. Message_Handler MACRO   Modul
  165.  
  166.         push PSW
  167.         push ACC
  168.         push DPH
  169.         push DPL
  170.  
  171.         mov  DPTR,#Msg_Hndl_Ret        ; Ruecksprungadresse vom indirekten
  172.         push DPL                        ; Jump ergibt indirekten Call
  173.         push DPH
  174.         mov  DPTR,#Modul_MsgCall_Tab
  175.         mov  A,AR1
  176.         clr  C
  177.         rlc  A
  178.         mov  AR1,A
  179.         jnc  No_inc
  180.         inc DPH
  181. No_inc: movc A,@A+DPTR
  182.         push ACC
  183.         inc DPTR
  184.         mov  A,AR1
  185.         movc A,@A+DPTR
  186.         push ACC
  187.         ret                             ; indireckter Sprung
  188.  
  189. Msg_Hndl_Ret:
  190.         pop  DPL
  191.         pop  DPH
  192. Msg_Ha_Exit:
  193.         pop  ACC
  194.         pop  PSW
  195.  
  196.         ENDM
  197.  
  198. ;---------------------------------------------------------------------
  199. ; Funktion : Message- Scheduler fuer PC- Messages.
  200. ; Aufrufparameter : -
  201. ; Ruechgabeparameter : -
  202. ; Veraenderte Register : -
  203. ; Stackbedarf :
  204. ; Zeitbedarf :
  205. ;
  206.  
  207. MEM_SCHEDULER:
  208.         PUSH PSW
  209.         PUSH ACC
  210.         CLR MSG
  211.         MOV A,R0
  212.         IFCALL  02h,GET_FROM_PC         ; TI-Datei von PC an Roboter
  213.         IFCALL  03h,GET_FROM_PC         ; TI-Datei von PC an Fraese
  214.         IFCALL  01h,GET_WORKFR_FROM_PC  ; Fraesdatei von PC
  215.         POP ACC
  216.         POP PSW
  217.         RET
  218.  
  219. ;---------------------------------------------------------------------
  220. ; Funktion : Message auf die Module verteilen
  221. ; Aufrufparameter : -
  222. ; Ruechgabeparameter : -
  223. ; Veraenderte Register : -
  224. ; Stackbedarf :
  225. ; Zeitbedarf :
  226. ;
  227.  
  228. Dispatch_Msg:
  229.         PUSH PSW
  230.         PUSH ACC
  231.         MOV A,R0
  232.         CJNE A,#10h,Dis_Msg0            ; Msg.-Nr. <=10h sind von PC
  233. Dis_Msg0: JC Dis_Msg01                  ; und werden von MEM_SCHEDULER
  234.         LJMP Dis_Msg02                  ; bearbeitet
  235. Dis_Msg01:
  236.         LCALL MEM_SCHEDULER
  237.         LJMP Dis_Msg_Ret
  238.  
  239. Dis_Msg02:
  240.         cjne A,#TeachRob,Dis_Msg10
  241.         LJMP Dis_Msg11
  242. Dis_Msg10: LJMP Dis_Msg2
  243. Dis_Msg11:
  244.         ifdef TeachRob_MsgCall_Tab
  245.           Message_Handler TeachRob
  246.         endif
  247.         ljmp Dis_Msg_Ret
  248.  
  249. Dis_Msg2: cjne A,#TeachFrs,Dis_Msg20
  250.         LJMP Dis_Msg21
  251. Dis_Msg20: LJMP Dis_Msg3
  252. Dis_Msg21:
  253.         ifdef TeachFrs_MsgCall_Tab
  254.           Message_Handler TeachFrs
  255.         endif
  256.         ljmp Dis_Msg_Ret
  257.  
  258. Dis_Msg3: cjne A,#Rob,Dis_Msg30
  259.         LJMP Dis_Msg31
  260. Dis_Msg30: LJMP Dis_Msg4
  261. Dis_Msg31:
  262.         ifdef Rob_MsgCall_Tab
  263.           Message_Handler Rob
  264.         endif
  265.         ljmp Dis_Msg_Ret
  266.  
  267. Dis_Msg4: cjne A,#Frs,Dis_Msg40
  268.         LJMP Dis_Msg41
  269. Dis_Msg40: LJMP Dis_Msg5
  270. Dis_Msg41:
  271.         ifdef Frs_MsgCall_Tab
  272.           Message_Handler Frs
  273.         endif
  274.         ljmp Dis_Msg_Ret
  275.  
  276. Dis_Msg5: cjne A,#MemFrs,Dis_Msg50
  277.         LJMP Dis_Msg51
  278. Dis_Msg50: LJMP Dis_Msg6
  279. Dis_Msg51:
  280.         ifdef MemFrs_MsgCall_Tab
  281.           Message_Handler MemFrs
  282.         endif
  283.         ljmp Dis_Msg_Ret
  284.  
  285. Dis_Msg6: cjne A,#MemRob,Dis_Msg60
  286.         LJMP Dis_Msg61
  287. Dis_Msg60: LJMP Dis_Msg7
  288. Dis_Msg61:
  289.         ifdef MemRob_MsgCall_Tab
  290.           Message_Handler MemRob
  291.         endif
  292.         ljmp Dis_Msg_Ret
  293.  
  294. Dis_Msg7:
  295.  
  296. Dis_Msg_Ret:
  297.         POP ACC
  298.         POP PSW
  299.         RET
  300.  
  301. ;---------------------------------------------------------------------
  302. ; Funktion : START-Routine
  303. ; Aufrufparameter : Wird durch die globale Message "START" ausgeloesst
  304. ; Ruechgabeparameter : -
  305. ; Veraenderte Register :
  306. ; Stackbedarf :
  307. ; Zeitbedarf :
  308. ;
  309. GLOBAL_START:
  310.         ;LCD 40H,"START-Routine                           "
  311.         LCALL START_RUNNING
  312.         RET
  313.  
  314. ;---------------------------------------------------------------------
  315. ; Funktion : NOTAUS-Routine
  316. ; Aufrufparameter : Wird durch die globale Message "STOP" ausgeloesst
  317. ; Ruechgabeparameter : -
  318. ; Veraenderte Register :
  319. ; Stackbedarf :
  320. ; Zeitbedarf :
  321. ;
  322. GLOBAL_NOTAUS:
  323.         LCD 40H,"NOTAUS!!! Abbruch.                      "
  324.         CLR RUNNINGBIT
  325.         LCALL INIT_TEACH
  326.         LCALL RESET_TEACH
  327.         RET
  328.  
  329. ;---------------------------------------------------------------------
  330. ; Funktion : RESET-Routine
  331. ; Aufrufparameter : Wird durch die globale Message "RESET" ausgeloesst
  332. ; Ruechgabeparameter : -
  333. ; Veraenderte Register :
  334. ; Stackbedarf :
  335. ; Zeitbedarf :
  336. ;
  337. GLOBAL_RESET:
  338.         LCD 40H,"Teachin- u. Runmanager initialisiert.   "
  339.         LCALL INIT_TEACH
  340.         LCALL INIT_RUN
  341.         LCALL RESET_TEACH
  342.         LCALL INIT_FRS
  343.         CLR TESTBIT
  344.  
  345.         RET
  346.  
  347. ;---------------------------------------------------------------------
  348. ; Funktion : PAUSE-Routine
  349. ; Aufrufparameter : Wird durch die globale Message "PAUSE" ausgeloesst
  350. ; Ruechgabeparameter : -
  351. ; Veraenderte Register :
  352. ; Stackbedarf :
  353. ; Zeitbedarf :
  354. ;
  355. GLOBAL_PAUSE:
  356.         JB RUNNINGBIT,GLOBAL_PAUSE_1
  357.         LJMP GLOBAL_PAUSE_ENDE
  358. GLOBAL_PAUSE_1:
  359.         CPL PAUSE
  360.         JNB PAUSE,GLOBAL_PAUSE_AUS
  361.         LCD 40H,"Pausemodus. Weiter mit <PAUSE>.         "
  362.         RET
  363. GLOBAL_PAUSE_AUS:
  364.         LCD 40H,"Pausemodus aufgehoben.                  "
  365.         RET
  366. GLOBAL_PAUSE_ENDE:
  367.         RET
  368.  
  369. ;---------------------------------------------------------------------
  370. ; Funktion : AUX1-Routine
  371. ; Aufrufparameter : Wird durch die globale Message "AUX1" ausgeloesst
  372. ; Ruechgabeparameter : -
  373. ; Veraenderte Register :
  374. ; Stackbedarf :
  375. ; Zeitbedarf :
  376. ;
  377. GLOBAL_AUX1:
  378.         LCD 40H,"AUX1-Routine                            "
  379.         SETB SingleStep
  380.         JNB Ready_Waiting,GLOBAL_AUX1_ENDE
  381.         SETB Break
  382. GLOBAL_AUX1_ENDE
  383.         RET
  384.  
  385. ;---------------------------------------------------------------------
  386. ; Funktion : AUX2-Routine
  387. ; Aufrufparameter : Wird durch die globale Message "AUX2" ausgeloesst
  388. ; Ruechgabeparameter : -
  389. ; Veraenderte Register :
  390. ; Stackbedarf :
  391. ; Zeitbedarf :
  392. ;
  393. GLOBAL_AUX2:
  394.         ;LCD 40H,"AUX2-Routine                            "
  395.         LCD 40H,"Teachin- Datei wird gelaeden.           "
  396.         LCALL LOAD_ROB
  397.         LCALL LOAD_FRAES
  398.         RET
  399.  
  400. ;---------------------------------------------------------------------
  401. ; Funktion : Hauptprogramm fuer das Speichermodul
  402. ; Aufrufparameter : -
  403. ; Ruechgabeparameter : -
  404. ; Veraenderte Register :
  405. ; Stackbedarf :
  406. ; Zeitbedarf :
  407. ;
  408.  
  409. Main_Event_Loop:
  410.         JNB Sp_MSG,No_Sp_Msg
  411.         LCALL Do_Sp_Msg
  412.         JB Sp_MSG,Main_Event_Loop
  413. No_Sp_Msg:
  414.         JNB MSG,No_Msg
  415.         LCALL Do_Msg
  416.         JB MSG,Main_Event_Loop
  417. No_Msg:
  418.         JNB RUNNINGBIT,No_Runnig
  419.         LCALL Do_Runnig
  420. No_Runnig:
  421.         JB Sp_MSG,Main_Event_Loop
  422.         JB MSG,Main_Event_Loop
  423.  
  424.         RET
  425.  
  426.  
  427. Do_Msg: CLR MSG
  428.         PUSH_ALL
  429.         LCALL READ_MESSAGE
  430.         LCALL Dispatch_Msg
  431.         POP_ALL
  432.         RET
  433.  
  434. Do_Sp_Msg:
  435.         CLR Sp_MSG
  436.         PUSH ACC
  437.         MOV A,Sp_MSG_Buffer
  438. SM_START: JNB START_BIT,SM_NOTAUS       ; Special- Message Fkt.
  439.         LCALL GLOBAL_START              ; aufrufen
  440.         POP ACC
  441.         RET
  442. SM_NOTAUS: JNB STOP_BIT,SM_RESET
  443.         LCALL GLOBAL_NOTAUS
  444.         POP ACC
  445.         RET
  446. SM_RESET: JNB RESET_BIT,SM_PAUSE
  447.         LCALL GLOBAL_RESET
  448.         POP ACC
  449.         RET
  450. SM_PAUSE: JNB PAUSE_BIT,SM_AUX1
  451.         LCALL GLOBAL_PAUSE
  452.         POP ACC
  453.         RET
  454. SM_AUX1: JNB AUX1_BIT,SM_AUX2
  455.         LCALL GLOBAL_AUX1
  456.         POP ACC
  457.         RET
  458. SM_AUX2: JNB AUX2_BIT,SM_ENDE
  459.         LCALL GLOBAL_AUX2
  460.         POP ACC
  461.         RET
  462. SM_ENDE: POP ACC
  463.         RET
  464.  
  465. Do_Runnig:
  466.         JB Drilling,Do_Drilling
  467.         JB PAUSE,Do_Waiting
  468.         JB Sync_Waiting,Do_Waiting
  469.         JB Ready_Waiting,Do_Waiting
  470.         LCALL RUN_MODUL
  471. Do_Waiting:
  472.         RET
  473.  
  474. Do_Drilling:
  475.         JNB FrsWarning,No_FrsWarning            ; Queue- Warnung von Frs
  476.         PUSH_ALL
  477.         post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0
  478.         POP_ALL
  479.         CLR FrsWarning
  480.         SETB READY_WAITING
  481. No_FrsWarning:
  482.         RET
  483.  
  484. ;=====================================================================
  485. ;        END
  486. ;---------------------------------------------------------------------
  487.  
  488.