; ********************************************** ; * FOX51, Peilbakensteuerung mit Vorlauf * ; * V 0.30 Frank Sperber, DL6DBN, 30.01.94 * ; * mit Bitmustervorgabe (ohne ASCII-Wandlung) * ; ********************************************** ;Vordefinitionen für 8051-Version .include reg51.def ; Registerdefinition .macro idle orl PCON,#%1 ; (in IDLE Mode versetzen) .endmacro ; Definitionen BASIS = $80 SPEED1 = 60 TICSEC1 = 10 ; Timerüberläufe pro Sekunde bei 60 BpM WAITLO1 = $5f ; Timerwerte WAITHI1 = $9e SPEED2 = 48 TICSEC2 = 8 ; Timerüberläufe pro Sekunde bei 48 BpM WAITLO2 = $f4 ; Timerwerte WAITHI2 = $85 LEDFLASH= 5 ; LED Blinkabstand in Sekunden CSIZE = 16 ; Grösse des Callbitpuffers KSIZE = 8 ; Grösse des Kennungsbitpuffers LOSIZE = 5 ; Grösse des Lowbattbitpuffers HYSTER = 15 ; Hysteresewert Batteriekontrolle INPORT = P1 CWPORT = P3.7 TXPORT = P3.6 LEDPORT = P3.5 BATPIN = P3.4 EXTTRIG = P3.2 SYNCPIN = P3.3 WATCH = $00 IFLAG0 = $01 IFLAG1 = $02 CWFLAG = $04 SYNCFLG = $05 CALLFLG = $06 BATFLAG = $07 ; Variablen .var_org $21 da$0021: ?? bitbuf: .ds.b 1 ; Pufferbyte für Bits da$0022: ?? bitptr: .ds.b 1 ; Zeiger auf Bit da$0023: ?? leng: .ds.b 1 ; Codebitlänge da$0024: ?? speed: .ds.b 1 ; Gebegeschwindigkeit in BpM da$0025: ?? ticsec: .ds.b 1 ; s.o. da$0026: ?? waitlo: .ds.b 1 ; s.o. da$0027: ?? waithi: .ds.b 1 ; s.o. da$0028: ?? ticks: .ds.b 1 ; Überlaufzähler für Sekunde (timerphasen) da$0029: ?? minmax: .ds.b 1 ; Überlaufgrenze für Sekundenzähler (sek.) da$002a: ?? hrmax: .ds.b 1 ; dito für Minutenzähler (min.) da$002b: ?? slot: .ds.b 1 ; Länge einer Sendephase (sek.) da$002c: ?? ctime: .ds.b 1 ; Zeit zur Rufzeicheneinblendung da$002d: ?? second: .ds.b 1 da$002e: ?? minute: .ds.b 1 da$002f: ?? hour: .ds.b 1 da$0030: ?? state: .ds.b 1 ; Zustandsvariable da$0031: ?? vorl_m: .ds.b 1 ; Vorlaufminuten da$0032: ?? vorl_h: .ds.b 1 ; Vorlaufstunden da$0033: ?? istate: .ds.b 1 ; Unterzustandsvariable da$0034: ?? batsel: .ds.b 1 ; Batteriekontrollvorgabe da$0035: ?? batcnt: .ds.b 1 ; Hysteresezähler Batteriezustand da$0036: ?? cycle: .ds.b 1 ; Zyklusdauer da$0037: ?? activ: .ds.b 1 ; aktive Minute (0-4) da$0038: ?? ?? ?? ?? ?? lo_buf: .ds.b 5 ; Bitpuffer LOW-Battery Ausgabe LOSIZE da$003d: ?? ?? ?? ?? ?? c_buf: .ds.b 16 ; Bitpuffer Call CSIZE $0042: ?? ?? ?? ?? ?? $0047: ?? ?? ?? ?? ?? $004c: ?? da$004d: ?? ?? ?? ?? ?? k_buf: .ds.b 8 ; Bitpuffer Kennung KSIZE $0052: ?? ?? ?? : stack: : : ; Einsprungvektoren : : .text_org $0000 : ta$0000: 02 00 5c reset: ljmp go ta$0003: 32 int0: reti ta$0004: ff ff ff ff ff .ds.b 7 $0009: ff ff ta$000b: 02 02 ea timer0: ljmp tic_ev ta$000e: ff ff ff ff ff .ds.b 5 ta$0013: c2 af int1: clr IEN0.7 ; IRs sperren (wg. Prio.) ta$0015: c2 8c clr TCON.4 ; Timer anhalten ta$0017: 02 03 31 ljmp sync ta$001a: ff .ds.b 1 ta$001b: 32 timer1: reti ta$001c: ff ff ff ff ff .ds.b 7 $0021: ff ff ta$0023: 32 serial: reti ta$0024: ff ff ff ff ff .ds.b 7 $0029: ff ff : : ; Copyrighthinweis : ta$002b: 46 4f 58 43 54 .dc.b "FOXCTRL/2 V0.30, (c) Frank Sperber, DL6DBN, 1994",0 $0030: 52 4c 2f 32 20 $0035: 56 30 2e 33 30 $003a: 2c 20 28 63 29 $003f: 20 46 72 61 6e $0044: 6b 20 53 70 65 $0049: 72 62 65 72 2c $004e: 20 44 4c 36 44 $0053: 42 4e 2c 20 31 $0058: 39 39 34 00 : : ; Initialisierung : ta$005c: c2 af go: clr IEN0.7 ; IRs sperren ta$005e: 75 81 55 mov sp,#stack ; Stack anlegen ta$0061: d2 b6 setb TXPORT ; Sender aus ta$0063: d2 b7 setb CWPORT ta$0065: d2 b5 setb LEDPORT ; LED aus ta$0067: 53 89 f0 anl TMOD,#%11110000 ; TIMER-0 Mode 01 ta$006a: 43 89 01 orl TMOD,#%1 ta$006d: 75 25 0a mov ticsec,#TICSEC1 ; zur Nummer Sicher ta$0070: 75 26 5f mov waitlo,#WAITLO1 ; 60 BpM setzen ta$0073: 75 27 9e mov waithi,#WAITHI1 ta$0076: 75 2d 00 mov second,#0 ta$0079: 75 2e 00 mov minute,#0 ta$007c: 75 2f 00 mov hour,#0 ta$007f: 75 30 ff mov state,#$ff ta$0082: c2 01 clr IFLAG0 ; interen Flags löschen ta$0084: c2 02 clr IFLAG1 ta$0086: 74 00 mov A,#0 ta$0088: 90 04 77 mov DPTR,#bat0 ; Batteriekontrollzustand laden ta$008b: 93 movc A,@A+DPTR ta$008c: f5 34 mov batsel,A ; vorbesetzen ta$008e: c2 07 clr BATFLAG ; Batterie low zurücksetzten ta$0090: 75 35 00 mov batcnt,#0 ; Batcnt löschen ta$0093: d2 06 setb CALLFLG ; Calleinblendung ein ta$0095: 74 00 mov A,#0 ta$0097: 90 04 78 mov DPTR,#caldef ; Batteriekontrollzustand laden ta$009a: 93 movc A,@A+DPTR ta$009b: 70 02 jnz gca ; ?Defaulteinblendung = 0 = aus ta$009d: c2 06 clr CALLFLG ; dann ausschalten ta$009f: 75 33 00 gca: mov istate,#0 ta$00a2: 75 22 00 mov bitptr,#0 ta$00a5: c2 88 clr TCON.0 ; INT-0 level detection ta$00a7: 75 29 3c mov minmax,#60 ; 1min = 60sec ta$00aa: 75 2a 3c mov hrmax,#60 ; 1h = 60min ta$00ad: e5 90 mov A,INPORT ; PORT 1 einlesen ta$00af: ff mov R7,A ta$00b0: a2 e7 mov C,ACC.7 ; Bitfolge vetauschen ta$00b2: 92 e0 mov ACC.0,C ta$00b4: a2 e6 mov C,ACC.6 ta$00b6: 92 e1 mov ACC.1,C ta$00b8: a2 e5 mov C,ACC.5 ta$00ba: 92 e2 mov ACC.2,C ta$00bc: a2 e4 mov C,ACC.4 ta$00be: 92 e3 mov ACC.3,C ta$00c0: 54 0f anl A,#%00001111 ; Vorlauf maskieren ta$00c2: 23 rl A ; * 4 = Adressversatz ta$00c3: 23 rl A ta$00c4: f8 mov R0,A ; Versatz retten ta$00c5: 90 04 79 mov DPTR,#times ; Zeittabellenbasis laden ta$00c8: 93 movc A,@A+DPTR ; Vorlaufstunden holen ta$00c9: f5 32 mov vorl_h,A ta$00cb: 08 inc R0 ; auf Minutenzeiger erhöhen ta$00cc: e8 mov A,R0 ; Versatz wiederherstellen ta$00cd: 93 movc A,@A+DPTR ; Vorlaufminuten holen ta$00ce: f5 31 mov vorl_m,A ta$00d0: 08 inc R0 ; auf Slotzeiger erhöhen ta$00d1: e8 mov A,R0 ; Versatz wiederherstellen ta$00d2: 93 movc A,@A+DPTR ; Slotdauer holen ta$00d3: f5 2b mov slot,A ta$00d5: 08 inc R0 ; auf Calltimezeiger erhöhen ta$00d6: e8 mov A,R0 ; Versatz wiederherstellen ta$00d7: 93 movc A,@A+DPTR ; Calltimedauer holen ta$00d8: f5 2c mov ctime,A ta$00da: ef mov A,R7 ; eingelesenen Wert holen ta$00db: a2 e0 mov C,ACC.0 ; Bitfolge vetauschen ta$00dd: 92 e7 mov ACC.7,C ta$00df: a2 e1 mov C,ACC.1 ta$00e1: 92 e6 mov ACC.6,C ta$00e3: a2 e2 mov C,ACC.2 ta$00e5: 92 e5 mov ACC.5,C ta$00e7: a2 e3 mov C,ACC.3 ta$00e9: 92 e4 mov ACC.4,C ta$00eb: c4 swap A ta$00ec: 54 0f anl A,#%00001111 ; Code maskieren ta$00ee: 23 rl A ; * 2 zur Adressberechnung ta$00ef: f8 mov R0,A ; Versatz retten ta$00f0: 90 04 36 mov DPTR,#codes ; Codetabellenbasis laden ta$00f3: 93 movc A,@A+DPTR ; aktive Minute holen ta$00f4: f5 37 mov activ,A ta$00f6: 08 inc R0 ; auf Zykluszeiger erhöhen ta$00f7: e8 mov A,R0 ; Versatz wiederherstellen ta$00f8: 93 movc A,@A+DPTR ; Zyklusdauer holen ta$00f9: f5 36 mov cycle,A ta$00fb: 74 00 mov A,#0 ; Defaultgeschwindigkeit ta$00fd: 90 04 76 mov DPTR,#speed0 ; laden und ta$0100: 93 movc A,@A+DPTR ta$0101: f5 24 mov speed,A ; vorbesetzen ta$0103: 90 06 19 mov DPTR,#call0 ; Call Kennung kopieren ta$0106: 30 b2 04 jnb EXTTRIG,gc0 ; ?Pin 3.2 low -> seriell einlesen ta$0109: 71 85 acall extin ; externes Einlesen aufrufen ta$010b: 80 02 sjmp gc1 ta$010d: 91 30 gc0: acall serin ; serielles Einlesen aufrufen ta$010f: 78 3d gc1: mov R0,#c_buf ; Adresse des Puffers holen ta$0111: 79 00 mov R1,#0 ; Versatzpointer EPROM ta$0113: 7a 10 mov R2,#CSIZE ; CSIZE Bytes kopieren ta$0115: e9 gl1: mov A,R1 ; Versatzptr holen ta$0116: 93 movc A,@A+DPTR ; Byte aus EPROM holen ta$0117: f6 mov @R0,A ; ins RAM kopieren ta$0118: 08 inc R0 ; Zeiger erhöhen ta$0119: 09 inc R1 ta$011a: da f9 djnz R2,gl1 ; und nächstes Byte ta$011c: 90 04 31 mov DPTR,#lobat ; Low-Batt Kennung kopieren ta$011f: 78 38 mov R0,#lo_buf ; Adresse des Puffers holen ta$0121: 79 00 mov R1,#0 ; Versatzpointer EPROM ta$0123: 7a 05 mov R2,#LOSIZE ; LOSIZE Bytes kopieren ta$0125: e9 gl2: mov A,R1 ; Versatzptr holen ta$0126: 93 movc A,@A+DPTR ; Byte aus EPROM holen ta$0127: f6 mov @R0,A ; ins RAM kopieren ta$0128: 08 inc R0 ; Zeiger erhöhen ta$0129: 09 inc R1 ta$012a: da f9 djnz R2,gl2 ; und nächstes Byte ta$012c: 90 05 b9 mov DPTR,#kenn ; Low-Batt Kennung kopieren ta$012f: 78 4d mov R0,#k_buf ; Adresse des Puffers holen ta$0131: e5 37 mov A,activ ; Versatzpointer EPROM aus Aktivzeiger ta$0133: 23 rl A ; mal 8 erzeugen ta$0134: 23 rl A ta$0135: 23 rl A ta$0136: f9 mov R1,A ta$0137: 7a 08 mov R2,#KSIZE ; KSIZE Bytes kopieren ta$0139: e9 gl3: mov A,R1 ; Versatzptr holen ta$013a: 93 movc A,@A+DPTR ; Byte aus EPROM holen ta$013b: f6 mov @R0,A ; ins RAM kopieren ta$013c: 08 inc R0 ; Zeiger erhöhen ta$013d: 09 inc R1 ta$013e: da f9 djnz R2,gl3 ; und nächstes Byte ta$0140: 51 bb acall setup ; Parameter setzen ta$0142: 85 26 8a mov TL0,waitlo ; Wartezeit laden ta$0145: 85 27 8c mov TH0,waithi ta$0148: 85 25 28 mov ticks,ticsec ; Variablen vorbesetzen ta$014b: d2 8c setb TCON.4 ; Timer starten ta$014d: 43 a8 86 orl IEN0,#%10000110 ; IRs freigeben ta$0150: b2 b5 r_loop: cpl LEDPORT ; mit flackernder LED auf ta$0152: e5 34 mov A,batsel ; (? Batterietest nötig) ta$0154: 60 02 jz gc2 ta$0156: 71 68 acall battst ; (ja) ta$0158: c2 00 gc2: clr WATCH ; (Watchdog resetten) : idle ; (IDLE Makro rufen) ta$015a: 43 87 01 orl PCON,#%1 ; (in IDLE Mode versetzen) : .endmacro ta$015d: e5 30 mov A,state ; Start durch SYNC (state=0) ta$015f: 70 ef jnz r_loop ; warten ta$0161: d2 b6 setb TXPORT ; Sender definiert aus ta$0163: d2 b7 setb CWPORT ta$0165: d2 b5 setb LEDPORT ; LED definiert aus : : ; Hauptzustandsschleife : ta$0167: e5 30 m_loop: mov A,state ; aktueller Status ta$0169: b4 00 16 cjne A,#0,mcont0 ; ? ungleich 0, kein Vorlauf mehr ta$016c: e5 2f mov A,hour ; ? Stunde = Vorlaufstunde ta$016e: b5 32 28 cjne A,vorl_h,mcont3 ta$0171: e5 2e mov A,minute ; ? Minuten auch gleich ta$0173: b5 31 23 cjne A,vorl_m,mcont3 ta$0176: 75 2e 00 mov minute,#0 ; dann Vorlauf vorbei, Minuten = 0 ta$0179: 75 2f 00 mov hour,#0 ; und Stunden = 0 ta$017c: 85 2b 29 mov minmax,slot ; Sendephasendauer setzen ta$017f: 85 36 2a mov hrmax,cycle ; Zyklenlänge setzen ta$0182: e5 36 mcont0: mov A,cycle ta$0184: 60 05 jz mcont1 ; ? Dauerläufer (cycle = 0) ta$0186: e5 2e mov A,minute ; aktuelle Minute im Zyklus holen ta$0188: b5 37 07 cjne A,activ,mcont2 ; ? gleich aktiver Minute ta$018b: 75 30 02 mcont1: mov state,#2 ta$018e: 31 e2 acall txon ; aktive Minute, kein IDLE-Mode ta$0190: 80 d5 sjmp m_loop ; daher direkt zum Schleifenbeginn ta$0192: 75 30 01 mcont2: mov state,#1 ta$0195: 51 98 acall txoff ; inaktive Minuten ta$0197: 80 02 sjmp m_end ta$0199: 31 ba mcont3: acall vorlf ; Vorlaufzeit ta$019b: 75 22 00 m_end: mov bitptr,#0 ta$019e: 75 23 00 mov leng,#0 ta$01a1: e5 34 mov A,batsel ; ? Batterietest nötig ta$01a3: 60 02 jz mcont4 ta$01a5: 71 68 acall battst ; ja ta$01a7: c2 01 mcont4: clr IFLAG0 ta$01a9: c2 00 clr WATCH ; Watchdog resetten : idle ; IDLE Makro rufen ta$01ab: 43 87 01 orl PCON,#%1 ; (in IDLE Mode versetzen) : .endmacro ta$01ae: 20 00 b6 jb WATCH,m_loop ; ?Timer- oder SYNC-IR, dann OK ta$01b1: d2 b6 setb TXPORT ; nein, irgendwas läuft schief ta$01b3: d2 b7 setb CWPORT ; alles aus ta$01b5: d2 b5 setb LEDPORT ta$01b7: 02 00 00 ljmp reset : : ; Vorlaufbehandlung : ta$01ba: c0 d0 vorlf: push PSW ta$01bc: c0 e0 push ACC ta$01be: c0 f0 push B ta$01c0: e5 2d mov A,second ; LEDFLASH-Sekunden abgelaufen? ta$01c2: 75 f0 05 mov B,#LEDFLASH ta$01c5: 84 div AB ta$01c6: e5 f0 mov A,B ta$01c8: 70 0c jnz vcont0 ; nein -> Status 0 (s.u.) ta$01ca: e5 33 mov A,istate ; ja ta$01cc: b4 00 0a cjne A,#0,vcont1 ; ? LED bereits an? ta$01cf: 75 33 01 mov istate,#1 ; nein, Status wechseln und ta$01d2: c2 b5 clr LEDPORT ; LED an ta$01d4: 80 05 sjmp vcont2 ta$01d6: 75 33 00 vcont0: mov istate,#0 ; Status zurücksetzen ta$01d9: d2 b5 vcont1: setb LEDPORT ; LED aus ta$01db: d0 f0 vcont2: pop B ta$01dd: d0 e0 pop ACC ta$01df: d0 d0 pop PSW ta$01e1: 22 ret : : ; aktive Minute : ta$01e2: c0 e0 txon: push ACC ta$01e4: e5 34 mov A,batsel ; ?Batt-test nötig ta$01e6: 60 0d jz tonc ta$01e8: b4 03 02 cjne A,#3,tond ; ? in den Sendephasen ta$01eb: 80 06 sjmp tone ; ja ta$01ed: b4 02 05 tond: cjne A,#2,tonc ; ? in den ungetasteten Phasen ta$01f0: 20 04 02 jb CWFLAG,tonc ; ? ist getastet ta$01f3: 71 68 tone: acall battst ta$01f5: d0 e0 tonc: pop ACC ta$01f7: c2 b6 clr TXPORT ; Sender an ta$01f9: c2 00 clr WATCH ; Watchdog resetten ta$01fb: 79 ff mov R1,#$FF ; Timer-IR Kontrollschleife ta$01fd: 78 ff ton0: mov R0,#$FF ; vorbesetzen, rund 1 Sekunde ta$01ff: 20 00 0d ton1: jb WATCH,ton2 ; ? Timer- oder SYNC-IR aufgetreten ta$0202: d8 fb djnz R0,ton1 ; nein, dann weiter warten ta$0204: d9 f7 djnz R1,ton0 ; und nochmehr warten ta$0206: d2 b6 setb TXPORT ; jetzt reicht's, alles aus ta$0208: d2 b7 setb CWPORT ta$020a: d2 b5 setb LEDPORT ta$020c: 02 00 00 ljmp reset ; und RESET ta$020f: c0 d0 ton2: push PSW ta$0211: c0 e0 push ACC ta$0213: c0 f0 push B ta$0215: e5 2c mov A,ctime ; ? Sekunde zur Einblendung ta$0217: b5 2d 02 cjne A,second,ton7 ta$021a: d2 01 setb IFLAG0 ; ja, Flag0 setzen (Ausgabe markieren) ta$021c: e5 22 ton7: mov A,bitptr ; Bitzeiger holen ta$021e: b5 23 2c cjne A,leng,ton3 ; ? Kennungsende erreicht ta$0221: 30 02 04 jnb IFLAG1,tona ; ? Flag1 gesetzt (bei Ausgabe?) ta$0224: c2 01 clr IFLAG0 ; ja, Flag0 und 1 löschen = Ausgabe vorbei ta$0226: c2 02 clr IFLAG1 ta$0228: 20 01 07 tona: jb IFLAG0,ton8 ; ? Ausgabe markiert (Flag0) ta$022b: 85 4d 23 mov leng,k_buf ; Kennungslänge holen ta$022e: 7b 4e mov R3,#k_buf+1 ; Pufferadresse holen ta$0230: 80 16 sjmp ton9 ta$0232: 30 07 09 ton8: jnb BATFLAG,tonb ; ? Batterieflag (LOW-Batt) gesetzt ta$0235: 85 38 23 mov leng,lo_buf ; LOW-Kennungslänge holen ta$0238: 7b 39 mov R3,#lo_buf+1 ta$023a: d2 02 setb IFLAG1 ; Flag1 für setzen ta$023c: 80 0a sjmp ton9 ta$023e: 30 06 07 tonb: jnb CALLFLG,ton9 ; kein LOW, dann ? Call einblenden ta$0241: 85 3d 23 mov leng,c_buf ; ja, Länge + Puffer holen ta$0244: 7b 3e mov R3,#c_buf+1 ta$0246: d2 02 setb IFLAG1 ta$0248: 75 22 00 ton9: mov bitptr,#0 ; Zeichenfolge einmal ausgegeben ta$024b: e5 22 mov A,bitptr ; Bit-pointer zurücksetzen ta$024d: 75 f0 08 ton3: mov B,#8 ; Byte und Bitposition darin ta$0250: 84 div AB ; bestimmen ta$0251: c9 xch A,R1 ta$0252: eb mov A,R3 ta$0253: 29 add A,R1 ta$0254: c9 xch A,R1 ta$0255: 87 21 mov bitbuf,@R1 ; in Bitadressbereich ablegen ta$0257: e5 f0 mov A,B ta$0259: 75 f0 04 mov B,#4 ; aus Bitposition Tabellenversatz ta$025c: a4 mul AB ; berechnen ta$025d: 90 02 61 mov DPTR,#ttab ta$0260: 73 jmp @A+DPTR ta$0261: a2 0f ttab: mov C,bitbuf.7 ; Bits via Carry zum Port schaufeln ta$0263: 80 1a sjmp ton4 ta$0265: a2 0e mov C,bitbuf.6 ta$0267: 80 16 sjmp ton4 ta$0269: a2 0d mov C,bitbuf.5 ta$026b: 80 12 sjmp ton4 ta$026d: a2 0c mov C,bitbuf.4 ta$026f: 80 0e sjmp ton4 ta$0271: a2 0b mov C,bitbuf.3 ta$0273: 80 0a sjmp ton4 ta$0275: a2 0a mov C,bitbuf.2 ta$0277: 80 06 sjmp ton4 ta$0279: a2 09 mov C,bitbuf.1 ta$027b: 80 02 sjmp ton4 ta$027d: a2 08 mov C,bitbuf.0 ta$027f: 40 08 ton4: jc ton5 ; TX-Tastung aus ta$0281: d2 b7 setb CWPORT ta$0283: d2 b5 setb LEDPORT ta$0285: c2 04 clr CWFLAG ; Sendertastung Flag aus ta$0287: 80 06 sjmp ton6 ta$0289: c2 b7 ton5: clr CWPORT ; TX-Tastung an ta$028b: c2 b5 clr LEDPORT ta$028d: d2 04 setb CWFLAG ; Sendertastung Flag an ta$028f: 05 22 ton6: inc bitptr ; Bitpointer um 1 erhöhen ta$0291: d0 f0 pop B ta$0293: d0 e0 pop ACC ta$0295: d0 d0 pop PSW ta$0297: 22 ret : : ; inaktive Minuten : ta$0298: c0 d0 txoff: push PSW ta$029a: c0 e0 push ACC ta$029c: c0 f0 push B ta$029e: d2 b6 setb TXPORT ; Sender aus ta$02a0: d2 b7 setb CWPORT ; Tastung aus ta$02a2: c2 04 clr CWFLAG ; Sendertastung aus setzen ta$02a4: e5 2d mov A,second ; LED alle LEDFLASH ta$02a6: 75 f0 05 mov B,#LEDFLASH ; Sekunden für 1s ta$02a9: 84 div AB ; einschalten ta$02aa: e5 f0 mov A,B ; wieder durch Restbildung ta$02ac: 70 04 jnz toffc ; ? kein Rest => ta$02ae: c2 b5 clr LEDPORT ; LED an ta$02b0: 80 02 sjmp toffe ta$02b2: d2 b5 toffc: setb LEDPORT ; LED aus ta$02b4: d0 f0 toffe: pop B ta$02b6: d0 e0 pop ACC ta$02b8: d0 d0 pop PSW ta$02ba: 22 ret : : ; Setzen der Timer- und Tick-Parameter : ta$02bb: c0 d0 setup: push PSW ; Reg. retten ta$02bd: c0 e0 push ACC ta$02bf: e5 24 mov A,speed ta$02c1: b4 3c 0b cjne A,#SPEED1,scont0 ta$02c4: 75 25 0a mov ticsec,#TICSEC1 ; 60 BpM Werte setzen ta$02c7: 75 26 5f mov waitlo,#WAITLO1 ta$02ca: 75 27 9e mov waithi,#WAITHI1 ta$02cd: 80 16 sjmp scont3 ta$02cf: b4 30 0b scont0: cjne A,#SPEED2,scont1 ta$02d2: 75 25 08 mov ticsec,#TICSEC2 ; 48 BpM Werte setzen ta$02d5: 75 26 f4 mov waitlo,#WAITLO2 ta$02d8: 75 27 85 mov waithi,#WAITHI2 ta$02db: 80 08 sjmp scont3 ta$02dd: 74 00 scont1: mov A,#0 ; Defaultgeschwindigkeit ta$02df: 90 04 76 mov DPTR,#speed0 ; laden und ta$02e2: 93 movc A,@A+DPTR ta$02e3: f5 24 mov speed,A ; vorbesetzen ta$02e5: d0 e0 scont3: pop ACC ; Reg. restaurieren ta$02e7: d0 d0 pop PSW ta$02e9: 22 ret : : ; Timerinterrupt : ta$02ea: 85 26 8a tic_ev: mov TL0,waitlo ; TIMER neu laden ta$02ed: 85 27 8c mov TH0,waithi ta$02f0: d2 8c setb TCON.4 ; und starten ta$02f2: 30 00 11 jnb WATCH,icont0 ta$02f5: 20 05 0e jb SYNCFLG,icont0 ; wenn kein SYNC war ta$02f8: d2 b6 setb TXPORT ; und Watchdog zugeschlagen ta$02fa: d2 b7 setb CWPORT ; hat, alles aus und ta$02fc: d2 b5 setb LEDPORT ta$02fe: a8 81 mov R0,SP ; Stackpointer holen ta$0300: 76 80 mov @R0,#BASIS ; Rücksprungadresse manipulieren ta$0302: 18 dec R0 ta$0303: 76 00 mov @R0,#$00 ta$0305: 22 ret ; IR-Routine sofort beenden ta$0306: c0 d0 icont0: push PSW ; PSW retten ta$0308: c0 e0 push ACC ; A retten ta$030a: d5 28 19 djnz ticks,endir ; 1 Sekunde vorbei ta$030d: 85 25 28 mov ticks,ticsec ; ja ta$0310: 05 2d inc second ; Sekunden erhöhen ta$0312: e5 2d mov A,second ta$0314: b5 29 0f cjne A,minmax,endir ; ? Minute oder Senderslot abgelaufen ? ta$0317: 75 2d 00 mov second,#0 ; ja ta$031a: 05 2e inc minute ; Minuten erhöhen ta$031c: e5 2e mov A,minute ta$031e: b5 2a 05 cjne A,hrmax,endir ; ? Stunde oder Zyklus abgelaufen ? ta$0321: 75 2e 00 mov minute,#0 ; ja ta$0324: 05 2f inc hour ; Stunden erhöhen ta$0326: d0 e0 endir: pop ACC ; A restaurieren ta$0328: d0 d0 pop PSW ; PSW restaurieren ta$032a: c2 05 clr SYNCFLG ta$032c: d2 00 setb WATCH ; Watchdog starten ta$032e: d2 af setb IEN0.7 ; IRs freigeben ta$0330: 32 termir: reti : : : ; "SYNC"-Interrupt : ta$0331: c2 00 sync: clr WATCH ta$0333: d2 b6 setb TXPORT ; Sender aus ta$0335: d2 b7 setb CWPORT ta$0337: c2 b5 clr LEDPORT ; LED an ta$0339: 85 25 28 mov ticks,ticsec ; Variablen auf Anfang ta$033c: 75 2d 00 mov second,#0 ; initialisieren ta$033f: 75 2e 00 mov minute,#0 ta$0342: 75 2f 00 mov hour,#0 ta$0345: 75 30 00 mov state,#0 ta$0348: 75 33 00 mov istate,#0 ta$034b: 75 22 00 mov bitptr,#0 ta$034e: 85 4d 23 mov leng,k_buf ta$0351: 7b 4e mov R3,#k_buf+1 ta$0353: 75 29 3c mov minmax,#60 ; im Vorlauf 1min = 60sec ta$0356: 75 2a 3c mov hrmax,#60 ; und 1h = 60min ta$0359: 85 26 8a mov TL0,waitlo ; TIMER neu laden ta$035c: 85 27 8c mov TH0,waithi ta$035f: d2 05 setb SYNCFLG ta$0361: d2 8c setb TCON.4 ; und starten ta$0363: d2 00 setb WATCH ; Watchdog starten ta$0365: d2 af setb IEN0.7 ; IRs freigeben ta$0367: 32 reti : : ; Batterietest : ta$0368: c0 e0 battst: push ACC ta$036a: e5 35 mov A,batcnt ; Hystereszustand holen ta$036c: 30 b4 09 jnb BATPIN,bt0 ; ? Low Bat dann bei bt0 weiter ta$036f: 60 03 jz bt1 ; ? Zähler auf 0, Batterie OK ta$0371: 14 dec A ; nein, Zähler erniedrigen ta$0372: 80 0c sjmp bt9 ; zum Ende ta$0374: c2 07 bt1: clr BATFLAG ; wenn Batterie OK, dann auch anzeigen ta$0376: 80 08 sjmp bt9 ta$0378: b4 0f 04 bt0: cjne A,#HYSTER,bt2 ; ? Batterie lang genug low ta$037b: d2 07 setb BATFLAG ; ja, dann anzeigen ta$037d: 80 01 sjmp bt9 ta$037f: 04 bt2: inc A ; noch nicht genug ta$0380: f5 35 bt9: mov batcnt,A ; neuen Wert zurückschreiben ta$0382: d0 e0 pop ACC ta$0384: 22 ret : : ; Extern seriell synchron einlesen : ta$0385: c2 ac extin: clr IEN0.4 ; ser. IR sperren ta$0387: af 98 ex4: mov R7,SCON ; serielle Steuerung retten ta$0389: 75 98 00 mov SCON,#%00000000 ; seriell Mode 0 (I/O-extension) ta$038c: d2 b2 setb EXTTRIG ; \_/ Puls für Shift-register ta$038e: c2 b2 clr EXTTRIG ; erzeugen ta$0390: d2 b2 setb EXTTRIG ta$0392: d2 9c setb SCON.4 ; Empfang zulassen ta$0394: 30 98 fd ext1: jnb SCON.0, ext1 ; auf Einleseende warten ta$0397: ae 99 mov R6,SBUF ; Inhalt retten ta$0399: c2 98 clr SCON.0 ta$039b: 30 98 fd ext2: jnb SCON.0, ext2 ; und 2. Byte ta$039e: ad 99 mov R5,SBUF ta$03a0: c2 98 clr SCON.0 ta$03a2: 30 98 fd ext3: jnb SCON.0, ext3 ; und 3. Byte ta$03a5: ac 99 mov R4,SBUF ta$03a7: c2 9c clr SCON.4 ; Empfang sperren ta$03a9: c2 98 clr SCON.0 ; RI Flag noch einmal löschen ta$03ab: bc 00 7d cjne R4,#0,extend ; ?R4 != 0 -> falsche Eingabe, Ende ta$03ae: ed mov A,R5 ta$03af: 54 07 anl A,#%00000111 ; Vorlauf maskieren ta$03b1: f5 f0 mov B,A ta$03b3: ee mov A,R6 ; 30/60 holen ta$03b4: c2 f3 clr B.3 ; auf 30 voreinstellen ta$03b6: 20 e5 02 jb ACC.5,ext4 ; ? 30 oder 60 ta$03b9: d2 f3 setb B.3 ; bei 60 Index verändern ta$03bb: e5 f0 ext4: mov A,B ; Index zurückholen ta$03bd: 23 rl A ; * 4 um Platz für untere Bits zu machen ta$03be: 23 rl A ta$03bf: f5 f0 mov B,A ; retten ta$03c1: ee mov A,R6 ; untere Vorlaufbits holen ta$03c2: 23 rl A ; von Pos. 6/7 nach 0/1 rotieren ta$03c3: 23 rl A ta$03c4: 54 03 anl A,#%00000011 ; maskieren ta$03c6: 45 f0 orl A,B ; geretten Index dazu verknüpfen ta$03c8: 23 rl A ; * 4 als Versatzbyte zur Tabelle ta$03c9: 23 rl A ta$03ca: f8 mov R0,A ; Versatz retten ta$03cb: 90 04 b9 mov DPTR,#timext ; Zeittabellenbasis laden ta$03ce: 93 movc A,@A+DPTR ; Vorlaufstunden holen ta$03cf: f5 32 mov vorl_h,A ta$03d1: 08 inc R0 ; auf Minutenzeiger erhöhen ta$03d2: e8 mov A,R0 ; Versatz wiederherstellen ta$03d3: 93 movc A,@A+DPTR ; Vorlaufminuten holen ta$03d4: f5 31 mov vorl_m,A ta$03d6: 08 inc R0 ; auf Slotzeiger erhöhen ta$03d7: e8 mov A,R0 ; Versatz wiederherstellen ta$03d8: 93 movc A,@A+DPTR ; Slotdauer holen ta$03d9: f5 2b mov slot,A ta$03db: 08 inc R0 ; auf Calltimezeiger erhöhen ta$03dc: e8 mov A,R0 ; Versatz wiederherstellen ta$03dd: 93 movc A,@A+DPTR ; Calltimedauer holen ta$03de: f5 2c mov ctime,A ta$03e0: ed mov A,R5 ; Kennungsbits holen ta$03e1: 54 f8 anl A,#%11111000 ; Code maskieren ta$03e3: 03 rr A ; als Versatzzeiger verbiegen ta$03e4: 03 rr A ta$03e5: b2 e5 cpl ACC.5 ta$03e7: f8 mov R0,A ; Versatz retten ta$03e8: 90 04 36 mov DPTR,#codes ; Codetabellenbasis laden ta$03eb: 93 movc A,@A+DPTR ; aktive Minute holen ta$03ec: f5 37 mov activ,A ta$03ee: e8 mov A,R0 ; Versatz wiederherstellen ta$03ef: 24 01 add A,#1 ; auf Zykluszeiger erhöhen ta$03f1: 93 movc A,@A+DPTR ; Zyklusdauer holen ta$03f2: f5 36 mov cycle,A ta$03f4: ee mov A,R6 ; für Speed holen ta$03f5: 20 e0 05 jb ACC.0,ext5 ; ?48/60 BpM ta$03f8: 75 24 3c mov speed,#SPEED1 ; 60 BpM ta$03fb: 80 03 sjmp ext6 ta$03fd: 75 24 30 ext5: mov speed,#SPEED2 ; 48 BpM ta$0400: 03 ext6: rr A ; Batterievorgabe zurechtbiegen ta$0401: 54 03 anl A,#%00000011 ; maskieren ta$0403: 64 03 xrl A,#%00000011 ; negieren ta$0405: f5 34 mov batsel,A ; und speichern ta$0407: ee ext7: mov A,R6 ; für Call holen ta$0408: 54 18 anl A,#%00011000 ; Bits maskieren ta$040a: 90 04 0e mov DPTR,#exttab ta$040d: 73 jmp @A+DPTR ta$040e: d2 06 exttab: setb CALLFLG ; Call2 an ta$0410: 90 06 39 mov DPTR,#call2 ta$0413: 00 nop ta$0414: 80 15 sjmp extend ta$0416: d2 06 setb CALLFLG ; Call1 an ta$0418: 90 06 29 mov DPTR,#call1 ta$041b: 00 nop ta$041c: 80 0d sjmp extend ta$041e: d2 06 setb CALLFLG ; Call0 an ta$0420: 90 06 19 mov DPTR,#call0 ta$0423: 00 nop ta$0424: 80 05 sjmp extend ta$0426: c2 06 clr CALLFLG ; kein Call ta$0428: 90 06 19 mov DPTR,#call0 : ta$042b: 8f 98 extend: mov SCON,R7 ta$042d: d2 ac setb IEN0.4 ; ser. wieder IR zulassen ta$042f: 22 ret : ta$0430: 22 serin: ret ; Eingabe über RS-232 : ; noch nicht implementiert : : ; LOW-Batt Kennung : ta$0431: 1c lobat: .dc.b 28 ; BAT ta$0432: ea 8b 8e .dc.b %11101010,%10001011,%10001110 ta$0435: 00 .dc.b %00000000 : : ; Aktivtabelle : ; cm, z : ta$0436: 0b 00 codes: .dc.b 11, 00 ; Dauerläufer MO- ta$0438: 01 02 .dc.b 01, 02 ; MOI, 2er Zyklus ta$043a: 00 02 .dc.b 00, 02 ; MOE ta$043c: 02 03 .dc.b 02, 03 ; MOS, 3er Zyklus ta$043e: 01 03 .dc.b 01, 03 ; MOI ta$0440: 00 03 .dc.b 00, 03 ; MOE ta$0442: 03 04 .dc.b 03, 04 ; MOH, 4er Zyklus ta$0444: 02 04 .dc.b 02, 04 ; MOS ta$0446: 01 04 .dc.b 01, 04 ; MOI ta$0448: 00 04 .dc.b 00, 04 ; MOE ta$044a: 04 05 .dc.b 04, 05 ; MO5, 5er Zyklus ta$044c: 03 05 .dc.b 03, 05 ; MOH ta$044e: 02 05 .dc.b 02, 05 ; MOS ta$0450: 01 05 .dc.b 01, 05 ; MOI ta$0452: 00 05 .dc.b 00, 05 ; MOE ta$0454: 0a 00 .dc.b 10, 00 ; Dauerläufer MO ta$0456: 05 06 .dc.b 05, 06 ; MOT, 6er Zyklus ta$0458: 04 06 .dc.b 04, 06 ; MO5 ta$045a: 03 06 .dc.b 03, 06 ; MOH ta$045c: 02 06 .dc.b 02, 06 ; MOS ta$045e: 01 06 .dc.b 01, 06 ; MOI ta$0460: 00 06 .dc.b 00, 06 ; MOE ta$0462: 09 0a .dc.b 09, 10 ; MO0, 10er Zyklus ta$0464: 08 0a .dc.b 08, 10 ; MO---- ta$0466: 07 0a .dc.b 07, 10 ; MOO ta$0468: 06 0a .dc.b 06, 10 ; MOM ta$046a: 05 0a .dc.b 05, 10 ; MOT ta$046c: 04 0a .dc.b 04, 10 ; MO5 ta$046e: 03 0a .dc.b 03, 10 ; MOH ta$0470: 02 0a .dc.b 02, 10 ; MOS ta$0472: 01 0a .dc.b 01, 10 ; MOI ta$0474: 00 0a .dc.b 00, 10 ; MOE : : ; Defaultgeschwindigkeit in BpM (nur 48 und 60 sinnvoll!) : ta$0476: 3c speed0: .dc.b 60 : : ; Defaulteinstellung zur Batteriekontrolle : ta$0477: 01 bat0: .dc.b 1 : : ; Defaultvorgabe für Calleinblendung (0 = aus, !0 = ein) : ta$0478: 00 caldef: .dc.b 0 : : ; Vorlauftabelle : ; h, m, dauer/sec, call@time : ta$0479: 03 00 1e 0c times: .dc.b 03, 00, 30, 12 ta$047d: 02 00 1e 0c .dc.b 02, 00, 30, 12 ta$0481: 01 1e 1e 0c .dc.b 01, 30, 30, 12 ta$0485: 01 00 1e 0c .dc.b 01, 00, 30, 12 ta$0489: 00 1e 1e 0c .dc.b 00, 30, 30, 12 ta$048d: 00 0f 1e 0c .dc.b 00, 15, 30, 12 ta$0491: 00 01 1e 0c .dc.b 00, 01, 30, 12 ta$0495: 00 00 1e 0c .dc.b 00, 00, 30, 12 ta$0499: 12 00 3c 1b .dc.b 18, 00, 60, 27 ta$049d: 07 00 3c 1b .dc.b 07, 00, 60, 27 ta$04a1: 06 00 3c 1b .dc.b 06, 00, 60, 27 ta$04a5: 03 00 3c 1b .dc.b 03, 00, 60, 27 ta$04a9: 02 00 3c 1b .dc.b 02, 00, 60, 27 ta$04ad: 01 00 3c 1b .dc.b 01, 00, 60, 27 ta$04b1: 00 1e 3c 1b .dc.b 00, 30, 60, 27 ta$04b5: 00 00 3c 1b .dc.b 00, 00, 60, 27 : ta$04b9: 18 00 1e 0c timext: .dc.b 24, 00, 30, 12 ta$04bd: 17 00 1e 0c .dc.b 23, 00, 30, 12 ta$04c1: 16 00 1e 0c .dc.b 22, 00, 30, 12 ta$04c5: 15 00 1e 0c .dc.b 21, 00, 30, 12 ta$04c9: 14 00 1e 0c .dc.b 20, 00, 30, 12 ta$04cd: 13 00 1e 0c .dc.b 19, 00, 30, 12 ta$04d1: 12 00 1e 0c .dc.b 18, 00, 30, 12 ta$04d5: 11 00 1e 0c .dc.b 17, 00, 30, 12 ta$04d9: 10 00 1e 0c .dc.b 16, 00, 30, 12 ta$04dd: 0f 00 1e 0c .dc.b 15, 00, 30, 12 ta$04e1: 0e 00 1e 0c .dc.b 14, 00, 30, 12 ta$04e5: 0d 00 1e 0c .dc.b 13, 00, 30, 12 ta$04e9: 0c 00 1e 0c .dc.b 12, 00, 30, 12 ta$04ed: 0b 00 1e 0c .dc.b 11, 00, 30, 12 ta$04f1: 0a 00 1e 0c .dc.b 10, 00, 30, 12 ta$04f5: 09 00 1e 0c .dc.b 09, 00, 30, 12 ta$04f9: 08 00 1e 0c .dc.b 08, 00, 30, 12 ta$04fd: 07 00 1e 0c .dc.b 07, 00, 30, 12 ta$0501: 06 00 1e 0c .dc.b 06, 00, 30, 12 ta$0505: 05 00 1e 0c .dc.b 05, 00, 30, 12 ta$0509: 04 1e 1e 0c .dc.b 04, 30, 30, 12 ta$050d: 04 00 1e 0c .dc.b 04, 00, 30, 12 ta$0511: 03 1e 1e 0c .dc.b 03, 30, 30, 12 ta$0515: 03 00 1e 0c .dc.b 03, 00, 30, 12 ta$0519: 02 1e 1e 0c .dc.b 02, 30, 30, 12 ta$051d: 02 00 1e 0c .dc.b 02, 00, 30, 12 ta$0521: 01 1e 1e 0c .dc.b 01, 30, 30, 12 ta$0525: 01 00 1e 0c .dc.b 01, 00, 30, 12 ta$0529: 00 2d 1e 0c .dc.b 00, 45, 30, 12 ta$052d: 00 1e 1e 0c .dc.b 00, 30, 30, 12 ta$0531: 00 0f 1e 0c .dc.b 00, 15, 30, 12 ta$0535: 00 00 1e 0c .dc.b 00, 00, 30, 12 ta$0539: 18 00 3c 1b .dc.b 24, 00, 60, 27 ta$053d: 17 00 3c 1b .dc.b 23, 00, 60, 27 ta$0541: 16 00 3c 1b .dc.b 22, 00, 60, 27 ta$0545: 15 00 3c 1b .dc.b 21, 00, 60, 27 ta$0549: 14 00 3c 1b .dc.b 20, 00, 60, 27 ta$054d: 13 00 3c 1b .dc.b 19, 00, 60, 27 ta$0551: 12 00 3c 1b .dc.b 18, 00, 60, 27 ta$0555: 11 00 3c 1b .dc.b 17, 00, 60, 27 ta$0559: 10 00 3c 1b .dc.b 16, 00, 60, 27 ta$055d: 0f 00 3c 1b .dc.b 15, 00, 60, 27 ta$0561: 0e 00 3c 1b .dc.b 14, 00, 60, 27 ta$0565: 0d 00 3c 1b .dc.b 13, 00, 60, 27 ta$0569: 0c 00 3c 1b .dc.b 12, 00, 60, 27 ta$056d: 0b 00 3c 1b .dc.b 11, 00, 60, 27 ta$0571: 0a 00 3c 1b .dc.b 10, 00, 60, 27 ta$0575: 09 00 3c 1b .dc.b 09, 00, 60, 27 ta$0579: 08 00 3c 1b .dc.b 08, 00, 60, 27 ta$057d: 07 00 3c 1b .dc.b 07, 00, 60, 27 ta$0581: 06 00 3c 1b .dc.b 06, 00, 60, 27 ta$0585: 05 00 3c 1b .dc.b 05, 00, 60, 27 ta$0589: 04 1e 3c 1b .dc.b 04, 30, 60, 27 ta$058d: 04 00 3c 1b .dc.b 04, 00, 60, 27 ta$0591: 03 1e 3c 1b .dc.b 03, 30, 60, 27 ta$0595: 03 00 3c 1b .dc.b 03, 00, 60, 27 ta$0599: 02 1e 3c 1b .dc.b 02, 30, 60, 27 ta$059d: 02 00 3c 1b .dc.b 02, 00, 60, 27 ta$05a1: 01 1e 3c 1b .dc.b 01, 30, 60, 27 ta$05a5: 01 00 3c 1b .dc.b 01, 00, 60, 27 ta$05a9: 00 2d 3c 1b .dc.b 00, 45, 60, 27 ta$05ad: 00 1e 3c 1b .dc.b 00, 30, 60, 27 ta$05b1: 00 0f 3c 1b .dc.b 00, 15, 60, 27 ta$05b5: 00 00 3c 1b .dc.b 00, 00, 60, 27 : : ; Kennungen : ta$05b9: 1e kenn: .dc.b 30 ; MOE ta$05ba: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05bd: 80 00 00 00 .dc.b %10000000,0,0,0 ta$05c1: 20 .dc.b 32 ; MOI ta$05c2: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05c5: a0 00 00 00 .dc.b %10100000,0,0,0 ta$05c9: 22 .dc.b 34 ; MOS ta$05ca: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05cd: a8 00 00 00 .dc.b %10101000,%00000000,0,0 ta$05d1: 24 .dc.b 36 ; MOH ta$05d2: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05d5: aa 00 00 00 .dc.b %10101010,%00000000,0,0 ta$05d9: 26 .dc.b 38 ; MO5 ta$05da: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05dd: aa 80 00 00 .dc.b %10101010,%010000000,0,0 ta$05e1: 20 .dc.b 32 ; MOT ta$05e2: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05e5: e0 00 00 00 .dc.b %11100000,0,0,0 ta$05e9: 24 .dc.b 36 ; MOM ta$05ea: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05ed: ee 00 00 00 .dc.b %11101110,%00000000,0,0 ta$05f1: 28 .dc.b 40 ; MOO ta$05f2: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05f5: ee e0 00 00 .dc.b %11101110,%11100000,0,0 ta$05f9: 2c .dc.b 44 ; MO---- ta$05fa: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$05fd: ee ee 00 00 .dc.b %11101110,%11101110,%00000000,0 ta$0601: 30 .dc.b 48 ; MO0 ta$0602: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$0605: ee ee e0 00 .dc.b %11101110,%11101110,%11100000,0 ta$0609: 1a .dc.b 26; ; MO ta$060a: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$060d: 00 00 00 00 .dc.b %00000000,0,0,0 ta$0611: 2d .dc.b 45 ; MO- ta$0612: ee 3b b8 .dc.b %11101110,%00111011,%10111000 ta$0615: ff ff 00 00 .dc.b %11111111,%11111111,%00000000,0 : : ; Rufzeichen : ta$0619: 3c call0: .dc.b 60 ; HI HI HI ta$061a: aa 28 0a a2 .dc.b %10101010,%00101000,%00001010,%10100010 ta$061e: 80 aa 28 00 .dc.b %10000000,%10101010,%00101000,%00000000 ta$0622: 00 00 00 00 00 .dc.b 0,0,0,0,0,0,0 $0627: 00 00 : ta$0629: 34 call1: .dc.b 52 ; MUSTER ta$062a: ee 2b 8a 8e .dc.b %11101110,%00101011,%10001010,%10001110 ta$062e: 22 e8 00 00 .dc.b %00100010,%11101000,%00000000,%00000000 ta$0632: 00 00 00 00 00 .dc.b 0,0,0,0,0,0,0 $0637: 00 00 : ta$0639: 32 call2: .dc.b 50 ; CALL ta$063a: eb a2 e2 ea .dc.b %11101011,%10100010,%11100010,%11101010 ta$063e: 2e a0 00 00 .dc.b %00101110,%10100000,%00000000,%00000000 ta$0642: 00 00 00 00 00 .dc.b 0,0,0,0,0,0,0 $0647: 00 00