; Aufgabe Nr.: Speichermodul fuer uP- Praktikum II ; Autor: Joerg Vollandt ; erstellt am : 21.05.1994 ; letzte Aenderung am : ; Bemerkung : Routinen fuer ASCII- Tastatur ; ; Dateiname : tast1.asm ; ;--------------------------------------------------------------------- ; Definitionen SEGMENT DATA ZEICHEN DB ? SEGMENT BITDATA STROB DB ? ;--------------------------------------------------------------------- SEGMENT CODE ;===================================================================== ; Funktion : Tastaturinterrupt initialisieren ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; INIT_TASTATUR: Init_Vektor INT0_VEKTOR,TASTATUR_INT SETB IT0 CLR IE0 SETB EX0 RET ;--------------------------------------------------------------------- ; Funktion : Interruptroutine fuer Tastatur, setzt bei Tastaturstrob ; das Bit STROB und schreibt das Zeichen von der Tastatur ; nach ZEICHEN. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; TASTATUR_INT: MOV ZEICHEN,P1 SETB STROB RETI ;--------------------------------------------------------------------- ; Funktion : Klein- in Grossbuchstaben umwandeln. ; Aufrufparameter : ACC = Zeichen ; Ruechgabeparameter : ACC = Zeichen ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; ifdef joerg UPCASE: PUSH PSW CJNE A,#'a',UPCASE1 UPCASE1: JC UPCASE2 CJNE A,#07bh,UPCASE3 UPCASE3: JNC UPCASE2 CLR C SUBB A,#32 UPCASE2: POP PSW RET endif ;--------------------------------------------------------------------- ; Funktion : Warten bis Tastendruck und Zeichen verwerfen. ; Aufrufparameter : - ; Ruechgabeparameter : - ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; WAIT_KEY: ifdef joerg JNB STROB,$ CLR STROB RET elseif JNB KB_CHAR_READY,$ CLR KB_CHAR_READY RET endif ;--------------------------------------------------------------------- ; Funktion : Warten bis Tastendruck und Zeichen nach ACC von der ; Tastatur einlesen. ; Aufrufparameter : - ; Ruechgabeparameter : ACC = Zeichen ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; CHAR_ACC: ifdef joerg JNB STROB,$ CLR STROB MOV A,ZEICHEN RET elseif JNB KB_CHAR_READY,$ CLR KB_CHAR_READY MOV A,KB_CHAR_BUFFER RET endif ;--------------------------------------------------------------------- ; Funktion : ACC in hex von der Tastatur einlesen. ; Aufrufparameter : - ; Ruechgabeparameter : ACC = Wert ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; IN_ACC: PUSH PSW PUSH B LCALL CHAR_ACC LCALL LCD_WRITE_CHAR LCALL UPCASE CJNE A,#'A',IN_ACC1 IN_ACC1: JC IN_ACC2 CJNE A,#'G',IN_ACC3 IN_ACC3: JNC IN_ACC2 CLR C SUBB A,#7 IN_ACC2: CLR C SUBB A,#30h SWAP A MOV B,A LCALL CHAR_ACC LCALL LCD_WRITE_CHAR LCALL UPCASE CJNE A,#'A',IN_ACC11 IN_ACC11: JC IN_ACC12 CJNE A,#'G',IN_ACC13 IN_ACC13: JNC IN_ACC12 CLR C SUBB A,#7 IN_ACC12: CLR C SUBB A,#30h ORL A,B POP B POP PSW RET ;--------------------------------------------------------------------- ; Funktion : DPTR in hex von der Tastatur einlesen. ; Aufrufparameter : - ; Ruechgabeparameter : DPTR = Wert ; Veraenderte Register : ; Stackbedarf : ; Zeitbedarf : ; IN_DPTR: PUSH ACC LCALL IN_ACC MOV DPH,A LCALL IN_ACC MOV DPL,A POP ACC RET ;--------------------------------------------------------------------- ; Funktion : ACC in hex auf LCD ausgeben. ; Aufrufparameter : ACC = Wert ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : ; Zeitbedarf : ; A_LCD: PUSH ACC PUSH ACC SWAP A ANL A,#00001111B ADD A,#'0' CJNE A,#':',A_LCD1 A_LCD1: JC A_LCD2 ADD A,#7 A_LCD2: LCALL LCD_WRITE_CHAR POP ACC ANL A,#00001111B ADD A,#'0' CJNE A,#':',A_LCD3 A_LCD3: JC A_LCD4 ADD A,#7 A_LCD4: LCALL LCD_WRITE_CHAR POP ACC RET ;--------------------------------------------------------------------- ; Funktion : DPTR in hex auf LCD ausgeben. ; Aufrufparameter : DPTR = Wert ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : ; Zeitbedarf : ; DPTR_LCD: PUSH ACC MOV A,DPH LCALL A_LCD MOV A,DPL LCALL A_LCD POP ACC RET ;--------------------------------------------------------------------- ; Funktion : Setzt LCD- Status neu ; Aufrufparameter : A = Status ; Ruechgabeparameter : - ; Veraenderte Register : - ; Stackbedarf : ; Zeitbedarf : ; LCD_SET_STATUS: RET ;===================================================================== ; END ;---------------------------------------------------------------------