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