ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 1 MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3 ===================================================== Source File: C:\Users\BNoll\Documents\Mide51\MM\MM2.asm Object File: C:\Users\BNoll\Documents\Mide51\MM\MM2.hex List File: C:\Users\BNoll\Documents\Mide51\MM\MM2.lst Line I Addr Code Source 1: ; ****************************************************************** 2: ; * Hektarzaehler 3: ; * File : main.asm + function.asm 4: ; * 5: ; * Programm Flaechenanzeige auf LCD - Anzeige (1x16, 8+8) 6: ; * Datum : 11.05.1992 7: ; * fuer 8032 EPC aus ELEKTOR 2/91 mit 8031 8: ; * String-Ausgabe gegenueber ha535.asm geaendert 9: ; * Neu: MC AT89C51RC2 bzw. AT89S52 10: ; ******************************************************************* 11: ; Funktion --> OK 12: ; 13: ; Funktionen: 14: ; ADD_BIN Addition zweier Binaerzhlen 15: ; CONBCD Umwandlung in 5 Byte BCD-Zahl FF FF FF FF FF -> 4294967295 16: ; LOE1 loeschen 17: ; TRA0 Parameter laden 18: ; TRA1 19: ; TRA_BIN 20: ; CONBIN Umrechnung BCD in Binaerzahl 9999 -> 27 0F 21: ; LOE0 loeschen 22: ; ADDA0 + --> 23: ; BIN10 BIN*10 --> BIN 24: ; UPM_D Faktor Flaeche (Umfang * Breite * 1/0.75/0.5/0.25) 25: ; und durch 100 dividieren 26: ; M16P16 Faktor U * Faktor B, 16*16 Multiplikation ohne Vorzeichen 27: ; M16P8 16*8 Multiplikation ohne Vorzeichen 28: ; CONBCD umwandeln in BCD-Zahl 29: ; DIV_BCD Divisionsprogramm (Faktor / 100) 30: ; SHIFT 31: ; SUBB_BCD Subtraktion Rest-Divisor 32: ; ZEHNER_CPL Zehner-Komplement des Rest bilden 33: ; CONBIN umwandel in Binaer 34: ; LOE0 loeschen 35: ; ADDA0 + --> 36: ; BIN10 BIN*10 --> BIN 37: ; LCD_SENDSTRING 38: ; OUT_CHAR_LCD 39: ; LCD_ADR8 40: ; LCD_CLEAR 41: ; LCD_ADR1 42: ; LCD_ADR8 43: ; OUT_LCD ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 2 Line I Addr Code Source 44: ; WAIT_LCD 45: ; OUT_BYTE_LCD Ausgabe LCD 2 Byte ASCII 46: ; OUT_CHAR_LCD 47: ; OUT_WERT_LCD 48: ; OUT_CHAR_LCD 49: ; OUT_BYTE_LCD 50: ; HEX_ASCII Wandlung 00H-09H in 0 - 9 51: ; OUT_CHAR_LCD 52: ; TASTATUR Tasten Dekodierung 53: ; ENTPRELL 54: ; TASTEN_EINGABE Eingabe Umfang und Breite 55: ; Tastatur 56: ; OUT_CHAR_LCD 57: ; WAIT_LCD 58: ; WAIT 59: ; Time Verzoegerungszeit 2 Sekunden 60: ; WAIT_LCD Wartezeit LCD = 5ms 61: ; WAIT Verzoegerungszeit 0.5ms 62: ; 63: ; Deklaration der LCD - Parameter 64: ; 65: ; $INCLUDE (function.a51) 66: ;LCD_ADR EQU 0F800H ; Basisadresse LCD FC00 ?? 67: ; Basisadresse : Daten in das Befehlsregister 68: ; schreiben 69: ; Basisadresse +2: Inhalt des Befehlsregister 70: ; lesen 71: ; Basisadresse +1: Daten in das Datenregister 72: ; schreiben 73: ; Basisadresse +3: Inhalt des Datenregister 74: ; lesen 75: ;LCD_INI1 EQU 01H ; Clear Display 76: ;LCD_INI2 EQU 02H ; Cursor Home 77: ;LCD_INI3 EQU 06H ; Entry Mode Set 06 78: ;LCD_INI4 EQU 0FH ; Display On, Cursor blink 79: ;LCD_INI5 EQU 14H ; Cursor/Display Shift 14 80: ;LCD_INI6 EQU 38H ; Funktion Set 81: ;ADD1 EQU 80H ; Cursoradresse Zeichen 0-7 82: ;ADD2 EQU 0C0H ; Cursoradresse Zeichen 8-15 83: ; 84: ;** Ende LCD - Parameter 85: ;******************************************************************** 86: ;** Deklaration der Flaechenberechnung -- Parameter 87: ; 88: ;TMOD_CLR0 EQU 0F1H ; Timer 0 89: ;TMOD_SET0 EQU 01H ; Timer 0 90: ;TIMER_LOW EQU TL0 91: ;TIMER_HIGH EQU TH1 92: ;TIMER_RUN EQU TR0 93: ;TIMER_ENA EQU ET0 94: ;TIMER_PRIO EQU PT0 95: ;MS10_HIGH EQU 3CH ; fuer 50 mS Interrupt 96: ;MS10_LOW EQU 0B0H 97: N 0001 EIN EQU 01H 98: N 0000 AUS EQU 00H 99: ; BCD und Binaer Rechenprogramme ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 3 Line I Addr Code Source 100: ; aus FILE : BINBCD.asm 101: ; Datum : 04.05.1991 102: ; 103: ; Parameter Multiplikations-Programm : 104: ; (R0) MSB Multiplikand 105: ; (R0+1) LSB Multiplikand 106: ; (R1) LSB Multiplikator 107: ; (R1+1) MSB Multiplikator 108: ; 109: ; Speicherbelegung : 110: ; ANF + 0 Ergebnis MSB 111: ; ANF + 1 Ergebnis 112: ; ANF + 2 Ergebnis 113: ; ANF + 3 Ergebnis LSB 114: ; ANF + 4 Zwischenspeicher 115: ; ANF + 5 Zwischenspeicher 116: ; ANF + 6 Multiplikand (MSB) 117: ; ANF + 7 Multiplikand (LSB) 118: ; ANF + 8 Multiplikator (MSB) 119: ; ANF + 9 Multiplikator (LSB) 120: ; ANF + 10 Adresse (R0) 121: ; ANF + 11 Adresse (R1) 122: ; ANF + 12 Vorzeichenmaske 123: ; 124: 125: ;ANF EQU 70H 126: 127: ; Parameter Konvertierung CONBCD BIN --> BCD (FF FF FF FF --> 4294967295) 128: ;BINLSB_BCD EQU 43H ; BIN Wort LSB 129: ;BINMSB_BCD EQU 40H ; BIN Wort MSB 130: ;ZWSLSB_BCD EQU 3FH ; Zwischenspeicher LSB 131: ;BCDLSB_BCD EQU 29H ; BCD Wort LSB 132: ;BCDMSB_BCD EQU 25H ; BCD Wort MSB 133: ;ZBIT_BCD EQU 20H ; Bitzaehler 134: ;ZBYBCD_BCD EQU 05H ; BCD Wortzaehler 135: ;ZBYBIN_BCD EQU 04H ; BIN Wortzaehler 136: ; Parameter Konvertierung CON BIN BCD --> BIN (9999 -> 27 0F) 137: ;BINLSB_BIN EQU 46H ; BIN Wort LSB 138: ;BINMSB_BIN EQU 45H ; BIN Wort MSB 139: ;ZWSLSB_BIN EQU 44H ; Zwischenspeicher LSB 140: ;BCDLSB_BIN EQU 31H ; BCD Wort LSB 141: ;BCDMSB_BIN EQU 30H ; BCD Wort MSB 142: ;ZBYBCD_BIN EQU 02H ; BCD Wortzaehler 143: ;ZBYBIN_BIN EQU 02H ; BIN Wortzaehler 144: 145: ;** Ende Parameter Flaechenberechnung 146: ;**************************************************************** 147: ; Tastendekodierung aus dem Buch: 148: ; MC-Tools 2 149: ; Die 8051-Mikrocontroller-Familie Einfuehrung in die Software 150: ; Tastenprogramm TASTATUR_1 Seite 88 - 90 151: ;** Parameter Tastenabfrage 152: ; aus FILE : TASTE12.asm 153: ; Datum : 10.05.19991 154: ; Modus 0: TASTATUR_MODUS vor Unterprogrammaufruf geloescht 155: ; erst wenn Taste aktiv wird, Rueckkehr zum Hauptprogramm ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 4 Line I Addr Code Source 156: ; MODUS 1: TASTATUR_MODUS vor Unterprogrammaufruf gesetzt, 157: ; Tastenfeld wird einmal abgefragt. 158: ; Bei Rueckkehr zum Hauptprogramm gibt Carry an, 159: ; ob eine Taste betaetigt wurde. 160: ; CARRY = 0: keine Taste erkannt 161: ; CARRY = 1: Taste erkannt; Nummer der Taste steht in 162: ; TASTEN_NUMMER 163: 164: ;TASTEN_PORT EQU P1 ; benuetzter PORT 165: ;P_ANZ EQU 03H ; Anzahl Portleitungen 166: ;TASTATUR_MODUS BIT [0] ; Steuerbit fuer Modus (20.0) 167: ;EINGAENGE EQU 00010111B ; Maske fuer Tastaturport: 168: ; Tastaturpins = 1 169: ; unbenuetzte Portpins: 170: ; Eingaenge : 1 171: ; Ausgaenge : 0 172: ;TASTEN_NUMMER EQU 01H ; Register 1 173: ;SPALTEN_ZAEHLER EQU 02H ; 2 174: ;ZEILEN_ZAEHLER EQU 03H ; 3 175: ;AUSGABE_MASKE EQU 04H ; 4 176: ;EINLESE_MASKE EQU 05H ; 5 177: 178: ;ZAHLEN EQU 00H 179: ;FERTIG EQU 03H 180: ;LOESCHEN EQU 05H 181: 182: ;HALB_BYTE EQU 00H ; Merker Halbbyte Faktor U-B 183: ;FLAN_POSI EQU 01H ; Merker Positive Flanke 184: 185: ; ************************************************************** 186: ; * Speicher : 187: ; * 10 ; Faktor U LSB 188: ; * 11 ; Faktor U MSB 189: ; * 12 ; Faktor B LSB 1 190: ; * 13 ; Faktor B MSB 1 191: ; * 14 ; Faktor 1/1 U*B LSB 192: ; * 15 ; Faktor 1/1 U*B MSB 193: ; * 16 ; Faktor 3/4 U*B LSB 194: ; * 17 ; Faktor 3/4 U*B MSB 195: ; * 18 ; 196: ; * 19 ; 197: ; * 1A ; Faktor 1/4 U*B LSB 198: ; * 1B ; Faktor 1/4 U*B MSB 199: ; * 1C ; Faktor 1/2 U*B LSB 200: ; * 1D ; Faktor 1/2 U*B LSB 201: ; * 25 ; Ergebnis Flaeche BCD MSB 202: ; * 26 ; 203: ; * 27 ; 204: ; * 28 ; 205: ; * 29 ; Ergebnis Flaeche BCD LSB 206: ; * 207: ; * 30 ; Faktor MSB 208: ; * 31 ; Faktor LSB 209: ; * 32 ; Merker Faktor Halbbyte 210: ; * 211: ; * 3F ; Zwischenspeicher Konvertierung BIN --> BCD ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 5 Line I Addr Code Source 212: ; * 40 ; Konvertierung BIN --> BCD MSB 213: ; * 41 ; 214: ; * 42 ; 215: ; * 43 ; Konvertierung BIN --> BCD LSB 216: ; * 44 ; Zwischenspeicher Konvertierung BCD --> BIN 217: ; * 45 ; Konvertierung BCD --> BIN MSB 218: ; * 46 ; Konvertierung BCD --> BIN LSB 219: ; * 220: ; * 50 ; Verzoegerungszeit LSB 221: ; * 51 ; Verzoegerungszeit 222: ; * 52 ; Verzoegerungszeit MSB 223: ; * 224: ; * 55 ; Merker Impulse > 255 225: ; * 56 ; Merker Impuls positive Flanke 226: ; * 57 ; Zaehler Timer-Zeit 227: ; * 58 ; Merker Taste Loeschen 228: ; * 229: ; * 60 ; Multiplikand LSB 230: ; * 61 ; Multiplikand MSB 231: ; * 62 ; Multiplikator LSB , Faktor U*B 232: ; * 63 ; Multiplikator MSB , Faktor U*B 233: ; * BCD-Division 3 Byte / 3 Byte 234: ; * 64 ; Divident LSB 235: ; * 65 ; 236: ; * 66 ; Divident MSB 237: ; * 67 ; Divisor LSB = 00 238: ; * 68 ; = 01 239: ; * 69 ; Divisor MSB = 00 --> 100 240: ; * 6A ; Ergebnis Quotient LSB 241: ; * 6B ; 242: ; * 6C ; Ergebnis Quotient MSB 243: ; * 6D ; Rest LSB 244: ; * 6E ; 245: ; * 6F ; Rest MSB 246: ; * BIN-Multiplikation 16*16 247: ; * 70 ; Ergebnis MSB 248: ; * 71 ; 249: ; * 72 ; 250: ; * 73 ; Ergebnis LSB 251: ; * 74 ; Zwischenspeicher 252: ; * 75 ; Zwischenspeicher 253: ; * 76 ; Multiplikand MSB 254: ; * 77 ; Multiplikand LSB 255: ; * 78 ; Multiplikator MSB 256: ; * 79 ; Multiplikator LSB 257: 258: N 0000 ORG 0000H 259: 0000 02 01 00 LJMP LCDINIT 260: 261: N 000B ORG 000BH 262: 000B 32 RETI ; TIMERINTERRUPT 263: 264: N 0100 ORG 0100H 265: 266: ; START 267: ; LCD-Anzeige Initialisieren ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 6 Line I Addr Code Source 268: 0100 LCDINIT: 269: 0100 C2 90 CLR P1.0 270: 0102 90 F8 00 MOV DPTR,#LCD_ADR 271: 0105 74 38 MOV A,#38H 272: 0107 F0 MOVX @DPTR,A 273: 0108 12 03 84 LCALL WAIT_LCD ; Wartezeit = 5ms 274: 010B 74 38 MOV A,#38H 275: 010D F0 MOVX @DPTR,A 276: 010E 12 03 84 LCALL WAIT_LCD 277: 0111 74 38 MOV A,#38H 278: 0113 F0 MOVX @DPTR,A 279: 0114 12 03 84 LCALL WAIT_LCD 280: 0117 74 0C MOV A,#0CH 281: 0119 F0 MOVX @DPTR,A 282: 011A 12 03 84 LCALL WAIT_LCD 283: 011D 74 01 MOV A,#01H 284: 011F F0 MOVX @DPTR,A 285: 0120 12 03 84 LCALL WAIT_LCD 286: 0123 74 02 MOV A,#02H 287: 0125 F0 MOVX @DPTR,A 288: 0126 12 03 84 LCALL WAIT_LCD 289: ; Initialisierung LCD Ende 290: ; Ausgabe Name und Software-Version (ha-Zaehler 1.1) 291: 0129 12 06 04 LCALL LCD_ADR1 292: 012C 90 06 E8 MOV DPTR,#STRING1 293: 012F 12 06 18 LCALL LCD_SENDSTRING 294: ; Wartezeit 295: 0132 12 03 4E LCALL TIME ; Wartezeit 2 Sekunden 296: 0135 C2 95 CLR P1.5 297: 0137 C2 96 CLR P1.6 298: 0139 C2 97 CLR P1.7 299: 013B C2 90 CLR P1.0 300: ; Anzeige loeschen 301: 013D 12 05 BF FAK_U: LCALL LCD_CLEAR 302: ; Ausgabe LCD : Faktor U 00.00 m 303: 0140 12 06 04 LCALL LCD_ADR1 304: 0143 90 06 F8 MOV DPTR,#STRING2 305: 0146 12 06 18 LCALL LCD_SENDSTRING 306: ; Eingabe Faktor U (Umfang) 307: 0149 12 06 3F LCALL TASTEN_EINGABE ; Ausgabe BCD-Zahl, 308: ; 30 <-- MSB, 31 <-- LSB 309: 014C 12 04 A4 LCALL CONBIN ; Faktor U --> Binaerzahl 310: 014F 85 46 61 MOV (61H),(46H) ; Faktor U LSB 311: 0152 85 45 60 MOV (60H),(45H) ; Faktor U MSB 312: 0155 12 05 BF LCALL LCD_CLEAR 313: 0158 12 06 04 LCALL LCD_ADR1 314: 015B 90 06 F8 MOV DPTR,#STRING2 315: 015E 12 06 18 LCALL LCD_SENDSTRING 316: 0161 12 05 CF LCALL OUT_WERT_LCD ; Ausgabe Faktor --> LCD 317: 0164 12 03 4E LCALL TIME 318: 0167 12 05 BF LCALL LCD_CLEAR 319: 016A 12 06 04 LCALL LCD_ADR1 320: 016D 90 07 18 MOV DPTR,#STRING4 321: 0170 12 06 18 LCALL LCD_SENDSTRING 322: 0173 7D 03 MOV R5,#03H 323: 0175 00 FAK_U1: NOP ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 7 Line I Addr Code Source 324: 0176 12 06 95 LCALL TASTATUR 325: 0179 50 FA JNC FAK_U1 326: 017B B9 03 02 CJNE R1,#FERTIG,FAK_U2 ; Abfrage Taste Fertig 327: 017E 80 05 SJMP FAK_U3 ; Eingabe U OK 328: 0180 B9 05 F2 FAK_U2: CJNE R1,#LOESCHEN,FAK_U1 ; Abfrage Taste Loeschen 329: 0183 80 B8 SJMP FAK_U ; Eingabe U NOT_OK 330: 0185 FAK_U3: 331: 0185 85 46 10 MOV (10H),(46H) ; Faktor U LSB speichern 332: 0188 85 45 11 MOV (11H),(45H) ; Faktor U MSB speichern 333: 018B 12 05 BF FAK_B: LCALL LCD_CLEAR 334: ; Ausgabe LCD : Faktor B 00.00 m 335: 018E 12 06 04 LCALL LCD_ADR1 336: 0191 90 07 08 MOV DPTR,#STRING3 337: 0194 12 06 18 LCALL LCD_SENDSTRING 338: ; Eingabe Faktor B (Breite) 339: 0197 12 06 3F LCALL TASTEN_EINGABE 340: 019A 12 04 A4 LCALL CONBIN ; Faktor B --> Binaerzahl 341: 019D 85 46 62 MOV (62H),(46H) ; Faktor B LSB 342: 01A0 85 45 63 MOV (63H),(45H) ; Faktor B MSB 343: 01A3 12 05 BF LCALL LCD_CLEAR 344: 01A6 12 06 04 LCALL LCD_ADR1 345: 01A9 90 07 08 MOV DPTR,#STRING3 346: 01AC 12 06 18 LCALL LCD_SENDSTRING 347: 01AF 12 05 CF LCALL OUT_WERT_LCD ; Ausgabe des Faktors B 348: 01B2 12 03 4E LCALL TIME 349: 01B5 12 05 BF LCALL LCD_CLEAR 350: 01B8 12 06 04 LCALL LCD_ADR1 351: 01BB 90 07 28 MOV DPTR,#STRING5 352: 01BE 12 06 18 LCALL LCD_SENDSTRING 353: 01C1 00 FAK_B1: NOP 354: 01C2 12 06 95 LCALL TASTATUR 355: 01C5 50 FA JNC FAK_B1 356: 01C7 B9 03 02 CJNE R1,#FERTIG,FAK_B2 ; Abfrage Taste Fertig 357: 01CA 80 05 SJMP FAK_MUL ; Eingabe B OK 358: 01CC B9 05 F2 FAK_B2: CJNE R1,#LOESCHEN,FAK_B1 ; Abfrage Taste Loeschen 359: 01CF 80 BA SJMP FAK_B ; Eingabe B NOT_OK 360: 01D1 FAK_MUL: 361: 01D1 85 46 12 MOV (12H),(46H) ; Faktor B LSB speichern 362: 01D4 85 45 13 MOV (13H),(45H) ; Faktor B MSB speichern 363: ; * Faktor U * 1/1 B errechnen und speichern 364: 01D7 12 03 19 LCALL UPM_D 365: 01DA 85 46 14 MOV (14H),(46H) ; Faktor U*1/1B LSB 366: 01DD 85 45 15 MOV (15H),(45H) ; Faktor U*1/1B MSB 367: ; * Faktor U * 3/4 B errechnen und speichern 368: 01E0 75 61 4B MOV (61H),#4BH ; * 75 369: 01E3 75 60 00 MOV (60H),#00H 370: 01E6 12 03 19 LCALL UPM_D ; B*75/100 371: 01E9 85 10 61 MOV (61H),(10H) ; Faktor U LSB 372: 01EC 85 11 60 MOV (60H),(11H) ; Faktor U MSB 373: 01EF 85 46 62 MOV (62H),(46H) ; Faktor B LSB 3/4 374: 01F2 85 45 63 MOV (63H),(45H) ; Faktor B MSB 3/4 375: 01F5 12 03 19 LCALL UPM_D 376: 01F8 85 46 16 MOV (16H),(46H) ; Faktor U*3/4B LSB 377: 01FB 85 45 17 MOV (17H),(45H) ; Faktor U*3/4B MSB 378: ; * Faktor 1/2 B errechnen und speichern 379: 01FE 75 61 32 MOV (61H),#32H ; * 50 ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 8 Line I Addr Code Source 380: 0201 75 60 00 MOV (60H),#00H 381: 0204 85 12 62 MOV (62H),(12H) 382: 0207 85 13 63 MOV (63H),(13H) 383: 020A 12 03 19 LCALL UPM_D ; B*50/100 384: 020D 85 10 61 MOV (61H),(10H) ; Faktor U LSB 385: 0210 85 11 60 MOV (60H),(11H) ; Faktor U MSB 386: 0213 85 46 62 MOV (62H),(46H) ; Faktor B LSB 1/2 387: 0216 85 45 63 MOV (63H),(45H) ; Faktor B MSB 1/2 388: 0219 12 03 19 LCALL UPM_D ; Faktor U*1/2B 389: 021C 85 46 1C MOV (1CH),(46H) ; Faktor U*1/2B LSB speichern 390: 021F 85 45 1D MOV (1DH),(45H) ; Faktor U*1/2B MSB speichern 391: ; * Faktor 1/4 B errechen und speichern 392: 0222 75 61 19 MOV (61H),#19H ; * 25 393: 0225 75 60 00 MOV (60H),#00H 394: 0228 85 12 62 MOV (62H),(12H) 395: 022B 85 13 63 MOV (63H),(13H) 396: 022E 12 03 19 LCALL UPM_D ; Faktor B*25/100 397: 0231 85 10 61 MOV (61H),(10H) ; Faktor U LSB 398: 0234 85 11 60 MOV (60H),(11H) ; Faktor U MSB 399: 0237 85 46 62 MOV (62H),(46H) ; Faktor B LSB 1/4 400: 023A 85 45 63 MOV (63H),(45H) ; Faktor B MSB 1/4 401: 023D 12 03 19 LCALL UPM_D ; Faktor U*1/4B 402: 0240 85 46 1A MOV (1AH),(46H) ; Faktor U*1/4B LSB speichern 403: 0243 85 45 1B MOV (1BH),(45H) ; Faktor U*1/4B MSB speichern 404: 0246 12 05 BF LCALL LCD_CLEAR 405: 0249 00 NOP 406: 024A 00 NOP 407: 024B NEU: 408: 024B 78 70 MOV R0,#70H ; Adresse laden Multiplikand MSB 409: 024D 79 78 MOV R1,#78H ; Adresse laden Multiplikator LSB 410: 024F C2 01 CLR FLAN_POSI ; Merker positive Flanke Impuls 411: 0251 E4 CLR A 412: 0252 FE MOV R6,A 413: 0253 F5 25 MOV (25H),A 414: 0255 F5 26 MOV (26H),A 415: 0257 F5 27 MOV (27H),A 416: 0259 F5 28 MOV (28H),A 417: 025B F5 29 MOV (29H),A 418: 025D F5 70 MOV (70H),A 419: 025F F5 71 MOV (71H),A 420: 0261 F5 72 MOV (72H),A 421: 0263 F5 73 MOV (73H),A 422: 0265 F5 74 MOV (74H),A 423: 0267 F5 75 MOV (75H),A 424: 0269 F5 76 MOV (76H),A 425: 026B F5 77 MOV (77H),A 426: 026D F5 78 MOV (78H),A 427: 026F F5 79 MOV (79H),A 428: 0271 F5 7A MOV (7AH),A 429: 0273 F5 7B MOV (7BH),A 430: 0275 F5 7C MOV (7CH),A 431: 0277 F5 7D MOV (7DH),A 432: 0279 F5 7E MOV (7EH),A 433: 027B F5 7F MOV (7FH),A 434: 027D 12 05 61 LCALL OUT_LCD ; Ausgabe des Flaechenwertes in ha 435: 0280 7D 03 MOV R5,#03H ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 9 Line I Addr Code Source 436: 0282 00 ANFANG: NOP 437: 0283 12 06 95 LCALL TASTATUR 438: 0286 50 1B JNC ZANF1 439: 0288 B9 05 02 CJNE R1,#LOESCHEN,T_ZAHL0 ; Taste Loeschen 440: 028B 80 BE SJMP NEU 441: 028D B9 00 08 T_ZAHL0: CJNE R1,#ZAHLEN,T_ZAHL1 ; Taste Zahlen 442: 0290 0E INC R6 ; Merker Faktor U*B 443: 0291 BE 04 0F CJNE R6,#04H,ZANF1 444: 0294 7E 00 MOV R6,#00H 445: 0296 80 0B SJMP ZANF1 446: 0298 B9 03 08 T_ZAHL1: CJNE R1,#FERTIG,ZANF1 447: 029B 1E DEC R6 448: 029C BE FF 04 CJNE R6,#0FFH,ZANF1 449: 029F 7E 03 MOV R6,#03H 450: 02A1 80 00 SJMP ZANF1 451: 02A3 BE 00 0E ZANF1: CJNE R6,#00H,ZANF2 452: 02A6 85 14 78 MOV (78H),(14H) 453: 02A9 85 15 79 MOV (79H),(15H) 454: 02AC C2 95 CLR P1.5 ; Faktor 1/1 455: 02AE C2 96 CLR P1.6 456: 02B0 C2 97 CLR P1.7 457: 02B2 80 2E SJMP ZANF0 458: 02B4 BE 01 0E ZANF2: CJNE R6,#01H,ZANF3 459: 02B7 85 16 78 MOV (78H),(16H) 460: 02BA 85 17 79 MOV (79H),(17H) 461: 02BD D2 95 SETB P1.5 ; Faktor 3/4 462: 02BF C2 96 CLR P1.6 463: 02C1 C2 97 CLR P1.7 464: 02C3 80 1D SJMP ZANF0 465: 02C5 BE 02 0E ZANF3: CJNE R6,#02H,ZANF4 466: 02C8 85 1C 78 MOV (78H),(1CH) 467: 02CB 85 1D 79 MOV (79H),(1DH) 468: 02CE C2 95 CLR P1.5 469: 02D0 D2 96 SETB P1.6 ; Faktor 1/2 470: 02D2 C2 97 CLR P1.7 471: 02D4 80 0C SJMP ZANF0 472: 02D6 85 1A 78 ZANF4: MOV (78H),(1AH) 473: 02D9 85 1B 79 MOV (79H),(1BH) 474: 02DC C2 95 CLR P1.5 475: 02DE C2 96 CLR P1.6 476: 02E0 D2 97 SETB P1.7 ; Faktor 1/4 477: ; Impulse einlesen 478: 02E2 20 01 08 ZANF0: JB FLAN_POSI,FLN ; Abfrage: positive Flanke ? 479: ; springe wenn ja 480: 02E5 E5 90 MOV A,P1 ; Port P1 --> Akku 481: 02E7 54 10 ANL A,#10H ; Maske Bit 4 von Port P1 (P1.4) 482: 02E9 60 97 JZ ANFANG ; Abfrage Positive Flanke 483: 02EB D2 01 SETB FLAN_POSI ; Merker positive Flanke setzen 484: 02ED E5 90 FLN: MOV A,P1 ; Port P1 --> AkKu 485: 02EF 54 10 ANL A,#10H ; Maske Bit 4 von Port P1 (P1.4) 486: 02F1 70 8F JNZ ANFANG ; Abfrage Negative Flanke 487: 02F3 C2 01 CLR FLAN_POSI ; Merker positive Flanke loeschen 488: ; Impuls auswerten 489: 02F5 00 NOP 490: 02F6 78 70 MOV R0,#70H ; Adresse laden Multiplikand MSB 491: 02F8 79 78 MOV R1,#78H ; Adresse laden Multiplikator LSB ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 10 Line I Addr Code Source 492: 02FA 7A 04 MOV R2,#04H ; Anzahl 493: 02FC 7B 00 MOV R3,#00H ; 494: 02FE 12 04 86 LCALL ADD_BIN 495: 0301 00 NOP 496: 0302 85 70 43 MOV (43H),(70H) ; BIN LSB 497: 0305 85 71 42 MOV (42H),(71H) ; 498: 0308 85 72 41 MOV (41H),(72H) 499: 030B 85 73 40 MOV (40H),(73H) ; BIN MSB 500: 030E 12 04 C2 LCALL CONBCD ; Umwandlung in 5 Byte BCD-Zahl 501: 0311 00 NOP 502: 0312 12 05 61 LCALL OUT_LCD ; Ausgabe des Flaechenwertes in ha 503: 0315 00 NOP 504: 0316 41 82 AJMP ANFANG 505: 0318 00 NOP 506: 507: ; Funktion --> OK 508: ; 509: ; Funktionen: 510: ; ADD_BIN Addition zweier Binaerzhlen 511: ; CONBCD Umwandlung in 5 Byte BCD-Zahl FF FF FF FF FF -> 4294967295 512: ; LOE1 loeschen 513: ; TRA0 Parameter laden 514: ; TRA1 515: ; TRA_BIN 516: ; CONBIN Umrechnung BCD in Binaerzahl 9999 -> 27 0F 517: ; LOE0 loeschen 518: ; ADDA0 + --> 519: ; BIN10 BIN*10 --> BIN 520: ; UPM_D Faktor Flaeche (Umfang * Breite * 1/0.75/0.5/0.25) 521: ; und durch 100 dividieren 522: ; M16P16 Faktor U * Faktor B, 16*16 Multiplikation ohne Vorzeichen 523: ; M16P8 16*8 Multiplikation ohne Vorzeichen 524: ; CONBCD umwandeln in BCD-Zahl 525: ; DIV_BCD Divisionsprogramm (Faktor / 100) 526: ; SHIFT 527: ; SUBB_BCD Subtraktion Rest-Divisor 528: ; ZEHNER_CPL Zehner-Komplement des Rest bilden 529: ; CONBIN umwandel in Binaer 530: ; LOE0 loeschen 531: ; ADDA0 + --> 532: ; BIN10 BIN*10 --> BIN 533: ; LCD_SENDSTRING 534: ; OUT_CHAR_LCD 535: ; LCD_ADR8 536: ; LCD_CLEAR 537: ; LCD_ADR1 538: ; LCD_ADR8 539: ; OUT_LCD 540: ; WAIT_LCD 541: ; OUT_BYTE_LCD Ausgabe LCD 2 Byte ASCII 542: ; OUT_CHAR_LCD 543: ; OUT_WERT_LCD 544: ; OUT_CHAR_LCD 545: ; OUT_BYTE_LCD 546: ; HEX_ASCII Wandlung 00H-09H in 0 - 9 547: ; OUT_CHAR_LCD ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 11 Line I Addr Code Source 548: ; TASTATUR Tasten Dekodierung 549: ; ENTPRELL 550: ; TASTEN_EINGABE Eingabe Umfang und Breite 551: ; Tastatur 552: ; OUT_CHAR_LCD 553: ; WAIT_LCD 554: ; WAIT 555: ; Time Verzoegerungszeit 2 Sekunden 556: ; WAIT_LCD Wartezeit LCD = 5ms 557: ; WAIT Verzoegerungszeit 0.5ms 558: ; 559: ; Deklaration der LCD - Parameter 560: ; 561: N F800 LCD_ADR EQU 0F800H ; Basisadresse LCD FC00 ?? 562: ; Basisadresse : Daten in das Befehlsregister 563: ; schreiben 564: ; Basisadresse +2: Inhalt des Befehlsregister 565: ; lesen 566: ; Basisadresse +1: Daten in das Datenregister 567: ; schreiben 568: ; Basisadresse +3: Inhalt des Datenregister 569: ; lesen 570: N 0001 LCD_INI1 EQU 01H ; Clear Display 571: N 0002 LCD_INI2 EQU 02H ; Cursor Home 572: N 0006 LCD_INI3 EQU 06H ; Entry Mode Set 06 573: N 000F LCD_INI4 EQU 0FH ; Display On, Cursor blink 574: N 0014 LCD_INI5 EQU 14H ; Cursor/Display Shift 14 575: N 0038 LCD_INI6 EQU 38H ; Funktion Set 576: N 0080 ADD1 EQU 80H ; Cursoradresse Zeichen 0-7 577: N 00C0 ADD2 EQU 0C0H ; Cursoradresse Zeichen 8-15 578: ; 579: ;** Ende LCD - Parameter 580: ;******************************************************************** 581: ;** Deklaration der Flaechenberechnung -- Parameter 582: ; 583: ;TMOD_CLR0 EQU 0F1H ; Timer 0 584: ;TMOD_SET0 EQU 01H ; Timer 0 585: ;TIMER_LOW EQU TL0 586: ;TIMER_HIGH EQU TH1 587: ;TIMER_RUN EQU TR0 588: ;TIMER_ENA EQU ET0 589: ;TIMER_PRIO EQU PT0 590: ;MS10_HIGH EQU 3CH ; fuer 50 mS Interrupt 591: ;MS10_LOW EQU 0B0H 592: ;EIN EQU 01H 593: ;AUS EQU 00H 594: ; BCD und Binaer Rechenprogramme 595: ; aus FILE : BINBCD.asm 596: ; Datum : 04.05.1991 597: ; 598: ; Parameter Multiplikations-Programm : 599: ; (R0) MSB Multiplikand 600: ; (R0+1) LSB Multiplikand 601: ; (R1) LSB Multiplikator 602: ; (R1+1) MSB Multiplikator 603: ; ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 12 Line I Addr Code Source 604: ; Speicherbelegung : 605: ; ANF + 0 Ergebnis MSB 606: ; ANF + 1 Ergebnis 607: ; ANF + 2 Ergebnis 608: ; ANF + 3 Ergebnis LSB 609: ; ANF + 4 Zwischenspeicher 610: ; ANF + 5 Zwischenspeicher 611: ; ANF + 6 Multiplikand (MSB) 612: ; ANF + 7 Multiplikand (LSB) 613: ; ANF + 8 Multiplikator (MSB) 614: ; ANF + 9 Multiplikator (LSB) 615: ; ANF + 10 Adresse (R0) 616: ; ANF + 11 Adresse (R1) 617: ; ANF + 12 Vorzeichenmaske 618: ; 619: 620: N 0070 ANF EQU 70H 621: 622: ; Parameter Konvertierung CONBCD BIN --> BCD (FF FF FF FF --> 4294967295) 623: N 0043 BINLSB_BCD EQU 43H ; BIN Wort LSB 624: N 0040 BINMSB_BCD EQU 40H ; BIN Wort MSB 625: N 003F ZWSLSB_BCD EQU 3FH ; Zwischenspeicher LSB 626: N 0029 BCDLSB_BCD EQU 29H ; BCD Wort LSB 627: N 0025 BCDMSB_BCD EQU 25H ; BCD Wort MSB 628: N 0020 ZBIT_BCD EQU 20H ; Bitzaehler 629: N 0005 ZBYBCD_BCD EQU 05H ; BCD Wortzaehler 630: N 0004 ZBYBIN_BCD EQU 04H ; BIN Wortzaehler 631: ; Parameter Konvertierung CON BIN BCD --> BIN (9999 -> 27 0F) 632: N 0046 BINLSB_BIN EQU 46H ; BIN Wort LSB 633: N 0045 BINMSB_BIN EQU 45H ; BIN Wort MSB 634: N 0044 ZWSLSB_BIN EQU 44H ; Zwischenspeicher LSB 635: N 0031 BCDLSB_BIN EQU 31H ; BCD Wort LSB 636: N 0030 BCDMSB_BIN EQU 30H ; BCD Wort MSB 637: N 0002 ZBYBCD_BIN EQU 02H ; BCD Wortzaehler 638: N 0002 ZBYBIN_BIN EQU 02H ; BIN Wortzaehler 639: 640: ;** Ende Parameter Flaechenberechnung 641: ;**************************************************************** 642: ; Tastendekodierung aus dem Buch: 643: ; MC-Tools 2 644: ; Die 8051-Mikrocontroller-Familie Einfuehrung in die Software 645: ; Tastenprogramm TASTATUR_1 Seite 88 - 90 646: ;** Parameter Tastenabfrage 647: ; aus FILE : TASTE12.asm 648: ; Datum : 10.05.19991 649: ; Modus 0: TASTATUR_MODUS vor Unterprogrammaufruf geloescht 650: ; erst wenn Taste aktiv wird, Rueckkehr zum Hauptprogramm 651: ; MODUS 1: TASTATUR_MODUS vor Unterprogrammaufruf gesetzt, 652: ; Tastenfeld wird einmal abgefragt. 653: ; Bei Rueckkehr zum Hauptprogramm gibt Carry an, 654: ; ob eine Taste betaetigt wurde. 655: ; CARRY = 0: keine Taste erkannt 656: ; CARRY = 1: Taste erkannt; Nummer der Taste steht in 657: ; TASTEN_NUMMER 658: 659: D 0090 TASTEN_PORT EQU P1 ; benuetzter PORT ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 13 Line I Addr Code Source 660: N 0003 P_ANZ EQU 03H ; Anzahl Portleitungen 661: ;TASTATUR_MODUS BIT [0] ; Steuerbit fuer Modus (20.0) 662: N 0017 EINGAENGE EQU 00010111B ; Maske fuer Tastaturport: 663: ; Tastaturpins = 1 664: ; unbenuetzte Portpins: 665: ; Eingaenge : 1 666: ; Ausgaenge : 0 667: N 0001 TASTEN_NUMMER EQU 01H ; Register 1 668: N 0002 SPALTEN_ZAEHLER EQU 02H ; 2 669: N 0003 ZEILEN_ZAEHLER EQU 03H ; 3 670: N 0004 AUSGABE_MASKE EQU 04H ; 4 671: N 0005 EINLESE_MASKE EQU 05H ; 5 672: 673: N 0000 ZAHLEN EQU 00H 674: N 0003 FERTIG EQU 03H 675: N 0005 LOESCHEN EQU 05H 676: 677: N 0000 HALB_BYTE EQU 00H ; Merker Halbbyte Faktor U-B 678: N 0001 FLAN_POSI EQU 01H ; Merker Positive Flanke 679: 680: ; ************************************************************** 681: ; * Speicher : 682: ; * 10 ; Faktor U LSB 683: ; * 11 ; Faktor U MSB 684: ; * 12 ; Faktor B LSB 1 685: ; * 13 ; Faktor B MSB 1 686: ; * 14 ; Faktor 1/1 U*B LSB 687: ; * 15 ; Faktor 1/1 U*B MSB 688: ; * 16 ; Faktor 3/4 U*B LSB 689: ; * 17 ; Faktor 3/4 U*B MSB 690: ; * 18 ; 691: ; * 19 ; 692: ; * 1A ; Faktor 1/4 U*B LSB 693: ; * 1B ; Faktor 1/4 U*B MSB 694: ; * 1C ; Faktor 1/2 U*B LSB 695: ; * 1D ; Faktor 1/2 U*B LSB 696: ; * 25 ; Ergebnis Flaeche BCD MSB 697: ; * 26 ; 698: ; * 27 ; 699: ; * 28 ; 700: ; * 29 ; Ergebnis Flaeche BCD LSB 701: ; * 702: ; * 30 ; Faktor MSB 703: ; * 31 ; Faktor LSB 704: ; * 32 ; Merker Faktor Halbbyte 705: ; * 706: ; * 3F ; Zwischenspeicher Konvertierung BIN --> BCD 707: ; * 40 ; Konvertierung BIN --> BCD MSB 708: ; * 41 ; 709: ; * 42 ; 710: ; * 43 ; Konvertierung BIN --> BCD LSB 711: ; * 44 ; Zwischenspeicher Konvertierung BCD --> BIN 712: ; * 45 ; Konvertierung BCD --> BIN MSB 713: ; * 46 ; Konvertierung BCD --> BIN LSB 714: ; * 715: ; * 50 ; Verzoegerungszeit LSB ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 14 Line I Addr Code Source 716: ; * 51 ; Verzoegerungszeit 717: ; * 52 ; Verzoegerungszeit MSB 718: ; * 719: ; * 55 ; Merker Impulse > 255 720: ; * 56 ; Merker Impuls positive Flanke 721: ; * 57 ; Zaehler Timer-Zeit 722: ; * 58 ; Merker Taste Loeschen 723: ; * 724: ; * 60 ; Multiplikand LSB 725: ; * 61 ; Multiplikand MSB 726: ; * 62 ; Multiplikator LSB , Faktor U*B 727: ; * 63 ; Multiplikator MSB , Faktor U*B 728: ; * BCD-Division 3 Byte / 3 Byte 729: ; * 64 ; Divident LSB 730: ; * 65 ; 731: ; * 66 ; Divident MSB 732: ; * 67 ; Divisor LSB = 00 733: ; * 68 ; = 01 734: ; * 69 ; Divisor MSB = 00 --> 100 735: ; * 6A ; Ergebnis Quotient LSB 736: ; * 6B ; 737: ; * 6C ; Ergebnis Quotient MSB 738: ; * 6D ; Rest LSB 739: ; * 6E ; 740: ; * 6F ; Rest MSB 741: ; * BIN-Multiplikation 16*16 742: ; * 70 ; Ergebnis MSB 743: ; * 71 ; 744: ; * 72 ; 745: ; * 73 ; Ergebnis LSB 746: ; * 74 ; Zwischenspeicher 747: ; * 75 ; Zwischenspeicher 748: ; * 76 ; Multiplikand MSB 749: ; * 77 ; Multiplikand LSB 750: ; * 78 ; Multiplikator MSB 751: ; * 79 ; Multiplikator LSB 752: 753: ; ****************************************************************** 754: ; * Unterprogramm Faktor multiplizeren und durch 100 dividieren 755: ; * 756: ; ****************************************************************** 757: 0319 UPM_D: 758: 0319 78 60 MOV R0,#60H ; Adresse laden Multiplikand MSB 759: 031B 79 62 MOV R1,#62H ; Adresse laden Multiplikator LSB 760: 031D 12 03 B2 LCALL M16P16 ; Faktor U * Faktor B 761: 0320 85 73 43 MOV (43H),(73H) ; Ergebnis LSB 762: 0323 85 72 42 MOV (42H),(72H) 763: 0326 85 71 41 MOV (41H),(71H) 764: 0329 85 70 40 MOV (40H),(70H) ; Ergebnis MSB 765: 032C 12 04 C2 LCALL CONBCD ; umwandeln in BCD-Zahl 766: 032F 85 29 64 MOV (64H),(29H) ; LSB Dividend 767: 0332 85 28 65 MOV (65H),(28H) 768: 0335 85 27 66 MOV (66H),(27H) ; MSB Dividend 769: 0338 75 67 00 MOV (67H),#00H ; LSB Divisor 770: 033B 75 68 01 MOV (68H),#01H ; Divisor = 100 771: 033E 75 69 00 MOV (69H),#00H ; MSB Divisor ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 15 Line I Addr Code Source 772: 0341 12 03 D6 LCALL DIV_BCD ; Faktor / 100 773: 0344 85 6A 31 MOV (31H),(6AH) ; Quotient LSB 774: 0347 85 6B 30 MOV (30H),(6BH) ; Quotient MSB 775: 034A 12 04 A4 LCALL CONBIN ; umwandel in Binaer 776: 034D 22 RET 777: 778: ;********************************************************************* 779: ;* Verzoegerungszeit 2 Sekunden 780: ;******************************************************************** 781: 034E TIME: 782: 034E C0 E0 PUSH ACC 783: 0350 C0 D0 PUSH PSW 784: 0352 75 52 10 MOV (52H),#10H ; Verzoegerungszeit = 2 Sekunden 785: 0355 75 51 FF T3: MOV (51H),#0FFH 786: 0358 75 50 FF T2: MOV (50H),#0FFH 787: 035B D5 50 FD T11: DJNZ (50H),T11 788: 035E D5 51 F7 DJNZ (51H),T2 789: 0361 D5 52 F1 DJNZ (52H),T3 790: 0364 D0 D0 POP PSW 791: 0366 D0 E0 POP ACC 792: 0368 22 RET 793: 794: ;********************************************************************* 795: ;* Verzoegerungszeit 0.5 Sekunden 796: ;******************************************************************** 797: 0369 WAIT: 798: 0369 C0 E0 PUSH ACC 799: 036B C0 D0 PUSH PSW 800: 036D 75 52 04 MOV (52H),#04H 801: 0370 75 51 FF W3: MOV (51H),#0FFH ; Verzoegerungszeit 802: 0373 75 50 FF W2: MOV (50H),#0FFH 803: 0376 D5 50 FD W1: DJNZ (50H),W1 804: 0379 D5 51 F7 DJNZ (51H),W2 805: 037C D5 52 F1 DJNZ (52H),W3 806: 037F D0 D0 POP PSW 807: 0381 D0 E0 POP ACC 808: 0383 22 RET 809: 810: ;********************************************************************* 811: ;* Verzoegerungszeit 5ms 812: ;******************************************************************** 813: 0384 WAIT_LCD: 814: 0384 C0 E0 PUSH ACC 815: 0386 C0 D0 PUSH PSW 816: 0388 75 51 80 MOV (51H),#80H ; Verzoegerungszeit 5ms 0A 817: 038B 75 50 FF WL2: MOV (50H),#0FFH 818: 038E D5 50 FD WL1: DJNZ (50H),WL1 819: 0391 D5 51 F7 DJNZ (51H),WL2 820: 0394 D0 D0 POP PSW 821: 0396 D0 E0 POP ACC 822: 0398 22 RET 823: 824: ;******************************************************************** 825: ; * 16*8 Multiplikation ohne Vorzeichen 826: ; * 827: ; ******************************************************************* ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 16 Line I Addr Code Source 828: 0399 M16P8: 829: 0399 08 INC R0 830: 039A 86 F0 MOV B,@R0 831: 039C E7 MOV A,@R1 832: 039D A4 MUL AB 833: 039E F5 73 MOV (ANF+3),A ; LSB von A abspeichern 834: 03A0 85 F0 72 MOV (ANF+2),B ; MSB von B abspeichern 835: 03A3 18 DEC R0 836: 03A4 86 F0 MOV B,@R0 ; MSB Multiplikand 837: 03A6 E7 MOV A,@R1 838: 03A7 A4 MUL AB 839: 03A8 25 72 ADD A,(ANF+2) 840: 03AA F5 72 MOV (ANF+2),A 841: 03AC E4 CLR A 842: 03AD 35 F0 ADDC A,B 843: 03AF F5 71 MOV (ANF+1),A 844: 03B1 22 RET 845: 846: ; ******************************************************************* 847: ; * 16*16 Multiplikation ohne Vorzeichen 848: ; * 849: ; ******************************************************************* 850: 03B2 M16P16: 851: 03B2 09 INC R1 852: 03B3 12 03 99 LCALL M16P8 853: 03B6 85 73 70 MOV (ANF+0),(ANF+3) 854: 03B9 85 72 74 MOV (ANF+4),(ANF+2) 855: 03BC 85 71 75 MOV (ANF+5),(ANF+1) 856: 03BF 19 DEC R1 857: 03C0 12 03 99 LCALL M16P8 858: 03C3 E5 72 MOV A,(ANF+2) 859: 03C5 25 70 ADD A,(ANF+0) 860: 03C7 F5 72 MOV (ANF+2),A 861: 03C9 E5 71 MOV A,(ANF+1) 862: 03CB 35 74 ADDC A,(ANF+4) 863: 03CD F5 71 MOV (ANF+1),A 864: 03CF E5 75 MOV A,(ANF+5) 865: 03D1 34 00 ADDC A,#00H 866: 03D3 F5 70 MOV (ANF+0),A 867: 03D5 22 RET 868: 869: ; ******************************************************************** 870: ; BCD - Divisionsprogramm DIV_BCD 871: ; Parameter 872: N 0003 ANZ_BYTE EQU 03H ; Anzahl Bytes der BCD-Zahl 873: N 0006 ANZ_NIBBLE EQU ANZ_BYTE * 2 ; BCD-Stellenzahl 874: ; DS 12,00 ; Datensegment: ANZ_BYTE * 4 875: N 0064 DIVIDEND EQU 64H ; Register fuer Dividend 876: N 0067 DIVISOR EQU 67H ; Register fuer Divisor 877: N 006A QUOTIENT EQU 6AH ; Register fuer Quotient 878: N 006D REST EQU 6DH ; Register fuer Rest 879: ; R2 Bytezaehler 880: ; R3 Stellenzaehler 881: ; R4 Hilfsregister 1 882: ; R5 Hilfsregister 2 883: ; ******************************************************************** ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 17 Line I Addr Code Source 884: 03D6 DIV_BCD: 885: 03D6 7A 03 MOV R2,#ANZ_BYTE ; Pruefen ob Divisor = 0 886: 03D8 78 67 MOV R0,#DIVISOR 887: 03DA B6 00 05 CZERO: CJNE @R0,#00H,LOES0 ; Sprung, falls Divisorbyte <> 0 888: 03DD 08 INC R0 889: 03DE DA FA DJNZ R2,CZERO 890: 03E0 80 5C SJMP DIV_ERR ; Divisor=0 891: 03E2 E4 LOES0: CLR A ; Loeschen der Ergebnisregister 892: 03E3 78 6A MOV R0,#QUOTIENT ; 893: 03E5 F6 LOES1: MOV @R0,A 894: 03E6 08 INC R0 895: 03E7 B8 70 FB CJNE R0,#QUOTIENT+ANZ_NIBBLE,LOES1 896: 03EA 7B 06 MOV R3,#ANZ_NIBBLE 897: ; Shift Halbbyte: Dividend+Rest nach links MSHB des Dividenden --> 898: ; LSHB des Restes und LSHB des Dividenden 899: 03EC 78 64 DVD: MOV R0,#DIVIDEND 900: 03EE 7A 03 MOV R2,#ANZ_BYTE 901: 03F0 7C 00 MOV R4,#00H ; Shift Dividend mit LSHB==0 902: 03F2 12 04 40 LCALL SHIFT 903: 03F5 EC MOV A,R4 ; Ueberlaufendes Halbbyte in HREG1 904: 03F6 42 64 ORL (DIVIDEND),A ; an LSHB-Stelle des Dividenden bringen 905: 03F8 78 6D MOV R0,#REST ; SHIFT Rest mit 906: 03FA 7A 03 MOV R2,#ANZ_BYTE ; LSHB= 907: 03FC 12 04 40 LCALL SHIFT 908: ; Pruefen, ob Rest > Divisor 909: 03FF C3 CLR C 910: 0400 7A 03 MOV R2,#ANZ_BYTE ; Byteanzahl und 911: 0402 78 6D MOV R0,#REST ; Adressen laden 912: 0404 79 67 MOV R1,#DIVISOR 913: 0406 E6 COMP: MOV A,@R0 914: 0407 97 SUBB A,@R1 ; Subtraktion Rest - Divisor 915: 0408 08 INC R0 ; Adressen erhoehen 916: 0409 09 INC R1 917: 040A DA FA DJNZ R2,COMP ; Vergleich beendet ? 918: 040C 7C 00 MOV R4,#00H 919: 040E 40 22 JC DV3 ; Sprung, falls REst < DIVISOR 920: ; Rest: Divisor durch fortgesetzte Subtraktion Rest-Divisor Ergebnis: 921: ; Quotient(0-9) und Rest 922: 0410 78 6D DV1: MOV R0,#REST ; Adressen und BYteanzahl laden 923: 0412 79 67 MOV R1,#DIVISOR 924: 0414 7A 03 MOV R2,#ANZ_BYTE 925: 0416 C2 D5 CLR F0 ; Steuerbit loeschen 926: 0418 12 04 4F LCALL SUBB_BCD ; Subtraktion Rest-Divisor 927: 041B 40 03 JC DV2 ; Sprung, falls Ergebnis negativ 928: 041D 0C INC R4 ; Ergebniszaehler erhoehen 929: 041E 80 F0 SJMP DV1 930: 0420 78 6D DV2: MOV R0,#REST ; Division beendet: Rest korrigieren 931: 0422 7A 03 MOV R2,#ANZ_BYTE 932: 0424 12 04 71 LCALL ZEHNER_CPL ; Zehner-Komplement des Rest bilden 933: 0427 78 6D MOV R0,#REST 934: 0429 79 67 MOV R1,#DIVISOR 935: 042B 7A 03 MOV R2,#ANZ_BYTE 936: 042D D2 D5 SETB F0 937: 042F 12 04 4F LCALL SUBB_BCD ; Divisor-Rest --> Rest 938: ; Shift Ergebnis der Division an LSHB des Quotienten 939: 0432 78 6A DV3: MOV R0,#QUOTIENT ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 18 Line I Addr Code Source 940: 0434 7A 03 MOV R2,#ANZ_BYTE 941: 0436 12 04 40 LCALL SHIFT 942: 0439 DB B1 DJNZ R3,DVD 943: 043B C3 CLR C 944: 043C 80 01 SJMP DIV_EX 945: 043E D3 DIV_ERR: SETB C 946: 043F 22 DIV_EX: RET 947: 948: ; ******************************************************************* 949: ; Unterprogramm SHIFT 950: ; 951: ; ******************************************************************* 952: 0440 SHIFT: 953: 0440 E6 MOV A,@R0 954: 0441 C4 SWAP A 955: 0442 FD MOV R5,A 956: 0443 54 F0 ANL A,#0F0H 957: 0445 4C ORL A,R4 958: 0446 F6 MOV @R0,A 959: 0447 ED MOV A,R5 960: 0448 54 0F ANL A,#0FH 961: 044A FC MOV R4,A 962: 044B 08 INC R0 963: 044C DA F2 DJNZ R2,SHIFT 964: 044E 22 RET 965: 966: ; ******************************************************************** 967: ; Unterprogramm SUBB_BCD 968: ; 969: ; ******************************************************************** 970: 044F SUBB_BCD: 971: 044F C3 CLR C 972: 0450 30 D5 04 SB0: JNB F0,SB1 973: 0453 E7 MOV A,@R1 974: 0454 96 SUBB A,@R0 975: 0455 80 02 SJMP SB2 976: 0457 E6 SB1: MOV A,@R0 977: 0458 97 SUBB A,@R1 978: 0459 10 D7 07 SB2: JBC CY,SB3 979: 045C 30 D6 0C JNB AC,SB5 980: 045F 94 06 SUBB A,#06H 981: 0461 80 08 SJMP SB5 982: 0463 30 D6 02 SB3: JNB AC,SB4 983: 0466 94 06 SUBB A,#06H 984: 0468 94 60 SB4: SUBB A,#60H 985: 046A D3 SETB C 986: 046B F6 SB5: MOV @R0,A 987: 046C 08 INC R0 988: 046D 09 INC R1 989: 046E DA E0 DJNZ R2,SB0 990: 0470 22 RET 991: 992: ; ******************************************************************** 993: ; Unterprogramm ZEHNER_CPL 994: ; 995: ; ******************************************************************** ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 19 Line I Addr Code Source 996: 0471 ZEHNER_CPL: 997: 0471 C3 CLR C 998: 0472 E4 ZE0: CLR A 999: 0473 96 SUBB A,@R0 1000: 0474 10 D7 02 JBC CY,ZE1 1001: 0477 80 08 SJMP ZE3 1002: 0479 30 D6 02 ZE1: JNB AC,ZE2 1003: 047C 94 06 SUBB A,#06H 1004: 047E 94 60 ZE2: SUBB A,#60H 1005: 0480 D3 SETB C 1006: 0481 F6 ZE3: MOV @R0,A 1007: 0482 08 INC R0 1008: 0483 DA ED DJNZ R2,ZE0 1009: 0485 22 RET 1010: 1011: ; ************************************************************** 1012: ; ** BINAER - ADDITIONSPROGRAMM ADD_BIN ** 1013: ; ** (R0) = Summand 1 ** 1014: ; ** (R1) = Summand 2 ** 1015: ; ** (R2) = Anzahl ** 1016: ; ** R3 = Hilfsregister ** 1017: ; ************************************************************** 1018: 0486 ADD_BIN: 1019: 0486 C3 CLR C 1020: 0487 0B INC R3 1021: 0488 ADD_BIN0: 1022: 0488 E6 MOV A,@R0 1023: 0489 37 ADDC A,@R1 1024: 048A F6 MOV @R0,A 1025: 048B 10 D7 05 JBC CY,UEBERLAUF1 1026: 048E ADD_BIN1: 1027: 048E 08 INC R0 1028: 048F 09 INC R1 1029: 0490 DA F6 DJNZ R2,ADD_BIN0 1030: 0492 22 RET 1031: 0493 UEBERLAUF1: 1032: 0493 C3 CLR C 1033: 0494 08 INC R0 1034: 0495 0B INC R3 1035: 0496 E6 MOV A,@R0 1036: 0497 34 01 ADDC A,#01H 1037: 0499 F6 MOV @R0,A 1038: 049A 10 D7 F6 JBC CY,UEBERLAUF1 1039: 049D CARRY: 1040: 049D DB 02 DJNZ R3,CARRY_ENDE 1041: 049F 80 ED SJMP ADD_BIN1 1042: 04A1 CARRY_ENDE: 1043: 04A1 18 DEC R0 1044: 04A2 80 F9 SJMP CARRY 1045: ; ** ENDE Additionsprogramm ADD_BIN ** 1046: 1047: ; *************************************************************** 1048: ; ** Konvertierungsprogramm BCD --> BIN ** 1049: ; 1050: ; *************************************************************** 1051: 04A4 CONBIN: ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 20 Line I Addr Code Source 1052: 04A4 12 05 10 LCALL LOE0 ; loeschen: 0 -> Ergebnis und Arbeitsregister 1053: 04A7 79 30 MOV R1,#BCDMSB_BIN ; MSB BCD Anfangsadresse 1054: 04A9 7F 02 MOV R7,#ZBYBCD_BIN ; BCD Zaehler 1055: 04AB 12 04 E6 CONB1:LCALL BIN10 ; BIN*10 --> BIN 1056: 04AE E7 MOV A,@R1 1057: 04AF C4 SWAP A 1058: 04B0 54 0F ANL A,#0FH 1059: 04B2 12 05 04 LCALL ADDA0 ; + --> 1060: 04B5 12 04 E6 LCALL BIN10 ; BIN*10 --> BIN 1061: 04B8 E7 MOV A,@R1 1062: 04B9 54 0F ANL A,#0FH 1063: 04BB 12 05 04 LCALL ADDA0 1064: 04BE 09 INC R1 1065: 04BF DF EA DJNZ R7,CONB1 1066: 04C1 22 RET 1067: 1068: ; **************************************************************** 1069: ; Konvertierungsprogramm BIN --> BCD 1070: ; 1071: ; **************************************************************** 1072: 04C2 CONBCD: 1073: 04C2 12 05 16 LCALL LOE1 ; loeschen: 1074: 04C5 12 05 2D LCALL TRA0 ; Parameter laden 1075: 04C8 7B 20 MOV R3,#ZBIT_BCD ; 32 Bit BIN 1076: 04CA 78 43 CBC1: MOV R0,#BINLSB_BCD ; Quelle BIN 1077: 04CC C3 CLR C ; Shift BIN 1 nach links 1078: 04CD 7A 04 MOV R2,#ZBYBIN_BCD 1079: 04CF E6 CBC2: MOV A,@R0 1080: 04D0 33 RLC A 1081: 04D1 F6 MOV @R0,A 1082: 04D2 18 DEC R0 1083: 04D3 DA FA DJNZ R2,CBC2 1084: 04D5 79 29 MOV R1,#BCDLSB_BCD 1085: 04D7 7A 05 MOV R2,#ZBYBCD_BCD 1086: 04D9 E7 CBC3: MOV A,@R1 1087: 04DA 37 ADDC A,@R1 1088: 04DB D4 DA A 1089: 04DC F7 MOV @R1,A 1090: 04DD 19 DEC R1 1091: 04DE DA F9 DJNZ R2,CBC3 1092: 04E0 DB E8 DJNZ R3,CBC1 1093: 04E2 12 05 33 LCALL TRA1 1094: 04E5 22 RET 1095: 1096: ; ***************************************************************** 1097: ; BIN * 10 --> BIN 1098: ; 1099: ; ***************************************************************** 1100: 04E6 BIN10: 1101: 04E6 D2 D3 SETB RS0 ; Registerbank 3 1102: 04E8 D2 D4 SETB RS1 ; anwaehlen 1103: 04EA 12 05 20 LCALL TRA_BIN 1104: 04ED 7B 09 MOV R3,#09H 1105: 04EF 78 46 BIN1: MOV R0,#BINLSB_BIN 1106: 04F1 79 44 MOV R1,#ZWSLSB_BIN 1107: 04F3 7A 02 MOV R2,#ZBYBIN_BIN ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 21 Line I Addr Code Source 1108: 04F5 C3 CLR C 1109: 04F6 E6 BIN2: MOV A,@R0 1110: 04F7 37 ADDC A,@R1 1111: 04F8 F6 MOV @R0,A 1112: 04F9 18 DEC R0 1113: 04FA 19 DEC R1 1114: 04FB DA F9 DJNZ R2,BIN2 1115: 04FD DB F0 DJNZ R3,BIN1 1116: 04FF C2 D3 CLR RS0 ; Registerbank 0 waehlen 1117: 0501 C2 D4 CLR RS1 1118: 0503 22 RET 1119: 1120: ; ******************************************************** 1121: ; Akku + BIN --> AKKU 1122: ; 1123: ; ******************************************************** 1124: 0504 ADDA0: 1125: 0504 78 46 MOV R0,#BINLSB_BIN 1126: 0506 7A 02 MOV R2,#ZBYBIN_BIN 1127: 0508 C3 CLR C 1128: 0509 36 ADDA1:ADDC A,@R0 1129: 050A F6 MOV @R0,A 1130: 050B 18 DEC R0 1131: 050C E4 CLR A 1132: 050D DA FA DJNZ R2,ADDA1 1133: 050F 22 RET 1134: 1135: ; ******************************************************** 1136: ; 0 -> Ergebnis und Arbeitsregister 1137: ; 1138: ; ******************************************************** 1139: 0510 LOE0: 1140: 0510 7A 02 MOV R2,#ZBYBIN_BIN 1141: 0512 79 45 MOV R1,#BINMSB_BIN 1142: 0514 80 04 SJMP LOE2 1143: 0516 7A 05 LOE1: MOV R2,#ZBYBCD_BCD 1144: 0518 79 25 MOV R1,#BCDMSB_BCD 1145: 051A E4 LOE2: CLR A 1146: 051B F7 LOE3: MOV @R1,A 1147: 051C 09 INC R1 1148: 051D DA FC DJNZ R2,LOE3 1149: 051F 22 RET 1150: 1151: ; ******************************************************** 1152: ; Bereich -> ,R2 = Bereichslaenge 1153: ; 1154: ; ******************************************************** 1155: 0520 TRA_BIN: 1156: 0520 78 46 MOV R0,#BINLSB_BIN 1157: 0522 79 44 MOV R1,#ZWSLSB_BIN 1158: 0524 7A 02 MOV R2,#ZBYBIN_BIN 1159: 0526 E6 TRA: MOV A,@R0 1160: 0527 F7 MOV @R1,A 1161: 0528 18 DEC R0 1162: 0529 19 DEC R1 1163: 052A DA FA DJNZ R2,TRA ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 22 Line I Addr Code Source 1164: 052C 22 RET 1165: 1166: ; ********************************************************* 1167: ; Bereich -> ,R2 = Bereichslaenge 1168: ; 1169: ; ********************************************************* 1170: 052D TRA0: 1171: 052D 78 43 MOV R0,#BINLSB_BCD 1172: 052F 79 3F MOV R1,#ZWSLSB_BCD 1173: 0531 80 04 SJMP TRA2 1174: 0533 78 3F TRA1: MOV R0,#ZWSLSB_BCD 1175: 0535 79 43 MOV R1,#BINLSB_BCD 1176: 0537 7A 04 TRA2: MOV R2,#ZBYBIN_BCD 1177: 0539 E6 TRA3: MOV A,@R0 1178: 053A F7 MOV @R1,A 1179: 053B 18 DEC R0 1180: 053C 19 DEC R1 1181: 053D DA FA DJNZ R2,TRA3 1182: 053F 22 RET 1183: 1184: ;******************************************************************** 1185: ; Wandlung 00H-09H in 0 - 9 1186: ; 1187: ; ******************************************************************* 1188: 0540 HEX_ASCII: ; Wandlung 00H-09H in 0 - 9 1189: 0540 B4 0A 00 CJNE A,#0AH,HA0 1190: 0543 50 03 HA0:JNC HA1 ; Sprung falls Zeichen > 09H 1191: 0545 44 30 ORL A,#30H 1192: 0547 22 RET 1193: 0548 24 37 HA1:ADD A,#37H 1194: 054A 22 RET 1195: 1196: ;******************************************************************** 1197: ; Byte als 2 ASCII-Zeichen ausgeben 1198: ; Byte steht im Akku 1199: ; ******************************************************************* 1200: 054B OUT_BYTE_LCD: ; Byte als 2 ASCII-Zeichen ausgeben 1201: ; Byte steht im Akku 1202: 054B F5 F0 MOV B,A ; Akku zwischenspeichern 1203: 054D C4 SWAP A ; Bit 0-3 mit Bit 4-7 tauschen 1204: 054E 54 0F ANL A,#0FH ; Bit 4-7 ausblenden 1205: 0550 12 05 40 LCALL HEX_ASCII ; Obere Bits umwandeln 1206: 0553 12 05 B7 LCALL OUT_CHAR_LCD ; und ausgeben 1207: 0556 E5 F0 MOV A,B 1208: 0558 54 0F ANL A,#0FH 1209: 055A 12 05 40 LCALL HEX_ASCII ; untere Bits umwandeln 1210: 055D 12 05 B7 LCALL OUT_CHAR_LCD ; und ausgeben 1211: 0560 22 RET ; ENDE 1212: 1213: ;******************************************************************* 1214: ; Ausgabe des Flaechenwertes auf LCD 1215: ; 1216: ; ****************************************************************** 1217: 0561 OUT_LCD: 1218: ; LCD-Anzeige 1219: 0561 C0 E0 PUSH ACC ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 23 Line I Addr Code Source 1220: 0563 90 F8 00 MOV DPTR,#LCD_ADR ; Adresse LCD 1221: 0566 74 01 MOV A,#LCD_INI1 ; LCD-Anzeige loeschen 1222: 0568 F0 MOVX @DPTR,A 1223: 0569 12 03 84 LCALL WAIT_LCD 1224: 056C 74 02 MOV A,#LCD_INI2 ; Cursor Home-Position 1225: 056E F0 MOVX @DPTR,A 1226: 056F 12 03 84 LCALL WAIT_LCD 1227: 0572 74 83 MOV A,#ADD1+3 ; Cursor auf 3.Stelle 1228: 0574 F0 MOVX @DPTR,A 1229: 0575 12 03 84 LCALL WAIT_LCD 1230: 0578 75 2A 68 MOV (2AH),#68H ; ASCII h 1231: 057B 75 2B 61 MOV (2BH),#61H ; ASCII a 1232: 057E 75 2C FF MOV (2CH),#0FFH ; Adresse Ende ASCII ha 1233: 0581 78 25 MOV R0,#25H ; Adresse MSB BCD-Zahl 1234: 0583 B8 25 0C CJNE R0,#25H,OL1 ; Abfrage MSB BCD-Zahl = 0 1235: 0586 E6 MOV A,@R0 ; wenn JA diese Stelle nicht 1236: 0587 B4 00 08 CJNE A,#00H,OL1 ; anzeigen 1237: 058A 74 85 MOV A,#ADD1+5 ; sondern ab 5.Stelle 1238: 058C F0 MOVX @DPTR,A 1239: 058D 12 03 84 LCALL WAIT_LCD 1240: 0590 80 04 SJMP OL4 1241: 0592 E6 OL1: MOV A,@R0 ; Wert BCD-Zahl laden 1242: 0593 12 05 4B LCALL OUT_BYTE_LCD ; Ausgabe LCD 2 Byte ASCII 1243: 0596 08 OL4: INC R0 ; Adresse Zeichen erhoehen 1244: 0597 B8 27 0E CJNE R0,#27H,OL2 ; Sprung n chstes Zeichen holen 1245: 059A 74 2E MOV A,#2EH ; Ausgabe des "." 1246: 059C 12 05 B7 LCALL OUT_CHAR_LCD 1247: 059F 74 C0 MOV A,#ADD2 ; Cursor auf 9.Stelle 1248: 05A1 90 F8 00 MOV DPTR,#LCD_ADR 1249: 05A4 F0 MOVX @DPTR,A 1250: 05A5 12 03 84 LCALL WAIT_LCD 1251: 05A8 B8 2A E7 OL2: CJNE R0,#2AH,OL1 1252: 05AB E6 MOV A,@R0 1253: 05AC 12 05 B7 OL3: LCALL OUT_CHAR_LCD ; String ha ausgeben 1254: 05AF 08 INC R0 1255: 05B0 E6 MOV A,@R0 1256: 05B1 B4 FF F8 CJNE A,#0FFH,OL3 ; Abfrage String Ende ? 1257: 05B4 D0 E0 POP ACC 1258: 05B6 22 RET 1259: 1260: ;************************************************* 1261: ; Ausgabe eines ASCII-Zeichen auf die LCD-Anzeige 1262: ; ************************************************ 1263: 05B7 OUT_CHAR_LCD: 1264: 05B7 90 F8 01 MOV DPTR,#LCD_ADR+1 ; fuer 8032 EPC : +1 !!! 1265: 05BA F0 MOVX @DPTR,A 1266: 05BB 12 03 84 LCALL WAIT_LCD 1267: 05BE 22 RET 1268: 1269: ;************************************************** 1270: ; LCD-Anzeige loeschen 1271: ; ************************************************* 1272: 05BF LCD_CLEAR: 1273: 05BF 90 F8 00 MOV DPTR,#LCD_ADR 1274: 05C2 74 01 MOV A,#LCD_INI1 1275: 05C4 F0 MOVX @DPTR,A ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 24 Line I Addr Code Source 1276: 05C5 12 03 84 LCALL WAIT_LCD 1277: 05C8 74 02 MOV A,#LCD_INI2 1278: 05CA F0 MOVX @DPTR,A 1279: 05CB 12 03 84 LCALL WAIT_LCD 1280: 05CE 22 RET 1281: 1282: ;************************************************** 1283: ; Ausgabe Faktor auf LCD-Anzeige 1284: ; ************************************************* 1285: 05CF OUT_WERT_LCD: 1286: 05CF 78 30 MOV R0,#30H ; Wert MSB 1287: 05D1 7E C1 MOV R6,#0C1H ; 9.Stelle LCD 1288: 05D3 90 F8 00 MOV DPTR,#LCD_ADR 1289: 05D6 74 02 MOV A,#LCD_INI2 1290: 05D8 F0 MOVX @DPTR,A 1291: 05D9 12 03 84 LCALL WAIT_LCD 1292: 05DC 90 F8 00 MOV DPTR,#LCD_ADR 1293: 05DF EE MOV A,R6 1294: 05E0 F0 MOVX @DPTR,A 1295: 05E1 12 03 84 LCALL WAIT_LCD 1296: 05E4 E6 OWL1: MOV A,@R0 1297: 05E5 C4 SWAP A 1298: 05E6 54 0F ANL A,#0FH 1299: 05E8 24 30 ADD A,#30H 1300: 05EA 12 05 B7 LCALL OUT_CHAR_LCD ; Ausgabe 1.und 3.Stelle 1301: 05ED E6 MOV A,@R0 1302: 05EE 54 0F ANL A,#0FH 1303: 05F0 24 30 ADD A,#30H 1304: 05F2 12 05 B7 LCALL OUT_CHAR_LCD ; Ausgabe 2. und 4.Stelle 1305: 05F5 08 INC R0 1306: 05F6 B8 32 02 CJNE R0,#32H,OWL2 ; Abfrage letzte Stelle 1307: 05F9 80 07 SJMP OWL3 1308: 05FB 74 2E OWL2: MOV A,#2EH ; ASCII "." 1309: 05FD 12 05 B7 LCALL OUT_CHAR_LCD ; Ausgabe Punkt 1310: 0600 80 E2 SJMP OWL1 1311: 0602 00 OWL3: NOP 1312: 0603 22 RET 1313: 1314: ;**************************************************************** 1315: ; Cursor auf Zeichen 0 setzen 1316: ; *************************************************************** 1317: 0604 LCD_ADR1: 1318: 0604 90 F8 00 MOV DPTR,#LCD_ADR 1319: 0607 74 80 MOV A,#ADD1 1320: 0609 F0 MOVX @DPTR,A 1321: 060A 12 03 84 LCALL WAIT_LCD 1322: 060D 22 RET 1323: ; ************************************************************** 1324: ; Cursor auf Zeichen 8 setzen 1325: ; ************************************************************** 1326: 060E LCD_ADR8: 1327: 060E 90 F8 00 MOV DPTR,#LCD_ADR 1328: 0611 74 C0 MOV A,#ADD2 1329: 0613 F0 MOVX @DPTR,A 1330: 0614 12 03 84 LCALL WAIT_LCD 1331: 0617 22 RET ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 25 Line I Addr Code Source 1332: 1333: ;**************************************************************** 1334: ; Ausgabe eines String mit 16 Zeichen (2x8) 1335: ; *************************************************************** 1336: 0618 LCD_SENDSTRING: 1337: 0618 79 00 MOV R1,#00H 1338: 061A AA 82 MOV R2,DPL 1339: 061C AB 83 MOV R3,DPH 1340: 061E NEXT_C1: ;CLR A 1341: 061E E9 MOV A,R1 1342: 061F 93 MOVC A,@A+DPTR 1343: 0620 12 05 B7 LCALL OUT_CHAR_LCD 1344: 0623 09 INC R1 1345: ; MOV DPTR,#STRING1 1346: 0624 8A 82 MOV DPL,R2 1347: 0626 8B 83 MOV DPH,R3 1348: 0628 B9 08 F3 CJNE R1,#08H,NEXT_C1 1349: 062B D1 0E ACALL LCD_ADR8 1350: ; MOV DPTR,#STRING1 1351: 062D 8A 82 MOV DPL,R2 1352: 062F 8B 83 MOV DPH,R3 1353: 0631 NEXT_C2: 1354: ; CLR A 1355: 0631 E9 MOV A, R1 1356: 0632 93 MOVC A,@A+DPTR 1357: 0633 12 05 B7 LCALL OUT_CHAR_LCD 1358: 0636 09 INC R1 1359: ; MOV DPTR,#STRING1 1360: 0637 8A 82 MOV DPL,R2 1361: 0639 8B 83 MOV DPH,R3 1362: 063B B9 10 F3 CJNE R1,#10H,NEXT_C2 1363: 063E 22 RET 1364: 1365: ;**************************************************************** 1366: ; Eingabe fuer Umfang und Breite 1367: ; *************************************************************** 1368: 063F TASTEN_EINGABE: 1369: 063F C2 00 CLR HALB_BYTE ; Merker Halbbyte Faktor B loeschen 1370: 0641 78 30 MOV R0,#30H ; Speicherstelle 30 1371: 0643 7E C1 MOV R6,#0C1H ; 9.Stelle LCd 1372: 0645 7F 30 MOV R7,#30H ; ASCII 0 1373: 0647 7D 03 MOV R5,#03H ; Anzahl 1374: 0649 90 F8 00 TAST1: MOV DPTR,#LCD_ADR 1375: 064C EE MOV A,R6 1376: 064D F0 MOVX @DPTR,A 1377: 064E 12 03 84 LCALL WAIT_LCD 1378: 0651 74 0F MOV A,#0FH ; Cursor blink 1379: 0653 F0 MOVX @DPTR,A 1380: 0654 12 03 84 LCALL WAIT_LCD 1381: 0657 12 03 69 TAST2: LCALL WAIT 1382: 065A 12 06 95 TAST0: LCALL TASTATUR 1383: 065D 50 FB JNC TAST0 1384: 065F B9 00 0C CJNE R1,#ZAHLEN,TAST4 ; Abfrage Taste Zahlen 1385: 0662 0F INC R7 ; Wert erhoehen 1386: 0663 BF 3A 02 CJNE R7,#3AH,TAST3 ; Abfrage Wert > 9 1387: 0666 7F 30 MOV R7,#30H ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 26 Line I Addr Code Source 1388: 0668 EF TAST3: MOV A,R7 1389: 0669 12 05 B7 LCALL OUT_CHAR_LCD 1390: 066C 80 DB SJMP TAST1 1391: 066E B9 03 E6 TAST4: CJNE R1,#FERTIG,TAST2 ; Abfrage Taste Fertig 1392: 0671 EF MOV A,R7 ; Wert abspeichern 1393: 0672 94 30 SUBB A,#30H ; Umwandlung ASCII --> Zahl 1394: 0674 30 00 03 JNB HALB_BYTE,TAST8 ; Abfrage MERKER Halbbyte 1395: 0677 46 ORL A,@R0 ; BIT 0-3 u. 4-7 zusammenfuegen 1396: 0678 80 03 SJMP TAST9 1397: 067A C4 TAST8: SWAP A ; BIT 0-3 --> 4-7 1398: 067B D2 00 SETB HALB_BYTE ; Merker Halbbyte setzen 1399: 067D F6 TAST9: MOV @R0,A ; 1400: 067E 0E INC R6 ; LCD-Stelle erhoehen 1401: 067F 7F 30 MOV R7,#30H 1402: 0681 BE C3 04 CJNE R6,#0C3H,TAST5 ; Abfrage (.) Stelle 1403: 0684 08 INC R0 ; Faktor LSB 1404: 0685 0E INC R6 1405: 0686 C2 00 CLR HALB_BYTE ; Merker loeschen 1406: 0688 BE C6 BE TAST5: CJNE R6,#0C6H,TAST1 ; Abfrage letzte Stelle 1407: 068B 90 F8 00 MOV DPTR,#LCD_ADR 1408: 068E 74 0E MOV A,#0EH ; Cursor no blink 1409: 0690 F0 MOVX @DPTR,A 1410: 0691 12 03 84 LCALL WAIT_LCD 1411: 0694 22 RET 1412: 1413: ; **************************************************************** 1414: ; Tasten Dekodierung ueber Port P1 1415: ; Tastendekodierung aus dem Buch: 1416: ; MC-Tools 2 1417: ; Die 8051-Mikrocontroller-Familie Einfuehrung in die Software 1418: ; Tastenprogramm TASTATUR_1 Seite 88 - 90 1419: ; Modus 0: TASTATUR_MODUS vor Unterprogrammaufruf geloescht 1420: ; erst wenn Taste aktiv wird, Rueckkehr zum Hauptprogramm 1421: ; MODUS 1: TASTATUR_MODUS vor Unterprogrammaufruf gesetzt, 1422: ; Tastenfeld wird einmal abgefragt. 1423: ; Bei Rueckkehr zum Hauptprogramm gibt Carry an, 1424: ; ob eine Taste betaetigt wurde. 1425: ; CARRY = 0: keine Taste erkannt 1426: ; CARRY = 1: Taste erkannt; Nummer der Taste steht in 1427: ; TASTEN_NUMMER 1428: ; 1429: ; TASTEN_PORT EQU P1 ; benuetzter PORT 1430: ; P_ANZ EQU 03H ; Anzahl Portleitungen 1431: ; TASTATUR_MODUS BIT [0] ; Steuerbit fuer Modus (20.0) 1432: ; EINGAENGE EQU 00010111B ; Maske fuer Tastaturport: 1433: ; Tastaturpins = 1 1434: ; unbenuetzte Portpins: 1435: ; Eingaenge : 1 1436: ; Ausgaenge : 0 1437: ; TASTEN_NUMMER EQU 01H ; Register 1 1438: ; SPALTEN_ZAEHLER EQU 02H ; 2 1439: ; ZEILEN_ZAEHLER EQU 03H ; 3 1440: ; AUSGABE_MASKE EQU 04H ; 4 1441: ; EINLESE_MASKE EQU 05H ; 5 1442: ; 1443: ; ZAHLEN EQU 00H ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 27 Line I Addr Code Source 1444: ; FERTIG EQU 03H 1445: ; LOESCHEN EQU 05H 1446: ; *************************************************************** 1447: 0695 TASTATUR: 1448: 0695 E5 90 MOV A,TASTEN_PORT ; Pruefen, ob Taste noch 1449: 0697 5D ANL A,R5 ; aktiv ist 1450: 0698 60 02 JZ TADA ; Sprung, falls Taste aktiv 1451: 069A 80 02 SJMP WARTE ; Modus 0+1 : Taste wieder inaktiv 1452: 1453: 069C TADA: 1454: 069C 80 39 SJMP KEINE_TASTE1 ; Modus = 1 : alte Taste noch aktiv 1455: 1456: 069E WARTE: 1457: 069E 12 06 DB LCALL ENTPRELL ; Entprellzeit abwarten 1458: 06A1 E5 90 MOV A,TASTEN_PORT ; Pruefen ob Taste noch aktiv ist 1459: 06A3 5D ANL A,R5 1460: 06A4 60 F8 JZ WARTE ; Sprung, falls Taste noch prellt 1461: 1462: 06A6 STARTE_ZYKLUS: 1463: 06A6 7C FE MOV R4,#0FEH ; Startwert fuer Ausgabemaske 1464: 06A8 79 00 MOV R1,#00H ; Startwert fuer Tastennummer 1465: 06AA 7A 03 MOV R2,#P_ANZ ; Startwert fuer Spaltenzaehler 1466: 1467: 06AC SCHLEIFE1: ; 1.Schleife fuer Spaltenabfrage 1468: 06AC 7D 01 MOV R5,#01H ; Einlesemaske fuer 1.Zeile 1469: 06AE 7B 03 MOV R3,#P_ANZ ; Startwert fuer Zeilenzaehler 1470: 06B0 E5 90 MOV A,TASTEN_PORT ; Port einlesen 1471: 06B2 44 17 ORL A,#EINGAENGE ; Eingangspins setzen und 1472: 06B4 5C ANL A,R4 ; Low fuer eine Spalte ansteuern 1473: 06B5 F5 90 MOV TASTEN_PORT,A ; Portausgabe 1474: 1475: 06B7 SCHLEIFE2: ; 2.Schleife fuer Zeilenabfrage 1476: 06B7 EA MOV A,R2 ; Vergleich Spaltenzaehler mit 1477: 06B8 6B XRL A,R3 ; Zeilenzaehler (Diagonale ?) 1478: 06B9 60 06 JZ DIAGO ; Sprung bei Gleichheit 1479: 06BB E5 90 MOV A,TASTEN_PORT ; Port einlesen und mit 1480: 06BD 5D ANL A,R5 ; Einlesemaske aktuelle Zeile ausblenden 1481: 06BE 60 0D JZ TAZU ; Sprung, falls Taste gedrueckt 1482: 06C0 09 INC R1 ; Naechste Tastennummer 1483: 1484: 06C1 DIAGO: 1485: 06C1 ED MOV A,R5 ; Einlesemaske fuer naechste 1486: 06C2 23 RL A ; Zeile um 1 Bit nach links 1487: 06C3 FD MOV R5,A ; schieben 1488: 06C4 DB F1 DJNZ R3,SCHLEIFE2 ; Sprung, falls Zeilen noch nicht 1489: ; abgearbeitet sind 1490: 06C6 EC MOV A,R4 ; Ausgabemaske fuer naechste Spalte 1491: 06C7 23 RL A ; um 1 Bit nach links 1492: 06C8 FC MOV R4,A ; schieben 1493: 06C9 DA E1 DJNZ R2,SCHLEIFE1 ; Sprung, falls Spalten noch 1494: ; nicht abgearbeitet sind 1495: 06CB 80 0A SJMP KEINE_TASTE1 ; Neuer Abfragezylus fuer Modus 0 1496: 1497: 06CD TAZU: 1498: 06CD 12 06 DB LCALL ENTPRELL ; Entprellzeit abwarten 1499: 06D0 E5 90 MOV A,TASTEN_PORT ; Pruefen, ob Taste noch aktiv ist ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 28 Line I Addr Code Source 1500: 06D2 5D ANL A,R5 1501: 06D3 70 02 JNZ KEINE_TASTE1 ; Sprung, falls Taste nicht erkannt 1502: 06D5 80 02 SJMP TASTE_AKTIV1 1503: 1504: 06D7 KEINE_TASTE1: 1505: 06D7 C3 CLR C ; CARRY-Bit loeschen 1506: 06D8 22 RET 1507: 1508: 06D9 TASTE_AKTIV1: 1509: 06D9 D3 SETB C ; CARRY-Bit setzen 1510: 06DA 22 RET 1511: 1512: ; ******************************************************** 1513: ; Entprellzeit fuer die Tasten 1514: ; ******************************************************** 1515: 06DB ENTPRELL: 1516: 06DB 75 51 04 MOV (51H),#04H ; zum Entprellen der Tasten 1517: 06DE 75 50 FF EP1: MOV (50H),#0FFH ; Verzoegerung von 2055 1518: 06E1 D5 50 FD EP2: DJNZ (50H),EP2 ; Zyklen 1519: 06E4 D5 51 F7 DJNZ (51H),EP1 1520: 06E7 22 RET 1521: 1522: ; ********************************************************* 1523: ; Texte 1524: ; ********************************************************* 1525: 06E8 STRING1: 1526: 06E8 68 61 2D 5A DB "ha-Zaehler 1.1 " 06EC 61 65 68 6C 06F0 65 72 20 31 06F4 2E 31 20 20 1527: 06F8 STRING2: 1528: 06F8 46 61 6B 74 DB "Faktor U 00.00 m" 06FC 6F 72 20 55 0700 20 30 30 2E 0704 30 30 20 6D 1529: 0708 STRING3: 1530: 0708 46 61 6B 74 DB "Faktor B 00.00 m" 070C 6F 72 20 42 0710 20 30 30 2E 0714 30 30 20 6D 1531: 0718 STRING4: 1532: 0718 46 61 6B 74 DB "Faktor U OK ? " 071C 6F 72 20 55 0720 20 20 4F 4B 0724 20 20 3F 20 1533: 0728 STRING5: 1534: 0728 46 61 6B 74 DB "Faktor B OK ? " 072C 6F 72 20 42 0730 20 20 4F 4B 0734 20 20 3F 20 1535: 1536: END ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 29 register banks used: --- no errors ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 30 L I S T O F S Y M B O L S ============================= SYMBOL TYPE VALUE LINE ------------------------------------------------------------ ??ASEM_51 NUMBER 8051 ??VERSION NUMBER 0130 AC BIT D6 ACC DATA E0 ADD1 NUMBER 0080 576 ADD2 NUMBER 00C0 577 ADDA0 CODE 0504 1124 ADDA1 CODE 0509 1128 ADD_BIN CODE 0486 1018 ADD_BIN0 CODE 0488 1021 ADD_BIN1 CODE 048E 1026 ANF NUMBER 0070 620 ANFANG CODE 0282 436 ANZ_BYTE NUMBER 0003 872 ANZ_NIBBLE NUMBER 0006 873 AUS NUMBER 0000 98 AUSGABE_MASKE NUMBER 0004 670 B DATA F0 BCDLSB_BCD NUMBER 0029 626 BCDLSB_BIN NUMBER 0031 635 BCDMSB_BCD NUMBER 0025 627 BCDMSB_BIN NUMBER 0030 636 BIN1 CODE 04EF 1105 BIN10 CODE 04E6 1100 BIN2 CODE 04F6 1109 BINLSB_BCD NUMBER 0043 623 BINLSB_BIN NUMBER 0046 632 BINMSB_BCD NUMBER 0040 624 BINMSB_BIN NUMBER 0045 633 CARRY CODE 049D 1039 CARRY_ENDE CODE 04A1 1042 CBC1 CODE 04CA 1076 CBC2 CODE 04CF 1079 CBC3 CODE 04D9 1086 COMP CODE 0406 913 CONB1 CODE 04AB 1055 CONBCD CODE 04C2 1072 CONBIN CODE 04A4 1051 CY BIT D7 CZERO CODE 03DA 887 DIAGO CODE 06C1 1484 DIVIDEND NUMBER 0064 875 DIVISOR NUMBER 0067 876 DIV_BCD CODE 03D6 884 DIV_ERR CODE 043E 945 DIV_EX CODE 043F 946 DPH DATA 83 DPL DATA 82 DV1 CODE 0410 922 DV2 CODE 0420 930 ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 31 SYMBOL TYPE VALUE LINE ------------------------------------------------------------ DV3 CODE 0432 939 DVD CODE 03EC 899 EA BIT AF EIN NUMBER 0001 97 EINGAENGE NUMBER 0017 662 EINLESE_MASKE NUMBER 0005 671 ENTPRELL CODE 06DB 1515 EP1 CODE 06DE 1517 EP2 CODE 06E1 1518 ES BIT AC ET0 BIT A9 ET1 BIT AB EX0 BIT A8 EX1 BIT AA EXTI0 CODE 0003 EXTI1 CODE 0013 F0 BIT D5 FAK_B CODE 018B 333 FAK_B1 CODE 01C1 353 FAK_B2 CODE 01CC 358 FAK_MUL CODE 01D1 360 FAK_U CODE 013D 301 FAK_U1 CODE 0175 323 FAK_U2 CODE 0180 328 FAK_U3 CODE 0185 330 FERTIG NUMBER 0003 674 FLAN_POSI NUMBER 0001 678 FLN CODE 02ED 484 HA0 CODE 0543 1190 HA1 CODE 0548 1193 HALB_BYTE NUMBER 0000 677 HEX_ASCII CODE 0540 1188 IE DATA A8 IE0 BIT 89 IE1 BIT 8B INT0 BIT B2 INT1 BIT B3 IP DATA B8 IT0 BIT 88 IT1 BIT 8A KEINE_TASTE1 CODE 06D7 1504 LCDINIT CODE 0100 268 LCD_ADR NUMBER F800 561 LCD_ADR1 CODE 0604 1317 LCD_ADR8 CODE 060E 1326 LCD_CLEAR CODE 05BF 1272 LCD_INI1 NUMBER 0001 570 LCD_INI2 NUMBER 0002 571 LCD_INI3 NUMBER 0006 572 LCD_INI4 NUMBER 000F 573 LCD_INI5 NUMBER 0014 574 LCD_INI6 NUMBER 0038 575 LCD_SENDSTRING CODE 0618 1336 LOE0 CODE 0510 1139 LOE1 CODE 0516 1143 LOE2 CODE 051A 1145 ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 32 SYMBOL TYPE VALUE LINE ------------------------------------------------------------ LOE3 CODE 051B 1146 LOES0 CODE 03E2 891 LOES1 CODE 03E5 893 LOESCHEN NUMBER 0005 675 M16P16 CODE 03B2 850 M16P8 CODE 0399 828 NEU CODE 024B 407 NEXT_C1 CODE 061E 1340 NEXT_C2 CODE 0631 1353 OL1 CODE 0592 1241 OL2 CODE 05A8 1251 OL3 CODE 05AC 1253 OL4 CODE 0596 1243 OUT_BYTE_LCD CODE 054B 1200 OUT_CHAR_LCD CODE 05B7 1263 OUT_LCD CODE 0561 1217 OUT_WERT_LCD CODE 05CF 1285 OV BIT D2 OWL1 CODE 05E4 1296 OWL2 CODE 05FB 1308 OWL3 CODE 0602 1311 P BIT D0 P0 DATA 80 P1 DATA 90 P2 DATA A0 P3 DATA B0 PCON DATA 87 PS BIT BC PSW DATA D0 PT0 BIT B9 PT1 BIT BB PX0 BIT B8 PX1 BIT BA P_ANZ NUMBER 0003 660 QUOTIENT NUMBER 006A 877 RB8 BIT 9A RD BIT B7 REN BIT 9C RESET CODE 0000 REST NUMBER 006D 878 RI BIT 98 RS0 BIT D3 RS1 BIT D4 RXD BIT B0 SB0 CODE 0450 972 SB1 CODE 0457 976 SB2 CODE 0459 978 SB3 CODE 0463 982 SB4 CODE 0468 984 SB5 CODE 046B 986 SBUF DATA 99 SCHLEIFE1 CODE 06AC 1467 SCHLEIFE2 CODE 06B7 1475 SCON DATA 98 SHIFT CODE 0440 952 SINT CODE 0023 ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 33 SYMBOL TYPE VALUE LINE ------------------------------------------------------------ SM0 BIT 9F SM1 BIT 9E SM2 BIT 9D SP DATA 81 SPALTEN_ZAEHLER NUMBER 0002 668 STARTE_ZYKLUS CODE 06A6 1462 STRING1 CODE 06E8 1525 STRING2 CODE 06F8 1527 STRING3 CODE 0708 1529 STRING4 CODE 0718 1531 STRING5 CODE 0728 1533 SUBB_BCD CODE 044F 970 T0 BIT B4 T1 BIT B5 T11 CODE 035B 787 T2 CODE 0358 786 T3 CODE 0355 785 TADA CODE 069C 1453 TAST0 CODE 065A 1382 TAST1 CODE 0649 1374 TAST2 CODE 0657 1381 TAST3 CODE 0668 1388 TAST4 CODE 066E 1391 TAST5 CODE 0688 1406 TAST8 CODE 067A 1397 TAST9 CODE 067D 1399 TASTATUR CODE 0695 1447 TASTEN_EINGABE CODE 063F 1368 TASTEN_NUMMER NUMBER 0001 667 TASTEN_PORT NUMBER 0090 659 TASTE_AKTIV1 CODE 06D9 1508 TAZU CODE 06CD 1497 TB8 BIT 9B TCON DATA 88 TF0 BIT 8D TF1 BIT 8F TH0 DATA 8C TH1 DATA 8D TI BIT 99 TIME CODE 034E 781 TIMER0 CODE 000B TIMER1 CODE 001B TL0 DATA 8A TL1 DATA 8B TMOD DATA 89 TR0 BIT 8C TR1 BIT 8E TRA CODE 0526 1159 TRA0 CODE 052D 1170 TRA1 CODE 0533 1174 TRA2 CODE 0537 1176 TRA3 CODE 0539 1177 TRA_BIN CODE 0520 1155 TXD BIT B1 T_ZAHL0 CODE 028D 441 T_ZAHL1 CODE 0298 446 ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 34 SYMBOL TYPE VALUE LINE ------------------------------------------------------------ UEBERLAUF1 CODE 0493 1031 UPM_D CODE 0319 757 W1 CODE 0376 803 W2 CODE 0373 802 W3 CODE 0370 801 WAIT CODE 0369 797 WAIT_LCD CODE 0384 813 WARTE CODE 069E 1456 WL1 CODE 038E 818 WL2 CODE 038B 817 WR BIT B6 ZAHLEN NUMBER 0000 673 ZANF0 CODE 02E2 478 ZANF1 CODE 02A3 451 ZANF2 CODE 02B4 458 ZANF3 CODE 02C5 465 ZANF4 CODE 02D6 472 ZBIT_BCD NUMBER 0020 628 ZBYBCD_BCD NUMBER 0005 629 ZBYBCD_BIN NUMBER 0002 637 ZBYBIN_BCD NUMBER 0004 630 ZBYBIN_BIN NUMBER 0002 638 ZE0 CODE 0472 998 ZE1 CODE 0479 1002 ZE2 CODE 047E 1004 ZE3 CODE 0481 1006 ZEHNER_CPL CODE 0471 996 ZEILEN_ZAEHLER NUMBER 0003 669 ZWSLSB_BCD NUMBER 003F 625 ZWSLSB_BIN NUMBER 0044 634