
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
> > 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 |