hi,

ich versuche gerade einen Gleichstrommotor mit Hilfe einer herkömmlichen Multi-Fernbedienung, einem IR-Sensor (TSOP 1736, Datenblatt) und einem Microcontroller-Board (AT89S8253) zu realisieren. Die Fernbedienung hab ich auf den RC5-Code programmiert. Glaub ich zumindest, das Signal der Taste 1 entspricht laut Oszi auf jeden Fall dem des RC5-Codes. Den Empfänger hab entsprechend dem Datenblatt aufgebaut, allerdings hab ich den 10k-Widerstand durch einen 1k-Widerstand ersetzt, da es trotzdem noch zu Schwingungen beim Signal gekommen ist, wenn der Empfänger mit dem Microcontroller verbunden war. Den Empfängerausgang hab ich an einem beliebigen PIN angeschlossen. NUN zur Programmierung:

Code:
CSEG AT 0

; IR-Signal-Auswertung
IRinput        BIT        P1.3
IRCode        DATA    7fh
IRempfadr    DATA    7eh

; Zuweisung der Fernbedinung

IRrechts    EQU       00101110b
IRlinks        EQU       00101011b
IRvor        EQU       00101101b
IRzurueck    EQU       00101100b
IRstopp        EQU       00101111b

; Gleichstrom-Motor-Steuerung
Motoren        DATA    P2
Mstopp        EQU        00000000b
Mvor        EQU        11001100b
Mzurueck    EQU        10101010b
Mrechts        EQU        11001000b
Mlinks        EQU        10001100b

LEDs        DATA     P0

start:
MOV Motoren,#Mstopp

;RC5-Empfang

ireinlesen:
JB         IrInput,    ireinlesen
CLR     A
LCALL     Zeit34
MOV     B,            #7
loopAdr:
MOV     C,            IrInput
RLC     A
LCALL     Zeit
    DJNZ    B,        loopAdr
ANL     A,            #00111111b
MOV     IRempfadr,    A
CLR     A
MOV     B,            #6
loopDaten:
MOV     C,            IrInput
RLC     A
LCALL     Zeit
DJNZ     B,            loopDaten
MOV     IRcode,        A
CALL     zeit
CALL     zeit

; Ende RC5-Empfang
MOV     A,            IRempfadr
ANL     A,            #11011111b
JNZ        IReinlesen

; Motorsteuerung
MOV     A,            IRcode
CJNE    A,            #IRrechts,m1
MOV     motoren,    #Mrechts
SJMP     anzeigen
m1:
CJNE     A,            #IRlinks,m2
MOV        motoren,    #Mlinks
SJMP    anzeigen
m2:
CJNE    A,            #IRvor,m3
MOV        motoren,    #Mvor
SJMP    anzeigen
m3:
CJNE    A,            IRzurueck,m4
MOV        motoren,    #Mzurueck
SJMP    anzeigen
m4:
CJNE    A,            IRstopp,anzeigen
MOV        motoren,    #Mstopp
SJMP    anzeigen

;LED-Anzeige
anzeigen:
MOV        LEDs,        IRCode
SJMP    IReinlesen

;Zeitverzögerung 1768us
Zeit:
MOV        R6,            #5
loop1:
MOV        R7,            #172
loop0:
DJNZ    R7,            loop0
DJNZ    R6,            loop1
RET

;Zeitverzögerung 1328us

Zeit34:
MOV        R6,            #5
loop3:
MOV        R7,            #131
loop2:
DJNZ    R7,            loop2
DJNZ    R6,            loop3
RET

END
Das Programm ist äußerst schlecht kommentiert, ich weiß! Aber wer fragen hat kann diese ruhig stellen. Wenn ich das Programm auf den Microcontroller (Flashspeicher) spiel, passiert aber an den Ausgängen vom Motortreiber nichts, nada! Hardware-Fehler dürften es nicht mehr sein, darum Suche ich jetzt Fehler in der Software. Vllt kann mir ja einer von euch bei der Suche helfen. Ganz bin ich aus dem Programm auch nicht schlau geworden. Soll dieses Programm nur abändern, hab es nicht selbst geschrieben. Zu den einzelnen Stellen. Die Zeitverzögerungen sind klar, LEDAnzeige auch, Motorsteuerung und auslesen der 6 Kommandobits auch. Nur wie kommt der Autor des Programms auf z.B. diese Zuweisung:

Code:
IRrechts    EQU       00101110b
Diese entspricht nach einer Überprüfung des Signals mit dem Oszi nicht den 6 Kommandobits. Bin für jede Hilfe dankbar.

so long, lg slimer