PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC-5 IR-Steuerung mit C-Control



diogenes2
07.07.2006, 09:46
Seid längerer Zeit versuche ich eine IR Steuerung mit C-Control zustande zu bekommen. Die Software aus Hardwareerweiterung für c-control bzw von Kainka funktioniert alleine ohne Probleme doch sobald ich zusätzliche Variablen definiere kommt sie "aus den Tritt"
Hat jemand eine Lösung dafür???
Hier das Assamblerprogramm mit dem ich leider nichts anfangen kann:
; -----------------------------------------------------------------------------
; RC5-Maschinenprogamm ir_test.asm
; nach einer Vorlage von Olaf Kaluza
; fuer C-Control (Motorola 6805) von Burkhard Kainka
; -----------------------------------------------------------------------------
; modifiziert von Manfred Look 09/2002
; Variablennamen angepasst
; IR-Empfaenger TSOP1736 am C-Control Port16 (7,PC)
; Warteschleife: wenn 120ms kein IR Signal dann zurueck zum Basicprogramm
; -----------------------------------------------------------------------------
PC .equ $02 ;C-Control PortC (Byteport2)
error .equ $0A1 ;IR Lesefehler
shift .equ $0A2 ;0 oder 1 - wechselt mit IR Tastendruck
dev_adr .equ $0A3 ;IR Geraeteadresse
push .equ $0A4 ;IR welche Taste?
z1 .equ $0A5 ;Hilfsvariable1
z2 .equ $0A6 ;Hilfsvariable2
;
.org $101 ;Startadresse
;
Clr shift ;Variable loeschen
Clr dev_adr ;Variable loeschen
Clr push ;Variable loeschen
lda #255 ;lade Akku mit 255
sta z1 ;speicher Akku in z1 (RAM)
lda #40 ;lade Akku mit 40
sta z2 ;speicher Akku in z2 (RAM)
rc5 dec z1 ;Wert in z1 um 1 verkleinern
lda z1 ;lade Akku mit Wert in z1
cmp #0 ;Vergleiche Akku mit der Zahl 0
bls _loop ;gehe nach Label _loop wenn Akku =< 0
brset 7,PC,rc5 ;Warten auf Startbit
jsr w444 ;warten
brset 7,PC,rc5 ;Stoerimpuls
jsr w444 ;Naechsten Biphasenpegel
jsr w444
brclr 7,PC,rc5 ;Stoerimpuls
jsr w444
jsr w444
brset 7,PC,rc5 ;Stoerimpuls
jsr w444 ;Ok weiter
jsr w444 ;Kontrollbit einlesen
jsr getbit ;Kontrollbit hier im Carry
rol shift
ldx #5 ;5 Adressbits
rcadr jsr w444
jsr w444
jsr getbit
rol dev_adr ;Bit merken
dex
bne rcadr
ldx #6 ;6 Datenbits
rcdat jsr w444
jsr w444
jsr getbit
rol push ;merken
dex
bne rcdat
_ende rts ;Zurueck zum Hauptprogramm
;
_loop dec z2 ;Wert in z2 um 1 verkleinern
lda z2 ;lade Akku mit Wert in z2
cmp #0 ;Vergleiche Akku mit der Zahl 0
bls _ende ;gehe nach Label _ende wenn Akku =< 0
lda #255 ;lade Akku mit 255
sta z1 ;speicher Akku in z1 (RAM)
jmp rc5 ;gehe nach Label rc5
; -----------------------------------------------------------------------------
; Einlesen eines Bits, Rueckgabe in Carry
; -----------------------------------------------------------------------------
getbit lda #255 ;Timeout festlegen
sta error
brset 7,PC,gethi ;Wird es ein Lowbit?
gbl1 brset 7,PC,gbl2 ;Auf Biphasensprung syncronisieren
dec error
bne gbl1
bra biterr ;Timeout
gbl2 jsr w444
brclr 7,PC,biterr ;Fehler
clc ;Lowbit
rts
gethi brclr 7,PC,gethi2 ;auf Phasensprung syncronisieren
dec error
bne gethi
bra biterr ;Timeout
gethi2 jsr w444
brset 7,PC,biterr ;Fehler?
sec ;Highbit
rts
biterr Clr shift ;Fehler, alles loeschen
clr dev_adr
clr push
clr error
rts
; -----------------------------------------------------------------------------
; Warteroutine fuer 1/4 eines Biphasenbits = 444us = 444T bei 2Mhz
; -----------------------------------------------------------------------------
w444 lda #147 ; 3 A=147
loop deca ; 3 A -1
bne loop ; 3 6*0,5µs = 3µs/Schleife
rts
.end
; ---------------------------------------------------------------------