main.mac MASM51 V2.09 Page 1 ;-------------------------------------------------------- ; File Created by SDCC : FreeWare ANSI-C Compiler ; Version 2.5.3 #1123 (Oct 25 2005) ; This file generated Tue Apr 25 22:47:16 2006 ;-------------------------------------------------------- ISEG Org 0 0000 ds 8 ;Bank 0 für _ext_INT0 0008 ds 8 ;Bank 1 für _random_time ;-------------------------------------------------------- ; internal ram data ;-------------------------------------------------------- 0010 status: ds 1 0011 msec: ds 2 0013 stack: ds 1 ;-------------------------------------------------------- CSEG Org 0 0000 02 000D ljmp _startup 0003 02 002B ljmp _ext_INT0 0006 ds 5 000B 80 65 S jmp _random_time ;-------------------------------------------------------- _startup: ;------------------------------------------------------------ ;main.c:110: void main(void) ;------------------------------------------------------------ 000D 75 81 13 mov sp, #stack 0010 75 8C FC mov TH0,#0xFC ; Timer0 High-Order Register für 1ms laden 0013 75 8A 66 mov TL0,#0x66 0016 53 89 F0 anl TMOD,#0xF0 ;Timer0 Einstellungen zurücksetzen 0019 43 89 01 orl TMOD,#0x01 ;T0 Modus1, 16bit Zeitgeber 001C D2 A9 setb IE.1 ;Freigabe des Interrupts bei Überlauf T0 001E D2 A8 setb IE.0 ;Freigabe des ext. Interrupts INT0 (P3.2) 0020 D2 88 setb TCON.0 ;externer Interrupt0 wird flankenaktiviert 0022 D2 AF setb IE.7 ;alle Interruptquellen möglich 0024 11 C5 A call _ausgangszustand 0026 75 87 01 M102: mov PCON,#0x01 ;enter idle mode 0029 80 FB S jmp M102 ;Endlosschleife ;------------------------------------------------------------ ;void ext_INT0 (void) interrupt 0 ;------------------------------------------------------------ _ext_INT0: 002B C0 E0 C0 D0 push acc, psw 002F 75 D0 00 mov psw,#0x00 0032 C2 A8 clr IE.0 0034 74 FF mov A,#0xFF ;for (i=0; i<255; i++); 0036 D5 E0 FD djnz ACC, $ 0039 D2 A8 setb IE.0 003B E5 10 mov a, status 003D B4 01 02 cjne a,#0x01,E00119 0040 80 19 S jmp E00104 0042 B4 02 02 E00119: cjne a,#0x02,E00120 0045 80 0C S jmp E00103 0047 B4 03 02 E00120: cjne a,#0x03,E00121 main.mac MASM51 V2.09 Page 2 004A 80 03 S jmp E00102 004C B4 04 1E E00121: cjne a,#0x04,E00109 ;call _ausgangszustand ;jmp E00109 004F 11 C5 A E00102: call _ausgangszustand ;3.Tastendruck = Abbruch 0051 80 1A S jmp E00109 0053 75 10 03 E00103: mov status,#0x03 ;Verzögerung aktivieren 0056 E4 clr a ;msec=0 0057 F5 11 mov msec + 0,a 0059 F5 12 mov msec + 1,a E00104: ; 1.Tastendruck: starte T0, msec werden gezählt 005B C2 8C clr TCON.4 ;stop_T0 005D E4 clr a ;msec=0 005E F5 11 mov msec + 0,a 0060 F5 12 mov msec + 1,a 0062 75 8C FC mov TH0,#0xFC ;Timer0 High-Order Register für 1ms laden 0065 75 8A 66 mov TL0,#0x66 ;Timer0 Low-Order Register für 1ms laden 0068 D2 8C setb TCON.4 ;start_T0 006A 75 10 02 mov status,#0x02 ;status=2 006D D0 D0 D0 E0 E00109: pop psw, acc 0071 32 reti ;------------------------------------------------------------ ;void random_time (void) interrupt 1 using 1 // Timer0 Interruptroutine ;------------------------------------------------------------ Using 1 _random_time: 0072 C0 E0 C0 D0 push acc, psw 0076 75 D0 08 mov psw,#0x08 0079 75 8C FC mov TH0,#0xFC ;Timer0 High-Order Register für 1ms laden 007C 75 8A 66 mov TL0,#0x66 ;Timer0 Low-Order Register für 1ms laden 007F 05 11 inc msec ;msec inkrementieren 0081 E4 clr a 0082 B5 11 02 cjne a, msec, R00116 0085 05 12 inc msec + 1 R00116:;main.c:84: if (msec>t2) // wenn Zeit t2 abgelaufen 0087 C3 clr c 0088 74 10 mov a,#0x10 008A 95 11 subb a, msec + 0 008C 74 27 mov a,#0x27 008E 95 12 subb a, msec + 1 0090 50 02 jnc R00102 0092 11 C5 A call _ausgangszustand R00102: ;if (msec>t1 && status== 2) // kein weiterer Tastendruck-> 0094 C3 clr c 0095 74 D0 mov a,#0xD0 0097 95 11 subb a, msec + 0 0099 74 07 mov a,#0x07 009B 95 12 subb a, msec + 1 009D 50 07 jnc R00104 009F E5 10 mov a, status 00A1 B4 02 02 cjne a,#0x02,R00104 main.mac MASM51 V2.09 Page 3 00A4 11 C5 A call _ausgangszustand R00104:;main.c:92: if (msec>t_Einschalt_delay && status==3) // Verzögerung vorbei 00A6 C3 clr c 00A7 74 F4 mov a,#0xF4 00A9 95 11 subb a, msec + 0 00AB 74 01 mov a,#0x01 00AD 95 12 subb a, msec + 1 00AF 50 0F jnc R00109 00B1 E5 10 mov a, status 00B3 B4 03 0A cjne a,#0x03,R00109 00B6 75 10 04 mov status,#0x04 ;status=4 00B9 D2 97 setb P1.7 ;Ausgang für t2 sec = High 00BB E4 clr a ;msec=0 00BC F5 11 mov msec + 0,a 00BE F5 12 mov msec + 1,a 00C0 D0 D0 D0 E0 R00109: pop psw, acc 00C4 32 reti ;------------------------------------------------------------ ;void ausgangszustand (void) ;------------------------------------------------------------ _ausgangszustand: 00C5 C2 97 clr P1.7 ;Out_Low 00C7 75 10 01 mov status,#0x01 ;status=1 00CA C2 8C clr TCON.4 ;stop_T0 00CC E4 clr a ;msec=0 00CD F5 11 mov msec + 0,a 00CF F5 12 mov msec + 1,a 00D1 22 ret ;------------------------------------------------------------ END