PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle



suggle
23.01.2006, 18:50
HILFE!!

Ich habe ein Problem, ich habe einen pH-Meter, der an meiner Schnittstelle des Mikrocontrollers (80C535) angeschlossen ist.
Nun meine Frage:
ich weiß das man beim Programmieren, die Ports 3^0,3^1 zu verfügung hat. Mein ph-Meter misst sowohl die Temperatur als auch den pH-Wert, heißt dass jetzt auch, dass auf z.B. 3^0 das Signal für den pH-Wert und auf 3^1 das Signal für die Temperatur kommt??

Ich hoffe mir kann jemand helfen.

Holger

x-ryder
23.01.2006, 22:16
erklär erstmal dein problem genauer, was iss das fürn ph-messer, was iss das fürn contrller, und sone sachen

Martin

ruediw
24.01.2006, 01:29
Jede RS232 benutzt 3 Leitungen:

Gnd
RxD ==> Daten empfangen
TxD ==> Daten senden

Ist hier sicher auch so.
Je nachdem gibt es verschiedene Möglichkeiten:
1. Instrument sendet abwechselnd pH-Wert und Temperatur
2. Du musst zuerst einen Befehl an das Instrument senden, damit es "weiss" welchen Wert Du auslesen willst. Als Reaktion auf deinen Befehl sendet es nun den entsprechenden Parameter.

Was ist das für ein Gerät ? Type ? Hersteller ?
Poste mal ein paar Einzelheiten, sonnst kannst Du nicht erwarten das wir Dir helfen können. Wenn wir Hellseher wären würden wir jetzt in der Sonne liegen ...

nando
24.01.2006, 14:10
ich hab vor ein paar monaten ein thermometer Programmiert welches die Temperatur mittels eines NTC Widerstandes misst und die Daten im Terminal asgiebt. allerdings habe ich einen etwas neueren Prozessor 80C537. ich geb dir gleich mal noch meinen Quel code. viel spass hoffentlich hilft es dir was. am besten Kopierst du den Code mal in den Editor um ihn besser anschauen zu können. wenn du kein Assembler programm hast schachu mal auf www.vistasoft.ch vorbei dort gibts das gratis:


HEAD
;************************************************* *******
; NAME = Temperatursensor
; PROZ = 4 80C537 CPU5 12 MHz
; AUTOR = Steiner Nando
; DATUM = 28.11.2005
; UPDATE = 28.11.2005
; VERSION = 1.0
; LANGUAGE = Explain 1.8.4.0
;************************************************* *******
; FUNKTION:
; eine Schaltung mit einem NTC-Widerstand stellt den
; Temperatursensor dar, die Signal werden durch einen
; AD-Wandler gewandlet.
;************************************************* *******
HEAD\

Wert EQU R0 ;R0 als Kanal definieren
Enter EQU 0Dh


Start: mov Wert,#00h ;bei Wert auf 0 starten

abstand: mov A,#Enter ;auf neue Zeile schreiben
lcall Com1WriteByte ;rufe ausgabe Unterprogramm auf

main: mov A,Wert ;Wert des Spannungsteilers in A laden
lcall AD_Wandler ;AD Wandler Unterprogramm aufrufen
push A ;A retten
call Umwandler ;rufe Dez to Hex Wandler Unterprogramm auf
call Com1WriteByte ;rufe ausgabe Unterprogramm auf
pop A ;A zurückgeben
swap A
call Umwandler ;rufe Dez to Hex Wandler Unterprogramm auf
call Com1WriteByte ;rufe ausgabe Unterprogramm auf

lcall wait ;rufe ersetzten Unterprogramm auf
ljmp abstand ;Sprung zum anfang



;************************************************* ******
;*Warten
;************************************************* ******
;* Funktion :kleine Zeit verzögerung
;************************************************* ******

wait: push R5
push R6
push R7
mov R5,#01h
wait_1: mov R6,#0FFh
wait_2: mov R7,#0FFh
djnz R7,$
djnz R6,wait_2
djnz R5,wait_1
pop R7
pop R6
pop R5
ret



;************************************************* ******
;*Dezimal zu Hax Wandler
;************************************************* ******
;* Funktion :Wandeld die Dezimalwert in Hex um
;* INPUT :In A ist der Aktuelle Wert Dezimal
;* OUTPUT :Der Wert in A ist nun in Hex
;************************************************* ******

Umwandler: mov B,#10h ;Teiler mit 16 laden
div AB ;A durch B, ergebniss überschreibt A
anl A,#00001111b ;Das Obere Nibble ausmaskieren
mov DPTR,#HexCode ;DataPointer auf den Code String setzen
movc A,@A+DPTR ;DataPointer um Wert von A erhöhen

ret ;zurück

HexCode: DB '0123456789ABCDEF',0 ;Code String



;************************************************* ******
;*AD Wandler
;************************************************* ******
;* Funktion :Der Wert des gewählten Kanales des AD
;* Wandlers wird in A geschrieben, und dann
;* zurück geschickt
;* INPUT :Definierter Kanal
;* OUTPUT :Wert des Kanals
;************************************************* ******

AD_Wandler: setb CLK ;CLX auf 1 setzen
clr ADEX ;ADEX auf 0 setzten
setb BSY ;BSY auf 1 setzten
setb ADM ;ADM auf 1 setzten
anl ADCON,#11111000b ;ADCON maskieren
orl ADCON,A ;ADCON mit A maskieren
mov DAPR,#0D2h ;Referenz zwischen 0.62V und 4.06V setzen
jb BSY,$ ;warten bis BSY 0 ist
mov A,ADDAT ;Werte in A schreiben

ret ;zurück



;************************************************* ******
;* Com1WriteByte
;************************************************* ******
;* Funktion : Gibt ein einzelnes Byte ueber die
;* serielle Schnittstelle aus.
;* INPUT : A auszugebendes Zeichen
;* OUTPUT : -
;************************************************* ******
Com1WriteByte: push B ; Reg. B retten
Com1WriteByte1: mov B,S1CON ; S1CON in B zwischenspeichern
mov C,B.1 ; Bit 1 ins Carry schreiben
jnc Com1WriteByte1 ; Falls Carry = 0 warte weiter.
anl S1CON,#11111101B ; SendeFlag loeschen (TI1)
mov S1BUF,A ; Zeichen in SendeBuffer laden
pop B ; Restore Reg. B
ret ; Return

suggle
24.01.2006, 14:34
Hallo!

Die Antworten reichen mir schon.

Danke euch allen.

Gruß
Holger