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

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

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

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


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Битовые операции в ВASCOM.


Битовые операции в ВASCOM.

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

31

Доброго времени суток.Уважаемые форумчане помогите с битовыми переменными.Есть 16 битовых переменных
А0-А15.Их нужно перемножить и получить результат 1 или 0.Что то  на подобие Q=A1*A2*.......*A2.Вводить промежуточные переменные нежелательно поскольку программа итак занимает много памяти и ее уже скоро будет не хватать .

0

32

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

Есть 16 битовых переменныхА0-А15.Их нужно перемножить и получить результат 1 или 0.Что то  на подобие Q=A1*A2*.......*A2.Вводить промежуточные переменные нежелательно поскольку программа итак занимает много памяти и ее уже скоро будет не хватать .

Одна битовая "промежуточная переменная" так сильно испортит картину ?
С = А0 * А1
С = С * А2
...и так далее.
Возможно, есть другие пути, но мне только этот на ум пришел... ;)

0

33

Спасибо за совет.На ум как то сразу не пришло.А тут как только увидел и сразу осенило

0

34

Как вариант такой:

Код:
DIM B AS BIT ' итоговый результат
DIM F AS BYTE ' для цикла
DIM A AS WORD ' 16-bit входные данные для подсчета

SET B
FOR F = 0 TO 15
    B = B AND A.0
    ROTATE A, RIGHT, 1
NEXT F

0

35

Смотрится красиво.Правда нет возможности проверить.Завал на работе

0

36

Там небольшая ошибочка, просчет лишнего бита, не учел, что 1 проход это уже +1, следовательно надо на шаг меньше, т.е. так:

Код:
FOR F = 1 TO 15

0

37

Проверил работоспосоность первого варианта С = А0 * А1
С = С * А2  только как оказалось мне нужно было логическое суммирование записал приблизительно так

С = А0  OR А1
С = С OR А2

в варианте С = С * А2 компилятор ругался. а вот С = С  AND А2  прошло на ура

0

38

DIM B AS BIT ' итоговый результат
DIM F AS BYTE ' для цикла
DIM A AS WORD ' 16-bit входные данные для подсчета

SET B
FOR F = 0 TO 15
    B = B AND A.0
    ROTATE A, RIGHT, 1
NEXT F

Я так понимаю что мои битовые А0-А15 нужно как-то собрать  в 1 байт?

0

39

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

Я так понимаю что мои битовые А0-А15 нужно как-то собрать  в 1 байт?

Просто переменная WORD.

0

40

Ошибся . 2 байта. Если не сложно как будет выглядеть код(переменные А0-А15 в процессе меняют значения)

Отредактировано viktorino (2017-08-19 22:50:06)

0

41

В каком виде хранятся у вас А0 по А15?

0

42

А0-А15 битовые и принимают в процессе исполнения программы значения ли 0 либо 1.Если вкратце то это 16 охранных зон.Каждая зона опрашивается отдельно и в конце опроса  имею 16 битовых переменных(А0-А15).После опроса
я их суммирую и в зависимости от результата суммирования включаю или выключаю звук.Например 0+0+0........+0=0(звук  вывключаю) а если 0+1+0......+1=1(звук включаю).Как то так

0

43

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

А0-А15 битовые и принимают в процессе исполнения программы значения ли 0 либо 1.

А что мешает вместо 16-ти битовых переменных объявить одну двухбайтную и обращаться к каждому биту отдельно ?  Занимаемый объем тот же.
Будет не А0, А1 ... А15, а А.0, А.1 ... А.15
И корячте эту переменную А, как душа пожелает... ;)

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

я их суммирую и в зависимости от результата суммирования включаю или выключаю звук. Например 0+0+0........+0=0(звук  выключаю) а если 0+1+0......+1=1(звук включаю).

При таком раскладе будет достаточно проверить:
IF A > 0 THEN "включаем звук"...

Отредактировано Nord (2017-08-20 08:12:18)

0

44

Хорошая мысля приходит опосля. Написано много кода -74% атмеги 328. Когда закончу некий кусок начну оптимизировать.

0

45

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

Хорошая мысля приходит опосля.

Если бы задача была изначально более точно определена, то быстрее бы решили... ;)

0

46

Задача меняется в процессе написания :)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Битовые операции в ВASCOM.