Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Разделить 16 bit


Разделить 16 bit

Сообщений 31 страница 46 из 46

31

Не. Не могу разобраться. Луче попробую переделать первый способ, перемножением. Может что то получиться. Сложновато для меня всё это пока...

0

32

Читай личку

0

33

Да всё уже. разобрался. Всё решила простейшая математическая операция умножения и сложения. Как для новичка, это вполне нормальный вариант. А главное что все просто и наглядно. Спасибо всем тем, кто помогал)))

Короче... Мне еще учиться, учиться и еще раз учиться...

Отредактировано Atmel (2014-11-18 11:14:23)

0

34

sasha_1973 написал(а):

Смысл в чём, делаете из цифровой переменной строковую, а затем из строковой раскладываете по байтикам.

Зачем такие сложности? :O  :O
Я же предложил тоже самое но проще, работающее быстрее и занимающее меньше памяти. Разделить 16 bit

0

35

Пётр написал(а):

Я же предложил тоже самое но проще, работающее быстрее и занимающее меньше памяти


Вы уверены, что вариант рабочий?

0

36

А что с ним не так?
Применяю этот метод на компе и МК и все работает.

0

37

Пётр написал(а):

А что с ним не так?
Применяю этот метод на компе и МК и все работает.


http://sa.uploads.ru/t/AmHRh.jpg http://sa.uploads.ru/t/JmLGH.jpg

Отредактировано sasha_1973 (2014-11-18 12:27:10)

+3

38

http://sa.uploads.ru/t/B8hVN.jpg

+1

39

Вот это поворот. А если бы я попробовал такой пример. Я был через пару месяцев разобрался конечно что не так :D

0

40

Пример рабочий и корректный. Это Марк постарался. Как вы думаете в какой последовательности выполняется эта строка?

Код:
Val_byte(i) = Val_long Mod 10

Логично предположить что берется остаток от деления на десять переменной Val_long и помещается в массив Val_byte. Но Марк думает иначе. В его реализации, содержимое переменой Val_long копируется в массив и уже из содержимого массива извлекается остаток от деления. Думаю не нужно объяснять что произойдет если скопировать 4 байтную переменную в однобайтную? Зачем так тупо сделано не понятно. Можно было ведь переменную Val_long скопировать в регистры или в крайнем случае в стек или фрейм, но нет, Марк посчитал что с граблями программировать куда интереснее. :O  o.O
Рабочий вариант с учетом граблей Марка.

Код:
Dim Val_byte(6) As Byte
Dim Val_long As Long
Dim Tmp As Long
Dim I As Byte

Val_long = 987654

For I = 1 To 6
  Tmp = Val_long Mod 10
  Val_byte(i) = Tmp
  Val_long = Val_long / 10
Next I

http://s019.radikal.ru/i639/1411/30/92ab938d9a59t.jpg

На компе такой проблемы нет.

http://s008.radikal.ru/i306/1411/e0/55335f8a4cb0.png

+3

41

А вот такой вариант очень даже рабочий, и по ходу, самый быстрый, а если его ещё переложить на ASM, будет совсем "кошерно"!

Пётр написал(а):

Марк посчитал что с граблями программировать куда интереснее


Прям всё, как у нас, через ж...!



Пётр, 20 баллов по 5-ти бальной шкале!


Отредактировано sasha_1973 (2014-11-18 13:41:12)

0

42

--- "ну вы блин даёте!"  (Алексей Булдаков)

0

43

Каримов написал(а):

--- "ну вы блин даёте!"  (Алексей Булдаков)

А-то, "Век живи, век учись, всё равно дураком помрёшь!"  (Народная Мудрость)

0

44

А нуля то нету. :D
Попробуйте число 101010, как его выведет.

Отредактировано RDW (2014-11-18 15:58:25)

0

45

Mrshilov написал(а):

А чем не нравится "STR2DIGITS"?

Необходимо переменную типа Long преобразовывать в строку.

RDW, нормально работает.

http://s017.radikal.ru/i426/1411/f5/adbb16506a04t.jpg

Отредактировано Пётр (2014-11-18 16:49:44)

0

46

через точку после переменной и номер бита. как бы пересобрать одну переменную 16 бит в две переменные 8 бит.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Разделить 16 bit