Соедините два байта в BASCOM-AVR - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу написать программу для 16-сенсорного робота sepathfinder (микропроцессор: ATmega16A).У меня три вопроса:

  1. Как мне объединить два байта в переменную word или int?

  2. Я пишу программу, используя "select case».например (код для робота с 8 датчиками):

    Select Case Pina
    Case &B00000000:...
    

    Иногда я просто хочу сканировать некоторые конкретные датчики и не заботиться о других.например: xx11xxxx.Я хочу что-то сделать, когда эти биты равны 1, а другие не волнуют.Один из способов - написать много дел;Но я не хочу тратить память и время.Есть ли лучший способ?

  3. Я видел эту доску на многих роботах-разведчиках.Вы знаете, что это?

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Функция сдвига влево / вправо в двоичном виде:

Byte1# = 255
PRINT HEX$(Byte1#)
Byte1# = SHL(Byte1#, 8) ' shift-left 8 bits
PRINT HEX$(Byte1#)
END
' function to shift-left binary bits
FUNCTION SHL (V#, X)
    SHL = V# * 2 ^ X
END FUNCTION
' function to shift-right binary bits
FUNCTION SHR (V#, X)
    SHR = V# / 2 ^ X
END FUNCTION
0 голосов
/ 13 февраля 2019

ЧАСТИЧНЫЙ ОТВЕТ:

Подзапрос 1

Если один байт хранится в переменной BYTE1, а другой хранится в переменной BYTE2, вы можете объединить их в WORD1 во многих основах с WORD1 = BYTE1: WORD1 = (WORD1 SHL 8) OR BYTE2.Это превращает BYTE1 в старшие биты WORD1 и BYTE2 в младшие биты.

Подзапрос 2

Если вы хотите замаскировать (или выбрать)конкретные биты слова, используйте оператор AND, суммируя значения битов интересующих битов - например, если вы хотите выбрать первый и третий биты (считая первый бит как младший бит слова)переменная FLAGS, вы посмотрите на значение FLAGS AND 5 - 5 является двоичным 0000000000000101, поэтому вы гарантируете, что все биты в результате будут равны 0, кроме первого и третьего, что будет иметь любое значение, которое ониотображаются в FLAGS (это «побитовое И»).

...