Страница 3 из 12
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 13:59:43
FRIM@N
это не я писал,это кусок статьи которая называлась что -то типа "СОМ для чайников,для совсем чайников"но вообще напомнило qBASIC,буду сидеть читать учебник, а непонятно именно зачем нужны операторы в начале программы? которые без пояснений?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 14:08:24
Пухич
FRIM@N писал(а):непонятно именно зачем нужны операторы в начале программы? которые без пояснений?
Аааа, забыл, вы же на Бейсике пишете....
В общем так - в более серьезных ЯВУ дело не обходится одним кодом. То, что вы отметили, это объявление переменных (все переменные должны иметь имя и тип), подключение библиотек (crt, dos), ну и общие вещи, навроде начала программы (program prim2), операторных скобок (begin end).
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 14:22:25
FRIM@N
ну я собирался писать на визуал бейсике,потом нашел кусок вот этого кода на паскале он мне показался знакомым и схожим с бейсиком который стоял на ПЭВМ Искра 1030 еще на нем стоял монитор и простенькая игра,и была написана программа которая вычисляла ток зная сопротивление и напряжение

была написана,опираясь на книгу по вычислительной технике которая вскользь рассматривала этот самый бейсик, т.к. и отрисовка изображение на нем похожа я решил таки написать 9по крайней мере попытаться ) сделать это на паскале
эта программа приведенная выше была запущена и сделалась как ехе файл как ее теперь редактировать?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 14:24:30
Пухич
FRIM@N писал(а):
эта программа приведенная выше была запущена и сделалась как ехе файл как ее теперь редактировать?
Ну а исходники-то остались?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 14:57:17
FRIM@N
Ну а исходники-то остались?
понял
так теперь цикл
i:=readln;
Repeat
i:=i+1;
Until
если это прилепить к тому что выше он пишет ошибку синтаксиса. и я так понял не принимает операторы Repeat и Until не получится так что придется нажимать бесчисленное кол-во раз ентер?
или нужно значение RTS установить в бесконечный цикл что бы она всегда была равна 1 т.к. с нее берется сигнал на входы?
if e=16 then result:=1 {Если e=16, то result=1}
else result:=0; {...иначе result=0}вот в этом месте вторая строчка начинается какбы с красной строки,но это не пробелы ? как это производится
program prim2;
uses crt,dos;
var
base,result: integer;
e:byte;
x:byte 1;(какбэ ввести переменные)
y:byte 2;
begin
base:=$3F8;
port[base+4]:=2; {Установить RTS}
e:=port[base+6] and 8; {Присвоить e состояние DCD}
if e= 8 then result:=1 {Если e=8, то result=1}
else result:=0; {...иначе result=0}
x:=port[base+6] and 32; {Присвоить x состояние DSR}
if e=32 then result:=2 {Если e=32, то result=2}
else result:=0; {...иначе result=0}
y:=port[base+6] and 16; {Присвоить y состояние CTS}
if e=16 then result:=1 {Если e=16, то result=3}
else result:=0; {...иначе result=0}
writeln('Принятое состояние = ',result); {Вывод результата}
readln; {Ждать нажатия Enter}
port[base+4]:=0; {Сбросить все выходы порта}
end.
так будет выглядеть для 3 линий?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 17:57:47
Пухич
FRIM@N писал(а):
если это прилепить к тому что выше он пишет ошибку синтаксиса. и я так понял не принимает операторы Repeat и Until не получится так что придется нажимать бесчисленное кол-во раз ентер?
Стоп, а где условие завершения в Антиле? И операторные скобки не мешало бы внутри цикла.
или нужно значение RTS установить в бесконечный цикл что бы она всегда была равна 1 т.к. с нее берется сигнал на входы?
RTS надо просто один раз поставить, и все.
как это производится
Табуляция?
так будет выглядеть для 3 линий?
Ну видимо да.
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 18:13:11
FRIM@N
а из буфера обмена в среду паскаля текст никак не вставить?
подскажите как зациклить опрос порта?
begin
base:=$3F8;
port[base+4]:=2; {Установить RTS}
repeat
e:=port[base+6] and 16; {Присвоить e состояние CTS}
if e=16 then result:=1 {Если e=16, то result=1}
else result:=0; {...иначе result=0}
writeln('Принятое состояние = ',result); {Вывод результата}
until result = 1;
readln; {Ждать нажатия Enter}
port[base+4]:=0; {Сбросить все выходы порта}
end.
программа ждет воода теперь, но после 1 нажатия больше не реагирует
в бейсике был оператор который при выполнении которого программа перемещалась назад к указанному оператору --в паскале нет такого?
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 20:05:13
Пухич
FRIM@N писал(а):а из буфера обмена в среду паскаля текст никак не вставить?
Вроде нет. Но кто мешает файлик открыть в паскале?
программа ждет воода теперь, но после 1 нажатия больше не реагирует
После нажатия чего именно она больше не реагирует? Кнопки на порте, или кнопки на клаве?
в бейсике был оператор который при выполнении которого программа перемещалась назад к указанному оператору --в паскале нет такого?
Расово неверный оператор go to есть везде!

Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 20:13:58
FRIM@N
после нажатия кнопки на порте
подскажите как зациклить опрос порта?
begin
base:=$3F8;
port[base+4]:=2; {Установить RTS}
repeat
e:=port[base+6] and 16; {Присвоить e состояние CTS}
if e=16 then result:=1 {Если e=16, то result=1}
else result:=0; {...иначе result=0}
writeln('Принятое состояние = ',result); {Вывод результата}
until result = 1;
for result = 1 to result = 0 do repeat;
readln; {Ждать нажатия Enter}
port[base+4]:=0; {Сбросить все выходы порта}
end.
не нравится ему вот такая постановка вопроса, пишет ошибку и указывает на енд
Re: Управление изображением на мониторе через COM порт
Добавлено: Сб дек 18, 2010 22:17:42
Пухич
FRIM@N писал(а):после нажатия кнопки на порте
Так, стоп. И что тогда означает "на нажатия больше не реагирует"? Что конкретно происходит с прогой?
Кстати, а зачем вы ставите на RTS единицу? ЕМНИП с неподключенной линии CTS без нажатия кнопки должна читаться единица. Т.е. у вас без нажатия прога должна пролетать до конца (ведь вы ждете единицы). Вам следует выставлять на линии RTS не единицу, а нуль, и ждать нуля (когда нажатая кнопка подаст нуль на линию CTS).
не нравится ему вот такая постановка вопроса, пишет ошибку и указывает на енд
Вы не могли бы точнее передать его сообщения? А то я вот думаю, что вот это - "for result = 1 to result = 0 do repeat;" - вообще фигня какая-то, и на это надо ругаться.
Опрос порта сам по себе зациклен уже конструкцией репеат-антил. Выполнение программы можно пока (для проверки) зациклить циклом for. Потом, в рабочей проге, это будет все как-то иначе и сложнее.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 12:34:27
FRIM@N
И что тогда означает "на нажатия больше не реагирует"
при запуске программы пустой экран,после нажатия кнопки выводится "Принятое состояние = 1" потом она не реагирует на повторное нажатие,я нажимаю ентер и возвращаюсь в среду редактирования.
Кстати, а зачем вы ставите на RTS единицу? ЕМНИП с неподключенной линии CTS без нажатия кнопки должна читаться единица. Т.е. у вас без нажатия прога должна пролетать до конца (ведь вы ждете единицы). Вам следует выставлять на линии RTS не единицу, а нуль, и ждать нуля (когда нажатая кнопка подаст нуль на линию CTS).
так было в исходной версии и она не пролетает до конца,а таки ждет, может быть в начале программы та часть что не имела описания сбрасывает состояния всех выводов в 0
Вы не могли бы точнее передать его сообщения? А то я вот думаю, что вот это - "for result = 1 to result = 0 do repeat;" - вообще фигня какая-то, и на это надо ругаться.
сейчас еще поковыряюсь потом скажу
Опрос порта сам по себе зациклен уже конструкцией репеат-антил. Выполнение программы можно пока (для проверки) зациклить циклом for. Потом, в рабочей проге, это будет все как-то иначе и сложнее.
опрос порта зациклен до тех пор пока не нажата кнопка ,после чего цикл встает из-за условия антила и выводит результат,а после выведения результата она снова должна опрашивать порт ожидая следующего нажатия --вот это и не выходит
кстати , а окно выполняющейся программы можно растащить на полный экран?
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 13:04:33
Пухич
FRIM@N писал(а):при запуске программы пустой экран,после нажатия кнопки выводится "Принятое состояние = 1" потом она не реагирует на повторное нажатие,я нажимаю ентер и возвращаюсь в среду редактирования.
А, ну тогда резонно. Вы же один раз ждете нажатия в цикле Рипит-Антил, а потом цикл завершается и вы переходите к Ридлайну.
Вот только почему на единицу срабатывает? Может у вас на линии CTS оказался ноль до нажатия?
так было в исходной версии и она не пролетает до конца,а таки ждет, может быть в начале программы та часть что не имела описания сбрасывает состояния всех выводов в 0
Чего-то я вообще ничего тут не понял. Кто что сбрасывает?
И что было в исходной версии?
Я вас вот что попрошу - напишите какой-то один вариант, прогоните его, опишите впечатления и тут все изложите, чтобы мы точно могли разобраться, что именно сейчас происходит.
И, если можно, выведите на экран содержимое регистра состояния модема ДО нажатия. И тоже его сюда.
а после выведения результата она снова должна опрашивать порт ожидая следующего нажатия --вот это и не выходит
Так оно и не выйдет. У вас есть цикл опроса кнопки, после завершения которого вы выходите на Ридлайн и далее к концу проги. Если навернуть сверх того еще один цикл (завернуть в него всю прогу), то будет постоянно повторяться цикл опроса кнопки.
кстати , а окно выполняющейся программы можно растащить на полный экран?
Ага. Полноэкранный режим включить в настройках ДОС-окна в винде.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 13:17:40
FRIM@N
выведите на экран содержимое регистра состояния модема ДО нажатия
где мне его увидеть?
исходна версия вот я ее в самом начале показал без всех изменений
program prim2;
uses crt,dos;
var
base,result: integer;
e:byte;
begin
base:=$3F8;
port[base+4]:=2; {Установить RTS}
e:=port[base+6] and 16; {Присвоить e состояние CTS}
if e=16 then result:=1 {Если e=16, то result=1}
else result:=0; {...иначе result=0}
writeln('Принятое состояние = ',result); {Вывод результата}
readln; {Ждать нажатия Enter}
port[base+4]:=0; {Сбросить все выходы порта}
end.
и еще если переставляю
вот в этой части програмы вывод с которого происходит считывание
e:=port[base+6] and 16; {Присвоить e состояние CTS}
if e=16 then result:=1 {Если e=16, то result=1}
если ставлю DCD то есть заменяю 16 на 8 то при первом запуске чтение происходит и выводится результат 1.а при втором запуске результат 1 выводится сразу.Если поставить на чтение DSR то такой проблеммы нет.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 14:06:01
Пухич
Обождите. Что у вас выводит показанная программа без всяких замен в случае нажатия кнопки ДО запуска проги, и в случае НЕнажатия?
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 14:36:44
FRIM@N
итак СЕЙЧАС она имет вид
program prim2;
uses crt,dos;
var
base,result: integer;
e:byte;
begin
base:=$3F8;
port[base+4]:=2; {Установить RTS}
repeat
y:=port[base+6] and 32;{Присвоить e состояние DSR}
if y= 32 then result:=2 {Если y=32, то result=2}
else result:=0; {...иначе result=0}
until result = 2;
writeln('Принятое состояние = ',result); {Вывод результата}
readln; {Ждать нажатия Enter}
port[base+4]:=0; {Сбросить все выходы порта}
end.
я запускаю программу в ней пустое окно в нем название версии паскаля,и что-то там про разработчиков
если я кнопку на порте нажимать не буду все так и останется
если я нажму кнопку --появится надпись "принятое состояние 2"
далее нажимаю ентер и возвращаюсь в редактирование
так же работает и с CTS
а вот при замене на DCD первый прогон проходит по вышеописанному сценарию,при 2 прогоне при запуске сразу появляется надпись "принятое состояние" и соответственно конец программы
поясню я решил означить опрос выводов как x\y\z\ соответсвенно 3\2\1 этажи выводы DCD\DSR\CTS
в выше приведенной версии работает какбэ 2 этаж
собственно вот

тут 1 и 2 этаж при нажатии кнопки DSR выводится результат 2 (2 этаж)
при нажатии кнопки CTS выводится результат 1 (1 этаж) впоследдствии я планирую это не вывод результата ,а переход к графической части -подпрограмме
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 17:52:24
Пухич
FRIM@N писал(а):
я запускаю программу в ней пустое окно в нем название версии паскаля,и что-то там про разработчиков
если я кнопку на порте нажимать не буду все так и останется
если я нажму кнопку --появится надпись "принятое состояние 2"
далее нажимаю ентер и возвращаюсь в редактирование
Ага. Т.е. судя по всему выходит, что с пустых линий читается ноль. Тогда и правда надо ставить единицу на RTS.
а вот при замене на DCD первый прогон проходит по вышеописанному сценарию,при 2 прогоне при запуске сразу появляется надпись "принятое состояние" и соответственно конец программы
Вот это странно. А у вас какая маска для DCD? Должна быть 128, проверьте. Могли случайно попасть маской на бит изменения DCD. Похоже на то.
при нажатии кнопки CTS выводится результат 1 (1 этаж) впоследдствии я планирую это не вывод результата ,а переход к графической части -подпрограмме
Это понятно.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 20:22:59
FRIM@N
Вот это странно. А у вас какая маска для DCD? Должна быть 128, проверьте. Могли случайно попасть маской на бит изменения DCD.
что за маска?как ее посмотреть и изменить?
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 20:32:48
Пухич
FRIM@N писал(а):что за маска?как ее посмотреть и изменить?
Ну маска, для бита, в программе. Вот для бита DSR маска 32. Для бита CTS - 16. Для DCD должна быть 128.
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 21:52:34
FRIM@N
в статье стоит что маска 8,таблица которую я выше приводил
Re: Управление изображением на мониторе через COM порт
Добавлено: Вс дек 19, 2010 22:08:27
Пухич
Это бит изменения DCD. А тебе нужен сам DCD. Для него маска 128, а не 8.