считывание числа
|
|
ADMIN |
Дата: Вт, 01.11.2016, 15:33 | Сообщение # 16 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Подробнее... Подробности в студию
|
|
|
|
timerlan |
Дата: Вт, 01.11.2016, 16:25 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
Вот, допустим, считал я с порта число
Buf = portc такой конструкцией, дальше я хочу вывести на glcd это число, для этого значение переменной надо как-то оценить, чтобы сделать выборку массивов, которые надо записать в glcd...если операторами if...then или select case, то у контроллера памяти не хватит, чтобы восьмибитное число перебирать так по разрядам...256 раз...невероятно громоздкая конструкция получится!..может как-то через цикл можно? не могу этого догнать...Добавлено (01.11.2016, 16:25) --------------------------------------------- Завтра с утра приложу код и проект Протеуса, может нагляднее будет...
|
|
|
|
ADMIN |
Дата: Вт, 01.11.2016, 18:10 | Сообщение # 18 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Противоречие налицо, но да,... код с комментариями и проект в протеусе нагляднее будет
|
|
|
|
timerlan |
Дата: Ср, 02.11.2016, 07:05 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
ADMIN, а противоречие в чём?..
вот файлы протэуса и РВРДобавлено (02.11.2016, 06:57) --------------------------------------------- в программе есть 8 операторов BUTTON, которыми я выставляю произвольное значение в регистре PORTC, затем приравниваю переменную buf к значению этого регистра и оцениваю значение этой переменной оператором select...case, и, в соответствии с её значением записываю в массив number последовательность чисел, которая выведет на экран число, эквивалентное переменной buf. вот написал я, для примера, от 0 до 30 и число 115 для проверки, все работает как надо, но...таким образом описать от 0 до 255 просто не хватит памяти программ МК...а ещё хочу вывести на экран hex значение этой переменной...вот и не могу пока придумать алгоритм выборки, как сравнить buf и записать в number не так прямо и громоздко?.. Добавлено (02.11.2016, 07:05) --------------------------------------------- допустим, так: переменная chr байтовая, нужна для существования счётчика
for chr = 0 to 255 step 1
if chr = buf then... ... ... ...
next chr этот счётчик пересчитывает от 0 до 255, и если есть совпадение значения счётчика с переменной, то как выбрать и записать нужный набор цифр в массив number?..вот здесь прошу помощи...
|
|
|
|
ADMIN |
Дата: Ср, 02.11.2016, 14:42 | Сообщение # 20 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
C противоречием разобрался, на glcd, оказывается, нужно не число вывести, а его изображение. Теоретически - нужно создать массив констант, соответствующих определенному числу. Потом в цикле по индексу этого массива извлекать данные. Это во первых. Во вторых, не обязательно все 255 значений. Достаточно иметь набор от 0 до 9, а уж из определившегося по нажатию кнопок числа извлекать единицы, десятки и сотни. У меня, к сожалению, нет PBP. Я им давно не пользуюсь. Возможно там и есть оператор DIG. В протоне точно есть. С помощью него извлекаются единицы, десятки и сотни.
|
|
|
|
timerlan |
Дата: Ср, 02.11.2016, 15:20 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
В РВР он тоже есть...можете показать, накидать хотя бы скелетной кусок кода, который будет делать эту выборку, хоть в Протоне, мне быипринцип уловить, на РВР переведу уже...
|
|
|
|
holyuser |
Дата: Ср, 02.11.2016, 16:58 | Сообщение # 22 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
В этой теме есть пример на Протоне : http://www.picbasic.ru/forum/5-1709-1
|
|
|
|
timerlan |
Дата: Чт, 03.11.2016, 08:12 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
holyuser, за пример спасибо, но не могу понять как идёт выборка из таблицы, расположенной в хвосте программы.
|
|
|
|
holyuser |
Дата: Чт, 03.11.2016, 09:06 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Нужный адрес получается суммированием адреса начала таблицы и смещения. Например, если нужно вывести 5-ый символ таблицы с начальным адресом X и размером символов в 8 байтов, то начальный адрес символа находится : X+5*8, а потом в цикле выводятся байты символа.
|
|
|
|
timerlan |
Дата: Ср, 16.11.2016, 18:04 | Сообщение # 25 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
наконец,снова добрался до компа!)
holyuser, смотрел ваш код, по ссылке http://www.picbasic.ru/_fr/17/SPI_TEST.txt, не могу понять, как задается адрес начала таблицы? объясните, плиз...Добавлено (16.11.2016, 18:04) --------------------------------------------- главная цель моя - могу сопоставить как должен выглядеть такой алгоритм:
получаем число из PORTB, какое-то, конкретное, каким образом, преобразовать его в массив данных для вывода на GLCD? каждый символ по пять чисел...к примеру, полученное число - 9,тогда записываем в массив number,[$46,$49,$49,$29,$1E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00] если полученное число - 25, тогда записываем в массив number,[$72,$49,$49,$49,$46,$00,$27,$45,$45,$45,$39,$00,$00,$00,$00,$00,$00] если полученное число - 105, тогда записываем в массив number,[$00,$42,$7F,$40,$00,$00,$3E,$51,$49,$45,$3E,$00,$27,$45,$45,$45,$39], этот массив number, потом и отправляем на GLCD, понимаю нутром, что нужно делать это через цикл for....next, не могу догнать как при совпадении номера счёта цикла и считанного с PORTB числа записать в массив нужные числа...
|
|
|
|
holyuser |
Дата: Чт, 17.11.2016, 14:44 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Адрес начала таблицы дает оператор AddressOf(Имя_таблицы).
|
|
|
|
timerlan |
Дата: Пт, 18.11.2016, 08:43 | Сообщение # 27 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
вот он что... Добавлено (17.11.2016, 16:55) --------------------------------------------- РВР стал только что ругаться с ошибкой fatal (86) это что ещё такое? Добавлено (18.11.2016, 08:43) ---------------------------------------------
Цитата holyuser ( ) Адрес начала таблицы дает оператор AddressOf(Имя_таблицы). полистал список операторов на Протона, насколько проще и лаконичнее язык, чем РВР, однако...
|
|
|
|
ivan_fd |
Дата: Пт, 18.11.2016, 10:24 | Сообщение # 28 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Online
|
Цитата timerlan ( ) получаем число из PORTB, какое-то, конкретное, каким образом, преобразовать его в массив данных для вывода на GLCD? Первое, что хочу Вам сказать. Посмотрите, все таки, в сторону Протона, если так хочется работать на бейсике.
Хотя и на PBP можно сделать все то же.
Теперь по вопросу. С порта В мы можем считать максимум число 255, то есть 3 цифры. Для того, что бы сделать выборку из таблицы нам нужно разделить полученное число на цифры. Можно воспользоваться оператором DIG и дальнейшим преобразованием числа в символ. То есть прибавить к нему "0".
|
|
|
|
timerlan |
Дата: Вт, 29.11.2016, 09:28 | Сообщение # 29 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
94
Замечания:
±
На сайте с 18.03.2012
Статус:
Offline
|
ivan_fd, делить на какие числа? на 100 и 10, чтобы выявить единицы и десятки?!
оператора DIG не видел ни в одном описании РВР, но как-то видел такую конструкцию:
..... v1=(Volts1 dig 3) v2=(volts1 dig 2) v3=(volts1 dig 1) ...... то есть V1 это 4-я цифра значения Volts?! слева или справа счёт идёт тогда?!Добавлено (22.11.2016, 03:40) --------------------------------------------- а что нужно править в файле .ini, чтобы18-е ПИКи на РВР скомпилировать? подскажите плиз... Добавлено (22.11.2016, 05:43) --------------------------------------------- при попытке компилирования пишет:
[ERROR]pic18f2515.pbpinc fatal (86) : Block overflow for #ENDCONFIG Добавлено (29.11.2016, 09:28) --------------------------------------------- по порядку,
оператор dig имеет место быть и работает начиная счёт от 0, с алгоритмом перевода в данные для записи в матрицу дисплея разобрался!..
по компилятору - скачал другой РВР с этого же сайта и заработало!
|
|
|
|