include reg_52.pdf LJMP init ORG 000Bh LJMP timer0 ORG 001Bh LJMP timer1 init: MOV TMOD,#11h MOV IE,#8Ah ; signal code MOV R0,#11100011b ; 8 Bit Adresse MOV R1,#11110011b ; 2 Bit Funktion on/off, 6 Bit Fahrt MOV R2,#01000000b ; restliche 2 Bit Fahrt m2: CJNE R4,#00h,m9 mov TL2, #0Ah ; kurze Pause nach einem Paket mov TH2, #0FAh m9: CJNE R4,#01h,m10 mov TL2, #0FEh ; lange Pause nach dem Doppe-Paket mov TH2, #0FBh mov R4,#00h m10: CJNE R3,#00h,m8 ; erste 8 Bit des Siganls Mov A, R0 m8: CJNE R3,#09h,m4 ; zweite 8 Bit des Siganls Mov A, R1 m4: CJNE R3,#11h,m5; letzten 2 Bit des Signals Mov A, R2 m5: CJNE R3,#13h,m6 ; erstes Paket ist abgeschlossen lcall zeit ; Pause wird aufgerufen MOV R0,#11100011b ; Signal Code wird wieder geladen MOV R1,#11110011b MOV R2,#01000000b MOV R3,#00h INC R4 m6: INC R3 ;nach jedem gesendetem Bit wird R3 erhöht m3:JNB P2.1,m3 ; wartet bis Timer 1, P2.1 high schaltet CLR P2.1 RLC A ; Inhalt des Akkumulator wird rotiert JB CY ,m1 ; abfrage ob das Carryflag 1 ist MOV TL0,#0E5h ;CY ist 0, kurze HIGH Periode wird geladen MOV TH0,#0FFh MOV TL1,#49h MOV TH1,#0FFh SETB TR0 ; Timer0 wird gestartet SETB P2.0 ; P2.0 wird 1 -> High Signal m1: MOV TL0,#49h ;CY ist 1, lange HIGH Periode wird geladen MOV TH0,#0FFh MOV TL1,#0E5h MOV TH1,#0FFh SETB TR0 ; Timer0 wird gestartet SETB P2.0 ; P2.0 wird 1 -> High Signal LJMP m2 timer0: ; Interrupt timer0 Startet den Timer 1 CLR P2.0 CLR TR0 CLR TF0 SETB TR1 reti timer1: ; Interrupt timer1 setzt P2.1 wieder auf 1 CLR TR1 ; -> nächste Impulswird gestartet CLR TF1 SETB P2.1 reti zeit: ; Pause zwischen zwei Pakten SETB TR2 m7:JNB TF2,m7 CLR TR2 CLR TF2 ret end