Управление изображением на мониторе через COM порт

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

это не я писал,это кусок статьи которая называлась что -то типа "СОМ для чайников,для совсем чайников"но вообще напомнило qBASIC,буду сидеть читать учебник, а непонятно именно зачем нужны операторы в начале программы? которые без пояснений?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а):непонятно именно зачем нужны операторы в начале программы? которые без пояснений?
Аааа, забыл, вы же на Бейсике пишете....

В общем так - в более серьезных ЯВУ дело не обходится одним кодом. То, что вы отметили, это объявление переменных (все переменные должны иметь имя и тип), подключение библиотек (crt, dos), ну и общие вещи, навроде начала программы (program prim2), операторных скобок (begin end).
Знание - сила!
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

ну я собирался писать на визуал бейсике,потом нашел кусок вот этого кода на паскале он мне показался знакомым и схожим с бейсиком который стоял на ПЭВМ Искра 1030 еще на нем стоял монитор и простенькая игра,и была написана программа которая вычисляла ток зная сопротивление и напряжение :))) была написана,опираясь на книгу по вычислительной технике которая вскользь рассматривала этот самый бейсик, т.к. и отрисовка изображение на нем похожа я решил таки написать 9по крайней мере попытаться ) сделать это на паскале
эта программа приведенная выше была запущена и сделалась как ехе файл как ее теперь редактировать?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а): эта программа приведенная выше была запущена и сделалась как ехе файл как ее теперь редактировать?
Ну а исходники-то остались?
Знание - сила!
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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 линий?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Реклама
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а): если это прилепить к тому что выше он пишет ошибку синтаксиса. и я так понял не принимает операторы Repeat и Until не получится так что придется нажимать бесчисленное кол-во раз ентер?
Стоп, а где условие завершения в Антиле? И операторные скобки не мешало бы внутри цикла.
или нужно значение RTS установить в бесконечный цикл что бы она всегда была равна 1 т.к. с нее берется сигнал на входы?
RTS надо просто один раз поставить, и все.
как это производится
Табуляция?
так будет выглядеть для 3 линий?
Ну видимо да.
Знание - сила!
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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 нажатия больше не реагирует
в бейсике был оператор который при выполнении которого программа перемещалась назад к указанному оператору --в паскале нет такого?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а):а из буфера обмена в среду паскаля текст никак не вставить?
Вроде нет. Но кто мешает файлик открыть в паскале?
программа ждет воода теперь, но после 1 нажатия больше не реагирует
После нажатия чего именно она больше не реагирует? Кнопки на порте, или кнопки на клаве?
в бейсике был оператор который при выполнении которого программа перемещалась назад к указанному оператору --в паскале нет такого?
Расово неверный оператор go to есть везде! :)
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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.

не нравится ему вот такая постановка вопроса, пишет ошибку и указывает на енд
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а):после нажатия кнопки на порте
Так, стоп. И что тогда означает "на нажатия больше не реагирует"? Что конкретно происходит с прогой?

Кстати, а зачем вы ставите на RTS единицу? ЕМНИП с неподключенной линии CTS без нажатия кнопки должна читаться единица. Т.е. у вас без нажатия прога должна пролетать до конца (ведь вы ждете единицы). Вам следует выставлять на линии RTS не единицу, а нуль, и ждать нуля (когда нажатая кнопка подаст нуль на линию CTS).
не нравится ему вот такая постановка вопроса, пишет ошибку и указывает на енд
Вы не могли бы точнее передать его сообщения? А то я вот думаю, что вот это - "for result = 1 to result = 0 do repeat;" - вообще фигня какая-то, и на это надо ругаться.

Опрос порта сам по себе зациклен уже конструкцией репеат-антил. Выполнение программы можно пока (для проверки) зациклить циклом for. Потом, в рабочей проге, это будет все как-то иначе и сложнее.
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

И что тогда означает "на нажатия больше не реагирует"
при запуске программы пустой экран,после нажатия кнопки выводится "Принятое состояние = 1" потом она не реагирует на повторное нажатие,я нажимаю ентер и возвращаюсь в среду редактирования.
Кстати, а зачем вы ставите на RTS единицу? ЕМНИП с неподключенной линии CTS без нажатия кнопки должна читаться единица. Т.е. у вас без нажатия прога должна пролетать до конца (ведь вы ждете единицы). Вам следует выставлять на линии RTS не единицу, а нуль, и ждать нуля (когда нажатая кнопка подаст нуль на линию CTS).
так было в исходной версии и она не пролетает до конца,а таки ждет, может быть в начале программы та часть что не имела описания сбрасывает состояния всех выводов в 0
Вы не могли бы точнее передать его сообщения? А то я вот думаю, что вот это - "for result = 1 to result = 0 do repeat;" - вообще фигня какая-то, и на это надо ругаться.
сейчас еще поковыряюсь потом скажу
Опрос порта сам по себе зациклен уже конструкцией репеат-антил. Выполнение программы можно пока (для проверки) зациклить циклом for. Потом, в рабочей проге, это будет все как-то иначе и сложнее.
опрос порта зациклен до тех пор пока не нажата кнопка ,после чего цикл встает из-за условия антила и выводит результат,а после выведения результата она снова должна опрашивать порт ожидая следующего нажатия --вот это и не выходит

кстати , а окно выполняющейся программы можно растащить на полный экран?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а):при запуске программы пустой экран,после нажатия кнопки выводится "Принятое состояние = 1" потом она не реагирует на повторное нажатие,я нажимаю ентер и возвращаюсь в среду редактирования.
А, ну тогда резонно. Вы же один раз ждете нажатия в цикле Рипит-Антил, а потом цикл завершается и вы переходите к Ридлайну.

Вот только почему на единицу срабатывает? Может у вас на линии CTS оказался ноль до нажатия?
так было в исходной версии и она не пролетает до конца,а таки ждет, может быть в начале программы та часть что не имела описания сбрасывает состояния всех выводов в 0
Чего-то я вообще ничего тут не понял. Кто что сбрасывает? :shock:
И что было в исходной версии?

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

И, если можно, выведите на экран содержимое регистра состояния модема ДО нажатия. И тоже его сюда.
а после выведения результата она снова должна опрашивать порт ожидая следующего нажатия --вот это и не выходит
Так оно и не выйдет. У вас есть цикл опроса кнопки, после завершения которого вы выходите на Ридлайн и далее к концу проги. Если навернуть сверх того еще один цикл (завернуть в него всю прогу), то будет постоянно повторяться цикл опроса кнопки.
кстати , а окно выполняющейся программы можно растащить на полный экран?
Ага. Полноэкранный режим включить в настройках ДОС-окна в винде.
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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 то такой проблеммы нет.
Вложения
2010-12-19_135649.jpg
(48.53 КБ) 451 скачивание
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Обождите. Что у вас выводит показанная программа без всяких замен в случае нажатия кнопки ДО запуска проги, и в случае НЕнажатия?
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение 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 этаж) впоследдствии я планирую это не вывод результата ,а переход к графической части -подпрограмме
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а): я запускаю программу в ней пустое окно в нем название версии паскаля,и что-то там про разработчиков
если я кнопку на порте нажимать не буду все так и останется
если я нажму кнопку --появится надпись "принятое состояние 2"
далее нажимаю ентер и возвращаюсь в редактирование
Ага. Т.е. судя по всему выходит, что с пустых линий читается ноль. Тогда и правда надо ставить единицу на RTS.
а вот при замене на DCD первый прогон проходит по вышеописанному сценарию,при 2 прогоне при запуске сразу появляется надпись "принятое состояние" и соответственно конец программы
Вот это странно. А у вас какая маска для DCD? Должна быть 128, проверьте. Могли случайно попасть маской на бит изменения DCD. Похоже на то.
при нажатии кнопки CTS выводится результат 1 (1 этаж) впоследдствии я планирую это не вывод результата ,а переход к графической части -подпрограмме
Это понятно.
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

Вот это странно. А у вас какая маска для DCD? Должна быть 128, проверьте. Могли случайно попасть маской на бит изменения DCD.
что за маска?как ее посмотреть и изменить?
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

FRIM@N писал(а):что за маска?как ее посмотреть и изменить?
Ну маска, для бита, в программе. Вот для бита DSR маска 32. Для бита CTS - 16. Для DCD должна быть 128.
Знание - сила!
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2409
Зарегистрирован: Ср дек 03, 2008 21:00:19

Сообщение FRIM@N »

в статье стоит что маска 8,таблица которую я выше приводил
(\_(\
(=' :') радиоКотЭ
(,('')('')
Модератор
Аватара пользователя
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Это бит изменения DCD. А тебе нужен сам DCD. Для него маска 128, а не 8.
Знание - сила!
Ответить

Вернуться в «Интеграция с ПК»