aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t_mic51/t_mod1.asm
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t_mic51/t_mod1.asm')
-rw-r--r--tests/t_mic51/t_mod1.asm487
1 files changed, 487 insertions, 0 deletions
diff --git a/tests/t_mic51/t_mod1.asm b/tests/t_mic51/t_mod1.asm
new file mode 100644
index 0000000..fb91ac8
--- /dev/null
+++ b/tests/t_mic51/t_mod1.asm
@@ -0,0 +1,487 @@
+
+; Aufgabe Nr.: Teach- In Einheit fuer uP- Praktikum II
+; --- Link- Modul ---
+; Autor: Joerg Vollandt
+; erstellt am : 13.06.1994
+; letzte Aenderung am : 02.08.1994
+; Bemerkung :
+;
+; Dateiname : t_mod1.asm
+;
+;=====================================================================
+ SEGMENT CODE
+ USING 0
+
+ INCLUDE MAKRO1.ASM
+ INCLUDE TAST1.ASM
+ INCLUDE MEM1.ASM
+ INCLUDE TEACH1.ASM
+ INCLUDE RUN1.ASM
+ INCLUDE DEBUG.ASM
+;=====================================================================
+; Definitionen der Funktionen der Teach- In Einheit
+
+Adr_InitRobTeach EQU INIT_TEACH ; Initialisieren der Teach- In Einheit
+Adr_InitFrsTeach EQU INIT_TEACH ; Initialisieren der Teach- In Einheit
+Adr_DeinitRobTeach EQU DEINIT_TEACH ; Deinitialisieren der Teach- In Einheit
+Adr_DeinitFrsTeach EQU DEINIT_TEACH ; Deinitialisieren der Teach- In Einheit
+Adr_ClearRobTeach EQU CLEAR_TEACH ; Speicher loeschen
+Adr_ClearFrsTeach EQU CLEAR_TEACH ; Speicher loeschen
+Adr_ResetRobTeach EQU RESET_TEACH ; Speicher zum lesen zuruecksetzen
+Adr_ResetFrsTeach EQU RESET_TEACH ; Speicher zum lesen zuruecksetzen
+Adr_StoreRobPos EQU STORE_ROB ; Position Roboter speichern
+Adr_StoreFrsPos EQU STORE_FRAES ; Position Fraese speichern
+Adr_StoreRobSync EQU STORE_SYNC ; Synchronisation speichern
+Adr_StoreFrsSync EQU STORE_SYNC ; Synchronisation speichern
+Adr_StoreRobReady EQU STORE_READY ; Warten auf Geraet speichern
+Adr_StoreFrsReady EQU STORE_READY ; Warten auf Geraet speichern
+Adr_StoreFrsPieceRef EQU STORE_PIECE_REF ; Werkstueck Nullpkt. festlegen
+Adr_StoreFrsTiefe EQU STORE_TIEFE ; Fraestiefe festlegen
+Adr_StoreFrsDrill EQU STORE_DRILL ; Fraesdatei bearbeiten
+Adr_GetRobSync EQU GET_SYNC_MSG ; Synchronisation empfangen
+Adr_GetFrsSync EQU GET_SYNC_MSG ; Synchronisation empfangen
+Adr_GetRobReady EQU GET_READY_MSG ; Ready empfangen
+Adr_GetFrsReady EQU GET_READY_MSG ; Ready empfangen
+Adr_LoadRob EQU LOAD_ROB ; Roboter Teach- In Datei von PC laden
+Adr_LoadFrs EQU LOAD_FRAES ; Fraese- Teach- In Datei von PC laden
+Adr_SaveRob EQU SAVE_ROB ; Roboter Teach- In Datei auf PC speichern
+Adr_SaveFrs EQU SAVE_FRAES ; Fraese- Teach- In Datei auf PC speichern
+
+Adr_RobPos1 EQU FIRST_FROM_ROB ; Position von Roboter 1. Teil
+Adr_RobPos2 EQU SECOND_FROM_ROB ; Position von Roboter 2. Teil
+Adr_FrsPos1 EQU FIRST_FROM_FRS ; Position von Fraese 1. Teil
+Adr_FrsPos2 EQU SECOND_FROM_FRS ; Position von Fraese 2. Teil
+Adr_FrsPieceRef EQU PIECE_REF_FROM_FRS ; Position von Fraese
+Adr_FrsTiefe EQU TIEFE_FROM_FRS ; Position von Fraese
+
+Adr_DebugRob EQU DEBUG_MEM ; Position von Roboter 2. Teil
+Adr_DebugFrs EQU DEBUG_MEM ; Position von Roboter 2. Teil
+Adr_StartRobRun EQU START_RUNNING ; Runmanager starten
+Adr_StartFrsRun EQU START_RUNNING ; Runmanager starten
+
+Adr_GetFrsError EQU Get_Error_from_frs ;
+Adr_GetFrsWarning EQU Get_Warning_from_frs ;
+
+
+MemRob_MsgCall_Tab:
+ include defMsg.inc
+MemRob_MsgCall_Tend:
+
+MemFrs_MsgCall_Tab:
+ include defMsg.inc
+MemFrs_MsgCall_Tend:
+
+;------------------------------------------------------------------------------
+; Speicherdefinitionen
+
+
+ SEGMENT BITDATA
+
+MSG DB ?
+Sp_MSG DB ?
+READY DB ?
+CRC DB ?
+
+TESTBIT DB ?
+RUNNINGBIT DB ?
+Sync_Waiting DB ?
+Ready_Waiting DB ?
+Drilling DB ?
+Drill_down DB ?
+PAUSE DB ?
+FrsWarning DB ?
+SingleStep DB ?
+Break DB ?
+
+Ref_Flag DB ?
+Tiefe_Flag DB ?
+
+ SEGMENT DATA
+
+Sp_MSG_Buffer DB ?
+T_Sync_Counter DB ?
+R_Sync_Counter DB ?
+Queue_Counter DB ?
+
+Frs_Ref_x DW ?
+Frs_Ref_y DW ?
+Frs_Ref_z DW ?
+Frs_Ref_Tiefe DW ?
+
+;---------------------------------------------------------------------
+ SEGMENT CODE
+;---------------------------------------------------------------------
+; Funktion : CALL_BACK- Fkt. wird nach Empfang einer Message
+; aufgerufen.
+; Aufrufparameter : -
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+
+MESSAGE_BIT BIT ACC.0 ; Message Bits
+SPECIAL_MESSAGE_BIT BIT ACC.2
+START_BIT BIT ACC.0 ; Special- Message Bits
+STOP_BIT BIT ACC.1
+RESET_BIT BIT ACC.3
+PAUSE_BIT BIT ACC.2
+AUX1_BIT BIT ACC.4
+AUX2_BIT BIT ACC.5
+
+MESSAGE_INTERRUPT:
+ PUSH ACC
+ LCALL READ_STATUS
+ JNB SPECIAL_MESSAGE_BIT,MESSAGE_INTERRUPT1
+ LCALL READ_SPECIAL_MESSAGE ; Special_Message lesen
+ MOV Sp_MSG_Buffer,A ; und retten
+ SETB Sp_MSG
+ POP ACC
+ RET
+
+MESSAGE_INTERRUPT1:
+ JNB MESSAGE_BIT,MESSAGE_INTERRUPT2
+ SETB MSG ; Normale Msg.empfangen
+MESSAGE_INTERRUPT2:
+ POP ACC
+ RET
+
+
+;---------------------------------------------------------------------
+; Funktion : Message- Scheduler fuer Speichermodul.
+; Aufrufparameter : -
+; Ruechgabeparameter : -
+; Veraenderte Register : -
+; Stackbedarf :
+; Zeitbedarf :
+;
+; ****************************************************************************
+; R0 Empf„nger (logische Adresse)
+; R1 Message
+; R2 - R7 Parameter
+; ****************************************************************************
+
+Message_Handler MACRO Modul
+
+ push PSW
+ push ACC
+ push DPH
+ push DPL
+
+ mov DPTR,#Msg_Hndl_Ret ; Ruecksprungadresse vom indirekten
+ push DPL ; Jump ergibt indirekten Call
+ push DPH
+ mov DPTR,#Modul_MsgCall_Tab
+ mov A,AR1
+ clr C
+ rlc A
+ mov AR1,A
+ jnc No_inc
+ inc DPH
+No_inc: movc A,@A+DPTR
+ push ACC
+ inc DPTR
+ mov A,AR1
+ movc A,@A+DPTR
+ push ACC
+ ret ; indireckter Sprung
+
+Msg_Hndl_Ret:
+ pop DPL
+ pop DPH
+Msg_Ha_Exit:
+ pop ACC
+ pop PSW
+
+ ENDM
+
+;---------------------------------------------------------------------
+; Funktion : Message- Scheduler fuer PC- Messages.
+; Aufrufparameter : -
+; Ruechgabeparameter : -
+; Veraenderte Register : -
+; Stackbedarf :
+; Zeitbedarf :
+;
+
+MEM_SCHEDULER:
+ PUSH PSW
+ PUSH ACC
+ CLR MSG
+ MOV A,R0
+ IFCALL 02h,GET_FROM_PC ; TI-Datei von PC an Roboter
+ IFCALL 03h,GET_FROM_PC ; TI-Datei von PC an Fraese
+ IFCALL 01h,GET_WORKFR_FROM_PC ; Fraesdatei von PC
+ POP ACC
+ POP PSW
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : Message auf die Module verteilen
+; Aufrufparameter : -
+; Ruechgabeparameter : -
+; Veraenderte Register : -
+; Stackbedarf :
+; Zeitbedarf :
+;
+
+Dispatch_Msg:
+ PUSH PSW
+ PUSH ACC
+ MOV A,R0
+ CJNE A,#10h,Dis_Msg0 ; Msg.-Nr. <=10h sind von PC
+Dis_Msg0: JC Dis_Msg01 ; und werden von MEM_SCHEDULER
+ LJMP Dis_Msg02 ; bearbeitet
+Dis_Msg01:
+ LCALL MEM_SCHEDULER
+ LJMP Dis_Msg_Ret
+
+Dis_Msg02:
+ cjne A,#TeachRob,Dis_Msg10
+ LJMP Dis_Msg11
+Dis_Msg10: LJMP Dis_Msg2
+Dis_Msg11:
+ ifdef TeachRob_MsgCall_Tab
+ Message_Handler TeachRob
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg2: cjne A,#TeachFrs,Dis_Msg20
+ LJMP Dis_Msg21
+Dis_Msg20: LJMP Dis_Msg3
+Dis_Msg21:
+ ifdef TeachFrs_MsgCall_Tab
+ Message_Handler TeachFrs
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg3: cjne A,#Rob,Dis_Msg30
+ LJMP Dis_Msg31
+Dis_Msg30: LJMP Dis_Msg4
+Dis_Msg31:
+ ifdef Rob_MsgCall_Tab
+ Message_Handler Rob
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg4: cjne A,#Frs,Dis_Msg40
+ LJMP Dis_Msg41
+Dis_Msg40: LJMP Dis_Msg5
+Dis_Msg41:
+ ifdef Frs_MsgCall_Tab
+ Message_Handler Frs
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg5: cjne A,#MemFrs,Dis_Msg50
+ LJMP Dis_Msg51
+Dis_Msg50: LJMP Dis_Msg6
+Dis_Msg51:
+ ifdef MemFrs_MsgCall_Tab
+ Message_Handler MemFrs
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg6: cjne A,#MemRob,Dis_Msg60
+ LJMP Dis_Msg61
+Dis_Msg60: LJMP Dis_Msg7
+Dis_Msg61:
+ ifdef MemRob_MsgCall_Tab
+ Message_Handler MemRob
+ endif
+ ljmp Dis_Msg_Ret
+
+Dis_Msg7:
+
+Dis_Msg_Ret:
+ POP ACC
+ POP PSW
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : START-Routine
+; Aufrufparameter : Wird durch die globale Message "START" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_START:
+ ;LCD 40H,"START-Routine "
+ LCALL START_RUNNING
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : NOTAUS-Routine
+; Aufrufparameter : Wird durch die globale Message "STOP" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_NOTAUS:
+ LCD 40H,"NOTAUS!!! Abbruch. "
+ CLR RUNNINGBIT
+ LCALL INIT_TEACH
+ LCALL RESET_TEACH
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : RESET-Routine
+; Aufrufparameter : Wird durch die globale Message "RESET" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_RESET:
+ LCD 40H,"Teachin- u. Runmanager initialisiert. "
+ LCALL INIT_TEACH
+ LCALL INIT_RUN
+ LCALL RESET_TEACH
+ LCALL INIT_FRS
+ CLR TESTBIT
+
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : PAUSE-Routine
+; Aufrufparameter : Wird durch die globale Message "PAUSE" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_PAUSE:
+ JB RUNNINGBIT,GLOBAL_PAUSE_1
+ LJMP GLOBAL_PAUSE_ENDE
+GLOBAL_PAUSE_1:
+ CPL PAUSE
+ JNB PAUSE,GLOBAL_PAUSE_AUS
+ LCD 40H,"Pausemodus. Weiter mit <PAUSE>. "
+ RET
+GLOBAL_PAUSE_AUS:
+ LCD 40H,"Pausemodus aufgehoben. "
+ RET
+GLOBAL_PAUSE_ENDE:
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : AUX1-Routine
+; Aufrufparameter : Wird durch die globale Message "AUX1" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_AUX1:
+ LCD 40H,"AUX1-Routine "
+ SETB SingleStep
+ JNB Ready_Waiting,GLOBAL_AUX1_ENDE
+ SETB Break
+GLOBAL_AUX1_ENDE
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : AUX2-Routine
+; Aufrufparameter : Wird durch die globale Message "AUX2" ausgeloesst
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+GLOBAL_AUX2:
+ ;LCD 40H,"AUX2-Routine "
+ LCD 40H,"Teachin- Datei wird gelaeden. "
+ LCALL LOAD_ROB
+ LCALL LOAD_FRAES
+ RET
+
+;---------------------------------------------------------------------
+; Funktion : Hauptprogramm fuer das Speichermodul
+; Aufrufparameter : -
+; Ruechgabeparameter : -
+; Veraenderte Register :
+; Stackbedarf :
+; Zeitbedarf :
+;
+
+Main_Event_Loop:
+ JNB Sp_MSG,No_Sp_Msg
+ LCALL Do_Sp_Msg
+ JB Sp_MSG,Main_Event_Loop
+No_Sp_Msg:
+ JNB MSG,No_Msg
+ LCALL Do_Msg
+ JB MSG,Main_Event_Loop
+No_Msg:
+ JNB RUNNINGBIT,No_Runnig
+ LCALL Do_Runnig
+No_Runnig:
+ JB Sp_MSG,Main_Event_Loop
+ JB MSG,Main_Event_Loop
+
+ RET
+
+
+Do_Msg: CLR MSG
+ PUSH_ALL
+ LCALL READ_MESSAGE
+ LCALL Dispatch_Msg
+ POP_ALL
+ RET
+
+Do_Sp_Msg:
+ CLR Sp_MSG
+ PUSH ACC
+ MOV A,Sp_MSG_Buffer
+SM_START: JNB START_BIT,SM_NOTAUS ; Special- Message Fkt.
+ LCALL GLOBAL_START ; aufrufen
+ POP ACC
+ RET
+SM_NOTAUS: JNB STOP_BIT,SM_RESET
+ LCALL GLOBAL_NOTAUS
+ POP ACC
+ RET
+SM_RESET: JNB RESET_BIT,SM_PAUSE
+ LCALL GLOBAL_RESET
+ POP ACC
+ RET
+SM_PAUSE: JNB PAUSE_BIT,SM_AUX1
+ LCALL GLOBAL_PAUSE
+ POP ACC
+ RET
+SM_AUX1: JNB AUX1_BIT,SM_AUX2
+ LCALL GLOBAL_AUX1
+ POP ACC
+ RET
+SM_AUX2: JNB AUX2_BIT,SM_ENDE
+ LCALL GLOBAL_AUX2
+ POP ACC
+ RET
+SM_ENDE: POP ACC
+ RET
+
+Do_Runnig:
+ JB Drilling,Do_Drilling
+ JB PAUSE,Do_Waiting
+ JB Sync_Waiting,Do_Waiting
+ JB Ready_Waiting,Do_Waiting
+ LCALL RUN_MODUL
+Do_Waiting:
+ RET
+
+Do_Drilling:
+ JNB FrsWarning,No_FrsWarning ; Queue- Warnung von Frs
+ PUSH_ALL
+ post_message2 #Frs,#GibReady,#MemFrs,#GetFrsReady,#0
+ POP_ALL
+ CLR FrsWarning
+ SETB READY_WAITING
+No_FrsWarning:
+ RET
+
+;=====================================================================
+; END
+;---------------------------------------------------------------------
+