543 lines
10 KiB
NASM
543 lines
10 KiB
NASM
|
|
; 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
|
|
|
|
;---------------------------------------------------------------------
|
|
|