Перейти к содержанию
    

Битовая операция в режиме indirect для регистров специального назначения (midrange PIC)

Битовые инструкции, например

BSF PORTA,3

BCF PORTB,5

выполняются в режиме Read-Modify-Write над регистром с абсолютной адресацией PORTA, PORTB.

 

Есть ли возможность (или хак) исполнить аналогичное в режиме косвенной (inderect) адресации? 

 

char adr = 0x0C; //адрес PORT A  в нулевом банке;

//аналог BSF PORTA,3
di();
FSR0L = addr;
FSR0H = 0;
INDF0 = INDIF0 | 0x04; //аналог BSF PORTA,3
ei();

//аналог BCF PORTA,5
di();
FSR0L = addr;
FSR0H = 0;
INDF0 = INDIF0 & (~0x10); //аналог BCF PORTA,5
ei();

Для регистров общего назначения (памяти) такое годится, а специальный регистр может в момент modify поменять свое значение.

Это может потребоваться когда часть битов регистра используются USART или/и  I2C  и не должны быть затронуты операцией записи (как мне кажется). Прав ли я?

Спасибо.

 

Изменено пользователем Чижик

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/28/2022 at 7:38 PM, Чижик said:

Есть ли возможность (или хак) исполнить аналогичное в режиме косвенной (inderect) адресации? 

Нет никакой разницы между битовыми инструкциями реальных регистров адресного пространства ОЗУ и виртуальным регистром INDF.

Поэтому легко применяйте те же способы понуждения компилятора к генерации битовых инструкций и в случае с косвенной адресацией.

bsf   INDF, 0

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28.03.2022 в 19:38, Чижик сказал:

когда часть битов регистра используются USART или/и  I2C

Периферия сама по себе и не работает через регистры портов. Если какой-либо контакт корпуса передаётся какой-либо периферии, его работа полностью контролируется ею.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 4/9/2022 at 2:12 PM, my504 said:

Нет никакой разницы между битовыми инструкциями реальных регистров адресного пространства ОЗУ и виртуальным регистром INDF.

bsf   INDF, 0

 

Забавно. Но об этом нигде нет упоминаний и примеров. Здорово.

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 7/25/2022 at 9:57 PM, Чижик said:

Но об этом нигде нет упоминаний

:shok:

Открываем первый попавшийся под руку даташит и читаем:

Quote

2.4 Indirect Addressing, INDF and FSR Registers
The INDF register is not a physical register. Addressing
the INDF register will cause indirect addressing.
Indirect addressing is possible by using the INDF
register. Any instruction using the INDF register
actually accesses data pointed to by the File Select
Register (FSR).

Какие нужны дополнительные объяснения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...