считывание числа - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » считывание числа (как считать с порта число?..)
считывание числа
timerlan Дата: Пн, 31.10.2016, 08:28  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

доброго времени суток!.
подскажите, товарищи, в какую сторону мне копать ...суть проблемы такова:
на порту С МК меняются значения на его пинах, согласно выполняемой программы(на конкретной ножке 0 либо 1, т.е. есть сигнал, либо нет сигнала), на всём порту, то есть состояние всего порта есть восьми битное двоичное число, вот не могу догнать, как это число считать в реальном времени, записать в переменную и перевести в десятеричное или шестнадцатиричное число?..
есть оператор РЕЕК, но его почему-то не рекомендуют использовать, да и меня не получилось, в переменной этого оператора ничего не обнаруживалось...подтолкните, плиз, в нужном направлении..
ЯНДЕКС Дата: 31.10.2016
ivan_fd Дата: Пн, 31.10.2016, 10:35  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 881
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А просто читать порт не подходит?
Считываем и имеем десятичное, двоичное и т.д.

Или я не правильно понял задачу?


Меня все время преследуют умные мысли...но я быстрее!!!
timerlan Дата: Пн, 31.10.2016, 11:47  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

так вот каким образом считать? никогда не сталкивался с такой задачей, чтобы прочитать порт целиком.
, например, на порт С будет состояние от 0-го до 7-го вывода hi-hi-low-low-low-low-low-hi, т.е. в двоичном виде - 10000011, и задача, как это число(оно будет постоянно меняться) занести в переменную и преобразовать в десятичное, допустим, для дальнейших вычислений?
anatol Дата: Пн, 31.10.2016, 12:13  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

timerlan, а вы документацию на контроллер читали? Вместо подсказок задам пару вопросов.
1. В каких режимах работают порты? 2. Как переводится порт из состояния чтения в состояние записи и можно ли переключать порт побитно? 3. Где хранится состояние порта?
По поводу преобразования хекс в десятичный есть директива в бейсике. Все это простейшие основы по устройству контроллера.
ivan_fd Дата: Пн, 31.10.2016, 12:15  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Специалист
Сообщений: 881
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Код
test VAR byte

begin:

test = PORTC
PAUSE 500
goto begin


Меня все время преследуют умные мысли...но я быстрее!!!
timerlan Дата: Пн, 31.10.2016, 14:56  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

Цитата ivan_fd ()
Код
test VAR byte

begin:

test = PORTC
PAUSE 500
goto begin


Вот так и всё? Просто приравнять переменную к регистру?

Добавлено (31.10.2016, 14:56)
---------------------------------------------
anatol,
Порты все в цифровом режиме.
Регистрами tris
Состояние порта в регистре с названием порта.

А вот можно про эту директиву подробнее?! Где о ней почитать можно?..

anatol Дата: Пн, 31.10.2016, 15:27  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

timerlan, замечательно! Только учтите что состояние порта в регистре порта автоматически не изменяется.Оно там появляется в момент чтения порта. (Т.е. в момент выполнения команды, как вышеприведенном примере: test = PORTC).
Сообщение отредактировал anatol - Пн, 31.10.2016, 15:28
ivan_fd Дата: Пн, 31.10.2016, 15:32  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Специалист
Сообщений: 881
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата timerlan ()
А вот можно про эту директиву подробнее?
То, что Вы считали с порта и находится в переменной тест, уже есть число с которым можно делать все, что хочешь. Никаких директив не нужно.


Меня все время преследуют умные мысли...но я быстрее!!!
timerlan Дата: Вт, 01.11.2016, 03:45  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

ivan_fd, т.к. эта переменная типа byte, то запишется она двоичным числом ведь?! И вот каким образом мне , взяв его из переменной, преобразовать в десятичное, чтобы, допустим, вывести на дисплей?..
ADMIN Дата: Вт, 01.11.2016, 07:16  |                                                                                                                Сообщение # 10
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

переменная типа byte содержит число. А как его представлять - решает программист. К примеру, число %10000001, считанное с порта, если перевести с помощью калькулятора в десятичный вид, будет выглядеть как 129. В программе так и пишется, кому как удобно:
IF PORTC >= 129 THEN
    LedOn = 1
ENDIF

или 

test = PORTC
IF test >= 129 THEN
    LedOn = 1
ENDIF

или 

IF PORTC >= %10000001 THEN
    LedOn = 1
ENDIF
timerlan Дата: Вт, 01.11.2016, 07:52  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

ADMIN, да, с этим разобрался, поэспериментировав!..
моя задача - прочитав это число/состояние порта, вывести его на lcd...
Вот оно в переменной, что дальше?, не могу сообразить, как конвертировать в dec или hex?..
ADMIN Дата: Вт, 01.11.2016, 09:25  |                                                                                                                Сообщение # 12
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я не помню как в PBP, но в Proton пишется DEC(переменная) или HEX(переменная), что преобразует переменную для вывода на экран в соответствующем формате
timerlan Дата: Вт, 01.11.2016, 09:30  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

Экран будет у меня от 3310,

Test = portc
Test = dec Test

как то так, что ли?!
ADMIN Дата: Вт, 01.11.2016, 10:56  |                                                                                                                Сообщение # 14
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я не знаю, как выглядит программа вывода на печать для 3310 но, к примеру, для вывода числа на 1602 я пишу так:
Print at 1, 1, dec test  '
timerlan Дата: Вт, 01.11.2016, 12:04  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 88
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

Да, dec Test...так работает, проверял!..
Вот теперь как бы ещё придумать алгоритм выборки, чтоб полегче был, для преобразования для записи в GLCD...
Форум Picbasic.ru » Программирование МК » PicBasicPro » считывание числа (как считать с порта число?..)
Страница 1 из 212»
Поиск: