![]() |
| | #1 (permalink) | ||
| Citire date de pe portul paralel
Vreau sa citesc biti de pe portul paralel dar nu mai stiu cum se seteaza pinul 5 al portului de control, pt. citire de date... Stiam ca era ceva de genul _outp(0x37a, M) , unde M adresa bitului... am incercat M=0x04 si se pare ca nu merge. Si altceva, cum fac sa afisez valoarea hex a octetului citit de pe port? Adica sa vad ceva gen FF pt. toti pinii pusi la masa 00 pt. nici unul la masa etc.
__________________ Semnatura | |||
|
| | #2 (permalink) | ||
|
Poate asta te ajută
__________________ Toate cele bune! E8400↕Ninja B+↕DFI LP DK P35-T2RS↕2x2GB + 2x1GB Mushkin XP2-6400↕Zotac GTX260AMP2↕RAID0 2xSeagate ES.2 500GB + 7200.10 320GB CM HAF 932↕Enermax Modu82+ 525W↕Philips 170C↕Asus Xonar D2X↕Klipsch Promedia GMX A-2.1 FOLDING@HOME | |||
|
| | #4 (permalink) | ||
|
Buun, informaţia era ceva mai pitită. Aici e un program de test pt. bidirecţionalitatea LPT. De acolo am luat info de mai jos şi anume din programul scris în Pascal. În mod uzual Printer Control bits este adresa 0x37A. Bitul 5 se va seta HIGH la valoarea 0x20 sau 100000(binar) Pentru a citi de pe portul de date outp(0x378, M). Aici e un program în C pt. inspiraţie. {---------------------------------------------------------------} { Program : Checking LPT Printer Parallel Port } { Create : David Setya Atmaja (DSA) } { Date : 30 Maret 1998 } { Reference : Cek LPT Port - Buku 'Mikrocontroler MC-68705-U3'} { Penerbit : Dinastindo } { Pengarang : Busono } { Last modified : 1 Agustus 1999 } {===============================================================} { LPT_1 LPT_2 LPT_3 Operasi Keterangan } { $3BC $378 $278 (R)W 8 bit Data Port (DP)} { $3BD $379 $279 R 6 bit Status (PS) } { $3BE $37A $27A R/W 6/4 bit Control (PC)} {===============================================================} { DP = Data Port : } { (Pin 2) DP_0 = Data bit 0 } { (3) DP_1 = Data bit 1 } { (4) DP_2 = Data bit 2 } { (5) DP_3 = Data bit 3 } { (6) DP_4 = Data bit 4 } { (7) DP_5 = Data bit 5 } { (8) DP_6 = Data bit 6 } { (9) DP_7 = Data bit 7 } {---------------------------------------------------------------} { PC = Printer Control bits : } { (Pin 1) PC_0 = Strobe (Inverting) } { (14) PC_1 = AutoFeed (Inverting) } { (16) PC_2 = Init } { (17) PC_3 = Select In (Inverting) } { PC_4 = IRQ_7 Enable (tidak dikeluarkan ke terminal DB-25) } { PC_5 = Direction (tidak dikeluarkan ke terminal DB-25) } { PC_6-PC_7 = Spare (Not used) } {---------------------------------------------------------------} { PS = Printer Status bits : } { PS_0 - PS_1 = Spare (Not used) } { PS_2 = IRQ_7 (Internal use) } { (15) PS_3 = Error } { (13) PS_4 = Select } { (12) PS_5 = Paper End } { (10) PS_6 = Acknowledge } { (11) PS_7 = Busy (Inverting) } {---------------------------------------------------------------} { (18..25) Ground } {===============================================================}
__________________ Toate cele bune! E8400↕Ninja B+↕DFI LP DK P35-T2RS↕2x2GB + 2x1GB Mushkin XP2-6400↕Zotac GTX260AMP2↕RAID0 2xSeagate ES.2 500GB + 7200.10 320GB CM HAF 932↕Enermax Modu82+ 525W↕Philips 170C↕Asus Xonar D2X↕Klipsch Promedia GMX A-2.1 FOLDING@HOME | |||
|
| | #5 (permalink) | ||
| Quote:
Am gasit cum se facea afisarea: unsigned char value; value = _inp(0x378); Sleep(20); printf("Value returned = 0x%02X \n",value); Dar inca nu nimeresc care e bitul pt. schimbarea directiei
__________________ Semnatura Last edited by SINEKT; 09-04-2006 at 14:16.. | |||
|
| | #6 (permalink) | ||
|
Nu pricep de ce nu merge. portul de control are adresa 37A, bitul care trebuie setat ca sa activezi directia de intrare e 5, adica 0x20 si totusi nu merge. Iata si codul: #include <iostream.h> #include <stdafx.h> #include <conio.h> #include <stdio.h> #include <Windows.h> void main (void) { unsigned char value; _outp(0x37a,0x20); while (1<2) { value = _inp(0x378); printf("Value returned = 0x%02X \n",value); Sleep(200); } };
__________________ Semnatura | |||
|
| | #7 (permalink) | ||
|
Păi ce SO ai? În WinXp nu ai acces direct la portul paralel spre exemplu. În win98 ai. Tu sigur ai un port paralel bidirecţional? Pentru a verifica că ai acces la portul LPT înearcă mai întâi să scrii pe portul de date ceva. Apoi te pui pe setat biţi de control & so on.
__________________ Toate cele bune! E8400↕Ninja B+↕DFI LP DK P35-T2RS↕2x2GB + 2x1GB Mushkin XP2-6400↕Zotac GTX260AMP2↕RAID0 2xSeagate ES.2 500GB + 7200.10 320GB CM HAF 932↕Enermax Modu82+ 525W↕Philips 170C↕Asus Xonar D2X↕Klipsch Promedia GMX A-2.1 FOLDING@HOME | |||
|
| | #8 (permalink) | ||
|
Chestia cu XP e prima treaba pe care am rezolvat-o cu un dll in system32. Si merge sa scriu, am scris numere pe un afisor led... dar vad ca nu pot sa-l fac sa citeasca. Presupun ca trebuie sa pun pinul de date la masa ca sa ii schimb starea, nu?
__________________ Semnatura | |||
|
| | #9 (permalink) | ||
|
Mda, fii curajos De preferat să nu fie portul LPT al pc-ului de bază.LPT eu am folosit pt. generare semnal, nu pt. citire. AA, sper că vei pune unul din pinii de date la masă după ce vei seta bitul 5 de control.
__________________ Toate cele bune! E8400↕Ninja B+↕DFI LP DK P35-T2RS↕2x2GB + 2x1GB Mushkin XP2-6400↕Zotac GTX260AMP2↕RAID0 2xSeagate ES.2 500GB + 7200.10 320GB CM HAF 932↕Enermax Modu82+ 525W↕Philips 170C↕Asus Xonar D2X↕Klipsch Promedia GMX A-2.1 FOLDING@HOME | |||
|
| | #10 (permalink) | ||
|
Mda, totusi se pare ca se incapataneaza sa nu mearga. Am incercat chiar in loc de punere la masa sa pun tensiune (intre masa si pin de date). Nu vrea si pace. Si inca un lucru. Am luat de pe oDC niste utilitare de "urmarit" portul, adica iti arata la ce pini ai 0 si la care 1. Dupa ce setez bitul 5 din portul de control, softurile respective indica ca acesta ramane totusi la 0. Si am folosit mai multe programele, nu e numai unul singur, toate arata 0 la bitul respectiv...
__________________ Semnatura | |||
|
| | #12 (permalink) | ||
|
Da, asta era !! Mersi mult RAN, uitasem complet de setarea din BIOS... ![]() aaaa... inca o problema Pt. secventa urmatoare de cod, ce pun in loc de EXPRESIE ca sa reprezinte valoarea FD, de exemplu Am incercat deja 'FD' si nu merge...value = _inp(0x378); printf("Value returned = 0x%02X \n",value); Sleep(100); if ( value == <EXPRESIE> ) { system("C:\\alarm.wav"); };
__________________ Semnatura Last edited by SINEKT; 10-04-2006 at 21:36.. | |||
|
![]() |
|
| Thread Tools | |
| |