Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Win 2000 ошибка? ??? 
:(
    Опции темы
Mephisto
  Дата 23.2.2004, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Код
mov  dx,37Ah
mov  al,00001101b
out  dx,al

Почему в вин 2000 и ХР при запуске данного кода выбивает ошибку, хотя в других ничего нет?
PM   Вверх
Serzh
Дата 23.2.2004, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 30.9.2003
Где: SPb

Репутация: нет
Всего: нет



дык не разрешает нт порты вроде...
а с лпт мона и по другому работать.
PM MAIL WWW ICQ   Вверх
VAV
Дата 24.2.2004, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.10.2002
Где: Мурманская обл. г . Мончегорск

Репутация: нет
Всего: нет



А как усётаки в NT,2000,XP с портами работать?
PM MAIL   Вверх
Mephisto
Дата 25.2.2004, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата
дык не разрешает нт порты вроде...
а с лпт мона и по другому работать.

А как всё таки?
PM   Вверх
Mephisto
Дата 5.4.2004, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Люди, ну очень нуна. Может кто знает?
PM   Вверх
oleg1973
Дата 5.4.2004, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 7
Всего: 34



делаеш createfile с именем lpt
и все, работаеш как с файлом, пишеш тудыть и читаеш оттудыть smile.gif


--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Mephisto
Дата 20.4.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



У меня устройство работает с лпт. Мне необхоимо тудыть биты передавать. В вынь 98 нет проблем а в 2000 фанарь. sad.gif
PM   Вверх
Mephisto
Дата 26.4.2004, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата
делаеш createfile с именем lpt

Есть такое дело.
Но, когда создаю такой файл, но нет никакого драйвера принтера, то функция возвращает ошибку. А если принтер установлен, то пишет что принтер не отвечает!
А ваще каким образом мона управлять регистрами?
Я пользуюсь функцией WriteFile для синхронной передачи.
Функцией DeviceIOControl не могу. Какой-то из парамеров не знаю как установить. По-моему второй. Сейчас просто нет при себе исходников.
PM   Вверх
Jin X
Дата 26.4.2004, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 5.3.2004

Репутация: 1
Всего: 1



Имелся в виду файл с именем "lpt1", "lpt2" и т.д, какой именно нужен.
Вот ещё глянь: http://www.skvozilka.com.ru/Delphi/Doc/hardware.htm

Это сообщение отредактировал(а) Jin X - 26.4.2004, 21:33
--------------------
Бойся своей мечты, ибо она осуществима!
PM MAIL   Вверх
Kagor
  Дата 26.4.2004, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Debian user
****


Профиль
Группа: Экс. модератор
Сообщений: 2946
Регистрация: 28.2.2003
Где: Королевство Кривых

Репутация: нет
Всего: 85



Ошибся, почему-то подумал, что это форум по C/C++. smile.gif
Добавлено @ 23:17
А вообще может, кому ни будь пригодиться пример по работе с COM портами на C++(должно и в 2k и в Xp работать).
Код
#if defined (WIN32)
# include <windows.h>
# include <mmsystem.h>

static HANDLE hCom;
static char *CommPort[] = {"COM1","COM2"};

#else // UNIX
# include <sys/types.h>
# include <sys/stat.h>
# include <sys/time.h>
# include <sys/select.h>
# include <stdlib.h>
# include <string.h>
# include <fcntl.h>
# include <errno.h>
# include <unistd.h>
# include <termios.h>

static int hCom = -1;
static char *CommPort[] = {"/dev/cua/a","/dev/cua/b"};
static termios tio_save;
static int g_readTimeout;

static int baudRateFlag (int bps)
{
   int s = bps;
   int baud_speed = 0;
     if (s <= (bps = 50))  baud_speed = B50;
else if (s <= (bps = 75))  baud_speed = B75;
else if (s <= (bps = 110))  baud_speed = B110;
else if (s <= (bps = 134))  baud_speed = B134;
else if (s <= (bps = 150))  baud_speed = B150;
else if (s <= (bps = 200))  baud_speed = B200;
else if (s <= (bps = 300))  baud_speed = B300;
else if (s <= (bps = 600))  baud_speed = B600;
else if (s <= (bps = 1200))  baud_speed = B1200;
else if (s <= (bps = 1800))  baud_speed = B1800;
else if (s <= (bps = 2400))  baud_speed = B2400;
else if (s <= (bps = 4800))  baud_speed = B4800;
else if (s <= (bps = 9600))  baud_speed = B9600;
else if (s <= (bps = 19200))  baud_speed = B19200;
else if (s <= (bps = 38400))  baud_speed = B38400;
else if (s <= (bps = 57600))  baud_speed = B57600;
else if (s <= (bps = 115200))  baud_speed = B115200;
else if (s <= (bps = 230400))  baud_speed = B230400;
else     baud_speed = B115200;
   return baud_speed;
}

#endif // UNIX

int Init_485(int Port,int TimeOut)
{
#if defined (WIN32)
   DCB dcb;

   BOOL fSuccess;

   if (Port < 0) Port = 0;
   if (Port > 1) Port = 1;
   hCom = CreateFile(CommPort[Port],
           GENERIC_READ | GENERIC_WRITE,
           0,    
           NULL,
           OPEN_EXISTING, // comm devices must use OPEN_EXISTING
           0,    // not overlapped I/O
           NULL  // hTemplate must be NULL for comm devices
           );

   if (hCom == INVALID_HANDLE_VALUE)
       return 1;


   fSuccess = GetCommState(hCom, &dcb);
   if (!fSuccess)
       return 1;

   memset (&dcb, 0, sizeof (DCB));
   dcb.BaudRate = CBR_38400;     // set the baud rate
   dcb.fBinary = TRUE;
   dcb.ByteSize = 8;             // data size, xmit, and rcv
   dcb.Parity = NOPARITY;        // no parity bit
   dcb.StopBits = ONESTOPBIT;    // one stop bit
   dcb.fDtrControl = DTR_CONTROL_DISABLE;
   dcb.fRtsControl = RTS_CONTROL_DISABLE;

   fSuccess = SetCommState(hCom, &dcb);

   if (!fSuccess)
       return 1;

   if (TimeOut)
   {
       COMMTIMEOUTS CommTimeouts;
       CommTimeouts.ReadIntervalTimeout            = TimeOut;
       CommTimeouts.ReadTotalTimeoutMultiplier     = 0;
       CommTimeouts.ReadTotalTimeoutConstant       = TimeOut;
       CommTimeouts.WriteTotalTimeoutMultiplier    = 0;
       CommTimeouts.WriteTotalTimeoutConstant      = 0;
       fSuccess = SetCommTimeouts(hCom,&CommTimeouts);

       if (!fSuccess)
           return 1;
   }
#else // UNIX

   if (Port < 0) Port = 0;
   if (Port > 1) Port = 1;

   termios tio;
   memset (&tio, 0, sizeof (termios));
   
   tio.c_iflag = IGNBRK;
   tio.c_cflag =
       CS8 |           // 8 bit
       // CSTOPB |     // 2 stop bits
       // PARENB |     // enable parity
       // PARODD |     // odd parity
       CLOCAL |        // dont use CD & DCD signals
       CREAD |         // enable receive
       0;
   cfsetospeed (&tio, baudRateFlag (38400));
   cfsetispeed (&tio, baudRateFlag (38400));
   tio.c_cc [VMIN] = 1;    // minimum packet size == 1 byte

   hCom = ::open (CommPort[Port], O_RDWR | O_NOCTTY | O_NONBLOCK, 0);
   int
   status = hCom != -1;
   status = (status ? tcflush   (hCom, TCIOFLUSH) : -1)      != -1;
   status = (status ? tcgetattr (hCom, &tio_save) : -1)     != -1;
   status = (status ? tcsetattr (hCom, TCSANOW, &tio) : -1) != -1;

   g_readTimeout = TimeOut;

   if (! status) return 1;

#endif // UNIX

   return 0;
}

int Close_485(void)
{
#if defined (WIN32)
   CloseHandle(hCom);
#else
   if (hCom != -1) {
     int
     result  = tcflush   (hCom, TCIOFLUSH) == -1;
     result += tcsetattr (hCom, TCSANOW, &tio_save) == -1;
     result += ::close   (hCom) == -1;
     hCom = -1;
     return result ? 1 : 0;
   }
#endif
   return 0;
}

int Wait_485_Readable (int millisec)
{
#if defined (WIN32)
   return 0;
#else
   fd_set readfds;
   FD_ZERO (&readfds);
   FD_SET  (hCom, &readfds);
   timeval tm;
   tm.tv_sec  =  millisec / 1000;
   tm.tv_usec = (millisec % 1000) * 1000;
   int result =
   select (hCom + 1, &readfds, 0, 0, &tm);
   if (result == -1 && errno != EINTR && errno != EAGAIN)
       return -1;  // Error
   if (result == 0)
       return 1;   // Timeout
   return 0;       // Ok
#endif
}

int Read_485(unsigned char &Data)
{
#if defined (WIN32)
   DWORD dwBytesTransferred = 0;
   if (!ReadFile (hCom, &Data, 1, &dwBytesTransferred, 0))
       return 1;
   if (dwBytesTransferred != 1)
       return 2;
   return 0;
#else
   if (hCom == -1)
       return 1;
       
   Wait_485_Readable (g_readTimeout);

   ssize_t n = ::read (hCom, &Data, 1);
   if (n == -1 && errno != EAGAIN)
       return 1;
   if (n == 1)
       return 0;
   return 2;
#endif
}

int Write_485(unsigned char &Data)
{
#if defined (WIN32)
   DWORD dwNumBytesWritten = 0;
   if (!WriteFile(hCom,              // Port handle
       &Data,              // Pointer to the data to write
       1,                  // Number of bytes to write
       &dwNumBytesWritten, // Pointer to the number of bytes written
       NULL))              // Must be NULL for Windows CE
       return 1;
   if (dwNumBytesWritten != 1)
       return 2;
#else
   if (hCom == -1)
       return 1;

   ssize_t n = ::write (hCom, &Data, 1);
   int
   status = (n != -1);
   status = (n == 1 ? tcdrain (hCom) : -1) != -1;
   usleep (20000);
   return status ? ((n == 1) ? 0 : 2) : 1;
#endif
   return 0;
}

#if __TEST

#include <stdio.h>

int main (int argc, char * argv [])
{
   int port = 0;
   int timeout = 2000;
   if (argc > 1)
port = strtol (argv[1], 0, 0);
   if (argc > 2)
timeout = strtol (argv[2], 0, 0) * 1000;

   printf ("COM%d timeout %d sec\n", port, timeout / 1000);

   if (Init_485 (port, timeout)) {
       printf ("Cannot open device: %s\n", strerror (errno));
       return -1;
   }

   setvbuf (stdout, 0, _IONBF, 0);

   if (argc > 3)
   {
       int err = 0;
       printf ("Send: [");
       for (int i = 3; i < argc; i++)
       {
           unsigned char out_buf = strtol (argv [i], 0, 0);
           int x = out_buf;
           printf (" 0x%X", x);
           int res = Write_485 (out_buf);
           printf ((res == 0) ? "+" :
                   (res == 1) ? "x" :
                   (res == 2) ? "-" : "?");
           err += res;
       }

       printf ("] %s\n", err ? "Error" : "Ok");
   }
   
   printf ("Recv: [");
   unsigned char in_buf;
   int res;
   while ((res = Read_485 (in_buf)) == 0)
   {
       int x = in_buf;
       printf (" 0x%X", x);
   }
   
   printf ("] %s\n", (res == 1) ? "Error" : "");
   printf ("End.\n");

   return 0;
}

#endif
smile.gif

Это сообщение отредактировал(а) Kagor - 26.4.2004, 23:19


--------------------
Disassemble Your life and get the key!
PM ICQ GTalk Jabber   Вверх
Mephisto
  Дата 27.4.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата
А вообще может, кому ни будь пригодиться пример по работе с COM портами на C++(должно и в 2k и в Xp работать).

Это хорошо, но как таким образом работать с ЛПТ. С таким синаксисом я выдаю в порт 1 байт, но этот гад выдает этот байт на драйвер, и ставит в очередь на печать. Естественно принтер не отвечает. Позже вылазит ошибка. mad.gif
Функция OUT запрещена, прерывание int 17h также ссылается на драйвер, о результате можете сами догадатся!
НО...:
Код
data segment byte public 'DATA'
String DB 'Test string$'
data ends
code segment byte public 'CODE'
assume cs:code, ds:data, es:data
start:
mov ax, data
mov ds, ax

mov dx, 378h
mov al, 00000000b
out dx, al

mov dx, offset String
mov ah, 9
int 21h

mov ax, 4c00h
int 21h

code ends
end start

Вот этот код на тасме не выдает ошибки, к моему удивлению, но нифига не делает! Что тоже меня удивляет. Может растолкует мне кто почему?
PM   Вверх
Kagor
Дата 28.4.2004, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Debian user
****


Профиль
Группа: Экс. модератор
Сообщений: 2946
Регистрация: 28.2.2003
Где: Королевство Кривых

Репутация: нет
Всего: 85



Mephisto
В NT(2k, Xp 2k+3) драйвер уровня ядра может напрямую работать с портами, т.е. без дополнительных извратов, так может тебе написать драйвер и работать через него?


--------------------
Disassemble Your life and get the key!
PM ICQ GTalk Jabber   Вверх
Chingachguk
Дата 28.4.2004, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Цитата

if (s <= (bps = 50))  baud_speed = B50;
else if (s <= (bps = 75))  baud_speed = B75;
else if (s <= (bps = 110))  baud_speed = B110;
else if (s <= (bps = 134))  baud_speed = B134;
else if (s <= (bps = 150))  baud_speed = B150;
else if (s <= (bps = 200))  baud_speed = B200;
else if (s <= (bps = 300))  baud_speed = B300;
...


Интересно, таблицы подстановок запрещено использовать ?...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
Kagor
  Дата 28.4.2004, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Debian user
****


Профиль
Группа: Экс. модератор
Сообщений: 2946
Регистрация: 28.2.2003
Где: Королевство Кривых

Репутация: нет
Всего: 85



Chingachguk
Цитата
Интересно, таблицы подстановок запрещено использовать ?...
Эта часть кода под Unix и я её не разу не использовал hehe.gif Да и вообще этот код написал не я. Я только из него выдрал, что мне надо(под Win) и все... smile.gif baaa.gif

Это сообщение отредактировал(а) Kagor - 28.4.2004, 22:39


--------------------
Disassemble Your life and get the key!
PM ICQ GTalk Jabber   Вверх
DHK
Дата 29.4.2004, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 19.1.2004

Репутация: нет
Всего: нет



Примерчик на паскале. Обмен с COM портом. По аналогии сделай с LPT. Работает в 2000, 98, ХР ...



uses Crt;
Type TBinary = String[8];
Var
RSt:Byte;
Ch : Char;
BinStat, BinDat : TBinary;
f:text;

Function BBinary(B:Byte):TBinary;
Var
Bit,I : Byte;
TempS : TBinary;
Begin
TempS:='';
TempS[0]:=Chr(8);
Bit:=1;
For I:=0 To 7 Do TempS[8-i]:=Chr(Ord('0')+((Bit shl i) And B) shr i);
BBinary:=TempS;
End;

Procedure Init_Com2;
var
DIni : Byte;
begin
DIni:= 127; { DLAB set}
Port[$3FB] := DIni ;
DIni:= $00;
Port[$3F9] := DIni ; { High byte divider }
DIni:= 12;
Port[$3F8] := DIni ; { Low byte divider }
DIni:= $00;
Port[$3FB] := DIni; { DLAB clear}
DIni:= $02; { 0000 0010}
Port[$3FB] := DIni;
DIni := $00;
Port[$3F9] := DIni;
DIni :=$0B; {00011011}
Port[$3FC]:=DIni;
End;

Procedure Eror;
Begin
end;

Procedure ReadData;
Begin
Ch:= Chr(Port[$3F8]);
Write(Ch);
end;

Procedure WriteData;
Begin
Ch := ReadKey;
Port[$278] := Ord(Ch);
end;

Begin
clrscr;
Init_Com2;
assign(f,'text.txt');
reset(f);
RSt:= Port[$3FD];
while not eof(f) do
Begin
read(f,Ch);
Port[$3F8]:=Ord(Ch);
BinStat:=Bbinary(Port[$3FD]);
delay(10);
if BinStat[5] = '0' then ReadData;
End;
Close(f);
Ch:=readkey;
End.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1047 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.