Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » считывание числа (как считать с порта число?..)
считывание числа
ADMIN Дата: Вт, 01.11.2016, 15:33  |                                                                                                                Сообщение # 16
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Подробнее... Подробности в студию
timerlan Дата: Вт, 01.11.2016, 16:25  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Противоречие налицо, но да,... код с комментариями и проект в протеусе нагляднее будет
timerlan Дата: Ср, 02.11.2016, 07:05  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 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?..вот здесь прошу помощи...

Прикрепления: calcul.dsn (96.1 Kb) · calcul.pwi (1.0 Kb) · calc2.hex (15.6 Kb) · calc2.pbp (8.9 Kb)
ADMIN Дата: Ср, 02.11.2016, 14:42  |                                                                                                                Сообщение # 20
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

C противоречием разобрался, на glcd, оказывается,  нужно не число вывести, а его изображение. Теоретически - нужно создать массив констант, соответствующих определенному числу. Потом в цикле по индексу этого массива извлекать данные. Это во первых. Во вторых, не обязательно все 255 значений. Достаточно иметь набор от 0 до 9, а уж из определившегося по нажатию кнопок числа извлекать единицы, десятки и сотни. У меня, к сожалению, нет PBP. Я им давно не пользуюсь. Возможно там и есть оператор DIG. В протоне точно есть. С помощью него извлекаются единицы, десятки и сотни.
timerlan Дата: Ср, 02.11.2016, 15:20  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

В РВР он тоже есть...можете показать, накидать хотя бы скелетной кусок кода, который будет делать эту выборку, хоть в Протоне, мне быипринцип уловить, на РВР переведу уже...
ЯНДЕКС Дата: 02.11.2016
holyuser Дата: Ср, 02.11.2016, 16:58  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

В этой теме есть пример на Протоне :   http://www.picbasic.ru/forum/5-1709-1
timerlan Дата: Чт, 03.11.2016, 08:12  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 18.03.2012

Статус: Offline

holyuser, за пример спасибо, но не могу понять как идёт выборка из таблицы, расположенной в хвосте программы.
holyuser Дата: Чт, 03.11.2016, 09:06  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 228
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Нужный адрес получается суммированием адреса начала таблицы и смещения.
Например, если нужно вывести 5-ый символ таблицы с начальным адресом X и размером символов в 8 байтов, то начальный адрес символа находится : X+5*8, а потом в цикле выводятся байты символа.
timerlan Дата: Ср, 16.11.2016, 18:04  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Адрес начала таблицы дает оператор AddressOf(Имя_таблицы).
timerlan Дата: Пт, 18.11.2016, 08:43  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Цитата timerlan ()
получаем число из PORTB, какое-то, конкретное, каким образом, преобразовать его в массив данных для вывода на GLCD?

Первое, что хочу Вам сказать. Посмотрите, все таки, в сторону Протона, если так хочется работать на бейсике.

Хотя и на PBP можно сделать все то же.

Теперь по вопросу. С порта В мы можем считать максимум число 255, то есть 3 цифры.
Для того, что бы сделать выборку из таблицы нам нужно разделить полученное число на цифры.
Можно воспользоваться оператором DIG и дальнейшим преобразованием числа в символ. То есть прибавить к нему "0".
timerlan Дата: Вт, 29.11.2016, 09:28  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 94
Репутация: 0   ±
Замечания:   ±
На сайте с 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, с алгоритмом перевода в данные для записи в матрицу дисплея разобрался!..

по компилятору - скачал другой РВР с этого же сайта и заработало!

Форум Picbasic.ru » Программирование МК » PicBasicPro » считывание числа (как считать с порта число?..)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: