|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
13.06.2017, 14:46 | #1 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Как настроить счетчик импульсов на с++?
У меня на с++ под досом, на вход lpt порта приходит сигнал с генератора на 10ю ножку lpt порта, этот сигнал тупо считываю командой с++
Код:
Код:
Допустим в момент запуска программы порт LPT (ЛПТ) находился в низком уровне (теоретически он может быть в любом), но пусть пока в нижнем Код:
А далее мне надо, что бы при очередном круге общего цикла у меня не увеличился счетчик на 1, т.к уровень ЛПТ все еще стоит высокий, надо куда-то поставить флаг и проверять где то в цикле наличие этого флага. Сразу за I8++; ставлю flag=1 (тогда на следующем круге инкриминация не включится)...,но что то пока не очень получается, может конечно упростить задачу и написать короткий код и на нем методом тыка отладить или подскажете как это можно сделать? |
13.06.2017, 15:05 | #2 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 734
|
Я не понял Ваше сообщение. Путаница с переменными i8 и I8. Вы бы назвали их как-то по разному, тогда легче было-бы и понятнее.
Также непонятно, елис Вы пишете что i8 прибавляется на 1, то тогда зачем вот этот цикл: Такое чувство, что i8 имеет какое-то большое значение(2000) и, наоборот, уменьшается на 1. Системы событий нету в LPT порте? Насколько я помню - нету. Следовательно остается единственный вариант - постоянно принимать данные с порта в бесконечном цикле работы и следить когда на нужном пине 0 переидет в 1.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
13.06.2017, 15:28 | #3 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
14.06.2017, 07:18 | #4 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Спасибо за ответ, это одно и тоже, просто у меня программа привязана к железу и находится на одном компе, а интернет на другом и приходится руками перебивать код что бы задать вопрос на форуме, это трудно понять, я понимаю, просто у нас колхоз и интернет ограничен и не у всех...
на LPT есть аппаратное прерывание как раз на контакте 10, но смысла особого нет его использовать, так как комп только этим одним и занимается что ждет сигналы с генератора. Компьютер находится под досом, нет ни фоновых заданий, ни параллельных процессов как в винде. Поэтому пока просто в бесконечном цикле жду на входе сигналы с генератора. нет это значение поставил просто для отладки, что бы поймать ответные импульсы, которые использую для отладки программы. Я вывел на осциллограф дополнительно 17ю и 14ю ножку LPT порта, что бы проверить работу программы. Так на каждый фронт сигнала с генератора (с 0 на 1) на 10 ноге LPT порта я формирую на 17й ноге импульс на 10 мс и проверяю отработку программы, этот импульс у меня проходит и осциллограф его фиксирует, когда программа настроена в постоянном цикле. На самом деле с генератора должно прийти ровно 50 периодов, но использовать для работы я могу только 10, то есть мне нужно считать фронты. Для отладки этого режима я использую 14ю ножку LPT порта, что бы вывести на экран каждый 5й фронт сигнала с генератора на экран осциллографа в виде короткого импульса в 10 мс. И вот это у меня последнее на 14 ноге не получается. Так как фронты считаются не правильно. Последний раз редактировалось седьмой; 14.06.2017 в 07:34. |
14.06.2017, 07:32 | #5 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 734
|
Посмотрите это прерывание получше, может он(компьютер) его будет ждать 2 процессом.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
14.06.2017, 07:39 | #6 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Спасибо, да я так и пошел делать и у меня получилось, но фронты считаются не правильно. Я сейчас все же перекопирую сюда реальный код, а то так чувствую не смогу объяснить что хочу получить. Спасибо что не отказали в помощи.
|
14.06.2017, 07:42 | #7 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
Спасибо большое, я конечно это учту и посмотрю, я читал что в досе тоже есть процессы, но не обратил на это должного внимания. Но пока мне важна не скорость сама по себе, а отработка алгоритма в целом, я сейчас перкопирую все что у меня получилось
|
14.06.2017, 07:47 | #8 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 734
|
Смысл прерывания в том, что оно делается само по себе(это я беру теорию микроконтроллеров). Если здесь работает также, то Вы его просто заряжаете и ждете пока придет фронт импульса. По его приходу срабатывает обработчик прерывания.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
14.06.2017, 08:41 | #9 |
Форумчанин
Регистрация: 09.05.2017
Сообщений: 734
|
В какой среде Вы пишете, седьмой? Я чувствую, что здесь нужно будет на ассемблере писать и прерывания плотно изучать.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
|
14.06.2017, 10:08 | #10 |
Форумчанин
Регистрация: 17.07.2012
Сообщений: 140
|
О простите не написал ms-dos6.22 BorlandC++ 3.0
вот код Код:
Последний раз редактировалось седьмой; 14.06.2017 в 10:47. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
com-порт счетчик импульсов | Ciganqwer | Компоненты Delphi | 2 | 10.11.2016 09:37 |
Счетчик импульсов с ком-порта, глюк ? | z-wer | Общие вопросы Delphi | 13 | 07.07.2011 15:33 |
Счетчик импульсов через ком-порт | z-wer | Компоненты Delphi | 10 | 21.05.2011 11:01 |
Счетчик импульсов на LPT. Delphi | clone_ | Общие вопросы Delphi | 7 | 29.04.2011 01:29 |
Счетчик импульсов | stanik123 | Общие вопросы Delphi | 11 | 09.10.2009 10:10 |