; Aufgabe Nr.: Speichermodul fuer uP- Praktikum II ; Autor: Joerg Vollandt ; erstellt am : 21.05.1994 ; letzte Aenderung am : 01.08.1994 ; Bemerkung : Makros ; ; Dateiname : makro1.asm ; ;--------------------------------------------------------------------- ; Funktion : Direkter Bitmove- Befehl ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : PSW ; Stackbedarf : ; Zeitbedarf : ; MOVB MACRO ZIEL,QUELLE MOV C,QUELLE MOV ZIEL,C ENDM ;--------------------------------------------------------------------- ; Funktion : String auf LCD ausgaben. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; LCD MACRO POS,STRG PUSH ACC PUSH DPH PUSH DPL MOV A,#POS LCALL LCD_SET_DD_RAM_ADDRESS MOV DPTR,#STR_ADR LCALL LCD_WRITE_STRING LJMP WEITER STR_ADR DB STRG,0 WEITER: POP DPL POP DPH POP ACC ENDM ;--------------------------------------------------------------------- ; Funktion : A, B, PSW, DPTR, R0 - R7 auf Stack retten ; Aufrufparameter : PUSH_ALL ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : 2 ; Zeitbedarf : ; PUSH_ALL MACRO PUSH ACC PUSH B PUSH PSW PUSH_DPTR PUSH AR0 PUSH AR1 PUSH AR2 PUSH AR3 PUSH AR4 PUSH AR5 PUSH AR6 PUSH AR7 ENDM ;--------------------------------------------------------------------- ; Funktion : A, B, PSW, DPTR, R0 - R7 von Stack holen ; Aufrufparameter : POP_ALL ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : 2 ; Zeitbedarf : ; POP_ALL MACRO POP AR7 POP AR6 POP AR5 POP AR4 POP AR3 POP AR2 POP AR1 POP AR0 POP_DPTR POP PSW POP B POP ACC ENDM ;--------------------------------------------------------------------- ; Funktion : DPTR pushen und popen. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; PUSH_DPTR MACRO PUSH DPL PUSH DPH ENDM POP_DPTR MACRO POP DPH POP DPL ENDM ;--------------------------------------------------------------------- ; Funktion : DPTR decreminieren. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; ifdef joerg DEC_DPTR MACRO INC DPL DJNZ DPL,DEC_DPTR1 DEC DPH DEC_DPTR1: DEC DPL ENDM endif ;--------------------------------------------------------------------- ; Funktion : Addieren und subtraieren mit DPTR. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; ADD_DPTR MACRO WERT PUSH PSW PUSH ACC MOV A,#(WERT#256) ADD A,DPL MOV DPL,A MOV A,#(WERT/256) ADDC A,DPH MOV DPH,A POP ACC POP PSW ENDM SUBB_DPTR MACRO WERT PUSH PSW PUSH ACC MOV A,DPL CLR C SUBB A,#(WERT#256) MOV DPL,A MOV A,DPH SUBB A,#(WERT/256) MOV DPH,A POP ACC POP PSW ENDM ;--------------------------------------------------------------------- ; Funktion : Rechnen mit 16- Bit- Werten im ext. RAM (L,H). ; Aufrufparameter : DPTR = Wert ; Ruechgabeparameter : DPTR = Wert ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; SET_16 MACRO NAME PUSH ACC PUSH_DPTR PUSH DPH PUSH DPL MOV DPTR,#NAME POP ACC MOVX @DPTR,A INC DPTR POP ACC MOVX @DPTR,A POP_DPTR POP ACC ENDM GET_16 MACRO NAME PUSH ACC MOV DPTR,#NAME MOVX A,@DPTR PUSH ACC INC DPTR MOVX A,@DPTR MOV DPH,A POP DPL POP ACC ENDM ;--------------------------------------------------------------------- ; Funktion : Scheduler. ; Aufrufparameter : ACC = Zeichen ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; IFCALL MACRO CONST,ROUTINE CJNE A,#CONST,IFCALL1 LCALL ROUTINE IFCALL1: ENDM IFMAKE MACRO CONST,CODE CJNE A,#CONST,IFMAKE1 CODE IFMAKE1: ENDM ;--------------------------------------------------------------------- ; Funktion : Warten bis Netzwerk freiund Message senden. ; Aufrufparameter : ACC = Zeichen ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; SEND_NET MACRO push acc SEND_NET1: LCALL READ_STATUS JB ACC.1,SEND_NET1 pop acc LCALL SEND_MESSAGE ENDM ;--------------------------------------------------------------------- ; Funktion : Message senden. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : ; Zeitbedarf : ; post_Message1 macro Modul,Msg ; if MY_SLAVE_ADR = uC_Modul ; call ADR_Msg ; interne Message ; elseif PUSH ACC WAIT_NET: LCALL READ_STATUS JB ACC.1,WAIT_NET PUSH DPL PUSH DPH MOV DPTR,#ModulNetAdr_Tab MOV A,#Modul MOVC A,@A+DPTR POP DPH POP DPL MOV R0,#Modul MOV R1,#Msg LCALL SEND_MESSAGE ; Message ins Netz POP ACC ; endif endm ;--------------------------------------------------------------------- ; Funktion : Message senden, alle Parameter im Mkroaufruf, B automatisch. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : R0- R7 ; Stackbedarf : ; Zeitbedarf : ; post_Message2 macro Modul,Msg,PARA1,PARA2,PARA3,PARA4,PARA5,PARA6 Parameteranzahl SET 2 ; min. Modulnr. und Msg.-Nr. PUSH ACC PUSH B IF "PARA1"<>"" MOV R2,PARA1 Parameteranzahl SET Parameteranzahl+1 ENDIF IF "PARA2"<>"" MOV R3,PARA2 Parameteranzahl SET Parameteranzahl+1 ENDIF IF "PARA3"<>"" MOV R4,PARA3 Parameteranzahl SET Parameteranzahl+1 ENDIF IF "PARA4"<>"" MOV R5,PARA4 Parameteranzahl SET Parameteranzahl+1 ENDIF IF "PARA5"<>"" MOV R6,PARA5 Parameteranzahl SET Parameteranzahl+1 ENDIF IF "PARA6"<>"" MOV R7,PARA6 Parameteranzahl SET Parameteranzahl+1 ENDIF PUSH DPL PUSH DPH MOV DPTR,#ModulNetAdr_Tab MOV A,Modul MOVC A,@A+DPTR POP DPH POP DPL MOV R0,Modul MOV R1,Msg MOV B,#Parameteranzahl PUSH ACC WAIT_NET: LCALL READ_STATUS JB ACC.1,WAIT_NET POP ACC LCALL SEND_MESSAGE ; Message ins Netz POP B POP ACC endm ;--------------------------------------------------------------------- ; Funktion : Message ausgeben ; Aufrufparameter : wie definiert ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; TEST_MESSAGE_HEX MACRO POS PUSH ACC MOV A,#POS LCALL LCD_SET_DD_RAM_ADDRESS POP ACC PUSH ACC LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,B LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R0 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R1 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R2 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R3 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R4 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R5 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R6 LCALL A_LCD MOV A,#' ' LCALL LCD_WRITE_CHAR MOV A,R7 LCALL A_LCD POP ACC ENDM ;--------------------------------------------------------------------- ; Funktion : Fehlerbehandlung ; Aufrufparameter : Fehlernr. ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; ERROR MACRO NR ENDM ;--------------------------------------------------------------------- ;--------------------------------------------------------------------- TEST_MESSAGE MACRO POS,SCHALTER IF SCHALTER<=TEST_LEVEL PUSH ACC MOV A,#POS LCALL LCD_SET_DD_RAM_ADDRESS MOV A,R0 LCALL LCD_WRITE_CHAR MOV A,R1 LCALL LCD_WRITE_CHAR MOV A,R2 LCALL LCD_WRITE_CHAR MOV A,R3 LCALL LCD_WRITE_CHAR MOV A,R4 LCALL LCD_WRITE_CHAR MOV A,R5 LCALL LCD_WRITE_CHAR MOV A,R6 LCALL LCD_WRITE_CHAR MOV A,R7 LCALL LCD_WRITE_CHAR POP ACC ENDIF ENDM ;--------------------------------------------------------------------- MAKE_MESSAGE MACRO ADR,STRG IF 0=0 MOV A,#0 MOV DPTR,#STR_ADR MOVC A,@A+DPTR MOV R0,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R1,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R2,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R3,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R4,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R5,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R6,A MOV A,#0 INC DPTR MOVC A,@A+DPTR MOV R7,A MOV A,#ADR MOV B,#8 LJMP WEITER STR_ADR DB STRG WEITER: NOP ENDIF ENDM ;--------------------------------------------------------------------- MAKE_MESSAGE_HEX MACRO ADR,L,A0,A1,A2,A3,A4,A5,A6,A7 IF 0=0 MOV R0,#A0 MOV R1,#A1 MOV R2,#A2 MOV R3,#A3 MOV R4,#A4 MOV R5,#A5 MOV R6,#A6 MOV R7,#A7 MOV A,#ADR MOV B,#L ENDIF ENDM ;---------------------------------------------------------------------