Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle
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
erklär erstmal dein problem genauer, was iss das fürn ph-messer, was iss das fürn contrller, und sone sachen
Martin
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 ...
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
Hallo!
Die Antworten reichen mir schon. 
Danke euch allen.
Gruß
Holger
 
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.