Перейти к содержанию
    

Помогите разобратся с RS-232

Прошу помощи разобратся.

 

Тут привожу функцию 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."

 

 

Надеюсь на вашу помощь . :help:

хотябы часть обьясните.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хочу...

Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.

Под делфи есть компоненты для работы с ком портом, а так Win API использовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забудьте весь этот бред с данными BIOS и Борлондячими письменами при писательстве под WIN.

 

значит данные берутся с Биоса? уже хорошо. Забыть я этот бред не могу - у меня такое д.з. правда изучаем мы паскаль...

 

с Win API не знаком

 

значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня такое д.з.
Давайте дословно и полностью, ежели хотите чтобы вам подсказали с чего начать и куда двигаться. А пока - не понятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дословно? давайте.

 

дз звучит так : научится передавать байты байты по 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;

Изменено пользователем Капитан Хард

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с Win API не знаком
Придется изучить то, что относится к COM. Или использовать библиотеки. Методы работы взятые из ДОС под Виндами неприменимы. Про BIOS касательно последовательного порта под Win забудьте.

значит тогда поставлю вопрос попроще - как это все сделать чтоб оно работало в паскале?
Взять например http://sourceforge.net/projects/tpapro/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Методы работы взятые из ДОС под Виндами неприменимы.

 

а что имел в виду автор в книге говоря что прога под винду?

 

 

 

Придется изучить то, что относится к COM. Или использовать библиотеки.

с чего начать?

post-40923-1226709501_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что имел в виду автор в книге говоря что прога под винду?

Винда разная бывала. Windows 3.11 к примеру.

Обращение к портам напрямую из виндов не такая тривиальная задача.

 

http://www.zealsoftstudio.com/ntport/

 

Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

компонент для работы с COM-портом:

http://www.tmssoftware.com/site/async32.asp

Для всех версий делфи и c++ билдера. Бесплатен. С документацией.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обращение к портам напрямую из виндов не такая тривиальная задача.

Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что имел в виду автор в книге говоря что прога под винду?
Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.

 

Уточните задание у преподавателя.

С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Турбо Паскаля для NT я не встречал. И если нужно работать именно с ним, то без ntport не обйтись.

 

И вообще, эта дллка очень полезная в хозяйстве вещь. Вот вдруг ни с того, ни с сего понадобилось бы ногой ЛПТ порта подрыгать по-быстрому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.

 

ntvdm достаточно хорошо виртуализует доступ к последовательным портам. Так что всё должно работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://www.zealsoftstudio.com/ntport/

Вот тут вам объяснят как это сделать. Тогда из ДОС приложения моно обращаться.

в английском не рублю :wacko:

 

компонент для работы с COM-портом

 

спасибо - попробую поставить но чувствую разобратся будет проблемма - нет ли каких нибудь книг на русском по этому компоненту?

 

Из NT консольного приложения доступ к стандартным COM портам и области BIOS виртуальной машины есть, но это не отменяет дебильность задания.

 

пользуюсь XP и NT меня не волнует ... как и другие операционки.

 

Картинки там есть? Наверняка там Windows 9x (или ниже). Для NT сие не может быть применено.

картинок там кроме кода нет. Уточнить задание не могу - препод мифическая личность, появляется раз в 2 недели и если я ему ничего не принесу будет полный армагеддец :twak:

 

С т. з. использования COM-порта компьютера под управлением операционной системы для передачи информации, вам не нужны адреса и регистры. Управление осуществляется через API системы (это, грубо говоря, набор всяких функций). При этом о там как используются регистры можно отлично потеоретизировать, чтобы понимать суть как работают функции API.

 

что за API системы ? это связано с программированием в Delphi или Паскале? (Первое приоритетней т.к. можно сделать прогу с кравивым и понятным интерфейсом). если это не зарагивает программирование даже и рассматривать не стоит.

 

 

Короче люди. подскажите как с помощью Delphi (ну или на крайний Pascal) запрограммировать программу для :

1. проверки адресов порта

2. инициальзации порта (установки скоростей , выводов и т.п.)

3. передачи данных (вбил в ячейку - нажал на кнопку - байт полетел)

 

как я понимаю для этого нужно скачать компонент для работы с COM-портом... но вот разобратся в его командах и синтаксисе без знания английского для меня проблемма

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...