Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: 2w-bus modem Kategorie: Hardware (von alandro - 17.05.2006 0:05)
 Als Antwort auf Re: 2w-bus modem von alandro - 16.05.2006 23:55
alandro nutzt:  CC1-Unit V1.1
> > Hey, Jo,
> >
> > Problem: Habe mein altes 2W-Bus-Modem mit I2C-Schnittstelle
> > über den Jordan gejagt!
> >
> > Bei Conrad gibt es nur noch das Modem-SM mit serieller
> > Schnittstelle RS232.(Hutschienenmodell)
> > Frage: Da ja an der CControl Basic-Unit eine 2. serielle
> > Schnittstelle vorhanden ist, die bisher bei mir immer
> > brach lag (angeschlossen an Ports PA 6 und 7 und schon verdrahtet mit dem Schnittstellenwandler MAX232) möchte ich
> > diese mittels eines Treibers für dieses Modem aktivieren.
> > Die 1. Schnittstelle bleibt dann auch wunderbar frei für
> > den Terminalanschluss und ich habe noch 2 Ports dazugewonnen.(PB 6 und 7 - kann man immer gebrauchen.)
> > Hat jemand dafür eine Lösung parat, wie man das Modem
> > über diesen Anschluss kommunizieren lassen kann?
> > Für Hilfe wäre ich sehr dankbar.
>
> Man muß noch ein neues Datenkabel zusammenbauen, wo
> die Kabel für RTS und CTS herausgeführt sind.Die schließt
> man dann an die das 2W-Bus Modem-SM an.
> Pin7 nach Modem RX
> Pin8 nach Modem TX
> Jetzt ist es möglich mit dem Modem und C-Contol Station
> zu kommunizieren und gleichzeitig ein Terminalprogramm
> am PC zu benutzen.
> ;--------------------------------------------------------------------------
> ;Treiberprogramm zum Ansteuern des 2W-Bus Modems-SM mit serieller Schnittstel-
> ;le an der C-Control Basic, Ports A7(RTS) u. A8(CTS).Es wird jeweils ein Da-
> ;tenramen von 8 Bytes bertragen, beim Senden MSB zuerst.
>
> ;Vorbereitung zum Senden      
>           brset $06,$00,spr11;jump if Pin7,PortA high
> loop1:    brset $07,$00,loop1
> loop0:    brclr $07,$00,loop0
>           bset $06,$00     ;Pin 7 von PortA high setzen (RTS)
> ;-----------------------------------------------
> ;         Senderoutine
> spr11:    ldx #$00
> spr4:     lda $a1,x       ;Anfang Buffer (sog. RS232 Schnittstelle) $a1-$a8, wie beim 2W-Bus Modem mit I2C
> Schnittstelle
>           incx            ;        
>           stx $dc         ;Register zwischenspeichern (RAM-Speicherstelle)
>           sec             ;markiert des Ende der Bytes (set carry)      $111
> spr1:     bclr $06,$00    ;Pin 7 von Port A low setzen (Startbit senden)
> spr2:     ldx #$20        ;Verzgerung
> spr3:     decx
>           bne spr3
>           rora            ; rotate right thru carry, LSB zuerst
>           bcc spr1        ; branch if carry clear
>           clc           ; alle Bits die im Datenbyte gestzt sind werden $120
>                           ; gelscht,so da?am Ende im accu 0 steht
>           bset $06,$00    ; eine 1 senden (keine Beeinflussung der Flags)
>           bne spr2        ; alle 8 Bits bertragen?,dann Aussprung
>           bset $06,$00    ; Stopbit setzen
>           ldx #$20        ; Verzgerung
> spr5:     decx
>           bne spr5
>           ldx $dc
>           cpx #$08        ; alle 8 Byts durch?
>           bne spr4
> ;-----------------------------------------------
> ;         Empfangsroutine
> ;         bclr $07,$04       ; Pin 8 PortA auf Eingang schalten (CTS)
>                              ; (nicht ntig, alle Ports sind bei Initialisie-
>                              ; rung auf Eingang geschaltet
>           ldx #$a1           ; Startadresse Buffer nach (x)
> spr6:     brset $07,$00,spr6 ; Pin 8 PortA low, warten auf Startbit
>           lda #$31           ;Verzgerung, 2 cycles                     $132
> spr7:     deca               ; 1 cycle
>           bne spr7           ; 2        3*32+2=98
>           lda #$80           ;im accu jetzt Byte: b10000000
>           sta,x              ;das gesetzte Bit1 wird jeweils 8 mal nach
> spr10:    brclr $07,$00,spr8 ;rechts geschoben und wird dann zum carry,
> spr8:     lda #$22           ;was den Aussprung aus der Schleife bewirkt.
> spr9:     deca               ;Verzgerung
>           bne spr9
>           ror,x              ;carry bit speichern, LSB zuerst           $142
>           bcc spr10           ;weiter bis alle 8 Bits empfangen
> ;spr11:    brclr $07,$00,spr11;warte solange PortA,Pin 8 low ist
>           incx               ;ist das letztes Byte empfangen?
>           cmpx #$a9
>           bne spr6           ;
>           cli
>           rts

Ach, beim Überprüfen ist etwas im Maschinencode verloren
gegangen, ganz am Anfang des Programms muß noch stehen:
         org$101            
         sei                 ; Set interruptmask
Das ganze muß natürlich assembliert und in ein Basicprogramm eingebunden werden.

 Antwort schreiben

Bisherige Antworten: