HARDStalker 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба Прошу помощи разобратся. Тут привожу функцию RS232(x) со скана книжки! а значит и ошибок много, написанная на Турбо Паскале для Windows. RS232(0) возвращает количество установленных COM-портов, RS232(1)-базовый адрес COM1, RS232(2) - базовый адрес COM2 и т.п. (*-библиотека ресурсов №A6 (определение базовых адресов COM-портов).-*) (Universal auto detection of COM base address) Function RS232(x:integer).integer; export; (* $0000:$0400 содержит базовый адрес порта COM1, $0000:$0402 содержит базовый адрес порта COM2, $0000:$0404 содержит базовый адрес порта COM3, $0000:$0406 содержит базовый адрес порта COM4, $0000:$0406 содержит количество COM портов в двоичном формате.* ) var Number_of_COM, COM1, COM2, COM3, COM4:integer; begin numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*) numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1; COM1:=0; COM2:=0; COM3:=0; COM4:=0; COM1:=memw($40:$00); (*Процедура чтения из памяти*) COM2:=memw($40:$02); COM3:=memw($40:$04); COM4:=memw($40:$06); Case x of 0: RS232:= numer_of_COM; 1: RS232:= COM1; 2: RS232:= COM2; 3: RS232:= COM3; 4: RS232:= COM4; end; end; Хочу этот код использовать в Делфи в проекте "управление двигателем" чтоб сначала проверить количество COMпортов на компе и их базовые адреса. Потом задам вопросы по инициализации COM порта. Вопросы: 1. как переделать синтаксис чтобы этот код их Турбо паскаля заработал в Делфи 2. то что (*текст*) - коментарии? я прав? 3. обьясните мне этот участок кода: numer_of_COM:=mem($40:$11); (*Считывает количество COM- портов*) numer_of_COM:=(numer_of_COM and (8+4+2)) shr 1; COM1:=0; COM2:=0; COM3:=0; COM4:=0; COM1:=memw($40:$00); (*Процедура чтения из памяти*) COM2:=memw($40:$02); COM3:=memw($40:$04); COM4:=memw($40:$06); а именно: 3.1 что мы присваиваем переменной numer_of_COM в первой строчке? (имею в виду функцию mem($40:$11)) 3.2 что мы добиваемся второй строчкой? а именно: numer_of_COM and (8+4+2)) shr 1 почему не: numer_of_COM and 14) shr 1 3.3 COM1:=memw($40:$00); - функция memw($40:$00) из чего читает и что она делает а теперь догадки : есть прелположение что функции memw и mem читают из ОЗУ . в инете встречал формулировку: "Mem - это массив памяти. Т.е. с помощью указания номера элемента вы получаете доступ к определенной ячейке. существует 3 вида массива Mem: * сам Mem - каждый компонент такого массива типа byte. * MemW - каждый компонент типа word. * MemL - каждый компонент типа longint." Надеюсь на вашу помощь . хотябы часть обьясните. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба Хочу... Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenom0rph 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN. Под делфи есть компоненты для работы с ком портом, а так Win API использовать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARDStalker 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN. значит данные берутся с Биоса? уже хорошо. Забыть я этот бред не могу - у меня такое д.з. правда изучаем мы паскаль... с Win API не знаком значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба у меня такое д.з.Давайте дословно и полностью, ежели хотите чтобы вам подсказали с чего начать и куда двигаться. А пока - не понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARDStalker 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 (изменено) · Жалоба Дословно? давайте. дз звучит так : научится передавать байты байты по RS232 по книжечке автора Пей Ана (Сопряжение ПК с внешними устройствами). написать программу которая будет проверять сколько портов на компе, их адреса , их инициализация и пересылка байтов. Вот такое задание. для передачи данных использовать "3х проводной" интерфейс. кстати насчет программы - я её немножко переработал , нашел ошибки в синтаксисе и урезал коментарии для наглядности кода: Function RS232(x:integer):integer; export; var number_of_COM, COM1, COM2, COM3, COM4:integer; begin number_of_COM:=mem($40:$11); number_of_COM:=(number_of_COM and (8+4+2)) shr 1; COM1:=0; COM2:=0; COM3:=0; COM4:=0; COM1:=memw($40:$00); COM2:=memw($40:$02); COM3:=memw($40:$04); COM4:=memw($40:$06); Case x of 0: 0: RS232:= number_of_COM; 1: RS232:= COM1; 2: RS232:= COM2; 3: RS232:= COM3; 4: RS232:= COM4; end; end; Изменено 14 ноября, 2008 пользователем Капитан Хард Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vvs157 0 14 ноября, 2008 Опубликовано 14 ноября, 2008 · Жалоба с Win API не знаком Придется изучить то, что относится к COM. Или использовать библиотеки. Методы работы взятые из ДОС под Виндами неприменимы. Про BIOS касательно последовательного порта под Win забудьте. значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?Взять например http://sourceforge.net/projects/tpapro/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARDStalker 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба Методы работы взятые из ДОС под Виндами неприменимы. а что имел в виду автор в книге говоря что прога под винду? Придется изучить то, что относится к COM. Или использовать библиотеки. с чего начать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба а что имел в виду автор в книге говоря что прога под винду? Винда разная бывала. Windows 3.11 к примеру. Обращение к портам напрямую из виндов не такая тривиальная задача. http://www.zealsoftstudio.com/ntport/ Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shuks 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба компонент для работы с COM-портом: http://www.tmssoftware.com/site/async32.asp Для всех версий делфи и c++ билдера. Бесплатен. С документацией. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба Обращение к портам напрямую из виндов не такая тривиальная задача. Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба а что имел в виду автор в книге говоря что прога под винду?Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено. Уточните задание у преподавателя. С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DpInRock 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба Турбо Паскаля для NT я не встречал. И если нужно работать именно с ним, то без ntport не обйтись. И вообще, эта дллка очень полезная в хозяйстве вещь. Вот вдруг ни с того, ни с сего понадобилось бы ногой ЛПТ порта подрыгать по-быстрому? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено. ntvdm достаточно хорошо виртуализует доступ к последовательным портам. Так что всё должно работать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARDStalker 0 15 ноября, 2008 Опубликовано 15 ноября, 2008 · Жалоба http://www.zealsoftstudio.com/ntport/ Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться. в английском не рублю компонент для работы с COM-портом спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту? Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания. пользуюсь XP и NT меня не волнует ... как и другие операционки. Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено. картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец :twak: С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API. что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит. Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для : 1. проверки адресов порта 2. инициальзации порта (установки скоростей , выводов и т.п.) 3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел) как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться