الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال متعلق بمنفذ الطابعة :

مغلق
بدأه m-anas في 10 أبريل 2005 · 6 رد · 1,419 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سؤال آخر :

سؤال متعلق بمنفذ الطابعة :

كيف يمكنني أن أتحكم ببن معين دون أن أغير حالة البنات الأخرى

أي أن أفعل البن الأول والثالث والرابع مثلا ثم أوقف البن الأول فقط

دون أن أغير عمل البنات الأخرى ... أرجوا الرد بفائق السرعة

وهل أن عنوان منفذ الطابعة في الأجهزة المحموله يختلف عن عنوانها في الكمبيوترات المنزلية

جزاكم الله كل خير

أخوكم أنس

بسم الله الرحمن الرحيم

الحمد لله الذي هدانا لهذا وما كنا لنهتدي لولا أن هدانا الله

صدق الله العظيم

#2

هذه الشفرة تقوم بما تريدة تماما ..

لم أعد أذكر إذا كانت شفرة مثالية , لكن المؤكد انها تقوم بما تريد .. إنطلق منها :

 procedure tform1.lptout( pin:pintype;value:valuetype);
 var a:byte;
 pin1,pin2,pin3,pin4,pin5,pin6,pin7,pin8:valuetype;
 begin
 { pin = 1 ... 8   ;  value = 1,0 }
 a:=0;
 asm
    mov al,saveal
    mov a,al
  end;



 if a mod 2=0 then   //integer to binary ////
 pin1:=0 else
 pin1:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin2:=0 else
 pin2:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin3:=0 else
 pin3:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin4:=0 else
 pin4:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin5:=0 else
 pin5:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin6:=0 else
 pin6:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin7:=0 else
 pin7:=1;
 a:=a div 2;

 if a mod 2=0 then
 pin8:=0 else
 pin8:=1;

  /////////////

   case pin of              // modify binary number with the pin value //
 1:begin
     if value=0 then
     pin1:=0  else
     pin1:=1;
      end;
 2: begin
     if value=0 then
     pin2:=0  else
     pin2:=1;
      end;
 3: begin
     if value=0 then
     pin3:=0  else
     pin3:=1;
      end;
 4:  begin
     if value=0 then
     pin4:=0  else
     pin4:=1;
      end;
 5:  begin
     if value=0 then
     pin5:=0  else
     pin5:=1;
      end;
 6: begin
     if value=0 then
     pin6:=0  else
     pin6:=1;
      end;
 7:begin
     if value=0 then
     pin7:=0  else
     pin7:=1;
      end;
  8: begin
     if value=0 then
     pin8:=0  else
     pin8:=1;
      end;
      end;

                       // binary to integer //
 a:= pin1+(pin2*2)+(pin3*4)+(pin4*8)+(pin5*16)+(pin6*32)+(pin7*64)+(pin8*128);

 asm              // out data "a" to the port 378h //

 mov al,a
 mov saveal,al  //saved al in "saveal"

 mov dx,378h
  out dx,al

 end;

 end;

الإستدعاء بسيط جدا ورائع :

 lptout(1,1)

سيخرج القيمة 1 منطقي على البن رقم 1 .. وهكذا مثال :

if CheckBox5.Checked then
 lptout(5,1)
 else
 lptout(5,0);
#3

الأمر بسيط باستعمال الأقنعة..

إذا أردت مثلا وضع بيت bit واحد دون تغيير باقي البتات على قيمة 5vol يعني تغيير قيمته من x إلى 1 فعليك أن تقوم ب:

data:= data or bitmask;

و العكس إذا ما أردت أن تضع بيت bit واحد دون تغيير باقي البتات على قيمة 0 فولت يعني تغيير قيمته إلى 0 فعليك أن تقوم ب:

data:= data and bitmask;

مع أن قيمة القناع BitMask تأخذ القيم التالية تبعا لموضع البت الذي تريد تغييره:

   { mask set a bit  to  1 with a OR }
 sbit0= $01;
 sbit1= $02;
 sbit2= $04;
 sbit3= $08;
 sbit4= $10;
 sbit5= $20;
 sbit6= $40;
 sbit7= $80;
   {mask reset a bit  to 0  with a AND }
 rbit0= $fe;
 rbit1= $fd;
 rbit2= $fb;
 rbit3= $f7;
 rbit4= $ef;
 rbit5= $df;
 rbit6= $bf;
 rbit7= $7f;

يمكنك تعريف دالتين أو إجرائيتين مثلا ك :

procedure Bitset (var data: byte; bitmask: byte);
begin
     data:= data or bitmask;
end;

{remise a zerro d'un bit dans un octet}
procedure Bitreset (var data: byte; bitmask: byte);
begin
     data:= data and bitmask;
end;

في المرفقات مثال جيد لفعل هذا في مشروع, :lol: :

bitmask.rar

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#4
m-anas كتب:
سؤال آخر :

سؤال متعلق بمنفذ الطابعة :

كيف يمكنني أن أتحكم ببن معين دون أن أغير حالة البنات الأخرى

أي أن أفعل البن الأول والثالث والرابع مثلا ثم أوقف البن الأول فقط

دون أن أغير عمل البنات الأخرى ... أرجوا الرد بفائق السرعة

بالنسبة للإجرائيتين التي ذكرتهما أعلاه يمكنك تغيير أكثر من بت في آن واحد.

مثال:

const
   { mask set a bit  to  1 with a OR }
sbit0= $01;
sbit1= $02;
sbit2= $04;
sbit3= $08;
sbit4= $10;
sbit5= $20;
sbit6= $40;
sbit7= $80;
  {mask reset a bit  to 0  with a AND }
rbit0= $fe;
rbit1= $fd;
rbit2= $fb;
rbit3= $f7;
rbit4= $ef;
rbit5= $df;
rbit6= $bf;
rbit7= $7f;

//call procedures:
//**********************************************************************
//for seting bits b0,b3 and b6 to 1 without altering other bits
Bitset (data, sbit0 + sbit3 + sbit6);
//or
Bitset (data, sbit0 OR sbit3 OR sbit6);

//**********************************************************************
//for Reseting bits b1,b2 and b4 to 0 without altering other bits
BitReset (data; (rbit1 AND rbit2 AND rbit4) )

m-anas كتب:
سؤال آخر :

وهل أن عنوان منفذ الطابعة في الأجهزة المحموله يختلف عن عنوانها في الكمبيوترات المنزلية

جزاكم الله كل خير

أخوكم أنس

عندي إجرائية لمعرفة عناوين كل المخارج المتوفرة على الحاسب سواء كان حاسبا منزليا أو حاسوب محمول فلا فرق على الإطلاق.

هذه الأجرائية تعتمد على قرائة خانات في الذاكرة Ram حيث أن عند بدا التشغيل للحاسب POST, يقوم bios بعمل جرد لكل المخارج والموارد المادية للحاسب ويخزن عناوينها و بعض الباراميترات في مواضع مضبوطة من الذاكرة.

بالنسبة للمخارج LPT:

0x408= 0040:0008  For  LPT1 Base address
0x40A= 0040:000A  For  LPT2 Base address
0x40C= 0040:000C  For  LPT3 Base address

هذه الإجرائية لا تعمل إلا في Windows 9x ولن تعمل في WinNt أو Win2K أو WinXP:

//for PortN0 = 1 to 3
function GetPortAddress(PortNo: integer): word; assembler; stdcall;
 asm
  push es
  push ebx
  mov ebx, PortNo
  shl ebx,1
  mov ax,40h // Dos segment adress
  mov es,ax
  mov ax,ES:[ebx+6] // get port adress in 16Bit way :)
  pop ebx
  pop es
 end;

B)

تم تعديل هذه المشاركة بواسطة ikossan في 10 أبريل 2005 في 23:51

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

عندما يحضر أيكوسان بخطة الأزرق المميز , وألوانة الوردية ,, تصبح كل المشاركات الأخرى باهته امام مشاركاته ..

والأكثر من ذلك , رد علمي مفصل يشفي غليل السائل ....

اييية ..... ويقولون ليسو أساتذة ..؟؟ ؟؟؟

#6

حتى انت يا عم عروة لاحظت الشئ هذا؟؟

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#7

:o :o :o :o :o :o

تصدقون ياشباب مشاركات الأخ ايكسون تسبب احباط للمبتدئين مثلي

آه ؟؟؟؟؟؟؟؟؟؟؟؟ متى نصل الى المستوى هذا ؟ ممكن بعد 5 سنوات يمكن ؟ :s

الله يبارك لك في علمك وصحتك ويزيدك

20_09_05_04_45_39_1127216739saudi_aC_.gif

هذا الموضوع مغلق.

مواضيع مشابهة