считывание числа
|
|
timerlan |
Дата: Пн, 31.10.2016, 08:28 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
доброго времени суток!. подскажите, товарищи, в какую сторону мне копать ...суть проблемы такова: на порту С МК меняются значения на его пинах, согласно выполняемой программы(на конкретной ножке 0 либо 1, т.е. есть сигнал, либо нет сигнала), на всём порту, то есть состояние всего порта есть восьми битное двоичное число, вот не могу догнать, как это число считать в реальном времени, записать в переменную и перевести в десятеричное или шестнадцатиричное число?.. есть оператор РЕЕК, но его почему-то не рекомендуют использовать, да и меня не получилось, в переменной этого оператора ничего не обнаруживалось...подтолкните, плиз, в нужном направлении..
|
|
|
|
ivan_fd |
Дата: Пн, 31.10.2016, 10:35 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
А просто читать порт не подходит? Считываем и имеем десятичное, двоичное и т.д.
Или я не правильно понял задачу?
|
|
|
|
timerlan |
Дата: Пн, 31.10.2016, 11:47 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
так вот каким образом считать? никогда не сталкивался с такой задачей, чтобы прочитать порт целиком. , например, на порт С будет состояние от 0-го до 7-го вывода hi-hi-low-low-low-low-low-hi, т.е. в двоичном виде - 10000011, и задача, как это число(оно будет постоянно меняться) занести в переменную и преобразовать в десятичное, допустим, для дальнейших вычислений?
|
|
|
|
anatol |
Дата: Пн, 31.10.2016, 12:13 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
timerlan, а вы документацию на контроллер читали? Вместо подсказок задам пару вопросов. 1. В каких режимах работают порты? 2. Как переводится порт из состояния чтения в состояние записи и можно ли переключать порт побитно? 3. Где хранится состояние порта? По поводу преобразования хекс в десятичный есть директива в бейсике. Все это простейшие основы по устройству контроллера.
|
|
|
|
ivan_fd |
Дата: Пн, 31.10.2016, 12:15 | Сообщение # 5 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Код test VAR byte
begin:
test = PORTC PAUSE 500 goto begin
|
|
|
|
timerlan |
Дата: Пн, 31.10.2016, 14:56 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
timerlan, замечательно! Только учтите что состояние порта в регистре порта автоматически не изменяется.Оно там появляется в момент чтения порта. (Т.е. в момент выполнения команды, как вышеприведенном примере: test = PORTC).
Сообщение отредактировал
anatol - Пн, 31.10.2016, 15:28
|
|
|
|
ivan_fd |
Дата: Пн, 31.10.2016, 15:32 | Сообщение # 8 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Цитата timerlan ( ) А вот можно про эту директиву подробнее? То, что Вы считали с порта и находится в переменной тест, уже есть число с которым можно делать все, что хочешь. Никаких директив не нужно.
|
|
|
|
timerlan |
Дата: Вт, 01.11.2016, 03:45 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
ivan_fd, т.к. эта переменная типа byte, то запишется она двоичным числом ведь?! И вот каким образом мне , взяв его из переменной, преобразовать в десятичное, чтобы, допустим, вывести на дисплей?..
|
|
|
|
ADMIN |
Дата: Вт, 01.11.2016, 07:16 | Сообщение # 10 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
ADMIN, да, с этим разобрался, поэспериментировав!.. моя задача - прочитав это число/состояние порта, вывести его на lcd... Вот оно в переменной, что дальше?, не могу сообразить, как конвертировать в dec или hex?..
|
|
|
|
ADMIN |
Дата: Вт, 01.11.2016, 09:25 | Сообщение # 12 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я не помню как в PBP, но в Proton пишется DEC(переменная) или HEX(переменная), что преобразует переменную для вывода на экран в соответствующем формате
|
|
|
|
timerlan |
Дата: Вт, 01.11.2016, 09:30 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
Экран будет у меня от 3310,
Test = portc Test = dec Test
как то так, что ли?!
|
|
|
|
ADMIN |
Дата: Вт, 01.11.2016, 10:56 | Сообщение # 14 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я не знаю, как выглядит программа вывода на печать для 3310 но, к примеру, для вывода числа на 1602 я пишу так: Print at 1, 1, dec test '
|
|
|
|
timerlan |
Дата: Вт, 01.11.2016, 12:04 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
Да, dec Test...так работает, проверял!.. Вот теперь как бы ещё придумать алгоритм выборки, чтоб полегче был, для преобразования для записи в GLCD...
|
|
|
|