Jakie są biblioteki do obsługi portu LPT?
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
A gdzie moge znaleś jakąś dokumentacje jak sterować portami (jakie są funkcje), bo chciałbym napisać program który strował by diodami LED po podłączeniu ich do portu LPT.
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)...
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]
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?
poszukaj bibliotki inpout
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... ;(
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;
}
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 :)
HAHAHA!!!NAPISAŁEM!!!! :D :D :D :) :) :)
Tylko jak moge wysyłać binarki np.
10000000
albo
01000000
I jak np. litera a wygląda w systemie binarnym?
// nie no, to już lekka przesada [mf]
uzyj tablicy ascii, kazdy char z niej ma swoj numer (od 0000 0000 do 1111 1111), a kazdy char do jednobajtowy int.
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
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
A jak np. z byte:
00000001 zrobić byte 00100001 :-/
byte += 32
albo
byte |= 32
albo
byte += (byte<<5)
albo
byte=33 :D
byte += 32
albo
byte |= 32
albo
byte += (byte<<5)
albo
byte=33 :D
BUHAHAHAHA!!! :D :D :D
Ale możesz mi wytłumaczyć o co w tym chodzi? :P
już jednego uczyłem o systemie binarnym. Zerknij na te wypociny
Liczebe binarną na dziesiętną umiem zamieniać, ale jak zmienić binarną na szesnastkową? Jaki jest wzór, albo jak można w C zmieniać liczbę binarną w szesnastkową... [???]
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
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.
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"
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. :)
Witam...
Mam pewien problem jak tu czytam ten temat to miem jak zasterować port LPT całym bajtem, a ja mam pytanie jak zasterować port bit po bicie czyli jak wysłać jeden bit na port
Nie da rady bezpośrednio, musisz odczytać, zmodyfikować i zapisać cały bajt.
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'
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
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'
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.
a mogę prosić przykład programu zlinkowanym msvcrt.a