[an error occurred while processing this directive] [an error occurred while processing this directive]
Напрашивается несколько вариантов...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено John 10 апреля 2002 г. 14:43
В ответ на: Как на Паскале организовать считывание порта в течении 1 секунды. отправлено spectr 10 апреля 2002 г. 12:26

Напрашивается несколько вариантов. Все зависит от требуемой точности отсчитаваемого времени, равномерности периодов между чтениями и т.п. Все ниже относится к ДОСу,ессно.
1. Что-нибудь типа
{ Расчет времени в секундах }
Function CalcSec : real;
var
h, m, s, hu : word;
begin
GetTime ( h, m, s, hu );
CalcSec := h * 3600 + m * 60 + s + hu / 100;
end; { CalcSec }

RN := CalcSec;
repeat
Читаем порт
until ( ( CalcSek - RN ) > 1 );
Это просто, но, как мне вспоминатеся, функция GetTime как-то долго выполнялась, ждала очередного тика таймера, что ли.

2. Если процедура "чтения порта" простая, без ветвлений, то можно сделать следующее. При запуске программы измерить время работы некоторого количества таких чтений с помощью CalcSec. Это время должно быть секунды. По полученным данным просто рассчитать "скорость работы компьютера" - количество циклов опроса, которое будет выполняться 1 секунду. Дальше понятно.

2. Переписать (дописать) процедуру обрабоки прерываний системного таймера. Можно просто туда вставить подсчет тиков, можно заодно сменить и частоту. Такое тоже делать приходилось. Если нужно, можно поподробнее мылом.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru