Avatar billede jclarsen Nybegynder
06. maj 2003 - 09:14 Der er 13 kommentarer og
3 løsninger

AT checke for en værdi

Hej.

Jeg arbejder med kommunikation på parallelporten under windows.

Mit problem er som følger

Jeg skal finde ud af, om en bestemt bit er høj/lav på min status port
Avatar billede borrisholt Novice
06. maj 2003 - 09:19 #1
Kik i dokumentationen for CreateFile
Avatar billede jclarsen Nybegynder
06. maj 2003 - 09:22 #2
jeg skal ikke oprette en fil. Jeg skal kontrollere om en Bit-streng inderholder et bestemt bit
Avatar billede jclarsen Nybegynder
06. maj 2003 - 09:22 #3
UPs.... det skulle havde været en kommentar
Avatar billede borrisholt Novice
06. maj 2003 - 09:24 #4
Jeg ved det ... DVS du k<n allerede læse fra parelel porten ?
Avatar billede jclarsen Nybegynder
06. maj 2003 - 09:25 #5
yes
Avatar billede borrisholt Novice
06. maj 2003 - 09:38 #6
Så du har det liggende i en Integer, og så vil du vide om en bestemt bit er sat ?
Avatar billede borrisholt Novice
06. maj 2003 - 09:40 #7
type
  TBit = 1..32;
Function Contains(const Value : Integer; Bit : TBit) : Boolean;
begin
  Result := (Value and (1 shl Bit)) <> 0;
end;
Avatar billede jclarsen Nybegynder
06. maj 2003 - 09:43 #8
nej jeg henter der ind i en Byte
Avatar billede borrisholt Novice
06. maj 2003 - 09:44 #9
Detalje !
Avatar billede borrisholt Novice
06. maj 2003 - 09:53 #10
type
  TBit = 1..8;
Function Contains(const Value :  Byte; Bit : TBit) : Boolean;
begin
  Result := (Value and (1 shl Bit)) <> 0;
end;
Avatar billede borrisholt Novice
06. maj 2003 - 10:07 #11
hov FEJL !!!!!


type
  TBit = 0..7;
Function Contains(const Value :  Byte; Bit : TBit) : Boolean;
begin
  Result := (Value and (1 shl Bit)) <> 0;
end;

Function BinToStr(const Value : Byte) : String;
var
  i : Integer;
begin
  Result := '';
  for i := 7 downto 0 do
    if (Value and (1 shl i)) <> 0 then
      result := result + '1'
    else
      result := result + '0';
end;
Avatar billede borrisholt Novice
06. maj 2003 - 10:11 #12
Prøv det her :

type
  TBit = 0..7;
Function Contains(const Value :  Byte; Bit : TBit) : Boolean;
begin
  Result := (Value and (1 shl Bit)) <> 0;
end;


Function BinToStr(const Value : Byte) : String;
var
  i : Integer;
begin
  Result := '';
  for i := 7 downto 0 do
    if (Value and (1 shl i)) <> 0 then
      result := result + '1'
    else
      result := result + '0';
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if Contains(2, Button1.Tag) then
    Caption := BinToStr(2);
  Button1.Tag := Button1.Tag +1;
end;
Avatar billede dkn Nybegynder
06. maj 2003 - 12:28 #13
Jeg plejer godt nok bare at lave de bits om til string og så checke string[1] = '1' then ....

Jeg kan sende det kode jeg bruger når keg kommer hjem, hvis ikke du har fået det til at virke
Avatar billede hreiff Nybegynder
06. maj 2003 - 14:38 #14
Når du ved hvilken bit du vil kigge på er det let nok:

din byte læst fra porten:  x
Check for f.eks. bit 4 (00001000) binært = 8 decimalt

if (x and 8) <> 0 then
  showmessage('bit 4 er sat')
else
  showmessage('bit 4 er ikke sat');
Avatar billede dkn Nybegynder
07. maj 2003 - 13:14 #15
var
  Fbit1, Fbit2, Fbit3, Fbit4, Fbit5, Fbit6, Fbit7, Fbit8: boolean;


procedure TForm1.Button1Click(Sender: TObject);
var
  DataRead: Byte;
  Data: string;
begin
  DataRead := PortIn($370); // Din function til læsning af bytes fra port
  Data := copy(inttobin(DataRead), length(inttobin(DataRead)) - 7, length(inttobin(DataRead)));

  if Data[1] = '1' then
    FBit8 := true else FBit8 := false;
  if Data[2] = '1' then
    FBit7 := true else FBit7 := false;
  if Data[3] = '1' then
    FBit6 := true else FBit6 := false;
  if Data[4] = '1' then
    FBit5 := true else FBit5 := false;
  if Data[5] = '1' then
    FBit4 := true else FBit4 := false;
  if Data[6] = '1' then
    FBit3 := true else FBit3 := false;
  if Data[7] = '1' then
    FBit2 := true else FBit2 := false;
  if Data[8] = '1' then
    FBit1 := true else FBit1 := false;
end;
Avatar billede borrisholt Novice
18. maj 2003 - 13:41 #16
Juhuuuuuuu !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester