vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Jetzt der Code 
Autor: Alex007
Datum: 20.11.04 17:33

Hier nun der Code


Pascal Programm:
Code:

PROGRAM SERAI6tp; { einlesen Kanal 0 }
uses crt, dos;
VAR EDIT1, HW : Real;
Const BA = $02F8; {COM2}
procedure Init;
var i, Dummy :Byte;
begin
Port[BA+3]:=128;
Port[BA+0]:=12; { 12: 9600 Baud, 6 :19200 Baud }
Port[BA+1]:=0;
Port[BA+3]:=3; { 3: 8-Bit, n-Parity, 1 Stopbit, 7: dito 2 Stopbits }
Port[BA+1]:=0; { keine Interrupts }
Port[BA+4]:=0; { DTR = 0, RTS = 0}
for i:= 1 to 3 do
Dummy:=Port[BA]; { UART leeren }
end;

procedure DTR (An : Word);
begin
If An = 1 then Port[BA+4] := (Port[BA+4] OR 1) else
Port[BA+4] := (Port[BA+4] AND 254);
end;


procedure RTS (An : Word);
begin
If An = 1 then Port[BA+4] := (Port[BA+4] OR 2) else
Port[BA+4] := (Port[BA+4] AND 253);
end;
procedure TxD (An : Word);
begin
If An = 1 then Port[BA+3] := (Port[BA+3] OR 64) else
Port[BA+3] := (Port[BA+3] AND 191);
end;
function CTS : Word;

begin
CTS := ((Port[BA+6] AND 16) DIV 16);
end;

function DSR : Word;
begin
DSR := ((Port[BA+6] AND 32) DIV 32);
end;

function Messung(Kanal : Integer) : Integer;
Var BitOut, BitIn, DataOut, DataIn, t : Word;


Begin
DataOut := Kanal * 16; { Adresse auf Bits 4...7 }
DataIn := 0;
DTR (0);
For BitOut := 1 to 10 DO { 10 Bits schieben }
Begin
RTS ((DataOut AND 128) DIV 128); { DIN }
DataIn := DataIn * 2;
DTR (1); { CLK }
DataIn := DataIn + CTS; { DOUT seriell, sammeln }
DTR (0); { CLK }
DataOut := DataOut * 2; { Shift }
end;

Messung := DataIn;
{ While DSR = 0 DO;} { End of Conversion abwarten }
end;

BEGIN
clrscr;
Init;
RTS (0);
DTR (0)
TxD (1); { 5 Volt Referenzspannung EIN }
HW := Messung(0);


REPEAT
EDIT1 := (Messung (0) - 512) / 512 * 5000;
gotoxy(5,4);
write('Kanal 0 : ',Messung (0), ' ',EDIT1:5:0,' mV ');
delay (100);
UNTIL KeyPressed;
TxD(0); { 5 Volt Referenzspannung AUS }
END.



Meine dilletantische Übersetzung:

C/C++:

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <dos.h>

#define PORT 0x3F8 /* COM1 */

int c=0,i,dummy;
double HW, EDIT1;


/* Defines Serial Ports Base Address
COM1 0x3F8
COM2 0x2F8
COM3 0x3E8
COM4 0x2E8
*/


void DTR(int An)
{
int dummy;
if (An=='1')
{
dummy=(inport(PORT+4)|1);
outport(PORT + 4, dummy);
cout << "DTR ein\n";::c=0;
}

else
{
dummy=(inport(PORT+4)|1);
outport(PORT + 4 , dummy);
}
}

void RTS (int An)
{
if (An=='1') {outport(PORT + 4, 0x02); cout << "RTS ein\n";::c=0;}
else outport(PORT + 4 , 0x00);
}

void TxD (int An)
{
if (An=='1') {outport(PORT + 3, 64); cout << "TxD ein\n";::c=0;}
else outport(PORT + 3 , 0x00);
}

double CTS ()
{
double temp;
temp=(inport(PORT + 6)+16)/16;
return temp;
}

double DSR ()
{
double temp;
temp=(inport(PORT + 6)+32)/32;
return temp;
}

double Messung(int Kanal)
{
int BitOut, BitIn, DataOut, DataIn, t;
DataOut = Kanal*16; //Adresse auf die Bits 4...7
DataIn = 0;
DTR(0);
for (BitOut=1;BitOut < 10;BitOut++)
{
RTS((DataOut+128)/128);
DataIn=DataIn*2;
DTR(1);
DataIn=DataIn+CTS();
DTR(0);
DataOut=DataOut*2;
}
while (DSR()==0) {/* Ende der Konversation abwarten */
};
return (DataIn);
}

int main()
{
clrscr();
int checkBuffer;
int c;
outport(PORT + 1 , 0); /* Turn off interrupts */

/* PORT - Communication Settings */

outport(PORT + 3 , 0x80); /* SET DLAB ON */

outport(PORT + 0 , 0x0C); /* Set Baud rate - Divisor Latch Low Byte */

/* Default 0x03 = 38,400 BPS */

/* 0x01 = 115,200 BPS */

/* 0x02 = 56,700 BPS */

/* 0x06 = 19,200 BPS */

/* 0x0C = 9,600 BPS */

/* 0x18 = 4,800 BPS */

/* 0x30 = 2,400 BPS */

outport(PORT + 1 , 0x00); /* Set Baud rate - Divisor Latch High Byte */

outport(PORT + 3 , 0x03); /* 8 Bits, No Parity, 1 Stop Bit */

outport(PORT + 2 , 0xC7); /* Configure FIFO Control Register */

outport(PORT + 4 , 0x00); /* Turn off DTR, RTS (, and OUT2) */

printf("\nEinlesen der Werte des SERAI610. Zum Beenden ESC druecken. \n");

RTS(0);
DTR(0);
TxD(1); //5 Volt Referenzspannung ein
::HW=Messung(0);

do
{
if (kbhit()) {::c = getch();}
EDIT1=(Messung(0)-512/512*5000);
gotoxy(5,4);
cout << "Kanal 0: " << Messung(0) << " " << EDIT1 << " mV ";
delay (10);
}
while (::c !=27); //Beenden wenn ESC (ASCII 27) gedruect wird
TxD(0); //5 Volt Referenzspannung aus
return 0;
}
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Pascal übersetzen632Alex00720.11.04 17:32
Jetzt der Code498Alex00720.11.04 17:33
Re: Jetzt der Code406Anthrax20.11.04 17:47

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel