Команды и директивы компилятора PROTON
PulsIn
Синтаксис:
Variable = PulsIn Pin, State
Команда PulsIn переключает выбранный вывод микроконтроллера в состояние входа и измеряет длительность импульса поступающего на этот вход.
Параметры
Пример
Device = 16F873A | ' Произвести программный код для микроконтроллера 16F873A |
XTAL = 4 | ' Установить частоту генератора равной 4 МГц |
'--------------------------------------------Настройки подключения ЖКИ------------------------------------------------ | |
Declare LCD_TYPE ALPHA | ' Тип ЖКИ - буквенно-цифровой |
Declare LCD_DTPIN PORTB.4 | ' Порт данных ЖКИ |
Declare LCD_ENPIN PORTB.3 | ' Управление линией E |
Declare LCD_RSPIN PORTB.2 | ' Управление линией RS |
Declare LCD_INTERFACE 4 | ' 4-х битная разрядность шины данных |
Declare LCD_COMMANDUS 2000 | ' Задержка перед посылкой команды |
Declare LCD_DATAUS 50 | ' Задержка перед посылкой данных |
Declare LCD_LINES 4 | ' Количество строк ЖКИ |
' --------------------------------------------------- Настройки портов ---------------------------------------------------- | |
TRISB = %00000001 | ' Сделать вывод PORTB.0 входом |
' ----------------------------------------------- Объявления переменных ------------------------------------------------- | |
Dim VAR1 As Word | ' Объявление переменной VAR1 размером Word |
' ---------------------------------------------------- Главная программ --------------------------------------------------- | |
Loop: | ' Метка начала главной программы |
VAR1 = PulsIn PORTB.0, High | ' Измерить длительность импульса на выводе PORTB.0 |
Print At 1, 1, "Primer Comand PulsIn" | ' Отобразить на ЖКИ фразу "Primer Comand PulsIn" |
Print At 2, 1, "VAR1=", Dec VAR1, " " | ' Вывести во 2-ой строке ЖКИ десятичное значение VAR1 |
Print At 3, 1, "VAR=", BIN15 VAR1 | ' Вывести в 3-ей строке ЖКИ 15 разрядов двоичного значения VAR1 |
Print At 4, 1, "VAR1=", HEX VAR1 | ' Вывести в 4-ой строке ЖКИ шестнадцатеричное значение VAR1 |
GoTo Loop | ' Повторить процесс измерения |
Нa рисунке 1 приведена действующая схема, работающая под управление приведенной выше программы, которая иллюстрирует рабору команды PulsIn.
Замечание
Команда PulsIn действует как быстрый секундомер, который запускается изменением логического состояния (с 0 на 1 или с 1 на 0 - определяется значением State ) на выбранном выводе. Когда состояние на выбранном выводе изменяется на противоположное состояние, секундомер начинает считать. Когда состояние на выводе вновь изменится, секундомер останавливается. Если же состояние вывода не будет изменяться, то команда PulsIn ждет 0,65535 секунды, а затем записывает в переменную значение 0 и заканчивает работу.
Если переменная имеет тип Word то максимальное значение измеренной переменной может быть 65535.
Значение, записываемое в переменную, определяется разрешением измерения, то есть разрешением команды PulsIn, или другими словами минимальным весом единицы измерения, её дискретностью . В свою очередь разрешение измерения зависит от частоты тактового генератора. Если частота тактового генератора равна 4 МГц, то разрешение (минимальный вес единицы измерения) будет равно 10 мкс. При частоте тактового генератора 20 МГц разрешение команды PulsIn (минимальная единица измерения) составит 2 мкс.
Если переменная имеет тип Byte, а частота тактового генератора 4 МГц, что соответствует дискретности измерения в 10 мкс, то максимальное измеренное значение будет равняться 255 единицам.
В приведенном выше примере, при входной частоте 1 Гц, длительности измеряемого импульса 0,5 сек (500000 мкс) и тактовой частоте кварцевого генератора 4 МГц, в переменную записывается значение равное 50000. А при длительности импульса 0,25 сек в переменную будет записано число 25000. Вы сможете в этом убедиться если в схеме приведенной на рисунке 1 выключите верхний выключатель и включите нижний. Эти выключатели могут коммутировать два разных входных сигнала, поступающих от двух генераторов. Частота первого генератора задана в 1 Гц со скважность импульсов 50%. Скважность же второго генератора равняется 25% при такой же частоте в 1 Гц выходного сигнала.