Jakie są biblioteki do obsługi portu LPT?
- 1
- 2
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
jeśli to XP: poszukaj sobie UserPort albo odrazu ściągnij
skopiuj UserPort.sys do C:\WINDOWS\system32\drivers\ i odpal UserPort.exe z dowolnego katalogu. Teraz masz dostęp do portów
dostęp? najprościej w asmie
[NASM]
mov dx,word[$port]
in al,dx ; odczyt bajtu
mov byte[$bajt],al
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
http://www.easy-soft.tsnet.pl/artykuly/lptecp/lptecp.html
kilka moich zbiorów http://free.of.pl/s/sapero/lptpdf.zip
CQ CQ DX!
Mam prośbę o podanie mi wartości stałej IOCTL_CHANGER_GET_PARAMETERS
potrzebuję jej do funkcji DeviceIoControl żeby obadać zakres portów dla poszczególnych portów LPT
wiem że
IOCTL_CHANGER_GET_PARAMETERS = CTL_CODE(IOCTL_CHANGER_BASE, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS)
wprawdzie mam zasób includów z C i C++, ale trapi mnie
#define CTL_CODE(t,f,m,a) (((t)<<16)|((a)<<14)|((f)<<2)|(m))
nie wiem jak to ugryźć, wiem że X<<1 to shift w lewo jeden raz
z tego co mi wyszło, to IOCTL_CHANGER_GET_PARAMETERS = 0x304000
a funkcja mi wywala error "0x57 parametr jest nieprawidłowy"
is this correct? Copy [green]
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
nie ma kursow programowania tego portu bo poco, poszukaj sobie w necie opis, przy porcie lpt masz trzy rejestry, rejestr bazowy dostepny dla lpt1 na 0x378 (chyba) - wystarczy wrzucic bajt i masz zapalone odpowiednie z 8 pinow tego portu (D0-D7)...
Nom o to chodziło to też wiem ale jak to wygląda na "papierze"?
Szukam w google ale pod jakiem zapytaniem najlepiej szukać?
Szukam tak:
C++ +LPT
C++ +port LPT
programowanie +LPT
bibliteki LPT
Jak jeszcze można?
Znalazłem coś:
http://knf.univ.gda.pl/~lothar/wyklad1/wyklad.htm
jest tam kod ale pod Borlanda a jak to zrobić pod Visuala?
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
No poszukałem:
W kategorii polski na googlach nic nie znalazł(trudno żęby znalazł :-| )
W kategorii z całego świata troche więcej koło 2000...
Znalazłem ciekawą stronke http://www.logix4u.net/
No poczytałem troche na tyle ile umiem angielski(mam 16lat)
I skleiłem takie coś:
#include < conio.h >
#include < stdio.h >
#define ABP 0x378
void main(void)
{
int wart;
wart=inb(ABP);
printf("\n %d \n",wart);
}
W trakcie kompilacji wyskakuje błąd.
--------------------Configuration: LPT - Win32 Debug--------------------
Compiling...
LPT.cpp
c:\program files\microsoft visual studio\myprojects\lpt\lpt.cpp(13) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.
LPT.exe - 1 error(s), 0 warning(s)
Może ktoś napisze mi albo naprowadzi przykładowy mały programik, który wysyła info do któregoś pinów D0-D7... ;(
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
wycinek z example userport
void outportb(UINT portid, BYTE value)
{
__asm mov edx,portid
__asm mov al,value
__asm out dx,al
}
BYTE inportb(UINT portid)
{
unsigned char value;
__asm mov edx,portid
__asm in al,dx
__asm mov value,al
return value;
}
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
wycinek z example userport
void outportb(UINT portid, BYTE value)
{
__asm mov edx,portid
__asm mov al,value
__asm out dx,al
}
BYTE inportb(UINT portid)
{
unsigned char value;
__asm mov edx,portid
__asm in al,dx
__asm mov value,al
return value;
}
Wiem zauważyłem to wczoraj i dziś zamierzam coś napisać.
Dzięki za to :)
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
Znalazałem w książce od C :)
Bit Wartość binarna Stała szesnastkowa
7 10000000 0x80
6 01000000 0x40
5 00100000 0x20
4 00010000 0x10
3 00001000 0x08
2 00000100 0x04
1 00000010 0x02
0 00000001 0x01
:)
hmmmm...a może ktoś wie do jakiej bibliteki należy funkcja Sleep(1)
Bo teraz będę się bawić z czasem, ale nie pamiętam jakich bibliotek do tego użyć [wstyd] W końcu diody muszą migać :d
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
eh, nie okazuj publicznie takiej wiedzy ;)
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/sleep.asp na dole strony dla każdej funcji pisze co trzeba includować, tutaj windows.h
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
to jest najprostsze: dzielisz liczbę na czterobitowe części: 110100110 -> 1101 i 0110
wszystkie części zmieniasz sobie na dec (13 i 6)
13 to jest w hexie cyfra D, a 6 to nadal 6, więc masz 0xD6
A rzeczywiście łatwe :)
Tylko nie wiem jak np. bedzie 14 albo 16,17, bo 13 to jest D to wiem.
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
kto zapisze liczbę 16 w czterech bitach, temu stawiam CAŁE tiramisu.
Cyfry szesnastkowe to 0123456789ABCDEF; F to największa cyfra =15 po naszemu, albo 1111bin
jeśli liczba binarna ma np. 9 bitów, to ten pierwszy od lewej już należy do osobnej cyfry szesnastkowej: 000x xxxx xxxx
hmm, a jak by to skonwertować do hexa?
liczba & 15 -> numer mniej-znaczącej (LSB) cyfry HEX
(liczba & 240)/16 -> numer bardziej-znaczącej (MSB) cyfry HEX
tera 'trza' każdy numer cyfry przerobić na cyfrę HEX
<ascii>cyfra=48 + numer_cyfry
if cyfra>57 then cyfra+=7
a zatem dodajesz 48 do numeru cyfry i jeśli wyszedł znak ascii ponad "9" dodajesz 7, aby cyfra 10 była znakiem ascii "A"
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 12 lat
kto zapisze liczbę 16 w czterech bitach, temu stawiam CAŁE tiramisu.
Cyfry szesnastkowe to 0123456789ABCDEF; F to największa cyfra =15 po naszemu, albo 1111bin
jeśli liczba binarna ma np. 9 bitów, to ten pierwszy od lewej już należy do osobnej cyfry szesnastkowej: 000x xxxx xxxxhmm, a jak by to skonwertować do hexa?
liczba & 15 -> numer mniej-znaczącej (LSB) cyfry HEX
(liczba & 240)/16 -> numer bardziej-znaczącej (MSB) cyfry HEXtera 'trza' każdy numer cyfry przerobić na cyfrę HEX
<ascii>cyfra=48 + numer_cyfry
if cyfra>57 then cyfra+=7
a zatem dodajesz 48 do numeru cyfry i jeśli wyszedł znak ascii ponad "9" dodajesz 7, aby cyfra 10 była znakiem ascii "A"
Dzięki to bardzo bardzo mi pomogło i przy okazji nauczyłem się troche o binarach.
Teraz wiem jak przesyłać bity przez port. :)
- Rejestracja:ponad 15 lat
- Ostatnio:ponad 14 lat
jedno pytanie co tu jest nie tak
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include<math.h>
using namespace std;
void outportb(UINT portid, BYTE value)
{
__asm ("mov edx,portid");
__asm ("mov al,value");
__asm ("out dx,al");
}
int main()
{
}
Używam Dev-C++
Wyskakuje mi coś takiego:
Assembler messages:
too many memory references for `mov'
too many memory references for `mov'
too many memory references for `out'

- Rejestracja:ponad 18 lat
- Ostatnio:prawie 12 lat
- Postów:787
To nie zadziała , bez sterowników w ten sposób możesz się odwoływać do portów
w systemie win98 i wcześniejszych chyba że przetestujesz coś takiego - nie sprawdzałem osobiście:
http://www.elektroda.pl/rtvforum/topic515123.html
- Rejestracja:ponad 15 lat
- Ostatnio:ponad 14 lat
wgrany jest userport i chodziło to kiedyś tylko zgubiłem tamten plik i piszę od nowa ale nie pamiętam już jak to do końca leciało.... może coś z tym poradzicie
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include<math.h>
using namespace std;
void outportb(UINT portid, BYTE value)
{
__asm (".intel_syntax\n" );
__asm ("mov edx,portid");
__asm ("mov al,value");
__asm ("out dx,al");
__asm (".att_syntax\n");
}
int main()
{
}
I wyskakuje coś takiego:
[Linker error] undefined reference to
portid' [Linker error] undefined reference to
value'
- Rejestracja:prawie 21 lat
- Ostatnio:ponad 9 lat
- Postów:513
Zamiast portid napisz [ebp+8], a zamiast value - [ebp+12].
Jeżeli zlinkujesz sobie msvcrt.a to tam masz gotowe funkcje _inp(port) i _outp(port,data). Sześć prototypów jest w conio.h z visuala.
A co do dostępu do portów - w XP jest to możliwe bez extra sterowników, sam ntdll to oferuje.
- 1
- 2