Port LPT

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

Jakie są biblioteki do obsługi portu LPT?

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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]

Kopiuj
  mov dx,word[$port]
  in al,dx ; odczyt bajtu
  mov byte[$bajt],al
MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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.

cepa
  • Rejestracja:ponad 22 lata
  • Ostatnio:2 dni
0

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)...

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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

Kopiuj
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

Kopiuj
#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]

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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?

vixen03
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 13 lat
  • Postów:475
0

poszukaj bibliotki inpout


MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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ś:

Kopiuj
#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.

Kopiuj
--------------------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... ;(

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

wycinek z example userport

Kopiuj
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;
}
MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

wycinek z example userport

Kopiuj
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 :)

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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]

vixen03
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 13 lat
  • Postów:475
0

uzyj tablicy ascii, kazdy char z niej ma swoj numer (od 0000 0000 do 1111 1111), a kazdy char do jednobajtowy int.


MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

A jak np. z byte:
00000001 zrobić byte 00100001 :-/

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

byte += 32
albo
byte |= 32
albo
byte += (byte<<5)
albo
byte=33 :D

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

już jednego uczyłem o systemie binarnym. Zerknij na te wypociny

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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ą... [???]

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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.

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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"

MI
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 12 lat
0

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"

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. :)

QP
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 14 lat
0

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

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

Nie da rady bezpośrednio, musisz odczytać, zmodyfikować i zapisać cały bajt.

QP
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 14 lat
0

jedno pytanie co tu jest nie tak

Kopiuj
#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'

dzejo
  • Rejestracja:ponad 18 lat
  • Ostatnio:prawie 12 lat
  • Postów:787
0

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


QP
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 14 lat
0

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

Kopiuj
#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'

SA
  • Rejestracja:prawie 21 lat
  • Ostatnio:ponad 9 lat
  • Postów:513
0

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.

QP
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 14 lat
0

a mogę prosić przykład programu zlinkowanym msvcrt.a

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)