PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC5 Code einlesen



Import-Script
24.01.2002, 19:48
Hi Leute <BR>hab&#39; meinen Roboter &uuml;ber IR fernsteuerbar gemacht. Hier ist das Prinzip Programm. Die Ger&auml;teadresse wird &uuml;bersprungen und nur die Kommandozahl wird eingelesen - die liegt dann im Akku an. Hardwarevorraussetzung ist ein TSOP 1736 oder sowas in der Richtung an p1.2. <BR> <BR>Hier ein guter Link mit detaillierter Beschreigbung des RC% Codes: <BR><FONT SIZE="+0"><B><FONT COLOR="ff0000">Der folgende Text wurde mit dem Textkonverter eingef&auml;rbt. <A HREF="http://www.batronix.com/exe/textkonverter.zip">Zum Herunterladen hier klicken &#40;11 KByte&#41;</A><br><br></FONT>INCLUDE 89c2051.mc <BR><FONT COLOR="119911">; 12 Mhz Quarz </FONT> <BR> <BR> <BR><FONT COLOR="0000ff">Anfang:</FONT> <BR> <BR>MOV A, 00000000b <FONT COLOR="119911">; vorsichtshalber a auf 0 setzen </FONT> <BR> <BR>JNB p0.2, Pause13.392ms <FONT COLOR="119911">;liegt ein signal an <FONT COLOR="119911">;spring in die einleseroutine </FONT></FONT> <BR> <BR>JMP anfang <BR> <BR> <BR><FONT COLOR="0000ff">start:</FONT> <BR> <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR>call Pause1.728ms <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR>call pause1.728ms <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR>call pause1.728ms <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR>call Pause1.728ms <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR>call pause1.728ms <BR>MOV C, p1.2 <FONT COLOR="119911">;das BIT, dass an p1.2 anliegt in C schreiben </FONT> <BR>RLC A <FONT COLOR="119911">; A und C drehen </FONT> <BR> <BR>MOV p3, A stellt den Akku an p3 dar &#40;mit led<FONT COLOR="119911">&#39;s&#41; </FONT> <BR> <BR><FONT COLOR="119911">;vergleicht die Zahl in A mit 16 </FONT> <BR><FONT COLOR="0000ff">anfang2:</FONT> <BR>CJNE A, #16, n&auml;chster <BR>machwas, wenn die Zahl &uuml;bereinstimmt, wenn nicht, andere Zahl ausprieren <BR>JMP anfang <BR> <BR><FONT COLOR="0000ff">n&auml;chster:</FONT> <BR>CJNE A, #17, n&auml;chster2 <BR>machwas, wenn die Zahl &uuml;bereinstimmt, wenn nicht, andere Zahl ausprieren <BR>JMP anfang <BR> <BR><FONT COLOR="0000ff">n&auml;chster2:</FONT> <BR>CJNE A, #32, anfang <BR>machwas, wenn die Zahl &uuml;bereinstimmt, wenn nicht, spring wieder zum anfang <BR>JMP anfang <BR> <BR> <BR><FONT COLOR="0000ff">Pause13.392ms:</FONT> <FONT COLOR="119911">;eigentlich sind es glaub<FONT COLOR="119911">&#39; ich 13,364ms </FONT></FONT> <BR>MOV R0, #255 <BR><FONT COLOR="0000ff">schleifeB:</FONT> <BR>MOV R1, #13 <BR><FONT COLOR="0000ff">SchleifeC:</FONT> <BR>NOP <BR>NOP <BR>DJNZ R1, SchleifeC <BR>DJNZ R0, SchleifeB <BR> <BR>JMP start <BR> <BR><FONT COLOR="0000ff">Pause1.728ms:</FONT> <FONT COLOR="119911">;eigentlich sind es 1,731ms </FONT> <BR>MOV R0, #216 <FONT COLOR="119911">;1z </FONT> <BR><FONT COLOR="0000ff">schleifeA:</FONT> <BR>NOP <BR>NOP <BR>NOP <BR>NOP <BR>NOP <BR>NOP <FONT COLOR="119911">;1z </FONT> <BR>DJNZ R0, schleifeA <FONT COLOR="119911">;2z </FONT> <BR>RET <FONT COLOR="119911">;2z</FONT> <BR></B></FONT>

Import-Script
28.01.2002, 20:51
Hi, warum so schwierig? Nimm einfach ein SAA3049. Der decodiert dir ganz automatisch RC5 &#40;besonders den von Phillips, weil der ja von Phillips ist&#41;. <BR>Ansonsten, hast du mal dran gedacht, dass die eine Fernbedienung eine andere Tr&auml;gerfrequenz hat? <BR> <BR>ciao <BR> <BR> Tobias

Import-Script
02.02.2002, 15:46
Hi <BR> <BR>Den SAA3049 hab ich auch schon gesucht, bei Phillips hat man mir gesagt da&szlig; der schon lange nicht mehr hergestellt wird. K&ouml;nnte also schwierig sein. <BR>Stattdessen hab ich mir auch sowas &auml;hnliches programmiert, wer Interesse dran hat kann mir ja mailen: <A HREF="mailto:ip.zusch@gmx.de">ip.zusch@gmx.de</A>

Import-Script
02.02.2002, 19:54
Also bei Reichelt habe ich den SAA3049 letztes Jahr noch gekauft.

Import-Script
02.07.2002, 00:32
JNB p0.2, Pause13.392ms ;liegt ein signal an ;spring in die einleseroutine <BR> <BR>SCHREIBFEHLER: P0.2 muss P1.2 heissen!

Import-Script
02.07.2002, 08:56
Hallo Tobias, <BR> <BR>&#34;MOV A, 00000000b&#34; bedeutetet aber &#34;MOV A, R0&#34; und nicht &#34;CLR A&#34;. <BR> <BR> <BR>Funktioniert Deine Routine wirklich ? <BR>In Fernbedienungen werden &uuml;blicher Weise billige Keramikschwinger verwendet mit teilweise recht gro&szlig;en Toleranzen. D.h. die Gefahr ist gro&szlig;, da&szlig; die letzten Bits nicht mehr synchron sind. K&ouml;nnte also sein, da&szlig; Du von einer anderen Fernbedienung v&ouml;llig andere Kodes ausliest. <BR> <BR>Deshalb arbeiten solche Empfangsroutinen immer selbstsynchronisierend: Es werden einfach die High- und Low-Zeiten gemessen und daran entschieden, ob es einen Bitwechsel gibt oder nicht oder obs nur ein St&ouml;rimpuls war. Man kann dazu z.B. einen Timerinterrupt verwenden &#40;braucht man meistens sowieso&#41;. Das hat auch den Vorteil, da&szlig; die CPU nebenbei ihre anderen Aufgaben nicht unterbrechen mu&szlig; und auch andere Interrupts bedienen kann. <BR> <BR> <BR>Bei Deiner Routine w&uuml;rde ja jeder andere Interrupt die Wartezeiten verf&auml;lschen und Dich erst recht ausm Takt bringen. <BR> <BR> <BR>Wenn Du Interesse hast, kann ich Dir meine Routine geben. Ist allerdings in C geschrieben, d.h. wenn Du C lesen kannst sollte es nicht schwer sei, da&szlig; in Assembler zu &uuml;bersetzen. <BR> <BR> <BR>Peter

Import-Script
02.07.2002, 08:58
Ich meinte nat&uuml;rlich &#34;Hallo Christian&#34;.

Import-Script
02.07.2002, 17:27
Hi Peter <BR>ja es funktioniert wirklich!! &#40;bei mir jedenfalls&#41; <BR>An deinem C code h&auml;tt ich shcon interesse - kannst ja mal posten. Der Code ist im Prinzip Bl&ouml;dsinn, aber ich fand&#39;s gut von Andr&eacute;, dass er eine Routine Rubrik in seinem Forum er&ouml;ffnet hat und fands aber schlecht, dass nach einem Monat immer noch erst 2 Beitr&auml;ge drin waren!!! <BR> <BR>Das Projetk, f&uuml;r das ich die Routine geschrieben habe ist allerdings schon lang vorbei &#40;es funktioniert aber zuverl&auml;ssig&#41; <BR> <BR>mfg <BR>Christian

Import-Script
02.07.2002, 17:29
Hi mega-hz <BR>hab&#39; nicht gesehen, dass du auch was gepostet hast.. <BR> <BR>Vielen Dank f&uuml;r den Hinweis!! <BR> <BR>mfg

Import-Script
03.07.2002, 08:38
Hallo Christian, <BR> <BR>wie gesagt, Dein Kode funktioniert nur, wenn zuf&auml;lliger Weise R0 = 0 ist. <BR>Du hast das # vergessen, deshalb wird aus der Zahl 0 die Adresse 0 und das ist dann R0 &#40;von Bank 0&#41;. <BR> <BR>Da&szlig; A = 0 sein mu&szlig; ist nicht &#34;vorsichtshalber&#34;, sondern notwendig, da Du ja nur 6-mal schiebst bleiben die restlichen 2 Bits erhalten und die nachfolgenden Vergleiche m&uuml;ssen fehlschlagen ! <BR> <BR>Deshalb wundert es mich immer noch, da&szlig; es funktionieren soll. <BR> <BR> <BR>Den C-Kode werde ich besser auf meine Webseite stellen, da Quelltexte hier sehr schlecht lesbar sind. Das wird auch wohl auch der Hauptgrund sein, da&szlig; hier sehr wenige Beispielroutinen reingestellt werden. <BR> <BR>Besonders die &#34;gr&ouml;&szlig;er&#34; und &#34;kleiner&#34; Zeichen mag das Forum nicht, kommen aber in C-Files sehr h&auml;ufig vor. <BR>Z.B. die n&auml;chste Zeile ist unvollst&auml;ndig: <BR> <BR>#include <BR> <BR> <BR>Peter

Import-Script
08.07.2002, 09:26
Hallo Christian, <BR> <BR>als Anhang mein C Programm. <BR> <BR>Wenn Du Probleme hast, es zu verstehen, fragt mich ruhig. <BR> <BR>Das Prinzip ist folgendes: <BR>Der Timer arbeitet in Mode 3, d.h. ein Interrupt alle 256 Zyklen. Dann wird festgestellt, ob sich der Zustand am IR-Pin geändert hat, wenn nicht, wird ein Zähler runtergezählt. D.h. der Zähler mißt die Zeit zwischen 2 Pegelwechseln in Vielfachen von 256 Zyklen. <BR> <BR>Es gibt nur kurze und genau doppelt so lange Pulse. die langen Pulse bedeuten einen Bitwechsel und können direkt in das Ergebnisregister eingeschoben werden. Die kurzen sind abwechselnd das Bit bzw. treten auch zwischen 2 Bits auf. D.h. dann muß jeder 2. Pegelwechsel ignoriert werden und das macht das Bit rc5_toggle. Das bit rc5_done wird gestzt, wenn ein kompletter IR-Kode empfangen wurde, der ist dann in rc5_data. <BR> <BR>Peter <BR> <BR><!--attachment: Rc5rec-3828.unk*attachment_icon.gif*application/octet-stream*1.5*RC5%2dEmpf%e4nger*Rc5rec%2ec51 --><center><table border=1><tr><td><img src="http://progshop.com/elektronik/diskussion/icons/attachment_icon.gif" align=left alt="application/octet-stream">RC5-Empfänger<br><a href="http://progshop.com/elektronik/diskussion/messages/2066/Rc5rec-3828.unk" target="_blank"><b>Rc5rec.c51</b></a> (1.5 k)</td></tr></table></center><!--/attachment-->

Import-Script
08.07.2002, 15:43
Servus Peter <BR> <BR>vielen Dank f&uuml;r das Programm und die Erklärung!!! <BR> <BR>Viele Gr&uuml;ße <BR> <BR>Christian

Hugo Ishaban
12.01.2005, 08:18
Hi jungs .


Ich habe das privileg von der schule aus einen RC5-Empfänger mit assembler zu programmieren .
Im vordergrund steht funktion,aufbau usw. ... .
Ich würde es wirklich sehr bevorzugen wenn mir jemand von euch unter die arme greifen könnte.
Vielen dank schon einmal im vorraus.


Gruß Hugo

edgar
12.01.2005, 09:12
Tag Hugo,

da gibt es etwas sehr schoenes fuer Dich....

http://www.ustr.net/infrared/infrared1.shtml

Edgar

Hugo Ishaban
20.01.2005, 09:56
Hi, super Link den du da gefunden hast danke dafür erstmal.

Ich wollt mir grad mal den Quelltext in meim Keil uVision kopieren und hab dann

dort den AT89C2051 ausgewählt, wenn ich nun aber ein neues Projekt erstelle und die File adde kommt beim starten (debug session) der fehler :
"EVALUATION VERSION : running with Code Size Limit : 2K"

kann mir da wer weiterhelfen ?

Gruß Hugo

Elektrikser
20.01.2005, 12:06
µVision1?

Er läßt dich nicht mehr das Programm ändern, weil es zu groß ist, oder?
Oder lässt er dich das Programm nicht an das Projekt adden?

Gruß Gerd G.

Hugo Ishaban
26.01.2005, 08:15
Hi,

nein µVision2 ich hab keine ahnung woran es liegt, wenn ich debuggen will bringt er halt die fehlermeldung :
"EVALUATION VERSION : running with Code Size Limit : 2K"

hab noch immer keine Lösung gefunden,wollte aber den Funktionen des Textes gerne mal folgen können...

Hugo

Winne
26.01.2005, 08:51
löle nicht störe mag

aber die Fehlermeldung sagt es :

der Debugger ist am Speicherlimmit


1.entweder falsche Einstellung (Datenbank)
2.oder limitierte Version.
3. Möglichkeit Dein Programm ist zu groß
4. Möglichkeit Deine Datenfelder fressen zuviel Speicher


d.h. Quellcode nach Speicherverschwendung durchforsten!

Willkommen beim speicheroptimierten Proggen. Eine Kunst der ersten Stunde, welche leider in Zeiten von Winklotz und Co. abhanden kam.

habe
grad noch mal Deinen post auf der letzen Seite unten gelesen kann essein das du einen chip mit mehr Speicher in der Datenbank wählen solltest ? oder ist der Debugger ne Freeware mit Speicherbegrenzung sowas habe ich schon bei verschiedenen Anbietern von Compilern und Assemblern gesehen.

matthiaswidl
04.02.2005, 09:55
Hi!
Ich muss für meine Diplomarbeit in der Schule ein Programm aus uvision1 umschreiben und neu compilieren. Es fehlt jedoch am uvision1 compiler von keil.

Ich wollte daher fragen, ob jemand von euch den compiler hat und wenn ja, ob er mir den Link mitteilen kann, oder ihn mir sendet.

mit Dank im Voraus
Matthias Widl

Peter Dannegger
04.02.2005, 12:24
Es gibt von Keil eine freie Testversion, die ist aber auf 2kB limitiert. Außerdem linkt sie nach 8000h, d.h. die Programme sind nicht auf einem AT89C2051 lauffähig.

Es gibt von Silabs eine Testversion, die ist auf 8kB limitiert und kann nach 0000h linken, aber floating point fehlt.
Allerdings weiß ich nicht, ob sie frei ist oder nur in Zusammenhang mit einem Testboard geliefert wird.

Eventuell mal von Silabs eine CD schicken lassen.


Ansonsten fragt mal in der Schule, ob Du den Dongle leihweise mit nach Hause nehmen darfst.


Peter

matthiaswidl
04.02.2005, 13:22
Die gratis version vom Keil uVision2 hab ich sowieso. Das Problem ist aber, dass ich die uVision1 version brauche, da ich ein altes programm verändern muss.

ich hab auch bereits versucht das alte projekt in das neue zu importieren. das hat allerdings nicht funktioniert. ich habe auch versucht ein neues Projekt mit den alten Dateien zu erstellen. dabei gibt es allerdings haufenweise errors und warnungen.

daher würde ich das uVision1 brauchen.

MfG
Matthias Widl

Hugo Ishaban
17.02.2005, 10:06
Hi Leute hab eben mal wieder an dem Projekt etwas weitergemacht, das Prog hab ich jetzt auch zum laufen gebracht...mein nächstes Problem liegt darin zu dem ganzen nen Programmablaufplan zu entwerfen! dazu hab ich mal ein wenig den quelltext von seite 1 übersetzt, könnt ihr euch das mal anschaun und mir sagen ob das einigermaßen stimmt ?! bzw..bisschen verbessern..manches konnte ich auch gar nicht übersetzen :mad:


; ÛÛÛÛÛÛÛÜ ÜÛÛÛÛÛÜ ÛÛÛÛÛÛÛÛ
; ÛÛ ßÛÛ ÛÛß ßÛ ÛÛ
; ÛÛ ÜÛÛ ÛÛ ÛÛ
; ÛÛÛÛÛÛÛÛ ÛÛ ÛÛÛÛÛÛÛÜ
; ÛÛ ÛÛ ÛÛ ßÛÛ
; ÛÛ ÛÛ ÛÛÜ ÜÛ ÛÛÜ ÜÛÛ
; ÛÛ ÛÛ ßÛÛÛÛÛß ßÛÛÛÛÛß
;
; SOFTWARE FOR AT89C2051 TO DECODE PHILIPS REMOTE CONTROL
; RC-5 CODIFICATION - INFRA-RED RECEIVER LT1029-ND DIGIKEY
; CLIPPED PARTS FROM THE ORIGINAL SOURCE TEXT:
; A) TRANSMITTER
; B) SELECTION FOR PHILIPS / FC1 - (WORKING PHILIPS)
; AT89C2051 RUNNING AT 2MhZ <== IMPORTANT
; WAGNER LIPNHARSKI - NOVEMBER 1999 - WAGNER@USTR.NET
; UST RESEARCH INC. - ORLANDO, FL - WWW.USTR.NET
;
$MOD51
$NOPAGING
$LIST
;
; PIN 11 (P37) : 0 = RECEIVER CIRCUIT
; : 1 = TRANSMITTER CIRCUIT
;
; PIN 2 (P30) : 1 = RECEIVER DECODES PHILIPS REMOTE
; : 0 = RECEIVER DECODES FC1 REMOTE
;
; PIN 12 (P10) : PULLED UP = FC1 CODE TRANSMITTER
; : GROUND = PHILIPS CODE TRANSMITTER
;
; RECEIVER CONFIGURATION:
; -----------------------
; PIN 7 (P33) INPUT SIGNAL FROM IR RECEIVER
; PINS 12-19 DECODER OUTPUT (DRIVE TO GROUND)
; PIN 11 TO GROUND.
; CLOCK CERAMIC RESSONATOR 2MhZ
; RESET CAP 1uF TO +VCC
; PIN 9 (P35) CAN BE USED TO LITE A LED WHEN RECEIVING VALID IR
; PIN 8 (P34) SCOPE GATE TIME (SOFTWARE TIMMING ADJUSTMENT)
;
; ---___---___------______---___---___--- PIN 7 P33 IRDATA
; _|_____|_____|_____|_____|_____|_____|_ PIN 8 P34 SCOPE READ GATE TIME
;
; --__ 1 BIT
; RX DATA
; __-- 0 BIT
;
; TRANSMITTER CONFIGURATION:
; --------------------------
; PINS 2,3,6,7,8,9 & 11 TIED TOGETHER TO DRIVE IR LED
; PINS 16-19 KEYBOARD MATRIX DRIVE (4 PINS)
; PINS 14 & 15 KEYBOARD MATRIX RETURN WITH PULL UP
; CRYSTAL 6MHZ
; RESET CONTROLLED BY FET BS110, DIODES FROM KEYBOARD.
; PIN 12 GOES TO GROUND WHEN IN POWER OFF
;------------------
; Receiver (der Empfänger)
;------------------
Led BIT 0B5h ; P3.5
IrInput BIT 0B3h ; P3.3
Scope BIT 0B4h ; P3.4
RxTx BIT 0B7h ; P3.7 ; Grounded if Receiver/High if TX
;------------------
; Transmitter (der Impulsgeber)
;------------------
TXLED EQU P3 ; FF = Off, 00 = On
KO1 Bit 097h ; P1.7 Keyboard Output
KO2 Bit 096h ; P1.6
KO3 Bit 095h ; P1.5
KO4 Bit 094h ; P1.4
KI1 Bit 093h ; P1.3 Keyboard Input
KI2 Bit 092h ; P1.2
IRDATA DATA 010H ; Memory to store IR code received (SPeicher um empfangenen IR Code zu speichern)
;======================================;
;
; P H I L I P S R E M O T E
; CODE "10" AT AV6 UNIVERSAL PROGRAMMABLE REMOTE CONTROL
;
;======================================;
ORG 00H
MAIN: Mov SP,#SPVALUE ;
PH0: Mov P1,#0FFh ; Reset Decoder Output High (dekodier output high zurücksetzen)
Setb LED ; Turn off IR Indicator (IR-Anzeige ausschalten)
; ;
PH1: Mov 4,#022 ; 2MHz
Mov 5,#000h ; 2MHz Time loop
PH2: Jnb IrInput,PH3 ; Wait for Incomming IR (first low) (auf IR warten)
Djnz 5,PH2 ; This time loop is to keep the last (Diese zeitschleife ist dazu da..
Djnz 4,PH2 ; ..pressed key available at P1 for few (..um die letzte gedrückte Taste an P1 für
Jmp PH0 ; ..time in case you press it again (..kurze Zeit verfügbar zu behalten und um
; ..and avoid glitches at P1. (..Störimpulsen vorzubeugen)
;-------------------------;
PH3: Clr A ; IR Receiver First Low level. (IR empfänger erst Low)
Clr Led ; Lite IR Indicator (IR Anzeige-LED löschen)
; ;
Mov 2,#110 ; Time Loop (3/4 bit time)
Djnz 2,$ ; Waste Time to sync second bit (zeit verschwenden um das 2te Bit zu synkronisieren)
; ; 2MHz = 1.296ms
Mov B,#7 ;
PH4: Setb Scope ; Scope Gate Indicator Pulse UP -------------------
Mov C,IrInput ; Shift IR state to Carry bit --------------
Clr Scope ; Scope Gate Indicator Pulse Down -------------
Rlc A ; Insert LEFT Carry Bit into A Reg (Schiebe Linkes Übertrag-Bit in Akku)
; ;
Mov 2,#145 ; Waste time for next BIT (verschwende Zeit fürs nächste Bit)
Djnz 2,$ ; 2MHz clock, 1.728ms
; ;
Djnz B,PH4 ; Rotate 7 bits into A (wieder hoch zu PH4(da b,#7 alles 7x mal wiederholen))
; ; AGC#2, CHKbit, ADDRESS field (5 bits)
;-------------------------;
Anl A,#0F7h ; Cut off CHECK Bit (Flipping bit) (check bit ausschalten/abtrennen/abstellen(?))
Cjne A,#40h,PH5 ; 10h means second AGC UP & Address 00
; ; Not 10h?, wrong sync, go again (PH5)
;-------------------------;
Mov B,#6 ; Will Get the COMMAND field (wird der befehlsbereich)
PH4A: Setb Scope ; Scope Gate Indicator Pulse UP -------------------
Mov C,IrInput ; Shift IR state into Carry bit ---------------------
Clr Scope ; Scope Gate Indicator Pulse Down ----------------
Rlc A ; Insert LEFT carry bit into A Reg (Schiebe Linkes Übertrag-Bit in Akku)
; ;
Mov 2,#145 ; Waste time for next BIT (zeit verschwenden fürs nächste Bit)
Djnz 2,$ ; 2MHZ clock = 1.728ms
; ;
Djnz B,PH4A ; Rotate 8 bits into A (Command) (wieder hoch zu PH4A-------------)
; ; Here A holds Command bits (Akku hält hier Befehls-Bits)
;-------------------------;
Mov IRData,A ; Save Command at IRData memory (befehl im IR-speicher speichern)
Cjne A,#25h,$+3 ; Is Command >=25h (ist der befehl >= 25h ??)
Jnc PH5 ; Yes? Wrong everything, go again PH5 (wenn ja, alles falsch, PH5 wiederholen)
; ;
Call PH6 ; Go get Conversion at Table (Hole Übersetzung in Tabelle)
Cjne A,#0FFh,PH4B ; If conversion <> FF, is valid. (Übersetzung ungleich FF ist gültig)
Jmp PH5 ; ..Not Expected Command. go again PH5 (unerwarteter Befhel, nochmal PH5)
; ;
PH4B: Mov P1,A ; Valid Command is post at P1 Port (gültiger Befehl wird an P1 gegeben)
Jmp PH1 ; Job done, go wait next pulse train. (Fertig und auf nächsten Impuls warten)
; ;
;-------------------------;
PH5: Mov 3,#8 ; 2MHz
Mov 2,#112 ; Wait 15 bit time
PH5A: Djnz 2,$ ; Wasting time to sync ok next train (-------------------??)
Djnz 3,PH5A ;
Jmp PH0 ; Go back and wait for next train. (-------------------??)
;-------------------------;
PH6: Inc A ; Table conversion, Inc skip RET
Movc A,@A+PC ; Point to TABLE + Value at A (1-255)
Ret ;
;-------------------------;
; The following table bit values at the first column, means
; the translation from remote control key to the value to be
; be post at P1. The program ignores values of "FF".
; Change those bits according to your needs.
;
; Bit #7 is "0" when a valid key is pressed, otherwise is "1"
; It can be used to recognize values as key "zero" pressed,
; when all bits UP means command ZERO.
;
; This TV remote uses only Address = "00"
;
; PHILIPS TV REMOTE CONTROL DECODING
;
; VALUE TO P1 REMOTE KEY COMMAND CODE FIELD (HEX)
; ----------- ---------- ------------------------
TABLE: DB 01111111b ; 0 ; 0
DB 01111110b ; 1 ; 1
DB 01111101b ; 2 ; 2
DB 01111100b ; 3 ; 3
DB 01111011b ; 4 ; 4
DB 01111010b ; 5 ; 5
DB 01111001b ; 6 ; 6
DB 01111000b ; 7 ; 7
DB 01110111b ; 8 ; 8
DB 01110110b ; 9 ; 9
DB 11111111b ; ; A
DB 11111111b ; ; B
DB 01110011b ; ON/OFF ; C
DB 01110010b ; MUTE ; D
DB 01110001b ; PP ; E
DB 01110000b ; OSD ; F
DB 01101111b ; Volume+ ; 10
DB 01101110b ; Volume- ; 11
DB 01101101b ; Bright+ ; 12
DB 01101100b ; Bright- ; 13
DB 01101011b ; Color+ ; 14
DB 01111010b ; Color- ; 15
DB 11111111b ; ; 16
DB 11111111b ; ; 17
DB 11111111b ; ; 18
DB 11111111b ; ; 19
DB 11111111b ; ; 1A
DB 11111111b ; ; 1B
DB 01100011b ; Contrast+ ; 1C
DB 01100010b ; Contrast- ; 1D
DB 11111111b ; ; 1E
DB 11111111b ; ; 1F
DB 01011111b ; Program+ ; 20
DB 01011110b ; Program- ; 21
DB 11111111b ; ; 22
DB 11111111b ; ; 23
DB 01011011b ; Timer ; 24
DB 01010111b ; Special 1 ; 25
DB 01000001b ; Special 2 ; 26
DB 01000111b ; Special 3 ; 27
DB 01001110b ; Special 4 ; 28
DB 01000101b ; Special 5 ; 29
DB 01010010b ; Special 6 ; 2A
END


hoffe mir kann da jmd weiterhelfe, blick noch nicht richtig durch wie das Ganze funktioniert :eek: