aboutsummaryrefslogtreecommitdiffstats
path: root/tests/t_mic51/TAST1.ASM
blob: 0a34ecb25c997656569c7ea80546ddd45a6ff656 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
; 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
;---------------------------------------------------------------------