LPT и 1 мкс задержки!
Доброго всем времени суток. Пришел на форум с вопросом. Столкнулся с поблемой реализации такой программы. Нужно подавать на LPT поочередно 0 и 1 с паузой в 1 мкс в течении 1 минуты. Пробовал много различных вариантов. Уже опускаются руки. Я не так давно работаю с assembler поэтому для меня это составило большую сложность. Помогите кто сможет. (Программа должна быть на чистом асме) Заранее спасибо!
Задержка делается следующим образом.
out 0EBh,al ; Задержка около 250 нс
Порт 0EBh, ничего не делает, поэтому и происходит задержка. Возможно это связанно с тем что шина ISA имела наименьшую частоту 4МГц.
В исходных кодах БИОСа она обозначается как
NEWIODELAY , мы и не будем отходить от традиций.
NEWIODELAY EQU OUT 0EBh, AL
Или более класический вариант.
for i:=0 to n do a:=a+5; где n зависит от скорости процессора.
Стандартная частота передачи LPT это 500кб/с, протокол SPP.
если более дитально расматривать диаграмму.
То мы получаем. 1мс задержку.
0.5 перед подачей стробирующего сигнала 0.5 на сам сигнал. И 0.5 после снятия стробирующего сигнала.
Еще надо учесть что обращение к портам эта медленная операция.
Так что я бы с этим не заморачивался бы и сразу выбал бы FIFO mode там уже аппаратно реализованна нужная тебе задержка. И разумеется что бы комп не простаивал в ожидании отправки данных все это сделать через DMA.