Изменение только 2 бит байта (8051) - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь создать код, который изменяет два последовательных бита из байта, используя наименьшее количество переменных.

Память должна быть организована следующим образом:

aabbccdd eeffgghh iijjkkll mmnnoopp qqrrsstt uuvvwwxx

Каждыйгруппа букв представляет один байт, а каждая буква представляет интервал, в котором я могу хранить 2-битное значение.

Пока я могу дать частичный ответ, так как этот код никогда не записывает новые нулевые битыв нужный слот. Только один.

  MEMORY equ 30h ;pointer to ram
  SLOTNO equ 8h  ;2-bit Slot unit we want

  mov A,#SLOTNO
  rrc A
  jnc noc
    xch A,R2
    rl A
    rl A
    xch A,R2
  noc:
  rrc A
  jnc noc2
    xch A,R2
    swap A
    xch A,R2
  noc2:
  add A,#MEMORY
  mov R1,A ;R1 = memory pointer + (slot # / 4)
  mov A,@R1
  orl A,R2 ;put the 2 bits in
  mov @R1,A

Есть ли способ, которым я могу сделать это, не требуя третьего байта памяти (в этом примере третий байт памяти является регистром R2)?

И что самое простоеспособ обеспечить сохранение правильных 2-битных данных?

Я программирую это для микроконтроллера AT89C4051, и у меня заканчивается память.

...